39 lines
1.5 KiB
Bash
39 lines
1.5 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/../../../../.." && pwd)
|
||
|
|
source "$ROOT/tools/test/lib/shlib.sh"
|
||
|
|
|
||
|
|
build_nyash_release
|
||
|
|
# Ensure LLVM harness feature is built (enables object emit via Python harness)
|
||
|
|
(cd "$ROOT" && cargo build --release --features llvm -j 8 >/dev/null)
|
||
|
|
|
||
|
|
export NYASH_LLVM_USE_HARNESS=1
|
||
|
|
export NYASH_MIR_NO_PHI=${NYASH_MIR_NO_PHI:-1}
|
||
|
|
export NYASH_VERIFY_ALLOW_NO_PHI=${NYASH_VERIFY_ALLOW_NO_PHI:-1}
|
||
|
|
export NYASH_LLVM_TRACE_PHI=1
|
||
|
|
export NYASH_LLVM_PREPASS_IFMERGE=1
|
||
|
|
export NYASH_LLVM_OBJ_OUT=${NYASH_LLVM_OBJ_OUT:-"$ROOT/tmp/phi_trace_obj.o"}
|
||
|
|
|
||
|
|
mkdir -p "$ROOT/tmp"
|
||
|
|
TRACE_OUT="$ROOT/tmp/phi_trace.jsonl"
|
||
|
|
rm -f "$TRACE_OUT"
|
||
|
|
export NYASH_LLVM_TRACE_OUT="$TRACE_OUT"
|
||
|
|
|
||
|
|
# Run a couple of representative cases
|
||
|
|
APP1="$ROOT/apps/tests/loop_if_phi.nyash"
|
||
|
|
APP2="$ROOT/apps/tests/ternary_nested.nyash"
|
||
|
|
APP3="$ROOT/apps/tests/llvm_phi_mix.nyash"
|
||
|
|
APP4="$ROOT/apps/tests/llvm_phi_heavy_mix.nyash"
|
||
|
|
|
||
|
|
# Tolerate harness non-zero exits; we validate the trace file instead
|
||
|
|
timeout -s KILL 30s "$ROOT/target/release/nyash" --backend llvm "$APP1" >/dev/null || true
|
||
|
|
timeout -s KILL 30s "$ROOT/target/release/nyash" --backend llvm "$APP2" >/dev/null || true
|
||
|
|
timeout -s KILL 30s "$ROOT/target/release/nyash" --backend llvm "$APP3" >/dev/null || true
|
||
|
|
timeout -s KILL 30s "$ROOT/target/release/nyash" --backend llvm "$APP4" >/dev/null || true
|
||
|
|
|
||
|
|
# Validate trace consistency
|
||
|
|
assert_exit "python3 \"$ROOT/tools/phi_trace_check.py\" --file \"$TRACE_OUT\" --summary" 0
|
||
|
|
|
||
|
|
echo "OK: llvm phi_trace (trace + check)"
|