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=1, offset=315230944682311676) 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: 316874870258401286 align: 2 alloc type: 0 address: 288231552972750848 Block 2 > size: 13826066034302176 align: 2 alloc type: 0 address: 3 Block 3 > size: 4559507204483841942 align: 131072 alloc type: 0 address: 4620693571486482432 Block 4 > size: 43595609735623357 align: 2 alloc type: 0 address: 28461983900699969 Target: * %1 = pointer(non-local, block_id=1, offset=315230944682311676) 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 + grep 16 + /home/nlopes/llvm/build/bin/count 1 Alive2: Transform doesn't verify; aborting! Expected 1 lines, got 0.