Test source: git
Source: <stdin> ---------------------------------------- define * @bork(* %qux) { %0: %tmp275 = load *, * %qux, align 1 %tmp275276 = ptrtoint * %tmp275 to i32 %tmp277 = add i32 %tmp275276, 16 %tmp277278 = int2ptr i32 %tmp277 to * ret * %tmp277278 } => define * @bork(* %qux) { %0: %1 = bitcast * %qux to * %tmp2751 = load i64, * %1, align 1 %tmp275276 = trunc i64 %tmp2751 to i32 %tmp277 = add i32 %tmp275276, 16 %2 = zext i32 %tmp277 to i64 %tmp277278 = int2ptr i64 %2 to * ret * %tmp277278 } Transformation doesn't verify! ERROR: Target is more poisonous than source Example: * %qux = pointer(non-local, block_id=4, offset=262133) Source: * %tmp275 = null i32 %tmp275276 = #x00000000 (0) i32 %tmp277 = #x00000010 (16) * %tmp277278 = (invalid expr) SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 64 alloc type: 0 address: 0 Block 1 > size: 269993680219276444 align: 16 alloc type: 0 address: 594475220608387073 Block 2 > size: 315266968293845012 align: 2 alloc type: 0 address: 4179340454202049562 Block 3 > size: 1161942473531683986 align: 4 alloc type: 0 address: 864691265911390208 Block 4 > size: 576460752303611904 align: 0 alloc type: 0 address: 4760304806150344739 Target: * %1 = pointer(non-local, block_id=4, offset=262133) i64 %tmp2751 = poison i32 %tmp275276 = poison i32 %tmp277 = poison i64 %2 = poison * %tmp277278 = (invalid expr) Source value: (invalid expr) Target value: (invalid expr) ------------------- SMT STATS ------------------- Num queries: 2 Num invalid: 0 Num skips: 0 Num trivial: 2 (50.0%) Num timeout: 0 (0.0%) Num errors: 0 (0.0%) Num SAT: 2 (100.0%) Num UNSAT: 0 (0.0%)
+ : 'RUN: at line 1' + /home/nlopes/alive2/scripts/opt-alive.sh -instcombine -S + /home/nlopes/llvm/build/bin/count 1 + grep 16 Alive2: Transform doesn't verify; aborting! Expected 1 lines, got 0.