diff options
| author | Chandler Carruth <chandlerc@gmail.com> | 2013-07-19 10:57:32 +0000 | 
|---|---|---|
| committer | Chandler Carruth <chandlerc@gmail.com> | 2013-07-19 10:57:32 +0000 | 
| commit | 1ed848d55c18c50a2a4f5d355255ce1f6aa68199 (patch) | |
| tree | bac97f0d1db671e4b29d57a41bf29b04fd123cef /llvm | |
| parent | ae74cfa9116c10ae8032028c0de51ce3608bb772 (diff) | |
| download | bcm5719-llvm-1ed848d55c18c50a2a4f5d355255ce1f6aa68199.tar.gz bcm5719-llvm-1ed848d55c18c50a2a4f5d355255ce1f6aa68199.zip  | |
Fix another assert failure very similar to PR16651's test case. This
test case came from Benjamin and found the parallel bug in the vector
promotion code.
llvm-svn: 186666
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SROA.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/Transforms/SROA/basictest.ll | 24 | 
2 files changed, 24 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index 7235c0d6f22..5d7fa4b01f9 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -1539,6 +1539,8 @@ static bool isVectorPromotionViableForSlice(      }      if (!canConvertValue(DL, STy, SliceTy))        return false; +  } else { +    return false;    }    return true; diff --git a/llvm/test/Transforms/SROA/basictest.ll b/llvm/test/Transforms/SROA/basictest.ll index 9e5a26104db..458b0df3c80 100644 --- a/llvm/test/Transforms/SROA/basictest.ll +++ b/llvm/test/Transforms/SROA/basictest.ll @@ -1318,12 +1318,12 @@ define void @PR15805(i1 %a, i1 %b) {    ret void  } -define void @PR16651(i8* %a) { +define void @PR16651.1(i8* %a) {  ; This test case caused a crash due to the volatile memcpy in combination with  ; lowering to integer loads and stores of a width other than that of the original  ; memcpy.  ; -; CHECK-LABEL: @PR16651( +; CHECK-LABEL: @PR16651.1(  ; CHECK: alloca i16  ; CHECK: alloca i8  ; CHECK: alloca i8 @@ -1337,3 +1337,23 @@ entry:    load i8* %b.gep, align 2    unreachable  } + +define void @PR16651.2() { +; This test case caused a crash due to failing to promote given a select that +; can't be speculated. It shouldn't be promoted, but we missed that fact when +; analyzing whether we could form a vector promotion because that code didn't +; bail on select instructions. +; +; CHECK-LABEL: @PR16651.2( +; CHECK: alloca <2 x float> +; CHECK: ret void + +entry: +  %tv1 = alloca { <2 x float>, <2 x float> }, align 8 +  %0 = getelementptr { <2 x float>, <2 x float> }* %tv1, i64 0, i32 1 +  store <2 x float> undef, <2 x float>* %0, align 8 +  %1 = getelementptr inbounds { <2 x float>, <2 x float> }* %tv1, i64 0, i32 1, i64 0 +  %cond105.in.i.i = select i1 undef, float* null, float* %1 +  %cond105.i.i = load float* %cond105.in.i.i, align 8 +  ret void +}  | 

