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

Test source: git

Log:

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

----------------------------------------
define void @RCModelEstimator() {
%entry:
  br i1 undef, label %for.body.lr.ph, label %for.end.thread

%for.end.thread:
  assume i1 0

%for.body.lr.ph:
  br i1 undef, label %for.end, label %for.body

%for.body:
  br i1 undef, label %for.end, label %for.body

%for.end:
  br i1 undef, label %for.body3, label %if.end103

%for.body3:
  br i1 undef, label %if.then7, label %for.inc11

%if.then7:
  br label %for.inc11

%for.inc11:
  br i1 0, label %for.cond14.preheader, label %for.body3

%for.cond14.preheader:
  br i1 undef, label %for.body16.lr.ph, label %if.end103

%for.body16.lr.ph:
  br label %for.body16

%for.body16:
  br i1 undef, label %for.end39, label %for.body16

%for.end39:
  br i1 undef, label %if.end103, label %for.cond45.preheader

%for.cond45.preheader:
  br i1 undef, label %if.then88, label %if.else

%if.then88:
  %mul89 = fmul double 0.000000, 0.000000, exceptions=ignore
  %mul90 = fmul double 0.000000, 0.000000, exceptions=ignore
  %sub91 = fsub double %mul89, %mul90, exceptions=ignore
  %div92 = fdiv double %sub91, undef, exceptions=ignore
  %mul94 = fmul double 0.000000, 0.000000, exceptions=ignore
  %mul95 = fmul double 0.000000, 0.000000, exceptions=ignore
  %sub96 = fsub double %mul94, %mul95, exceptions=ignore
  %div97 = fdiv double %sub96, undef, exceptions=ignore
  br label %if.end103

%if.else:
  br label %if.end103

%if.end103:
  %0 = phi double [ 0.000000, %for.end39 ], [ %div97, %if.then88 ], [ 0.000000, %if.else ], [ 0.000000, %for.cond14.preheader ], [ 0.000000, %for.end ]
  %1 = phi double [ undef, %for.end39 ], [ %div92, %if.then88 ], [ undef, %if.else ], [ 0.000000, %for.cond14.preheader ], [ 0.000000, %for.end ]
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 3. SLPVectorizerPass

----------------------------------------
define void @RCModelEstimator() {
%entry:
  br i1 undef, label %for.body.lr.ph, label %for.end.thread

%for.end.thread:
  assume i1 0

%for.body.lr.ph:
  br i1 undef, label %for.end, label %for.body

%for.body:
  br i1 undef, label %for.end, label %for.body

%for.end:
  br i1 undef, label %for.body3, label %if.end103

%for.body3:
  br i1 undef, label %if.then7, label %for.inc11

%if.then7:
  br label %for.inc11

%for.inc11:
  br i1 0, label %for.cond14.preheader, label %for.body3

%for.cond14.preheader:
  br i1 undef, label %for.body16.lr.ph, label %if.end103

%for.body16.lr.ph:
  br label %for.body16

%for.body16:
  br i1 undef, label %for.end39, label %for.body16

%for.end39:
  br i1 undef, label %if.end103, label %for.cond45.preheader

%for.cond45.preheader:
  br i1 undef, label %if.then88, label %if.else

%if.then88:
  %mul89 = fmul double 0.000000, 0.000000, exceptions=ignore
  %mul90 = fmul double 0.000000, 0.000000, exceptions=ignore
  %sub91 = fsub double %mul89, %mul90, exceptions=ignore
  %div92 = fdiv double %sub91, undef, exceptions=ignore
  %mul94 = fmul double 0.000000, 0.000000, exceptions=ignore
  %mul95 = fmul double 0.000000, 0.000000, exceptions=ignore
  %sub96 = fsub double %mul94, %mul95, exceptions=ignore
  %div97 = fdiv double %sub96, undef, exceptions=ignore
  br label %if.end103

%if.else:
  br label %if.end103

%if.end103:
  %0 = phi double [ 0.000000, %for.end39 ], [ %div97, %if.then88 ], [ 0.000000, %if.else ], [ 0.000000, %for.cond14.preheader ], [ 0.000000, %for.end ]
  %1 = phi double [ undef, %for.end39 ], [ %div92, %if.then88 ], [ undef, %if.else ], [ 0.000000, %for.cond14.preheader ], [ 0.000000, %for.end ]
  ret void
}
=>
define void @RCModelEstimator() {
%entry:
  br i1 undef, label %for.body.lr.ph, label %for.end.thread

%for.end.thread:
  assume i1 0

%for.body.lr.ph:
  br i1 undef, label %for.end, label %for.body

%for.body:
  br i1 undef, label %for.end, label %for.body

%for.end:
  br i1 undef, label %for.body3, label %if.end103

%for.body3:
  br i1 undef, label %if.then7, label %for.inc11

%if.then7:
  br label %for.inc11

%for.inc11:
  br i1 0, label %for.cond14.preheader, label %for.body3

%for.cond14.preheader:
  br i1 undef, label %for.body16.lr.ph, label %if.end103

%for.body16.lr.ph:
  br label %for.body16

%for.body16:
  br i1 undef, label %for.end39, label %for.body16

%for.end39:
  br i1 undef, label %if.end103, label %for.cond45.preheader

%for.cond45.preheader:
  br i1 undef, label %if.then88, label %if.else

%if.then88:
  br label %if.end103

%if.else:
  br label %if.end103

%if.end103:
  %0 = phi <2 x double> [ { 0.000000, undef }, %for.end39 ], [ { 0x7ff8000000000000, 0x7ff8000000000000 }, %if.then88 ], [ { 0.000000, undef }, %if.else ], [ { 0.000000, 0.000000 }, %for.cond14.preheader ], [ { 0.000000, 0.000000 }, %for.end ]
  ret void
}
Transformation seems to be correct!

-- 4. DCEPass

----------------------------------------
define void @RCModelEstimator() {
%entry:
  br i1 undef, label %for.body.lr.ph, label %for.end.thread

%for.end.thread:
  assume i1 0

%for.body.lr.ph:
  br i1 undef, label %for.end, label %for.body

%for.body:
  br i1 undef, label %for.end, label %for.body

%for.end:
  br i1 undef, label %for.body3, label %if.end103

%for.body3:
  br i1 undef, label %if.then7, label %for.inc11

%if.then7:
  br label %for.inc11

%for.inc11:
  br i1 0, label %for.cond14.preheader, label %for.body3

%for.cond14.preheader:
  br i1 undef, label %for.body16.lr.ph, label %if.end103

%for.body16.lr.ph:
  br label %for.body16

%for.body16:
  br i1 undef, label %for.end39, label %for.body16

%for.end39:
  br i1 undef, label %if.end103, label %for.cond45.preheader

%for.cond45.preheader:
  br i1 undef, label %if.then88, label %if.else

%if.then88:
  br label %if.end103

%if.else:
  br label %if.end103

%if.end103:
  %0 = phi <2 x double> [ { 0.000000, undef }, %for.end39 ], [ { 0x7ff8000000000000, 0x7ff8000000000000 }, %if.then88 ], [ { 0.000000, undef }, %if.else ], [ { 0.000000, 0.000000 }, %for.cond14.preheader ], [ { 0.000000, 0.000000 }, %for.end ]
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 5. DCEPass

----------------------------------------
define void @RCModelEstimator() {
%entry:
  br i1 undef, label %for.body.lr.ph, label %for.end.thread

%for.end.thread:
  assume i1 0

%for.body.lr.ph:
  br i1 undef, label %for.end, label %for.body

%for.body:
  br i1 undef, label %for.end, label %for.body

%for.end:
  br i1 undef, label %for.body3, label %if.end103

%for.body3:
  br i1 undef, label %if.then7, label %for.inc11

%if.then7:
  br label %for.inc11

%for.inc11:
  br i1 0, label %for.cond14.preheader, label %for.body3

%for.cond14.preheader:
  br i1 undef, label %for.body16.lr.ph, label %if.end103

%for.body16.lr.ph:
  br label %for.body16

%for.body16:
  br i1 undef, label %for.end39, label %for.body16

%for.end39:
  br i1 undef, label %if.end103, label %for.cond45.preheader

%for.cond45.preheader:
  br i1 undef, label %if.then88, label %if.else

%if.then88:
  br label %if.end103

%if.else:
  br label %if.end103

%if.end103:
  %0 = phi <2 x double> [ { 0.000000, undef }, %for.end39 ], [ { 0x7ff8000000000000, 0x7ff8000000000000 }, %if.then88 ], [ { 0.000000, undef }, %if.else ], [ { 0.000000, 0.000000 }, %for.cond14.preheader ], [ { 0.000000, 0.000000 }, %for.end ]
  ret void
}
=>
define void @RCModelEstimator() {
%entry:
  br i1 undef, label %for.body.lr.ph, label %for.end.thread

%for.end.thread:
  assume i1 0

%for.body.lr.ph:
  br i1 undef, label %for.end, label %for.body

%for.body:
  br i1 undef, label %for.end, label %for.body

%for.end:
  br i1 undef, label %for.body3, label %if.end103

%for.body3:
  br i1 undef, label %if.then7, label %for.inc11

%if.then7:
  br label %for.inc11

%for.inc11:
  br i1 0, label %for.cond14.preheader, label %for.body3

%for.cond14.preheader:
  br i1 undef, label %for.body16.lr.ph, label %if.end103

%for.body16.lr.ph:
  br label %for.body16

%for.body16:
  br i1 undef, label %for.end39, label %for.body16

%for.end39:
  br i1 undef, label %if.end103, label %for.cond45.preheader

%for.cond45.preheader:
  br i1 undef, label %if.then88, label %if.else

%if.then88:
  br label %if.end103

%if.else:
  br label %if.end103

%if.end103:
  ret void
}
Transformation seems to be correct!

-- 6. PassManager<Function> : Skipping NOP
-- 7. PassManager<Function> : Skipping NOP
-- 8. SLPVectorizerPass

----------------------------------------
define void @intrapred_luma() {
%entry:
  %conv153 = trunc i32 undef to i16
  %arrayidx154 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 12
  store i16 %conv153, ptr %arrayidx154, align 8
  %arrayidx155 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 11
  store i16 %conv153, ptr %arrayidx155, align 2
  %arrayidx156 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 10
  store i16 %conv153, ptr %arrayidx156, align 4
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 9. SLPVectorizerPass

----------------------------------------
define void @intrapred_luma() {
%entry:
  %conv153 = trunc i32 undef to i16
  %arrayidx154 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 12
  store i16 %conv153, ptr %arrayidx154, align 8
  %arrayidx155 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 11
  store i16 %conv153, ptr %arrayidx155, align 2
  %arrayidx156 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 10
  store i16 %conv153, ptr %arrayidx156, align 4
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 10. DCEPass

----------------------------------------
define void @intrapred_luma() {
%entry:
  %conv153 = trunc i32 undef to i16
  %arrayidx154 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 12
  store i16 %conv153, ptr %arrayidx154, align 8
  %arrayidx155 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 11
  store i16 %conv153, ptr %arrayidx155, align 2
  %arrayidx156 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 10
  store i16 %conv153, ptr %arrayidx156, align 4
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 11. DCEPass

----------------------------------------
define void @intrapred_luma() {
%entry:
  %conv153 = trunc i32 undef to i16
  %arrayidx154 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 12
  store i16 %conv153, ptr %arrayidx154, align 8
  %arrayidx155 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 11
  store i16 %conv153, ptr %arrayidx155, align 2
  %arrayidx156 = gep inbounds ptr undef, 26 x i64 0, 2 x i64 10
  store i16 %conv153, ptr %arrayidx156, align 4
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 12. PassManager<Function> : Skipping NOP
-- 13. PassManager<Function> : Skipping NOP
-- 14. SLPVectorizerPass

----------------------------------------
define void @dct36(ptr %inbuf) {
%entry:
  %arrayidx41 = gep inbounds ptr %inbuf, 8 x i64 2
  %arrayidx44 = gep inbounds ptr %inbuf, 8 x i64 1
  %0 = load double, ptr %arrayidx44, align 8
  %add46 = fadd double %0, undef, exceptions=ignore
  store double %add46, ptr %arrayidx41, align 8
  %1 = load double, ptr %inbuf, align 8
  %add49 = fadd double %1, %0, exceptions=ignore
  store double %add49, ptr %arrayidx44, align 8
  ret void
}
Transformation seems to be correct! (syntactically equal)

-- 15. SLPVectorizerPass

----------------------------------------
define void @dct36(ptr %inbuf) {
%entry:
  %arrayidx41 = gep inbounds ptr %inbuf, 8 x i64 2
  %arrayidx44 = gep inbounds ptr %inbuf, 8 x i64 1
  %0 = load double, ptr %arrayidx44, align 8
  %add46 = fadd double %0, undef, exceptions=ignore
  store double %add46, ptr %arrayidx41, align 8
  %1 = load double, ptr %inbuf, align 8
  %add49 = fadd double %1, %0, exceptions=ignore
  store double %add49, ptr %arrayidx44, align 8
  ret void
}
=>
define void @dct36(ptr %inbuf) {
%entry:
  %arrayidx44 = gep inbounds ptr %inbuf, 8 x i64 1
  %0 = bitcast ptr %inbuf to ptr
  %1 = load <2 x double>, ptr %0, align 8
  %2 = shufflevector <2 x double> %1, <2 x double> poison, 1, 4294967295
  %3 = fadd <2 x double> %1, %2, exceptions=ignore
  %4 = bitcast ptr %arrayidx44 to ptr
  store <2 x double> %3, ptr %4, align 8
  ret void
}
Transformation doesn't verify! (unsound)
ERROR: Mismatch in memory

Example:
ptr %inbuf = pointer(non-local, block_id=1, offset=80)

Source:
ptr %arrayidx41 = pointer(non-local, block_id=1, offset=96)
ptr %arrayidx44 = pointer(non-local, block_id=1, offset=88)
double %0 = #xbff11516ff000080 (-1.067648883909?)
double %add46 = #xbff11516ff000080 (-1.067648883909?)	[based on undef value]
double %1 = poison
double %add49 = poison

SOURCE MEMORY STATE
===================
NON-LOCAL BLOCKS:
Block 0 >	size: 0	align: 8	alloc type: 0
Block 1 >	size: 225	align: 4294967296	alloc type: 0

Target:
ptr %arrayidx44 = pointer(non-local, block_id=1, offset=88)
ptr %0 = pointer(non-local, block_id=1, offset=80)
<2 x double> %1 = < poison, #xbff11516ff000080 (-1.067648883909?) >
<2 x double> %2 = < #xbff11516ff000080 (-1.067648883909?), poison >
<2 x double> %3 = < poison, poison >
ptr %4 = pointer(non-local, block_id=1, offset=88)

Mismatch in pointer(non-local, block_id=1, offset=96)
Source value: #xbff11516ff000080
Target value: poison

Pass: SLPVectorizerPass
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' '-passes=slp-vectorizer,dce' '-S' '-mtriple=x86_64-apple-macosx10.8.0' '-mcpu=corei7' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats'


------------------- SMT STATS -------------------
Num queries: 11
Num invalid: 0
Num skips:   0
Num trivial: 26 (70.3%)
Num timeout: 0 (0.0%)
Num errors:  0 (0.0%)
Num SAT:     10 (90.9%)
Num UNSAT:   1 (9.1%)
Alive2: Transform doesn't verify; aborting!

stderr:

+ : 'RUN: at line 2'
+ /home/nlopes/alive2/build/opt-alive.sh -passes=slp-vectorizer,dce -S -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7
+ /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/X86/crash_lencod.ll

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

 

NOTE: This test would pass if undef didn't exist!

 

<-- Back