Test Failure: Transforms/LICM/pr64897.ll

Test source: git

Log:

Source: <stdin>
-- 1. ModuleToFunctionPassAdaptor
-- 1. PassManager<Function> : Skipping NOP
-- 2. FunctionToLoopPassAdaptor

----------------------------------------
declare void @use(i8)

define void @test(i1 %c, i8 %x) {
start:
  %a = alloca i64 16, align 8
  %p = gep inbounds ptr %a, 1 x i64 8
  %p.copy = gep inbounds ptr %a, 1 x i64 8
  %p2 = gep inbounds ptr %a, 1 x i64 12
  br label %loop

loop:
  store i32 286331153, ptr %p, align 4
  store i32 34, ptr %p.copy, align 4
  store i64 3689348814741910323, ptr %p.copy, align 4
  %val = load i8, ptr %p2, align 1
  call void @use(i8 %val)
  store i8 0, ptr %p2, align 1
  br i1 %c, label %loop, label %exit

exit:
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 3. PassManager<Function> : Skipping NOP
-- 4. LoopSimplifyPass

----------------------------------------
declare void @use(i8)

define void @test(i1 %c, i8 %x) {
start:
  %a = alloca i64 16, align 8
  %p = gep inbounds ptr %a, 1 x i64 8
  %p.copy = gep inbounds ptr %a, 1 x i64 8
  %p2 = gep inbounds ptr %a, 1 x i64 12
  br label %loop

loop:
  store i32 286331153, ptr %p, align 4
  store i32 34, ptr %p.copy, align 4
  store i64 3689348814741910323, ptr %p.copy, align 4
  %val = load i8, ptr %p2, align 1
  call void @use(i8 %val)
  store i8 0, ptr %p2, align 1
  br i1 %c, label %loop, label %exit

exit:
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 5. LoopSimplifyPass

----------------------------------------
declare void @use(i8)

define void @test(i1 %c, i8 %x) {
start:
  %a = alloca i64 16, align 8
  %p = gep inbounds ptr %a, 1 x i64 8
  %p.copy = gep inbounds ptr %a, 1 x i64 8
  %p2 = gep inbounds ptr %a, 1 x i64 12
  br label %loop

loop:
  store i32 286331153, ptr %p, align 4
  store i32 34, ptr %p.copy, align 4
  store i64 3689348814741910323, ptr %p.copy, align 4
  %val = load i8, ptr %p2, align 1
  call void @use(i8 %val)
  store i8 0, ptr %p2, align 1
  br i1 %c, label %loop, label %exit

exit:
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 6. LCSSAPass

----------------------------------------
declare void @use(i8)

define void @test(i1 %c, i8 %x) {
start:
  %a = alloca i64 16, align 8
  %p = gep inbounds ptr %a, 1 x i64 8
  %p.copy = gep inbounds ptr %a, 1 x i64 8
  %p2 = gep inbounds ptr %a, 1 x i64 12
  br label %loop

loop:
  store i32 286331153, ptr %p, align 4
  store i32 34, ptr %p.copy, align 4
  store i64 3689348814741910323, ptr %p.copy, align 4
  %val = load i8, ptr %p2, align 1
  call void @use(i8 %val)
  store i8 0, ptr %p2, align 1
  br i1 %c, label %loop, label %exit

exit:
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 7. LCSSAPass

----------------------------------------
declare void @use(i8)

define void @test(i1 %c, i8 %x) {
start:
  %a = alloca i64 16, align 8
  %p = gep inbounds ptr %a, 1 x i64 8
  %p.copy = gep inbounds ptr %a, 1 x i64 8
  %p2 = gep inbounds ptr %a, 1 x i64 12
  br label %loop

loop:
  store i32 286331153, ptr %p, align 4
  store i32 34, ptr %p.copy, align 4
  store i64 3689348814741910323, ptr %p.copy, align 4
  %val = load i8, ptr %p2, align 1
  call void @use(i8 %val)
  store i8 0, ptr %p2, align 1
  br i1 %c, label %loop, label %exit

exit:
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 8. PassManager<Function> : Skipping NOP
-- 9. PassManager<Loop, AnalysisManager<Loop, LoopStandardAnalysisResults&>, LoopStandardAnalysisResults&, LPMUpdater&> : Skipping NOP
-- 10. LICMPass

----------------------------------------
declare void @use(i8)

define void @test(i1 %c, i8 %x) {
start:
  %a = alloca i64 16, align 8
  %p = gep inbounds ptr %a, 1 x i64 8
  %p.copy = gep inbounds ptr %a, 1 x i64 8
  %p2 = gep inbounds ptr %a, 1 x i64 12
  br label %loop

loop:
  store i32 286331153, ptr %p, align 4
  store i32 34, ptr %p.copy, align 4
  store i64 3689348814741910323, ptr %p.copy, align 4
  %val = load i8, ptr %p2, align 1
  call void @use(i8 %val)
  store i8 0, ptr %p2, align 1
  br i1 %c, label %loop, label %exit

exit:
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 11. LICMPass

----------------------------------------
declare void @use(i8)

define void @test(i1 %c, i8 %x) {
start:
  %a = alloca i64 16, align 8
  %p = gep inbounds ptr %a, 1 x i64 8
  %p.copy = gep inbounds ptr %a, 1 x i64 8
  %p2 = gep inbounds ptr %a, 1 x i64 12
  br label %loop

loop:
  store i32 286331153, ptr %p, align 8
  store i32 34, ptr %p.copy, align 8
  store i64 3689348814741910323, ptr %p.copy, align 8
  %val = load i8, ptr %p2, align 4
  call void @use(i8 %val)
  store i8 0, ptr %p2, align 4
  br i1 %c, label %loop, label %exit

exit:
  ret void
}
=>
declare void @use(i8)

define void @test(i1 %c, i8 %x) {
start:
  %a = alloca i64 16, align 8
  %p = gep inbounds ptr %a, 1 x i64 8
  %p.copy = gep inbounds ptr %a, 1 x i64 8
  %p2 = gep inbounds ptr %a, 1 x i64 12
  %p2.promoted = load i8, ptr %p2, align 4
  br label %loop

loop:
  %#0 = phi i8 [ 0, %loop ], [ %p2.promoted, %start ]
  store i32 286331153, ptr %p, align 8
  store i32 34, ptr %p.copy, align 8
  store i64 3689348814741910323, ptr %p.copy, align 8
  call void @use(i8 %#0)
  br i1 %c, label %loop, label %exit

exit:
  store i8 0, ptr %p2, align 4
  ret void
}
Transformation doesn't verify! (unsound)
ERROR: Source is more defined than target

Example:
i1 %c = poison
i8 %x = poison

Source:
ptr %a = null
ptr %p = pointer(local, block_id=2, offset=8)
ptr %p.copy = pointer(local, block_id=2, offset=8)
ptr %p2 = pointer(local, block_id=2, offset=12)
  >> Jump to %loop
i8 %val = #x33 (51)
void = function did not return!

SOURCE MEMORY STATE
===================
NON-LOCAL BLOCKS:
Block 0 >	size: 0	align: 1	alloc type: 0	alive: false	address: 0
Block 1 >	size: 0	align: 1	alloc type: 0	alive: true	address: 0

LOCAL BLOCKS:
Block 2 >	size: 16	align: 8	alloc type: 1	alive: true

Target:
ptr %a = pointer(local, block_id=2, offset=0)
ptr %p = pointer(local, block_id=2, offset=8)
ptr %p.copy = pointer(local, block_id=2, offset=8)
ptr %p2 = pointer(local, block_id=2, offset=12)
i8 %p2.promoted = poison
  >> Jump to %loop
i8 %#0 = poison
Function @use triggered UB

TARGET MEMORY STATE
===================
LOCAL BLOCKS:
Block 2 >	size: 0	align: 1	alloc type: 0	alive: false	address: 0


Pass: LICMPass
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' '-S' '-passes=licm' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats'
Wrote bitcode to: "/home/nlopes/alive2/build/logs/in_hpBUtvCK_i1YG.bc"


------------------- SMT STATS -------------------
Num queries: 12
Num invalid: 0
Num skips:   0
Num trivial: 9 (42.9%)
Num timeout: 0 (0.0%)
Num errors:  0 (0.0%)
Num SAT:     12 (100.0%)
Num UNSAT:   0 (0.0%)
Alive2: Transform doesn't verify; aborting!

stderr:

RUN: at line 2: /home/nlopes/alive2/build/opt-alive.sh -S -passes=licm < /bitbucket/nlopes/llvm/llvm/test/Transforms/LICM/pr64897.ll | /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/LICM/pr64897.ll
+ /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/LICM/pr64897.ll
+ /home/nlopes/alive2/build/opt-alive.sh -S -passes=licm

FileCheck error: '<stdin>' is empty.
FileCheck command line:  /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/LICM/pr64897.ll

 

<-- Back