aboutsummaryrefslogtreecommitdiffstats
path: root/test/CodeGen/X86/2010-02-04-SchedulerBug.ll
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2010-02-05 01:27:11 +0000
committerEvan Cheng <evan.cheng@apple.com>2010-02-05 01:27:11 +0000
commit5ba8bf6d28ad350114a4b02f01d70ebe08612cfe (patch)
treebf16c58a92568d5c5f173fdd0b6a2ba51cff7e6a /test/CodeGen/X86/2010-02-04-SchedulerBug.ll
parent744f579b63987854ac1b3f2f9c8d2659c5b5ee40 (diff)
downloadexternal_llvm-5ba8bf6d28ad350114a4b02f01d70ebe08612cfe.zip
external_llvm-5ba8bf6d28ad350114a4b02f01d70ebe08612cfe.tar.gz
external_llvm-5ba8bf6d28ad350114a4b02f01d70ebe08612cfe.tar.bz2
When the scheduler unfold a load folding instruction it move some of the predecessors to the unfolded load. It decides what gets moved to the load by checking whether the new load is using the predecessor as an operand. The check neglects the cases whether the predecessor is a flagged scheduling unit.
rdar://7604000 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95339 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/2010-02-04-SchedulerBug.ll')
-rw-r--r--test/CodeGen/X86/2010-02-04-SchedulerBug.ll28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/CodeGen/X86/2010-02-04-SchedulerBug.ll b/test/CodeGen/X86/2010-02-04-SchedulerBug.ll
new file mode 100644
index 0000000..c966e21d
--- /dev/null
+++ b/test/CodeGen/X86/2010-02-04-SchedulerBug.ll
@@ -0,0 +1,28 @@
+; RUN: llc < %s -mtriple=i386-apple-darwin11
+; rdar://7604000
+
+%struct.a_t = type { i8*, i64*, i8*, i32, i32, i64*, i64*, i64* }
+%struct.b_t = type { i32, i32, i32, i32, i64, i64, i64, i64 }
+
+define void @t(i32 %cNum, i64 %max) nounwind optsize ssp noimplicitfloat {
+entry:
+ %0 = load %struct.b_t** null, align 4 ; <%struct.b_t*> [#uses=1]
+ %1 = getelementptr inbounds %struct.b_t* %0, i32 %cNum, i32 5 ; <i64*> [#uses=1]
+ %2 = load i64* %1, align 4 ; <i64> [#uses=1]
+ %3 = icmp ult i64 %2, %max ; <i1> [#uses=1]
+ %4 = getelementptr inbounds %struct.a_t* null, i32 0, i32 7 ; <i64**> [#uses=1]
+ %5 = load i64** %4, align 4 ; <i64*> [#uses=0]
+ %6 = load i64* null, align 4 ; <i64> [#uses=1]
+ br i1 %3, label %bb2, label %bb
+
+bb: ; preds = %entry
+ br label %bb3
+
+bb2: ; preds = %entry
+ %7 = or i64 %6, undef ; <i64> [#uses=1]
+ br label %bb3
+
+bb3: ; preds = %bb2, %bb
+ %misc_enables.0 = phi i64 [ undef, %bb ], [ %7, %bb2 ] ; <i64> [#uses=0]
+ ret void
+}