summaryrefslogtreecommitdiff
path: root/test/Transforms/SROA
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-07-19 10:57:32 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-07-19 10:57:32 +0000
commitfbf2a026224b80d9c1513060082195dc10a99d75 (patch)
treee0fde1fc32ac4b255b72482a2d2ae37474f1e97c /test/Transforms/SROA
parent914bc14e7bdc4e6c37c0b651139e34588a1b395f (diff)
downloadllvm-fbf2a026224b80d9c1513060082195dc10a99d75.tar.gz
llvm-fbf2a026224b80d9c1513060082195dc10a99d75.tar.bz2
llvm-fbf2a026224b80d9c1513060082195dc10a99d75.tar.xz
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186666 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/SROA')
-rw-r--r--test/Transforms/SROA/basictest.ll24
1 files changed, 22 insertions, 2 deletions
diff --git a/test/Transforms/SROA/basictest.ll b/test/Transforms/SROA/basictest.ll
index 9e5a26104d..458b0df3c8 100644
--- a/test/Transforms/SROA/basictest.ll
+++ b/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
+}