Test Failure: Transforms/SLPVectorizer/X86/bad_types.ll

Test source: git

Log:

Source: <stdin>
ERROR: Unsupported type: x86_mmx
ERROR: Unsupported type: x86_mmx
ERROR: Unsupported type: x86_mmx
ERROR: Unsupported type: x86_mmx

----------------------------------------
define i8 @test3(* %addr) {
%entry:
  %a = bitcast * %addr to *
  %a0 = gep inbounds * %a, 1 x i64 0
  %a1 = gep inbounds * %a, 1 x i64 1
  %a2 = gep inbounds * %a, 1 x i64 2
  %a3 = gep inbounds * %a, 1 x i64 3
  %l0 = load i2, * %a0, align 1
  %l1 = load i2, * %a1, align 1
  %l2 = load i2, * %a2, align 1
  %l3 = load i2, * %a3, align 1
  br label %bb1

%bb1:
  %p0 = phi i2 [ %l0, %entry ]
  %p1 = phi i2 [ %l1, %entry ]
  %p2 = phi i2 [ %l2, %entry ]
  %p3 = phi i2 [ %l3, %entry ]
  %r = zext i2 %p2 to i8
  ret i8 %r
}
=>
define i8 @test3(* %addr) {
%entry:
  %a = bitcast * %addr to *
  %a0 = gep inbounds * %a, 1 x i64 0
  %a1 = gep inbounds * %a, 1 x i64 1
  %a2 = gep inbounds * %a, 1 x i64 2
  %a3 = gep inbounds * %a, 1 x i64 3
  %l0 = load i2, * %a0, align 1
  %l1 = load i2, * %a1, align 1
  %l2 = load i2, * %a2, align 1
  %l3 = load i2, * %a3, align 1
  br label %bb1

%bb1:
  %p0 = phi i2 [ %l0, %entry ]
  %p1 = phi i2 [ %l1, %entry ]
  %p2 = phi i2 [ %l2, %entry ]
  %p3 = phi i2 [ %l3, %entry ]
  %r = zext i2 %p2 to i8
  ret i8 %r
}
Transformation seems to be correct!


----------------------------------------
define void @test4(i32 %a, * %ptr) {
%entry:
  %trunc = trunc i32 %a to i28
  %gep1 = gep * %ptr, 4 x i32 1
  %gep2 = gep * %ptr, 4 x i32 2
  %gep3 = gep * %ptr, 4 x i32 3
  store i28 %trunc, * %ptr, align 4
  store i28 %trunc, * %gep1, align 4
  store i28 %trunc, * %gep2, align 4
  store i28 %trunc, * %gep3, align 4
  ret void
}
=>
define void @test4(i32 %a, * %ptr) {
%entry:
  %trunc = trunc i32 %a to i28
  %0 = insertelement <4 x i28> poison, i28 %trunc, i32 0
  %1 = insertelement <4 x i28> %0, i28 %trunc, i32 1
  %2 = insertelement <4 x i28> %1, i28 %trunc, i32 2
  %3 = insertelement <4 x i28> %2, i28 %trunc, i32 3
  %4 = bitcast * %ptr to *
  store <4 x i28> %3, * %4, align 4
  ret void
}
Transformation doesn't verify!
ERROR: Mismatch in memory

Example:
i32 %a = #x00040000 (262144)
* %ptr = pointer(non-local, block_id=1, offset=8)

Source:
i28 %trunc = #x0040000 (262144)
* %gep1 = pointer(non-local, block_id=1, offset=12)
* %gep2 = pointer(non-local, block_id=1, offset=16)
* %gep3 = pointer(non-local, block_id=1, offset=20)

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

Target:
i28 %trunc = #x0040000 (262144)
<4 x i28> %0 = < #x0040000 (262144), poison, poison, poison >
<4 x i28> %1 = < #x0040000 (262144), #x0040000 (262144), poison, poison >
<4 x i28> %2 = < #x0040000 (262144), #x0040000 (262144), #x0040000 (262144), poison >
<4 x i28> %3 = < #x0040000 (262144), #x0040000 (262144), #x0040000 (262144), #x0040000 (262144) >
* %4 = pointer(non-local, block_id=1, offset=8)

Mismatch in pointer(non-local, block_id=1, offset=12)
Source value: #x0000
Target value: #x4000


------------------- SMT STATS -------------------
Num queries: 4
Num invalid: 0
Num skips:   0
Num trivial: 10 (71.4%)
Num timeout: 0 (0.0%)
Num errors:  0 (0.0%)
Num SAT:     3 (75.0%)
Num UNSAT:   1 (25.0%)

stderr:

+ : 'RUN: at line 2'
+ /home/nlopes/alive2/build/opt-alive.sh -basic-aa -slp-vectorizer -S -mcpu=corei7-avx
+ /home/nlopes/llvm/build/bin/FileCheck --allow-unused-prefixes=false /home/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/X86/bad_types.ll

Alive2: Transform doesn't verify; aborting!
FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/nlopes/llvm/build/bin/FileCheck --allow-unused-prefixes=false /home/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/X86/bad_types.ll

 

<-- Back