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=481876364033380000) 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: 1152921504606846982 align: 4 alloc type: 0 address: 1008806307941056508 Block 2 > size: 6469736975545397922 align: 2 alloc type: 0 address: 2434477454815920294 Block 3 > size: 901743561907503006 align: 2 alloc type: 0 address: 1 Block 4 > size: 8438939902 align: 0 alloc type: 0 address: 2305843017803628545 Target: * %1 = pointer(non-local, block_id=1, offset=481876364033380000) 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: 1 (33.3%) 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.