kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

commit 14ba583ce257058b9eeccf580e289a3487c8f371
parent f753db1d7995abbd515ba6c79f7a22ea8d97de1f
Author: Ryan Sepassi <rsepassi@gmail.com>
Date:   Sat, 16 May 2026 09:36:36 -0700

Run toy tests at O0 and O1

Diffstat:
Mtest/toy/run.sh | 80+++++++++++++++++++++++++++++++++++++++++--------------------------------------
1 file changed, 42 insertions(+), 38 deletions(-)

diff --git a/test/toy/run.sh b/test/toy/run.sh @@ -2,9 +2,9 @@ # test/toy/run.sh — .toy frontend end-to-end tests. # # Paths per case: -# R cfree run case.toy -# L cfree cc -c case.toy -> cfree ld case.o -> native executable -# X cfree cc -target -> cfree ld -> exec_target for Linux cross targets +# R cfree run -O{level} case.toy +# L cfree cc -O{level} -c case.toy -> cfree ld case.o -> native executable +# X cfree cc -O{level} -target -> cfree ld -> exec_target for Linux cross targets # # Sidecars: # <name>.expected expected process exit code, default 0 @@ -13,6 +13,7 @@ # ./run.sh [name_filter] [paths] # CFREE_TEST_FILTER / CFREE_TEST_PATHS, where paths is a subset of "RLX". # X is opt-in cross-arch cc+ld+exec for aa64, x64, and rv64. +# CFREE_TOY_OPT_LEVELS selects optimization levels, default "0 1". set -u @@ -27,6 +28,7 @@ case "$PATHS" in *R*) RUN_R=1;; *) RUN_R=0;; esac case "$PATHS" in *L*) RUN_L=1;; *) RUN_L=0;; esac case "$PATHS" in *X*) RUN_X=1;; *) RUN_X=0;; esac TOY_CROSS_ARCHS="${CFREE_TOY_CROSS_ARCHS:-aa64 x64 rv64}" +TOY_OPT_LEVELS="${CFREE_TOY_OPT_LEVELS:-0 1}" mkdir -p "$BUILD_DIR" @@ -78,40 +80,40 @@ check_rc() { } run_case_run() { - local name="$1" src="$2" expected="$3" work="$4" + local name="$1" src="$2" expected="$3" work="$4" opt="$5" local out="$work/run.out" err="$work/run.err" rc - "$CFREE" run "$src" > "$out" 2> "$err" + "$CFREE" run "-O$opt" "$src" > "$out" 2> "$err" rc=$? - check_rc "$name/R" "$rc" "$expected" "$err" + check_rc "$name/R-O$opt" "$rc" "$expected" "$err" } run_case_link() { - local name="$1" src="$2" expected="$3" work="$4" + local name="$1" src="$2" expected="$3" work="$4" opt="$5" local obj="$work/$name.o" exe="$work/$name.exe" local cc_err="$work/cc.err" ld_err="$work/ld.err" out="$work/exe.out" local err="$work/exe.err" rc - if ! "$CFREE" cc -c "$src" -o "$obj" > "$work/cc.out" 2> "$cc_err"; then - note_fail "$name/L" - printf ' cfree cc -c failed\n' + if ! "$CFREE" cc "-O$opt" -c "$src" -o "$obj" > "$work/cc.out" 2> "$cc_err"; then + note_fail "$name/L-O$opt" + printf ' cfree cc -O%s -c failed\n' "$opt" sed 's/^/ | /' "$cc_err" return fi if [ -s "$cc_err" ]; then - note_fail "$name/L" - printf ' cfree cc -c wrote stderr\n' + note_fail "$name/L-O$opt" + printf ' cfree cc -O%s -c wrote stderr\n' "$opt" sed 's/^/ | /' "$cc_err" return fi if ! "$CFREE" ld "$obj" -o "$exe" > "$work/ld.out" 2> "$ld_err"; then - note_fail "$name/L" + note_fail "$name/L-O$opt" printf ' cfree ld failed\n' sed 's/^/ | /' "$ld_err" return fi if [ -s "$ld_err" ]; then - note_fail "$name/L" + note_fail "$name/L-O$opt" printf ' cfree ld wrote stderr\n' sed 's/^/ | /' "$ld_err" return @@ -120,7 +122,7 @@ run_case_link() { chmod +x "$exe" 2>/dev/null || true "$exe" > "$out" 2> "$err" rc=$? - check_rc "$name/L" "$rc" "$expected" "$err" + check_rc "$name/L-O$opt" "$rc" "$expected" "$err" } cross_triple_for() { @@ -182,17 +184,17 @@ EOF_START } run_case_cross_one() { - local arch="$1" name="$2" src="$3" expected="$4" work="$5" + local arch="$1" name="$2" src="$3" expected="$4" work="$5" opt="$6" local triple tag obj exe start_obj cc_err ld_err out err rc label triple="$(cross_triple_for "$arch")" || { - note_skip "$name/X:$arch" "unknown cross arch" + note_skip "$name/X-O$opt:$arch" "unknown cross arch" return } tag="$(cross_tag_for "$arch")" || { - note_skip "$name/X:$arch" "unknown cross arch" + note_skip "$name/X-O$opt:$arch" "unknown cross arch" return } - label="$name/X:$arch" + label="$name/X-O$opt:$arch" if [ "$arch" != "aa64" ] && [ "$arch" != "aarch64" ] && grep -q 'asmnop' "$src"; then note_skip "$label" "asmnop is target-specific before toy asm selectors" @@ -203,23 +205,23 @@ run_case_cross_one() { return fi - obj="$work/$name.$arch.o" - exe="$work/$name.$arch.exe" + obj="$work/$name.O$opt.$arch.o" + exe="$work/$name.O$opt.$arch.exe" cc_err="$work/$arch.cc.err" ld_err="$work/$arch.ld.err" out="$work/$arch.out" err="$work/$arch.err" - if ! "$CFREE" cc -target "$triple" -c "$src" -o "$obj" \ + if ! "$CFREE" cc "-O$opt" -target "$triple" -c "$src" -o "$obj" \ > "$work/$arch.cc.out" 2> "$cc_err"; then note_fail "$label" - printf ' cfree cc -target %s -c failed\n' "$triple" + printf ' cfree cc -O%s -target %s -c failed\n' "$opt" "$triple" sed 's/^/ | /' "$cc_err" return fi if [ -s "$cc_err" ]; then note_fail "$label" - printf ' cfree cc -target %s -c wrote stderr\n' "$triple" + printf ' cfree cc -O%s -target %s -c wrote stderr\n' "$opt" "$triple" sed 's/^/ | /' "$cc_err" return fi @@ -255,9 +257,9 @@ run_case_cross_one() { } run_case_cross() { - local name="$1" src="$2" expected="$3" work="$4" arch + local name="$1" src="$2" expected="$3" work="$4" opt="$5" arch for arch in $TOY_CROSS_ARCHS; do - run_case_cross_one "$arch" "$name" "$src" "$expected" "$work" + run_case_cross_one "$arch" "$name" "$src" "$expected" "$work" "$opt" done } @@ -294,18 +296,20 @@ for src in "${cases[@]}"; do continue fi expected="$(expected_for "$src")" - work="$BUILD_DIR/$name" - rm -rf "$work" - mkdir -p "$work" - if [ $RUN_R -eq 1 ]; then - run_case_run "$name" "$src" "$expected" "$work" - fi - if [ $RUN_L -eq 1 ]; then - run_case_link "$name" "$src" "$expected" "$work" - fi - if [ $RUN_X -eq 1 ]; then - run_case_cross "$name" "$src" "$expected" "$work" - fi + for opt in $TOY_OPT_LEVELS; do + work="$BUILD_DIR/$name/O$opt" + rm -rf "$work" + mkdir -p "$work" + if [ $RUN_R -eq 1 ]; then + run_case_run "$name" "$src" "$expected" "$work" "$opt" + fi + if [ $RUN_L -eq 1 ]; then + run_case_link "$name" "$src" "$expected" "$work" "$opt" + fi + if [ $RUN_X -eq 1 ]; then + run_case_cross "$name" "$src" "$expected" "$work" "$opt" + fi + done done printf '\nResults: %d pass, %d fail, %d skip\n' "$PASS" "$FAIL" "$SKIP"