mirror of
https://github.com/NaC-L/Mergen.git
synced 2026-05-12 09:40:34 +00:00
1020775ec0
Two new post-optimization passes that run after the final O2 pipeline: PrototypeMinimizationPass: - Removes unused function arguments based on Argument::use_empty() - Typical reduction: 34 params -> 0-2 (e.g. @main(i64 %RCX) instead of all 16 GPRs + 16 XMMs + 2 ptrs) - Splices basic blocks into new function, remaps argument uses, erases old function - Updated check_semantic.py to parse actual IR signatures instead of hardcoded 34-param list CanonicalNamingPass: - Strips address-derived suffixes from block/value names for deterministic output - Blocks: entry, bb1, bb2, ... (sequential) - Values: semantic prefix preserved, address suffix removed (realadd-5368713230- -> realadd) - Same input now produces byte-identical IR across rebuilds Also fixed writeFunctionToFile to use stored module pointer M instead of fnc->getParent() (dangling after prototype minimization erases the old function). Review fixes: - CanonicalNamingPass: use StringMap<unsigned> instead of DenseMap<StringRef> (dangling key) - PrototypeMinimizationPass: restrict call rewriting to CallInst (not InvokeInst/CallBrInst) - PrototypeMinimizationPass: guard F->eraseFromParent() with use_empty() check - check_semantic.py: widen define regex to handle dso_local and other prefixes All 28 samples pass, 146 semantic cases, 56 golden hashes updated.