Files
Mergen/scripts/rewrite/instruction_microtests.json
naciandNaC-L 0fbc2e9a52 Upgrade rewrite gate clang-cl to 21.1.8; re-enable calc_fib/calc_sum_array (#96)
The windows-latest preinstalled clang-cl (currently 20.1.8 at
`C:\Program Files\LLVM\bin\clang-cl.exe`) produces a lifter binary
that segfaults on calc_fib before emitting any IR, causing the rewrite
gate to fail. Clang 21.1.8 has been verified locally to compile the
lifter into a binary that lifts both calc_fib and calc_sum_array to
their expected constant returns (`ret i64 13` and `ret i64 150`).

Rolling back to clang 18.x is not an option: the runner image's MSVC STL
(14.44+) hard-requires clang 19.0.0 or newer via a static_assert in
yvals_core.h. Clang 21 satisfies that bound and dodges the clang 20.1.8
miscompile.

Upgrading via `choco upgrade llvm --version=21.1.8` keeps the existing
`C:\Program Files\LLVM\bin\clang-cl.exe` path valid, so the rest of
the pipeline (Resolve LLVM_DIR, Resolve clang-cl, Configure, Build) is
unchanged.

## Changes
- `.github/workflows/rewrite-strict-gate.yml`: add an "Upgrade clang-cl
  to 21.1.8" step before `Resolve LLVM_DIR` that runs `choco upgrade
  llvm` and pins `CMAKE_{C,CXX}_COMPILER` to the upgraded binary.
- `scripts/rewrite/instruction_microtests.json`: drop the `ci_skip`
  entries on `calc_fib` and `calc_sum_array`.
- `docs/SCOPE.md`: bump the corpus counts to 33 samples / 177 runtime
  semantic cases.

## Follow-up
Investigating the underlying clang 20.1.8 miscompile in the lifter is
still worth doing \u2014 it's almost certainly UB somewhere in the
structured-loop recovery path that clang 21 happens to tolerate. Tracked
separately.

Co-authored-by: NaC-L <nac-l@users.noreply.github.com>
2026-04-07 18:33:05 +03:00

537 lines
22 KiB
JSON

{
"samples": [
{
"name": "branch",
"symbol": "branch_target",
"patterns": [
"select i1",
{ "line_all": ["mul i32", ", 3"] },
{ "line_all": ["add i32", ", 100"] },
"xor i32"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 87, "label": "le path: (0+100)^0x33=87" },
{ "inputs": { "RCX": 3 }, "expected": 84, "label": "le path: (3+100)^0x33=84" },
{ "inputs": { "RCX": 5 }, "expected": 90, "label": "le boundary: (5+100)^0x33=90" },
{ "inputs": { "RCX": 6 }, "expected": 33, "label": "gt path: (6*3)^0x33=33" },
{ "inputs": { "RCX": 10 }, "expected": 45, "label": "gt path: (10*3)^0x33=45" }
]
},
{
"name": "stack",
"symbol": "stack_target",
"patterns": ["ret i64 1717986918"],
"semantic": [
{ "expected": 1717986918, "label": "constant: 0x66666666" }
]
},
{
"name": "indirect",
"symbol": "jump_target",
"patterns": ["ret i64 53"],
"semantic": [
{ "expected": 53, "label": "constant: hardcoded case2 0x30+5" }
]
},
{
"name": "instr_add",
"symbol": "instr_add_target",
"patterns": ["ret i64 12"],
"semantic": [
{ "expected": 12, "label": "constant: 7+5" }
]
},
{
"name": "instr_sub",
"symbol": "instr_sub_target",
"patterns": ["ret i64 42"],
"semantic": [
{ "expected": 42, "label": "constant: 100-58" }
]
},
{
"name": "instr_xor",
"symbol": "instr_xor_target",
"patterns": ["ret i64 90"],
"semantic": [
{ "expected": 90, "label": "constant: 0x55^0x0F=0x5A=90" }
]
},
{
"name": "instr_rol",
"symbol": "instr_rol_target",
"patterns": ["ret i64 34"],
"semantic": [
{ "expected": 34, "label": "constant: rol(0x11,1)=0x22=34" }
]
},
{
"name": "nested_branch",
"symbol": "nested_branch_target",
"patterns": [
{ "line_all": ["icmp slt i32", ", 11"] },
{ "line_all": ["icmp slt i32", ", 21"] },
"select i1",
"i64 200, i64 300",
"i64 100"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 100, "label": "<=10" },
{ "inputs": { "RCX": 5 }, "expected": 100, "label": "<=10 interior" },
{ "inputs": { "RCX": 10 }, "expected": 100, "label": "<=10 boundary" },
{ "inputs": { "RCX": 11 }, "expected": 200, "label": "11..20" },
{ "inputs": { "RCX": 15 }, "expected": 200, "label": "11..20 interior" },
{ "inputs": { "RCX": 20 }, "expected": 200, "label": "<=20 boundary" },
{ "inputs": { "RCX": 21 }, "expected": 300, "label": ">20" },
{ "inputs": { "RCX": 100 }, "expected": 300, "label": ">20 far" }
]
},
{
"name": "loop_simple",
"symbol": "loop_simple_target",
"patterns": ["ret i64 6"],
"semantic": [
{ "expected": 6, "label": "constant: 3+2+1" }
]
},
{
"name": "dummy_vm_loop",
"symbol": "dummy_vm_loop_target",
"patterns": [
{ "line_all": ["and i32", ", 1"] },
{ "line_all": ["and i32", ", 7"] },
"phi i32",
"add i32",
"sub i32",
"br i1"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 40, "label": "even opcode takes constant handler" },
{ "inputs": { "RCX": 1 }, "expected": 0, "label": "odd opcode loop with limit 1 returns 0" },
{ "inputs": { "RCX": 3 }, "expected": 3, "label": "odd opcode loop: 0+1+2" },
{ "inputs": { "RCX": 5 }, "expected": 10, "label": "odd opcode loop: 0+1+2+3+4" },
{ "inputs": { "RCX": 7 }, "expected": 21, "label": "odd opcode loop: 0..6" },
{ "inputs": { "RCX": 8 }, "expected": 40, "label": "even opcode ignores masked loop handler" }
]
},
{
"name": "bytecode_vm_loop",
"symbol": "bytecode_vm_loop_target",
"patterns": [
{ "line_all": ["and i32", ", 1"] },
{ "line_all": ["and i32", ", 7"] },
"phi i32",
"add i32",
"sub i32",
"ret i64 %common.ret.op"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 40, "label": "even program returns constant handler" },
{ "inputs": { "RCX": 1 }, "expected": 0, "label": "odd bytecode loop limit 1 returns 0" },
{ "inputs": { "RCX": 3 }, "expected": 3, "label": "odd bytecode loop: 0+1+2" },
{ "inputs": { "RCX": 5 }, "expected": 10, "label": "odd bytecode loop: 0+1+2+3+4" },
{ "inputs": { "RCX": 7 }, "expected": 21, "label": "odd bytecode loop: 0..6" },
{ "inputs": { "RCX": 8 }, "expected": 40, "label": "even program ignores odd loop body" }
]
},
{
"name": "stack_vm_loop",
"symbol": "stack_vm_loop_target",
"patterns": [
{ "line_all": ["and i32", ", 1"] },
{ "line_all": ["and i32", ", 7"] },
"phi i32",
"add nsw i32",
"mul i33",
"lshr exact i33",
"ret i64 %common.ret.op"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 40, "label": "even program returns constant handler" },
{ "inputs": { "RCX": 1 }, "expected": 0, "label": "odd stack loop limit 1 returns 0" },
{ "inputs": { "RCX": 3 }, "expected": 3, "label": "odd stack loop: 0+1+2" },
{ "inputs": { "RCX": 5 }, "expected": 10, "label": "odd stack loop: 0+1+2+3+4" },
{ "inputs": { "RCX": 7 }, "expected": 21, "label": "odd stack loop: 0..6" },
{ "inputs": { "RCX": 8 }, "expected": 40, "label": "even program ignores odd loop body" }
]
},
{
"name": "bitchain",
"symbol": "bitchain_target",
"patterns": ["ret i64 4090"],
"semantic": [
{ "expected": 4090, "label": "constant: 0x0FFA" }
]
},
{
"name": "multi_arg",
"symbol": "multi_arg_target",
"patterns": ["trunc i64 %RCX to i32", "trunc i64 %RDX to i32", "add i32", "mul i32", "zext i32"],
"semantic": [
{ "inputs": { "RCX": 5, "RDX": 3 }, "expected": 56, "label": "(5+3)*7" },
{ "inputs": { "RCX": 0, "RDX": 0 }, "expected": 0, "label": "(0+0)*7" },
{ "inputs": { "RCX": 10, "RDX": 4 }, "expected": 98, "label": "(10+4)*7" },
{ "inputs": { "RCX": 1, "RDX": 1 }, "expected": 14, "label": "(1+1)*7" },
{ "inputs": { "RCX": 100, "RDX": 0 }, "expected": 700, "label": "(100+0)*7" }
]
},
{
"name": "diamond",
"symbol": "diamond_target",
"patterns": [
{ "line_all": ["and i32", ", 1"] },
"icmp eq i32",
"select i1",
{ "line_all": ["mul i32", ", 3"] }
],
"semantic": [
{ "inputs": { "RCX": 7 }, "expected": 51, "label": "odd: (7+10)*3" },
{ "inputs": { "RCX": 1 }, "expected": 33, "label": "odd: (1+10)*3" },
{ "inputs": { "RCX": 3 }, "expected": 39, "label": "odd: (3+10)*3" },
{ "inputs": { "RCX": 11 }, "expected": 63, "label": "odd: (11+10)*3" },
{ "inputs": { "RCX": 6 }, "expected": 3, "label": "even: (6-5)*3" },
{ "inputs": { "RCX": 8 }, "expected": 9, "label": "even: (8-5)*3" },
{ "inputs": { "RCX": 10 }, "expected": 15, "label": "even: (10-5)*3" },
{ "inputs": { "RCX": 100 }, "expected": 285, "label": "even: (100-5)*3" }
]
},
{
"name": "cmov_chain",
"symbol": "cmov_chain_target",
"patterns": [
{ "line_all": ["icmp sgt i32", ", 10"] },
"select i1",
"i64 250, i64 150"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 150, "label": "<=10: 100+50" },
{ "inputs": { "RCX": 10 }, "expected": 150, "label": "==10: not >10" },
{ "inputs": { "RCX": 11 }, "expected": 250, "label": ">10: 200+50" },
{ "inputs": { "RCX": 15 }, "expected": 250, "label": ">10 interior" },
{ "inputs": { "RCX": 100 }, "expected": 250, "label": ">10 far" }
]
},
{
"name": "calc_grade",
"symbol": "calc_grade",
"patterns": ["icmp slt i32 %0, 90", "icmp slt i32 %0, 80", "icmp slt i32 %0, 70", "icmp sgt i32 %0, 59", "phi i64", "ret i64 %common.ret.op"],
"semantic": [
{ "inputs": { "RCX": 95 }, "expected": 4, "label": ">=90" },
{ "inputs": { "RCX": 90 }, "expected": 4, "label": "==90 boundary" },
{ "inputs": { "RCX": 89 }, "expected": 3, "label": "80..89" },
{ "inputs": { "RCX": 80 }, "expected": 3, "label": "==80 boundary" },
{ "inputs": { "RCX": 79 }, "expected": 2, "label": "70..79" },
{ "inputs": { "RCX": 70 }, "expected": 2, "label": "==70 boundary" },
{ "inputs": { "RCX": 69 }, "expected": 1, "label": "60..69" },
{ "inputs": { "RCX": 60 }, "expected": 1, "label": "==60 boundary" },
{ "inputs": { "RCX": 59 }, "expected": 0, "label": "<60" },
{ "inputs": { "RCX": 0 }, "expected": 0, "label": "<60 zero" },
{ "inputs": { "RCX": 100 }, "expected": 4, "label": ">=90 well above" }
]
},
{
"name": "calc_mixed",
"symbol": "calc_mixed",
"patterns": ["icmp slt i32 %0, 101", "select i1", "mul i32", "ret i64"],
"semantic": [
{ "inputs": { "RCX": 150 }, "expected": 576, "label": "x>100: (42+150)*3=576" },
{ "inputs": { "RCX": 101 }, "expected": 429, "label": "x>100: (42+101)*3=429" },
{ "inputs": { "RCX": 0 }, "expected": 126, "label": "x<=100: (42-0)*3=126" },
{ "inputs": { "RCX": 1 }, "expected": 123, "label": "x<=100: (42-1)*3=123" },
{ "inputs": { "RCX": 42 }, "expected": 0, "label": "x<=100: (42-42)*3=0" },
{ "inputs": { "RCX": 50 }, "expected": 4294967272, "label": "x<=100: uint32 wrap, zext" },
{ "inputs": { "RCX": 100 }, "expected": 4294967122, "label": "x<=100: uint32 wrap, zext" }
]
},
{
"name": "calc_fib",
"symbol": "calc_fib",
"patterns": ["ret i64 13"],
"semantic": [
{ "expected": 13, "label": "constant: fib(7)" }
]
},
{
"name": "calc_sum_array",
"symbol": "calc_sum_array",
"patterns": ["ret i64 150"],
"semantic": [
{ "expected": 150, "label": "constant: 10+20+30+40+50" }
]
},
{
"name": "calc_sum_to_n",
"symbol": "calc_sum_to_n",
"patterns": ["phi i32", "icmp slt i32", "add i32", "br i1"],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 0, "label": "n=0" },
{ "inputs": { "RCX": 1 }, "expected": 0, "label": "n=1" },
{ "inputs": { "RCX": 5 }, "expected": 10, "label": "0+1+2+3+4" },
{ "inputs": { "RCX": 10 }, "expected": 45, "label": "0..9" },
{ "inputs": { "RCX": 32 }, "expected": 496, "label": "0..31" },
{ "inputs": { "RCX": 100 }, "expected": 496, "label": "clamped to 32" }
]
},
{
"name": "switch_3way",
"symbol": "switch_3way_target",
"patterns": ["switch i32 %", "i32 1, label", "i32 2, label", "i32 3, label", "phi i64", "[ 100,", "[ 200,", "[ 300,", "[ 999,"],
"semantic": [
{ "inputs": { "RCX": 1 }, "expected": 100, "label": "case 1" },
{ "inputs": { "RCX": 2 }, "expected": 200, "label": "case 2" },
{ "inputs": { "RCX": 3 }, "expected": 300, "label": "case 3" },
{ "inputs": { "RCX": 0 }, "expected": 999, "label": "default (0)" },
{ "inputs": { "RCX": 4 }, "expected": 999, "label": "default (4)" },
{ "inputs": { "RCX": 100 }, "expected": 999, "label": "default (100)" }
]
},
{
"name": "calc_switch",
"symbol": "calc_switch",
"patterns": ["switch i32", "phi i64"],
"semantic": [
{ "inputs": { "RCX": 1 }, "expected": 6, "label": "Monday" },
{ "inputs": { "RCX": 2 }, "expected": 7, "label": "Tuesday" },
{ "inputs": { "RCX": 3 }, "expected": 9, "label": "Wednesday" },
{ "inputs": { "RCX": 4 }, "expected": 8, "label": "Thursday" },
{ "inputs": { "RCX": 5 }, "expected": 6, "label": "Friday" },
{ "inputs": { "RCX": 0 }, "expected": 0, "label": "default (0)" },
{ "inputs": { "RCX": 6 }, "expected": 0, "label": "default (6)" },
{ "inputs": { "RCX": 100 }, "expected": 0, "label": "default (100)" }
]
},
{
"name": "switch_sparse",
"symbol": "switch_sparse_target",
"patterns": ["switch i32 %", "i32 10, label", "i32 50, label", "i32 200, label", "i32 1000, label", "phi i64", "[ 11,", "[ 55,", "[ 222,", "[ 1337,", "[ 4294967295,"],
"semantic": [
{ "inputs": { "RCX": 10 }, "expected": 11, "label": "case 10" },
{ "inputs": { "RCX": 50 }, "expected": 55, "label": "case 50" },
{ "inputs": { "RCX": 200 }, "expected": 222, "label": "case 200" },
{ "inputs": { "RCX": 1000 }, "expected": 1337, "label": "case 1000" },
{ "inputs": { "RCX": 0 }, "expected": 4294967295, "label": "default: 0xFFFFFFFF" },
{ "inputs": { "RCX": 100 }, "expected": 4294967295, "label": "default" },
{ "inputs": { "RCX": 500 }, "expected": 4294967295, "label": "default" }
]
},
{
"name": "calc_cout",
"symbol": "?calc_cout@@YAHH@Z",
"patterns": ["mul i32", "add i32", "ret i64"],
"semantic": [
{ "inputs": { "RCX": 10 }, "expected": 37, "label": "10*3+7" },
{ "inputs": { "RCX": 0 }, "expected": 7, "label": "0*3+7" },
{ "inputs": { "RCX": 100 }, "expected": 307, "label": "100*3+7" },
{ "inputs": { "RCX": 1 }, "expected": 10, "label": "1*3+7" }
]
},
{
"name": "jumptable_basic",
"symbol": "jumptable_basic_target",
"patterns": [
"switch i64 %RCX",
"i64 0, label",
"i64 1, label",
"i64 2, label",
"i64 3, label",
"phi i64",
"[ 10,",
"[ 20,",
"[ 30,",
"[ 40,",
"[ 999,"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 10, "label": "case 0" },
{ "inputs": { "RCX": 1 }, "expected": 20, "label": "case 1" },
{ "inputs": { "RCX": 2 }, "expected": 30, "label": "case 2" },
{ "inputs": { "RCX": 3 }, "expected": 40, "label": "case 3" },
{ "inputs": { "RCX": 4 }, "expected": 999, "label": "default (>3)" },
{ "inputs": { "RCX": 100 }, "expected": 999, "label": "default far" }
]
},
{
"name": "jumptable_dense",
"symbol": "jumptable_dense_target",
"patterns": [
"switch i64 %RCX",
"i64 0, label",
"i64 1, label",
"i64 7, label",
"phi i64",
"[ 100,",
"[ 200,",
"[ 300,",
"[ 400,",
"[ 500,",
"[ 600,",
"[ 700,",
"[ 800,",
"[ 0,"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 100, "label": "case 0" },
{ "inputs": { "RCX": 1 }, "expected": 200, "label": "case 1" },
{ "inputs": { "RCX": 2 }, "expected": 300, "label": "case 2" },
{ "inputs": { "RCX": 3 }, "expected": 400, "label": "case 3" },
{ "inputs": { "RCX": 4 }, "expected": 500, "label": "case 4" },
{ "inputs": { "RCX": 5 }, "expected": 600, "label": "case 5" },
{ "inputs": { "RCX": 6 }, "expected": 700, "label": "case 6" },
{ "inputs": { "RCX": 7 }, "expected": 800, "label": "case 7" },
{ "inputs": { "RCX": 8 }, "expected": 0, "label": "default (>7)" },
{ "inputs": { "RCX": 100 }, "expected": 0, "label": "default far" }
]
},
{
"name": "calc_jumptable",
"symbol": "calc_jumptable",
"patterns": [
{ "line_all": ["icmp ult i32", ", 10"] },
"trunc i64 %RCX to i32",
"switch i32 %0",
"i32 0, label",
"i32 9, label",
"phi i64"
],
"semantic": [
{ "inputs": { "RCX": -1 }, "expected": 4294967295, "label": "default (negative)" },
{ "inputs": { "RCX": 0 }, "expected": 1, "label": "2^0" },
{ "inputs": { "RCX": 1 }, "expected": 2, "label": "2^1" },
{ "inputs": { "RCX": 2 }, "expected": 4, "label": "2^2" },
{ "inputs": { "RCX": 3 }, "expected": 8, "label": "2^3" },
{ "inputs": { "RCX": 4 }, "expected": 16, "label": "2^4" },
{ "inputs": { "RCX": 5 }, "expected": 32, "label": "2^5" },
{ "inputs": { "RCX": 6 }, "expected": 64, "label": "2^6" },
{ "inputs": { "RCX": 7 }, "expected": 128, "label": "2^7" },
{ "inputs": { "RCX": 8 }, "expected": 256, "label": "2^8" },
{ "inputs": { "RCX": 9 }, "expected": 512, "label": "2^9" },
{ "inputs": { "RCX": 10 }, "expected": 4294967295, "label": "default (above range)" }
]
},
{
"name": "jumptable_rel32",
"symbol": "jumptable_rel32_target",
"patterns": [
{ "line_all": ["icmp ult i32", ", 5"] },
"switch i64 %RCX",
"phi i64",
"[ 10,",
"[ 20,",
"[ 30,",
"[ 40,",
"[ 50,",
"[ 999,"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 10, "label": "case 0" },
{ "inputs": { "RCX": 1 }, "expected": 20, "label": "case 1" },
{ "inputs": { "RCX": 2 }, "expected": 30, "label": "case 2" },
{ "inputs": { "RCX": 3 }, "expected": 40, "label": "case 3" },
{ "inputs": { "RCX": 4 }, "expected": 50, "label": "case 4" },
{ "inputs": { "RCX": 5 }, "expected": 999, "label": "default (>4)" },
{ "inputs": { "RCX": 100 }, "expected": 999, "label": "default far" }
]
},
{
"name": "jumptable_shifted",
"symbol": "jumptable_shifted_target",
"patterns": [
"add i32",
"switch i32",
"phi i64",
"[ 100,",
"[ 200,",
"[ 300,",
"[ 400,",
"[ 500,",
"[ 0,"
],
"semantic": [
{ "inputs": { "RCX": 10 }, "expected": 100, "label": "case 10" },
{ "inputs": { "RCX": 11 }, "expected": 200, "label": "case 11" },
{ "inputs": { "RCX": 12 }, "expected": 300, "label": "case 12" },
{ "inputs": { "RCX": 13 }, "expected": 400, "label": "case 13" },
{ "inputs": { "RCX": 14 }, "expected": 500, "label": "case 14" },
{ "inputs": { "RCX": 9 }, "expected": 0, "label": "default (below range)" },
{ "inputs": { "RCX": 15 }, "expected": 0, "label": "default (above range)" },
{ "inputs": { "RCX": 0 }, "expected": 0, "label": "default (zero)" },
{ "inputs": { "RCX": 100 }, "expected": 0, "label": "default far" }
]
},
{
"name": "jumptable_shared_targets",
"symbol": "jumptable_shared_target",
"patterns": [
{ "line_all": ["icmp ult i32", ", 6"] },
"switch i32",
"phi i64",
"[ 10,",
"[ 20,",
"[ 30,",
"[ 40,",
"[ 999,"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 10, "label": "case 0 (group a)" },
{ "inputs": { "RCX": 1 }, "expected": 10, "label": "case 1 (group a shared)" },
{ "inputs": { "RCX": 2 }, "expected": 20, "label": "case 2 (solo b)" },
{ "inputs": { "RCX": 3 }, "expected": 30, "label": "case 3 (group c)" },
{ "inputs": { "RCX": 4 }, "expected": 30, "label": "case 4 (group c shared)" },
{ "inputs": { "RCX": 5 }, "expected": 40, "label": "case 5 (solo d)" },
{ "inputs": { "RCX": 6 }, "expected": 999, "label": "default (>5)" },
{ "inputs": { "RCX": 100 }, "expected": 999, "label": "default far" }
]
},
{
"name": "jumptable_computation",
"symbol": "jumptable_computation_target",
"patterns": [
{ "line_all": ["icmp ult i32", ", 4"] },
"switch i32",
"phi i64",
"shl",
"mul",
"add"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 1, "label": "case 0: 0*2+1" },
{ "inputs": { "RCX": 1 }, "expected": 8, "label": "case 1: 1*3+5" },
{ "inputs": { "RCX": 2 }, "expected": 18, "label": "case 2: 2*4+10" },
{ "inputs": { "RCX": 3 }, "expected": 103, "label": "case 3: 3+100" },
{ "inputs": { "RCX": 4 }, "expected": 0, "label": "default (>3)" },
{ "inputs": { "RCX": 100 }, "expected": 0, "label": "default far" },
{ "inputs": { "RCX": 5 }, "expected": 0, "label": "default (5 > 3)" }
]
},
{
"name": "calc_jumptable_large",
"symbol": "calc_jumptable_large",
"patterns": [
"and i64 %RCX, 15",
"switch i64 %sw_input",
"i64 0, label",
"i64 1, label",
"i64 15, label",
"phi i64",
"[ 7,",
"[ 42,",
"[ 21,",
"unreachable",
"ret i64"
],
"semantic": [
{ "inputs": { "RCX": 0 }, "expected": 7, "label": "case 0" },
{ "inputs": { "RCX": 1 }, "expected": 42, "label": "case 1" },
{ "inputs": { "RCX": 5 }, "expected": 31, "label": "case 5" },
{ "inputs": { "RCX": 7 }, "expected": 3, "label": "case 7" },
{ "inputs": { "RCX": 10 }, "expected": 404, "label": "case 10" },
{ "inputs": { "RCX": 14 }, "expected": 65535, "label": "case 14" },
{ "inputs": { "RCX": 15 }, "expected": 21, "label": "case 15" },
{ "inputs": { "RCX": -1 }, "expected": 4294967295, "label": "default (negative)" },
{ "inputs": { "RCX": 16 }, "expected": 4294967295, "label": "default (above range)" },
{ "inputs": { "RCX": 100 }, "expected": 4294967295, "label": "default far" }
]
}
]
}