Test source: git
Source: <stdin> ---------------------------------------- define ptr @mergeBasic(ptr %p) { %0: %1 = gep inbounds ptr %p, 4 x i64 1 %2 = gep inbounds ptr %1, 4 x i64 2 ret ptr %2 } => define ptr @mergeBasic(ptr %p) { %0: %1 = gep inbounds ptr %p, 4 x i64 3 ret ptr %1 } Transformation seems to be correct! ---------------------------------------- define ptr @mergeDifferentTypes(ptr %p) { %0: %1 = gep inbounds ptr %p, 1 x i64 2 %2 = gep inbounds ptr %1, 8 x i64 1 ret ptr %2 } => define ptr @mergeDifferentTypes(ptr %p) { %0: %1 = gep inbounds ptr %p, 1 x i64 10 ret ptr %1 } Transformation seems to be correct! ---------------------------------------- define ptr @mergeReverse(ptr %p) { %0: %1 = gep inbounds ptr %p, 8 x i64 1 %2 = gep inbounds ptr %1, 1 x i64 2 ret ptr %2 } => define ptr @mergeReverse(ptr %p) { %0: %1 = gep inbounds ptr %p, 8 x i64 1 %2 = gep inbounds ptr %1, 1 x i64 2 ret ptr %2 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define ptr @zeroSum(ptr %p) { %0: %1 = gep inbounds ptr %p, 4 x i64 1 %2 = gep inbounds ptr %1, 1 x i64 -4 ret ptr %2 } => define ptr @zeroSum(ptr %p) { %0: ret ptr %p } Transformation seems to be correct! ---------------------------------------- define ptr @array1(ptr %p) { %0: %1 = gep inbounds ptr %p, 20 x i64 1, 1 x i64 1 %2 = gep inbounds ptr %1, 8 x i64 2 ret ptr %2 } => define ptr @array1(ptr %p) { %0: %1 = gep inbounds ptr %p, 20 x i64 1, 1 x i64 17 ret ptr %1 } Transformation seems to be correct! ---------------------------------------- define ptr @array2(ptr %p, i64 %a) { %0: %1 = gep inbounds ptr %p, 28 x i64 0, 4 x i64 3 %2 = gep inbounds ptr %1, 1 x i64 2 ret ptr %2 } => define ptr @array2(ptr %p, i64 %a) { %0: %1 = gep inbounds ptr %p, 28 x i64 0, 4 x i64 3 %2 = gep inbounds ptr %1, 1 x i64 2 ret ptr %2 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define ptr @array3(ptr %p) { %0: %1 = gep inbounds ptr %p, 8 x i64 2 %2 = gep inbounds ptr %1, 3 x i64 1, 1 x i64 1 ret ptr %2 } => define ptr @array3(ptr %p) { %0: %1 = gep inbounds ptr %p, 8 x i64 2 %2 = gep inbounds ptr %1, 3 x i64 1, 1 x i64 1 ret ptr %2 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define ptr @struct1(ptr %p) { %0: %1 = gep inbounds ptr %p, 8 x i64 3 %2 = gep inbounds ptr %1, 12 x i64 1 ret ptr %2 } => define ptr @struct1(ptr %p) { %0: %1 = gep inbounds ptr %p, 8 x i64 3 %2 = gep inbounds ptr %1, 12 x i64 1 ret ptr %2 } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define ptr @struct2(ptr %p) { %0: %1 = gep inbounds ptr %p, 128 x i64 0, 1 x i64 124 %2 = gep inbounds ptr %1, 1 x i64 -128 ret ptr %2 } => define ptr @struct2(ptr %p) { %0: %1 = gep inbounds ptr %p, 128 x i64 -1, 1 x i64 124 ret ptr %1 } Transformation doesn't verify! ERROR: Target is more poisonous than source Example: ptr %p = pointer(non-local, block_id=1, offset=32) Source: ptr %1 = pointer(non-local, block_id=1, offset=156) ptr %2 = pointer(non-local, block_id=1, offset=28) SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 1 alloc type: 0 Block 1 > size: 156 align: 2 alloc type: 0 Target: ptr %1 = poison Source value: pointer(non-local, block_id=1, offset=28) Target value: poison ------------------- SMT STATS ------------------- Num queries: 20 Num invalid: 0 Num skips: 0 Num trivial: 26 (56.5%) Num timeout: 0 (0.0%) Num errors: 0 (0.0%) Num SAT: 16 (80.0%) Num UNSAT: 4 (20.0%) Alive2: Transform doesn't verify; aborting!
+ : 'RUN: at line 2' + /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/gep-merge-constant-indices.ll + /home/nlopes/alive2/build/opt-alive.sh -passes=instcombine -opaque-pointers -S FileCheck error: '<stdin>' is empty. FileCheck command line: /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/gep-merge-constant-indices.ll