Skip to content

Fix soundness bug of uniqueness analysis on immutable array patterns … #382

Fix soundness bug of uniqueness analysis on immutable array patterns …

Fix soundness bug of uniqueness analysis on immutable array patterns … #382

Workflow file for this run

name: build
on:
push:
branches:
- main
- '*microbranch'
tags:
- '*'
pull_request:
jobs:
build:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: flambda2_runtime5
config: --enable-middle-end=flambda2 --enable-runtime5
os: ubuntu-latest
- name: flambda2_dev
config: --enable-middle-end=flambda2 --enable-dev
os: ubuntu-latest
- name: flambda2_dev_runtime5
config: --enable-middle-end=flambda2 --enable-dev --enable-runtime5
os: ubuntu-latest
- name: flambda2_debug_runtime5
config: --enable-middle-end=flambda2 --enable-runtime5
os: ubuntu-latest
build_ocamlparam: ''
use_runtime: d
ocamlrunparam: "v=0,V=1"
- name: flambda2_debug_runtime
config: --enable-middle-end=flambda2
os: ubuntu-latest
build_ocamlparam: ''
use_runtime: d
ocamlrunparam: "v=0,V=1"
- name: flambda2_o3
config: --enable-middle-end=flambda2
os: ubuntu-latest
build_ocamlparam: ''
ocamlparam: '_,O3=1'
- name: flambda2_o3_heap
config: --enable-middle-end=flambda2 --disable-stack-allocation
os: ubuntu-latest
build_ocamlparam: ''
ocamlparam: '_,O3=1'
- name: flambda2_o3_advanced_meet_frame_pointers_runtime5_polling
config: --enable-middle-end=flambda2 --enable-frame-pointers --enable-runtime5 --enable-poll-insertion --enable-flambda-invariants
os: ubuntu-latest
build_ocamlparam: ''
ocamlparam: '_,O3=1,flambda2-meet-algorithm=advanced,flambda2-expert-cont-lifting-budget=200'
- name: flambda2_o3_advanced_meet_frame_pointers_runtime5_debug
config: --enable-middle-end=flambda2 --enable-frame-pointers --enable-runtime5
os: ubuntu-latest
build_ocamlparam: ''
use_runtime: d
ocamlparam: '_,O3=1,flambda2-meet-algorithm=advanced,flambda2-expert-cont-lifting-budget=200'
- name: flambda2_frame_pointers_oclassic_polling
config: --enable-middle-end=flambda2 --enable-frame-pointers --enable-poll-insertion --enable-flambda-invariants
os: ubuntu-latest
build_ocamlparam: ''
ocamlparam: '_,Oclassic=1'
disable_testcases: 'testsuite/tests/typing-local/regression_cmm_unboxing.ml testsuite/tests/int64-unboxing/test.ml'
# CR ccasinghino: We encountered build errors (missing autoconf, and
# then other errors) when `macos-latest` started referring to version
# 14. So we've put a fixed version below for now, but we should
# eventually fix this.
- name: flambda2_macos
config: --enable-middle-end=flambda2 --disable-warn-error
os: macos-12
- name: irc
config: --enable-middle-end=flambda2
os: ubuntu-latest
build_ocamlparam: '_,w=-46,regalloc=irc,regalloc-param=SPLIT_LIVE_RANGES:on,regalloc-param=IRC_SPILLING_HEURISTICS:flat-uses,regalloc-validate=1'
ocamlparam: '_,w=-46,regalloc=irc,regalloc-param=SPLIT_LIVE_RANGES:on,regalloc-param=IRC_SPILLING_HEURISTICS:flat-uses,regalloc-validate=1'
check_arch: true
- name: irc_polling
config: --enable-middle-end=flambda2 --enable-poll-insertion
os: ubuntu-latest
build_ocamlparam: '_,w=-46,regalloc=irc,regalloc-param=SPLIT_LIVE_RANGES:on,regalloc-param=IRC_SPILLING_HEURISTICS:flat-uses,regalloc-validate=1'
ocamlparam: '_,w=-46,regalloc=irc,regalloc-param=SPLIT_LIVE_RANGES:on,regalloc-param=IRC_SPILLING_HEURISTICS:flat-uses,regalloc-validate=1'
check_arch: true
- name: irc_frame_pointers
config: --enable-middle-end=flambda2 --enable-frame-pointers
os: ubuntu-latest
build_ocamlparam: '_,w=-46,regalloc=irc,regalloc-param=SPLIT_LIVE_RANGES:on,regalloc-param=IRC_SPILLING_HEURISTICS:flat-uses,regalloc-validate=1'
ocamlparam: '_,w=-46,regalloc=irc,regalloc-param=SPLIT_LIVE_RANGES:on,regalloc-param=IRC_SPILLING_HEURISTICS:flat-uses,regalloc-validate=1'
check_arch: true
- name: ls
config: --enable-middle-end=flambda2
os: ubuntu-latest
build_ocamlparam: '_,w=-46,regalloc=ls,regalloc-param=SPLIT_LIVE_RANGES:on,regalloc-param=LS_ORDER:layout,regalloc-validate=1'
ocamlparam: '_,w=-46,regalloc=ls,regalloc-param=SPLIT_LIVE_RANGES:on,regalloc-param=LS_ORDER:layout,regalloc-validate=1'
check_arch: true
- name: gi
config: --enable-middle-end=flambda2
os: ubuntu-latest
build_ocamlparam: '_,w=-46,regalloc=gi,regalloc-param=SPLIT_LIVE_RANGES:on,regalloc-param=GI_PRIORITY_HEURISTICS:interval-length,regalloc-param=GI_SELECTION_HEURISTICS:first-available,regalloc-param=GI_SPILLING_HEURISTICS:flat-uses,regalloc-validate=1,cfg-cse-optimize=1'
ocamlparam: '_,w=-46,regalloc=gi,regalloc-param=SPLIT_LIVE_RANGES:on,regalloc-param=GI_PRIORITY_HEURISTICS:interval-length,regalloc-param=GI_SELECTION_HEURISTICS:first-available,regalloc-param=GI_SPILLING_HEURISTICS:flat-uses,regalloc-validate=1,cfg-cse-optimize=1'
check_arch: true
- name: cfg-selection
config: --enable-middle-end=flambda2
os: ubuntu-latest
build_ocamlparam: '_,w=-46,regalloc=cfg,cfg-cse-optimize=1,cfg-selection=1,cfg-zero-alloc-checker=1'
ocamlparam: '_,w=-46,regalloc=cfg,cfg-cse-optimize=1,cfg-selection=1,cfg-zero-alloc-checker=1'
check_arch: true
env:
J: "3"
# On macOS, the testsuite is slow, so run only on push to main (#507)
run_testsuite: "${{matrix.os != 'macos-latest' || (github.event_name == 'push' && github.event.ref == 'refs/heads/main')}}"
expected_fail: "${{matrix.expected_fail == true}}"
steps:
- name: Checkout the Flambda backend repo
uses: actions/checkout@master
with:
path: 'flambda_backend'
- name: Install AFL (for Linux workers)
if: matrix.os == 'ubuntu-latest'
run: sudo apt-get install afl++
- name: Install AFL (for macOS workers)
# The "afl-fuzz" package is deprecated (2023-10) and can no longer be installed
if: matrix.os == 'macos-latest'
run: true
# run: HOMEBREW_NO_INSTALL_CLEANUP=TRUE brew install afl-fuzz
- name: Cache OCaml 4.14, dune and menhir
uses: actions/cache@v4
id: cache
with:
path: ${{ github.workspace }}/ocaml-414/_install
key: ${{ matrix.os }}-cache-ocaml-414-dune-3152-menhir-20231231
- name: Checkout OCaml 4.14
uses: actions/checkout@master
if: steps.cache.outputs.cache-hit != 'true'
with:
repository: 'ocaml/ocaml'
path: 'ocaml-414'
ref: '4.14'
- name: Build OCaml 4.14
if: steps.cache.outputs.cache-hit != 'true'
working-directory: ocaml-414
run: |
./configure --prefix=$GITHUB_WORKSPACE/ocaml-414/_install
make -j $J world.opt
make install
# Remove unneeded parts to shrink cache file
rm -rf $GITHUB_WORKSPACE/ocaml-414/_install/{lib/ocaml/expunge,bin/*.byte}
- name: Checkout dune github repo
uses: actions/checkout@master
if: steps.cache.outputs.cache-hit != 'true'
with:
repository: 'ocaml/dune'
ref: '3.15.2'
path: 'dune'
- name: Build dune
working-directory: dune
if: steps.cache.outputs.cache-hit != 'true'
run: |
PATH=$GITHUB_WORKSPACE/ocaml-414/_install/bin:$PATH make release
cp _boot/dune.exe $GITHUB_WORKSPACE/ocaml-414/_install/bin/dune
# CR mshinwell: This should use [email protected]:fpottier/menhir.git
- name: Checkout menhir github repo
uses: actions/checkout@master
if: steps.cache.outputs.cache-hit != 'true'
with:
repository: 'LexiFi/menhir'
ref: '20231231'
path: 'menhir'
- name: Build menhir
working-directory: menhir
if: steps.cache.outputs.cache-hit != 'true'
run: |
PATH=$GITHUB_WORKSPACE/ocaml-414/_install/bin:$PATH dune build
cp _build/install/default/bin/menhir $GITHUB_WORKSPACE/ocaml-414/_install/bin/menhir
# Our dune rule uses `menhirLib.mli`, which we can't simply `cp`
# because it's a symbolic link to a relative path.
export SOURCE_DIR=_build/install/default/lib/menhirLib
export TARGET_DIR=$GITHUB_WORKSPACE/ocaml-414/_install/lib/menhirLib
mkdir -p $TARGET_DIR
cat $SOURCE_DIR/menhirLib.mli > $TARGET_DIR/menhirLib.mli
cat $SOURCE_DIR/menhirLib.ml > $TARGET_DIR/menhirLib.ml
- name: Install GNU parallel
if: matrix.os == 'macos-latest'
run: HOMEBREW_NO_INSTALL_CLEANUP=TRUE brew install parallel
- name: Disable any testcases
working-directory: flambda_backend
run: |
disable_testcases="${{matrix.disable_testcases}}"
if [ -n "$disable_testcases" ]; then
rm -fv $disable_testcases
fi
- name: Configure Flambda backend
working-directory: flambda_backend
run: |
autoconf
./configure \
--prefix=$GITHUB_WORKSPACE/_install \
--with-dune=$GITHUB_WORKSPACE/ocaml-414/_install/bin/dune \
${{ matrix.config }}
- name: Build, install and test Flambda backend
working-directory: flambda_backend
run: |
if [ $run_testsuite = true ]; then target=ci; else target=compiler; fi
export PATH=$GITHUB_WORKSPACE/ocaml-414/_install/bin:$PATH
make $target \
|| (if [ $expected_fail = true ]; then exit 0; else exit 1; fi);
env:
BUILD_OCAMLPARAM: ${{ matrix.build_ocamlparam }}
OCAMLPARAM: ${{ matrix.ocamlparam }}
OCAMLRUNPARAM: ${{ matrix.ocamlrunparam }}
USE_RUNTIME: ${{ matrix.use_runtime }}
- name: Check other architectures
working-directory: flambda_backend
if: matrix.check_arch == true
run: |
PATH=$GITHUB_WORKSPACE/ocaml-414/_install/bin:$PATH make check_all_arches
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true