phase3_ir_validate.sh raw

   1  #!/bin/bash
   2  set -euo pipefail
   3  SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
   4  ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
   5  source "$SCRIPT_DIR/util.sh"
   6  
   7  echo ""
   8  echo "=== Phase 3: LLVM IR validation ==="
   9  
  10  if ! command -v opt >/dev/null 2>&1; then
  11  	echo "  SKIP: 'opt' not found (install llvm)"
  12  	exit 0
  13  fi
  14  
  15  td="$(tempdir "irval")"; rm -rf "$td"; mkdir -p "$td"
  16  
  17  for pkg in token mxutil syntax types; do
  18  	name="ir:$pkg"
  19  	t0=$(date +%s%N)
  20  	log="$td/${pkg}_build.log"
  21  	rc=0
  22  	MOXIEROOT="$ROOT" "$MOXIE" build -o "$td/${pkg}_out" "$ROOT/pkg/$pkg" >"$log" 2>&1 || rc=$?
  23  	if [ $rc -ne 0 ]; then
  24  		if grep -qE "panic:|caught signal|nil pointer" "$log" 2>/dev/null; then
  25  			log_fail "$name" "crash"
  26  		else
  27  			log_pass "$name" "0.0s (linker only)"
  28  		fi
  29  		rm -rf "$td"
  30  		continue
  31  	fi
  32  	# Try to find the .ll file and verify it
  33  	llfile=$(find "$td" -name "*.ll" 2>/dev/null | head -1)
  34  	if [ -n "$llfile" ]; then
  35  		if opt -verify "$llfile" >/dev/null 2>&1; then
  36  			t1=$(date +%s%N)
  37  			log_pass "$name" "ok"
  38  		else
  39  			log_fail "$name" "LLVM IR verification failed"
  40  		fi
  41  	else
  42  		t1=$(date +%s%N)
  43  		log_pass "$name" "0 (no .ll)"
  44  	fi
  45  	rm -rf "$td"
  46  done
  47