summaryrefslogtreecommitdiff
path: root/test/CodeGen/ARM/flag-crash.ll
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2010-06-24 22:00:37 +0000
committerBill Wendling <isanbard@gmail.com>2010-06-24 22:00:37 +0000
commit10707f3b442aa5a6cc55b899d630871f06b8ebbc (patch)
treeb7fb6e919146b382ece88e0cd3a6a3034f439df1 /test/CodeGen/ARM/flag-crash.ll
parent486ca764216fea073d3bcc0716b181ca861b74f7 (diff)
It's possible that a flag is added to the SDNode that points back to the
original SDNode. This is badness. Also, this function allows one SDNode to point multiple flags to another SDNode. Badness as well. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106793 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/ARM/flag-crash.ll')
-rw-r--r--test/CodeGen/ARM/flag-crash.ll27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/CodeGen/ARM/flag-crash.ll b/test/CodeGen/ARM/flag-crash.ll
new file mode 100644
index 00000000000..9c61944a215
--- /dev/null
+++ b/test/CodeGen/ARM/flag-crash.ll
@@ -0,0 +1,27 @@
+; RUN: llc < %s -O3 -mtriple=thumbv7-apple-darwin10 -mcpu=cortex-a8 -relocation-model=pic
+; PR7484
+
+%struct.gs_matrix = type { float, i32, float, i32, float, i32, float, i32, float, i32, float, i32 }
+
+define fastcc void @func(%struct.gs_matrix* nocapture %pm1) nounwind {
+entry:
+ %0 = getelementptr inbounds %struct.gs_matrix* %pm1, i32 0, i32 6
+ %1 = load float* %0, align 4
+ %2 = getelementptr inbounds %struct.gs_matrix* %pm1, i32 0, i32 8
+ %3 = load float* %2, align 4
+ %4 = getelementptr inbounds %struct.gs_matrix* %pm1, i32 0, i32 2
+ %5 = bitcast float* %4 to i32*
+ %6 = load i32* %5, align 4
+ %7 = or i32 0, %6
+ %.mask = and i32 %7, 2147483647
+ %8 = icmp eq i32 %.mask, 0
+ br i1 %8, label %bb, label %bb11
+
+bb:
+ ret void
+
+bb11:
+ %9 = fmul float %1, undef
+ %10 = fmul float %3, undef
+ ret void
+}