Test source: git
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%)
+ : '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