Files
Mergen/scripts/rewrite/instruction_microtests.json
T
yusufcanislek eb10474eb8 feat: commit working-tree changes required by rewrite gates
Lifter improvements:
- PathSolver.ipp: enhanced path memoization, switch-target diagnostics
- GEPTracker.ipp: expanded value tracking, graceful bail-out paths
- Semantics_Misc.ipp: clean up CPUID handler (remove dead comments,
  simplify constant emission)

Rewrite infrastructure:
- instruction_microtests.json: add jumptable manifest entries
  (calc_jumptable, jumptable_basic, jumptable_dense) with semantic cases
- golden_ir_hashes.json: add hashes for new jumptable samples
- build_samples.cmd: support C jumptable /O2 compilation pass
- oracle vectors: regenerated (oracle_vectors.json trimmed to current
  seed set, full-handler vectors updated with new handlers)
- run_microtests.cmd / run_all_handlers.cmd: script improvements
- test.py: add jumptable semantic cases to coverage

Dev scripts:
- configure_iced/zydis.cmd, build_iced/zydis.cmd: improved toolchain
  detection and MERGEN_BUILD_JOBS support

Review automation:
- format_comment.py, invariant_guard.py, risk_map.py, shard_pr.py:
  minor fixes aligned with verify_plan public API rename

Docs:
- REWRITE_BASELINE.md: updated coverage summary and script docs
- REVIEWER_RULES.md: minor formatting
2026-03-26 07:53:43 +03:00

344 lines
14 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": "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", "i128 %XMM0", "i128 %XMM15"],
"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": "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 %0", "i32 1, label", "i32 2, label", "i32 3, label", "i32 4, label", "i32 5, label", "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",
"skip": true,
"skip_reason": "Statically-linked STL (cout) inlined by lifter; GEPTracker UNREACHABLE on complex library code. Blocked on inline policy improvements (Phase 2).",
"patterns": []
},
{
"name": "jumptable_basic",
"symbol": "jumptable_basic_target",
"patterns": [
"switch i32 %trunc7",
"i32 1073745941, label",
"i32 1073745948, label",
"i32 1073745955, 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 %lol-",
"i64 5368713237, label",
"i64 5368713244, label",
"i64 5368713251, label",
"i64 5368713258, label",
"i64 5368713265, label",
"i64 5368713272, label",
"i64 5368713279, 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"] },
{ "line_all": ["select i1", "i64 5368713307"] },
"[ 512,",
"i64 5368713265",
"i64 5368713271",
"i64 5368713277",
"i64 5368713283",
"i64 5368713289",
"i64 5368713295",
"i64 5368713301",
"i64 5368713307",
"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)" }
]
}
]
}