aboutsummaryrefslogtreecommitdiffstats
path: root/test/Transforms/GVN/2010-03-31-RedundantPHIs.ll
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2010-04-17 03:08:24 +0000
committerBob Wilson <bob.wilson@apple.com>2010-04-17 03:08:24 +0000
commit84bd6b0c31f41cdd1d859dab54b6bc1177c4c6bb (patch)
treebf31667194458144634432af4f95bd8b3f088c1c /test/Transforms/GVN/2010-03-31-RedundantPHIs.ll
parent8295d4c96c8530acb7ae0098d813b53dc4fe0a89 (diff)
downloadexternal_llvm-84bd6b0c31f41cdd1d859dab54b6bc1177c4c6bb.zip
external_llvm-84bd6b0c31f41cdd1d859dab54b6bc1177c4c6bb.tar.gz
external_llvm-84bd6b0c31f41cdd1d859dab54b6bc1177c4c6bb.tar.bz2
Re-commit my previous SSAUpdater changes. The previous version naively tried
to determine where to place PHIs by iteratively comparing reaching definitions at each block. That was just plain wrong. This version now computes the dominator tree within the subset of the CFG where PHIs may need to be placed, and then places the PHIs in the iterated dominance frontier of each definition. The rest of the patch is mostly the same, with a few more performance improvements added in. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101612 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/GVN/2010-03-31-RedundantPHIs.ll')
-rw-r--r--test/Transforms/GVN/2010-03-31-RedundantPHIs.ll46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/Transforms/GVN/2010-03-31-RedundantPHIs.ll b/test/Transforms/GVN/2010-03-31-RedundantPHIs.ll
new file mode 100644
index 0000000..066e303
--- /dev/null
+++ b/test/Transforms/GVN/2010-03-31-RedundantPHIs.ll
@@ -0,0 +1,46 @@
+; RUN: opt < %s -gvn -enable-full-load-pre -S | FileCheck %s
+
+define i8* @cat(i8* %s1, ...) nounwind {
+entry:
+ br i1 undef, label %bb, label %bb3
+
+bb: ; preds = %entry
+ unreachable
+
+bb3: ; preds = %entry
+ store i8* undef, i8** undef, align 4
+ br i1 undef, label %bb5, label %bb6
+
+bb5: ; preds = %bb3
+ unreachable
+
+bb6: ; preds = %bb3
+ br label %bb12
+
+bb8: ; preds = %bb12
+ br i1 undef, label %bb9, label %bb10
+
+bb9: ; preds = %bb8
+ %0 = load i8** undef, align 4 ; <i8*> [#uses=0]
+ %1 = load i8** undef, align 4 ; <i8*> [#uses=0]
+ br label %bb11
+
+bb10: ; preds = %bb8
+ br label %bb11
+
+bb11: ; preds = %bb10, %bb9
+; CHECK: bb11:
+; CHECK: phi
+; CHECK-NOT: phi
+ br label %bb12
+
+bb12: ; preds = %bb11, %bb6
+; CHECK: bb12:
+; CHECK: phi
+; CHECK-NOT: phi
+ br i1 undef, label %bb8, label %bb13
+
+bb13: ; preds = %bb12
+; CHECK: bb13:
+ ret i8* undef
+}