Test Failure: Transforms/SLPVectorizer/int_sideeffect.ll

Test source: git

Log:

Source: <stdin>

----------------------------------------
define void @test_sideeffect(* %p) {
%0:
  %p0 = gep * %p, 4 x i64 0
  %p1 = gep * %p, 4 x i64 1
  %p2 = gep * %p, 4 x i64 2
  %p3 = gep * %p, 4 x i64 3
  %l0 = load float, * %p0, align 4
  %l1 = load float, * %p1, align 4
  %l2 = load float, * %p2, align 4
  call void @llvm.sideeffect() nofree willreturn
  %l3 = load float, * %p3, align 4
  store float %l0, * %p0, align 4
  call void @llvm.sideeffect() nofree willreturn
  store float %l1, * %p1, align 4
  store float %l2, * %p2, align 4
  store float %l3, * %p3, align 4
  ret void
}
=>
define void @test_sideeffect(* %p) {
%0:
  %p0 = gep * %p, 4 x i64 0
  call void @llvm.sideeffect() nofree willreturn
  %1 = bitcast * %p0 to *
  %2 = load <4 x float>, * %1, align 4
  call void @llvm.sideeffect() nofree willreturn
  %3 = bitcast * %p0 to *
  store <4 x float> %2, * %3, align 4
  ret void
}
Transformation doesn't verify!
ERROR: Couldn't prove the correctness of the transformation
Alive2 approximated the semantics of the programs and therefore we
cannot conclude whether the bug found is valid or not.

Approximations done:
 - Unknown libcall: @llvm.sideeffect



----------------------------------------
define void @test_inaccessiblememonly(* %p) {
%0:
  %p0 = gep * %p, 4 x i64 0
  %p1 = gep * %p, 4 x i64 1
  %p2 = gep * %p, 4 x i64 2
  %p3 = gep * %p, 4 x i64 3
  %l0 = load float, * %p0, align 4
  %l1 = load float, * %p1, align 4
  %l2 = load float, * %p2, align 4
  call void @foo()
  %l3 = load float, * %p3, align 4
  store float %l0, * %p0, align 4
  call void @foo()
  store float %l1, * %p1, align 4
  store float %l2, * %p2, align 4
  store float %l3, * %p3, align 4
  ret void
}
=>
define void @test_inaccessiblememonly(* %p) {
%0:
  %p0 = gep * %p, 4 x i64 0
  call void @foo()
  %1 = bitcast * %p0 to *
  %2 = load <4 x float>, * %1, align 4
  call void @foo()
  %3 = bitcast * %p0 to *
  store <4 x float> %2, * %3, align 4
  ret void
}
Transformation doesn't verify!
ERROR: Source is more defined than target

Example:
* %p = pointer(non-local, block_id=1, offset=0)

Source:
* %p0 = pointer(non-local, block_id=1, offset=0)
* %p1 = pointer(non-local, block_id=1, offset=4)
* %p2 = pointer(non-local, block_id=1, offset=8)
* %p3 = pointer(non-local, block_id=1, offset=12)
float %l0 = #x10204000 (0.000000000000?)
float %l1 = poison
float %l2 = poison
float %l3 = poison
void = UB triggered!

SOURCE MEMORY STATE
===================
NON-LOCAL BLOCKS:
Block 0 >	size: 0	align: 1	alloc type: 0
Block 1 >	size: 64	align: 512	alloc type: 0
Block 2 >	alloc type: 0

Target:
* %p0 = pointer(non-local, block_id=1, offset=0)
* %1 = pointer(non-local, block_id=1, offset=0)
<4 x float> %2 = < poison, poison, poison, poison >
void = UB triggered!



------------------- SMT STATS -------------------
Num queries: 8
Num invalid: 0
Num skips:   0
Num trivial: 8 (50.0%)
Num timeout: 0 (0.0%)
Num errors:  0 (0.0%)
Num SAT:     8 (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 -slp-vectorizer -slp-max-reg-size=128 -slp-min-reg-size=128
+ /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/int_sideeffect.ll

FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/int_sideeffect.ll

 

<-- Back