aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGen
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2013-01-09 20:56:40 +0000
committerEvan Cheng <evan.cheng@apple.com>2013-01-09 20:56:40 +0000
commit78ec0255d9ab184af7799c14d93879e5f21b9007 (patch)
tree56c84b8bd23c11613aa352330bee985426c38a8b /test/CodeGen
parentf48acd5ecd2616623f441f2922d8b4c637e3cd6c (diff)
Fix a DAG combine bug visitBRCOND() is transforming br(xor(x, y)) to br(x != y).
It cahced XOR's operands before calling visitXOR() but failed to update the operands when visitXOR changed the XOR node. rdar://12968664 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171999 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen')
-rw-r--r--test/CodeGen/X86/2013-01-09-DAGCombineBug.ll41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/CodeGen/X86/2013-01-09-DAGCombineBug.ll b/test/CodeGen/X86/2013-01-09-DAGCombineBug.ll
new file mode 100644
index 0000000000..db7ec8ae26
--- /dev/null
+++ b/test/CodeGen/X86/2013-01-09-DAGCombineBug.ll
@@ -0,0 +1,41 @@
+; RUN: llc -mtriple=x86_64-apple-macosx10.5.0 < %s
+
+; rdar://12968664
+
+define void @t() nounwind uwtable ssp {
+ br label %4
+
+; <label>:1 ; preds = %4, %2
+ ret void
+
+; <label>:2 ; preds = %6, %5, %3, %2
+ switch i32 undef, label %2 [
+ i32 1090573978, label %1
+ i32 1090573938, label %3
+ i32 1090573957, label %5
+ ]
+
+; <label>:3 ; preds = %4, %2
+ br i1 undef, label %2, label %4
+
+; <label>:4 ; preds = %6, %5, %3, %0
+ switch i32 undef, label %11 [
+ i32 1090573938, label %3
+ i32 1090573957, label %5
+ i32 1090573978, label %1
+ i32 165205179, label %6
+ ]
+
+; <label>:5 ; preds = %4, %2
+ br i1 undef, label %2, label %4
+
+; <label>:6 ; preds = %4
+ %7 = icmp eq i32 undef, 590901838
+ %8 = or i1 false, %7
+ %9 = or i1 true, %8
+ %10 = xor i1 %8, %9
+ br i1 %10, label %4, label %2
+
+; <label>:11 ; preds = %11, %4
+ br label %11
+}