Test source: git
Comments: LLVM PR51906
Source: <stdin> ERROR: Unsupported instruction: %x = load volatile i32, ptr @X, align 4 ERROR: Unsupported instruction: store volatile i32 %x2, ptr @X, align 4 ERROR: Unsupported attribute: noalias ERROR: Unsupported metadata: 1 ERROR: Unsupported instruction: %x = load atomic i32, ptr @X unordered, align 4 ERROR: Unsupported attribute: noalias ERROR: Unsupported attribute: sret(i32) ---------------------------------------- @X = global 4 bytes, align 4 define void @test1(i32 %i) denormal-fp-math=ieee,ieee { %Entry: br label %Loop %Loop: %j = phi i32 [ 0, %Entry ], [ %Next, %Loop ] %x = load i32, ptr @X, align 4 %x2 = add i32 %x, 1 store i32 %x2, ptr @X, align 4 %Next = add i32 %j, 1 %cond = icmp eq i32 %Next, 0 br i1 %cond, label %Out, label %Loop %Out: ret void } => @X = global 4 bytes, align 4 define void @test1(i32 %i) denormal-fp-math=ieee,ieee { %Entry: %X.promoted = load i32, ptr @X, align 4 br label %Loop %Loop: %x21 = phi i32 [ %X.promoted, %Entry ], [ %x2, %Loop ] %j = phi i32 [ 0, %Entry ], [ %Next, %Loop ] %x2 = add i32 %x21, 1 %Next = add i32 %j, 1 %cond = icmp eq i32 %Next, 0 br i1 %cond, label %Out, label %Loop %Out: %x2.lcssa = phi i32 [ %x2, %Loop ] store i32 %x2.lcssa, ptr @X, align 4 ret void } Transformation seems to be correct! ---------------------------------------- @X = global 4 bytes, align 4 define void @test2(i32 %i) denormal-fp-math=ieee,ieee { %Entry: br label %Loop %Loop: %X1 = gep ptr @X, 4 x i64 1 %A = load i32, ptr %X1, align 4 %V = add i32 %A, 1 %X2 = gep ptr @X, 4 x i64 1 store i32 %V, ptr %X2, align 4 br i1 0, label %Loop, label %Exit %Exit: ret void } => @X = global 4 bytes, align 4 define void @test2(i32 %i) denormal-fp-math=ieee,ieee { %Entry: %__constexpr_0 = gep inbounds ptr @X, 4 x i64 1 %.promoted = load i32, ptr %__constexpr_0, align 4 br label %Loop %Loop: %V1 = phi i32 [ %V, %Loop ], [ %.promoted, %Entry ] %V = add i32 %V1, 1 br i1 0, label %Loop, label %Exit %Exit: %V.lcssa = phi i32 [ %V, %Loop ] %__constexpr_1 = gep inbounds ptr @X, 4 x i64 1 store i32 %V.lcssa, ptr %__constexpr_1, align 4 ret void } Transformation seems to be correct! ERROR: Unsupported instruction: %x = load volatile i32, ptr @X, align 4 ERROR: Unsupported instruction: store volatile i32 %x2, ptr @X, align 4 ---------------------------------------- define void @test4(ptr %x, i8 %n) denormal-fp-math=ieee,ieee { %0: %handle1 = alloca i64 8, align 8 %handle2 = alloca i64 8, align 8 store ptr %x, ptr %handle1, align 8 br label %loop %loop: %tmp = gep ptr %x, 1 x i64 8 store ptr %tmp, ptr %handle2, align 8 br label %subloop %subloop: %count = phi i8 [ 0, %loop ], [ %nextcount, %subloop ] %offsetx2 = load ptr, ptr %handle2, align 8 store i8 %n, ptr %offsetx2, align 1 %newoffsetx2 = gep ptr %offsetx2, 1 x i64 -1 store ptr %newoffsetx2, ptr %handle2, align 8 %nextcount = add i8 %count, 1 %innerexitcond = icmp sge i8 %nextcount, 8 br i1 %innerexitcond, label %innerexit, label %subloop %innerexit: %offsetx1 = load ptr, ptr %handle1, align 8 %val = load i8, ptr %offsetx1, align 1 %cond = icmp eq i8 %val, %n br i1 %cond, label %exit, label %loop %exit: ret void } => define void @test4(ptr %x, i8 %n) denormal-fp-math=ieee,ieee { %0: %handle1 = alloca i64 8, align 8 %handle2 = alloca i64 8, align 8 store ptr %x, ptr %handle1, align 8 %tmp = gep ptr %x, 1 x i64 8 %offsetx1 = load ptr, ptr %handle1, align 8 br label %loop %loop: br label %subloop %subloop: %newoffsetx21 = phi ptr [ %tmp, %loop ], [ %newoffsetx2, %subloop ] %count = phi i8 [ 0, %loop ], [ %nextcount, %subloop ] store i8 %n, ptr %newoffsetx21, align 1 %newoffsetx2 = gep ptr %newoffsetx21, 1 x i64 -1 %nextcount = add i8 %count, 1 %innerexitcond = icmp sge i8 %nextcount, 8 br i1 %innerexitcond, label %innerexit, label %subloop %innerexit: %newoffsetx2.lcssa = phi ptr [ %newoffsetx2, %subloop ] %val = load i8, ptr %offsetx1, align 1 %cond = icmp eq i8 %val, %n br i1 %cond, label %exit, label %loop %exit: %newoffsetx2.lcssa.lcssa = phi ptr [ %newoffsetx2.lcssa, %innerexit ] store ptr %newoffsetx2.lcssa.lcssa, ptr %handle2, align 8 ret void } Transformation seems to be correct! ERROR: Unsupported attribute: noalias ERROR: Unsupported metadata: 1 ---------------------------------------- define i32 @test7() denormal-fp-math=ieee,ieee { %entry: %local = alloca i64 4, align 4 call void @capture(ptr %local) denormal-fp-math=ieee,ieee br label %loop %loop: %j = phi i32 [ 0, %entry ], [ %next, %loop ] %x = load i32, ptr %local, align 4 %x2 = call i32 @opaque(i32 %x) argmemonly denormal-fp-math=ieee,ieee store i32 %x2, ptr %local, align 4 %next = add i32 %j, 1 %cond = icmp eq i32 %next, 0 br i1 %cond, label %exit, label %loop %exit: %ret = load i32, ptr %local, align 4 ret i32 %ret } => define i32 @test7() denormal-fp-math=ieee,ieee { %entry: %local = alloca i64 4, align 4 call void @capture(ptr %local) denormal-fp-math=ieee,ieee %local.promoted = load i32, ptr %local, align 4 br label %loop %loop: %x21 = phi i32 [ %local.promoted, %entry ], [ %x2, %loop ] %j = phi i32 [ 0, %entry ], [ %next, %loop ] %x2 = call i32 @opaque(i32 %x21) argmemonly denormal-fp-math=ieee,ieee %next = add i32 %j, 1 %cond = icmp eq i32 %next, 0 br i1 %cond, label %exit, label %loop %exit: %x2.lcssa = phi i32 [ %x2, %loop ] store i32 %x2.lcssa, ptr %local, align 4 %ret = load i32, ptr %local, align 4 ret i32 %ret } Transformation seems to be correct! ---------------------------------------- define i32 @test7bad() denormal-fp-math=ieee,ieee { %entry: %local = alloca i64 4, align 4 call void @capture(ptr %local) denormal-fp-math=ieee,ieee br label %loop %loop: %j = phi i32 [ 0, %entry ], [ %next, %else ] %x = load i32, ptr %local, align 4 %x2 = call i32 @opaque(i32 %x) argmemonly denormal-fp-math=ieee,ieee %cmp = icmp eq i32 %x2, 0 br i1 %cmp, label %if, label %else %if: store i32 %x2, ptr %local, align 4 br label %else %else: %next = add i32 %j, 1 %cond = icmp eq i32 %next, 0 br i1 %cond, label %exit, label %loop %exit: %ret = load i32, ptr %local, align 4 ret i32 %ret } => define i32 @test7bad() denormal-fp-math=ieee,ieee { %entry: %local = alloca i64 4, align 4 call void @capture(ptr %local) denormal-fp-math=ieee,ieee %local.promoted = load i32, ptr %local, align 4 br label %loop %loop: %x22 = phi i32 [ %local.promoted, %entry ], [ %x21, %else ] %j = phi i32 [ 0, %entry ], [ %next, %else ] %x2 = call i32 @opaque(i32 %x22) argmemonly denormal-fp-math=ieee,ieee %cmp = icmp eq i32 %x2, 0 br i1 %cmp, label %if, label %else %if: store i32 %x2, ptr %local, align 4 br label %else %else: %x21 = phi i32 [ %x2, %if ], [ %x22, %loop ] %next = add i32 %j, 1 %cond = icmp eq i32 %next, 0 br i1 %cond, label %exit, label %loop %exit: %ret = load i32, ptr %local, align 4 ret i32 %ret } Transformation seems to be correct! ---------------------------------------- define i32 @test8() denormal-fp-math=ieee,ieee { %entry: %local = alloca i64 4, align 4 call void @capture(ptr %local) denormal-fp-math=ieee,ieee br label %loop %loop: %j = phi i32 [ 0, %entry ], [ %next, %loop ] %throwaway = call i32 @opaque(i32 %j) argmemonly denormal-fp-math=ieee,ieee %x = load i32, ptr %local, align 4 %x2 = call i32 @opaque(i32 %x) argmemonly denormal-fp-math=ieee,ieee store i32 %x2, ptr %local, align 4 %next = add i32 %j, 1 %cond = icmp eq i32 %next, 0 br i1 %cond, label %exit, label %loop %exit: %ret = load i32, ptr %local, align 4 ret i32 %ret } => define i32 @test8() denormal-fp-math=ieee,ieee { %entry: %local = alloca i64 4, align 4 call void @capture(ptr %local) denormal-fp-math=ieee,ieee %local.promoted = load i32, ptr %local, align 4 br label %loop %loop: %x21 = phi i32 [ %local.promoted, %entry ], [ %x2, %loop ] %j = phi i32 [ 0, %entry ], [ %next, %loop ] %throwaway = call i32 @opaque(i32 %j) argmemonly denormal-fp-math=ieee,ieee %x2 = call i32 @opaque(i32 %x21) argmemonly denormal-fp-math=ieee,ieee %next = add i32 %j, 1 %cond = icmp eq i32 %next, 0 br i1 %cond, label %exit, label %loop %exit: %x2.lcssa = phi i32 [ %x2, %loop ] store i32 %x2.lcssa, ptr %local, align 4 %ret = load i32, ptr %local, align 4 ret i32 %ret } Transformation seems to be correct! ---------------------------------------- define i32 @test9() denormal-fp-math=ieee,ieee { %entry: %local = alloca i64 4, align 4 call void @capture(ptr %local) denormal-fp-math=ieee,ieee br label %loop %loop: %j = phi i32 [ 0, %entry ], [ %next, %else ] %j2 = call i32 @opaque(i32 %j) argmemonly denormal-fp-math=ieee,ieee %cmp = icmp eq i32 %j2, 0 br i1 %cmp, label %if, label %else %if: %x = load i32, ptr %local, align 4 br label %else %else: %x2 = phi i32 [ 0, %loop ], [ %x, %if ] store i32 %x2, ptr %local, align 4 %next = add i32 %j, 1 %cond = icmp eq i32 %next, 0 br i1 %cond, label %exit, label %loop %exit: %ret = load i32, ptr %local, align 4 ret i32 %ret } => define i32 @test9() denormal-fp-math=ieee,ieee { %entry: %local = alloca i64 4, align 4 call void @capture(ptr %local) denormal-fp-math=ieee,ieee %local.promoted = load i32, ptr %local, align 4 br label %loop %loop: %x21 = phi i32 [ %local.promoted, %entry ], [ %x2, %else ] %j = phi i32 [ 0, %entry ], [ %next, %else ] %j2 = call i32 @opaque(i32 %j) argmemonly denormal-fp-math=ieee,ieee %cmp = icmp eq i32 %j2, 0 br i1 %cmp, label %if, label %else %if: br label %else %else: %x2 = phi i32 [ 0, %loop ], [ %x21, %if ] %next = add i32 %j, 1 %cond = icmp eq i32 %next, 0 br i1 %cond, label %exit, label %loop %exit: %x2.lcssa = phi i32 [ %x2, %else ] store i32 %x2.lcssa, ptr %local, align 4 %ret = load i32, ptr %local, align 4 ret i32 %ret } Transformation seems to be correct! ---------------------------------------- define i32 @test9bad(i32 %i) denormal-fp-math=ieee,ieee { %entry: %local = alloca i64 4, align 4 call void @capture(ptr %local) denormal-fp-math=ieee,ieee %notderef = gep ptr %local, 4 x i32 %i br label %loop %loop: %j = phi i32 [ 0, %entry ], [ %next, %else ] %j2 = call i32 @opaque(i32 %j) argmemonly denormal-fp-math=ieee,ieee %cmp = icmp eq i32 %j2, 0 br i1 %cmp, label %if, label %else %if: %x = load i32, ptr %notderef, align 4 br label %else %else: %x2 = phi i32 [ 0, %loop ], [ %x, %if ] store i32 %x2, ptr %notderef, align 4 %next = add i32 %j, 1 %cond = icmp eq i32 %next, 0 br i1 %cond, label %exit, label %loop %exit: %ret = load i32, ptr %notderef, align 4 ret i32 %ret } => define i32 @test9bad(i32 %i) denormal-fp-math=ieee,ieee { %entry: %local = alloca i64 4, align 4 call void @capture(ptr %local) denormal-fp-math=ieee,ieee %notderef = gep ptr %local, 4 x i32 %i br label %loop %loop: %j = phi i32 [ 0, %entry ], [ %next, %else ] %j2 = call i32 @opaque(i32 %j) argmemonly denormal-fp-math=ieee,ieee %cmp = icmp eq i32 %j2, 0 br i1 %cmp, label %if, label %else %if: %x = load i32, ptr %notderef, align 4 br label %else %else: %x2 = phi i32 [ 0, %loop ], [ %x, %if ] store i32 %x2, ptr %notderef, align 4 %next = add i32 %j, 1 %cond = icmp eq i32 %next, 0 br i1 %cond, label %exit, label %loop %exit: %ret = load i32, ptr %notderef, align 4 ret i32 %ret } Transformation seems to be correct! (syntactically equal) ERROR: Unsupported instruction: %X.promoted = load atomic i32, ptr @X unordered, align 4 ---------------------------------------- @X = global 4 bytes, align 4 define void @test11(i32 %i) denormal-fp-math=ieee,ieee { %Entry: br label %Loop %Loop: %j = phi i32 [ 0, %Entry ], [ %Next, %body ] %early.test = icmp ult i32 %j, 32 br i1 %early.test, label %body, label %Early %body: %x = load i32, ptr @X, align 4 %x2 = add i32 %x, 1 store i32 %x2, ptr @X, align 4 %Next = add i32 %j, 1 %cond = icmp eq i32 %Next, 0 br i1 %cond, label %Out, label %Loop %Out: ret void %Early: ret void } => @X = global 4 bytes, align 4 define void @test11(i32 %i) denormal-fp-math=ieee,ieee { %Entry: %X.promoted = load i32, ptr @X, align 4 br label %Loop %Loop: %x21 = phi i32 [ %X.promoted, %Entry ], [ %x2, %body ] %j = phi i32 [ 0, %Entry ], [ %Next, %body ] %early.test = icmp ult i32 %j, 32 br i1 %early.test, label %body, label %Early %body: %x2 = add i32 %x21, 1 %Next = add i32 %j, 1 %cond = icmp eq i32 %Next, 0 br i1 %cond, label %Out, label %Loop %Out: %x2.lcssa = phi i32 [ %x2, %body ] store i32 %x2.lcssa, ptr @X, align 4 ret void %Early: %x21.lcssa = phi i32 [ %x21, %Loop ] store i32 %x21.lcssa, ptr @X, align 4 ret void } Transformation seems to be correct! ---------------------------------------- define i8 @test_hoistable_existing_load_sinkable_store_writeonly(ptr dereferenceable(8) %ptr, i8 %start) noread denormal-fp-math=ieee,ieee { %entry: br label %loop.header %loop.header: %i = phi i8 [ %start, %entry ], [ %add, %loop.latch ] %cmp = icmp ult i8 %i, 4 br i1 %cmp, label %loop.latch, label %exit %loop.latch: %div = sdiv i8 %i, 3 %inc = load i8, ptr dereferenceable(8) %ptr, align 1 store i8 %inc, ptr dereferenceable(8) %ptr, align 1 %add = add i8 %i, %inc br label %loop.header %exit: ret i8 %i } => define i8 @test_hoistable_existing_load_sinkable_store_writeonly(ptr dereferenceable(8) %ptr, i8 %start) noread denormal-fp-math=ieee,ieee { %entry: %ptr.promoted = load i8, ptr dereferenceable(8) %ptr, align 1 br label %loop.header %loop.header: %inc1 = phi i8 [ %ptr.promoted, %entry ], [ %inc1, %loop.latch ] %i = phi i8 [ %start, %entry ], [ %add, %loop.latch ] %cmp = icmp ult i8 %i, 4 br i1 %cmp, label %loop.latch, label %exit %loop.latch: store i8 %inc1, ptr dereferenceable(8) %ptr, align 1 %add = add i8 %i, %inc1 br label %loop.header %exit: %i.lcssa = phi i8 [ %i, %loop.header ] ret i8 %i.lcssa } Transformation doesn't verify! (unsound) ERROR: Source is more defined than target Example: ptr dereferenceable(8) %ptr = pointer(non-local, block_id=1, offset=105) i8 %start = #xfc (252, -4) Source: >> Jump to %loop.header i8 %i = #xfc (252, -4) i1 %cmp = #x0 (0) >> Jump to %exit SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 1 alloc type: 0 Block 1 > size: 128 align: 2 alloc type: 0 Target: i8 %ptr.promoted = UB triggered! Pass: ModuleToFunctionPassAdaptor Command line: '/home/nlopes/llvm/build/bin/opt' '-load=/home/nlopes/alive2/build/tv/tv.so' '-load-pass-plugin=/home/nlopes/alive2/build/tv/tv.so' '-tv-exit-on-error' '-tv' '-licm' '-S' '-tv' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats' ------------------- SMT STATS ------------------- Num queries: 14 Num invalid: 0 Num skips: 0 Num trivial: 52 (78.8%) Num timeout: 0 (0.0%) Num errors: 0 (0.0%) Num SAT: 14 (100.0%) Num UNSAT: 0 (0.0%) Alive2: Transform doesn't verify; aborting!
+ : 'RUN: at line 2' + /home/nlopes/alive2/build/opt-alive.sh -licm -S + /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/LICM/scalar-promote.ll FileCheck error: '<stdin>' is empty. FileCheck command line: /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/LICM/scalar-promote.ll