aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-10-14 05:12:50 +0000
committerChris Lattner <sabre@nondot.org>2004-10-14 05:12:50 +0000
commit1c7efba2bddd6b17326a012d7bb77f3cf9668078 (patch)
tree3b770ba76f84ac343b372d572fca80d151ead60d
parent83d3aad50e64704109d9fd745b799f3c5bf0f412 (diff)
When converting phi nodes into select instructions, we shouldn't promote PHI
nodes unless we KNOW that we are able to promote all of them. In this case promoting the phi to a select is silly because we will always have to do the call conditionally. As such, select promotion is actually a pessimization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16972 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--test/Transforms/SimplifyCFG/PhiNoEliminate.ll29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/Transforms/SimplifyCFG/PhiNoEliminate.ll b/test/Transforms/SimplifyCFG/PhiNoEliminate.ll
new file mode 100644
index 0000000000..6e7c9f5e78
--- /dev/null
+++ b/test/Transforms/SimplifyCFG/PhiNoEliminate.ll
@@ -0,0 +1,29 @@
+; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | not grep select
+
+;; The PHI node in this example should not be turned into a select, as we are
+;; not able to ifcvt the entire block. As such, converting to a select just
+;; introduces inefficiency without saving copies.
+
+int %bar(bool %C) {
+entry:
+ br bool %C, label %then, label %endif
+
+then:
+ %tmp.3 = call int %qux()
+ br label %endif
+
+endif:
+ %R = phi int [123, %entry], [12312, %then]
+ ;; stuff to disable tail duplication
+ call int %qux()
+ call int %qux()
+ call int %qux()
+ call int %qux()
+ call int %qux()
+ call int %qux()
+ call int %qux()
+ ret int %R
+}
+
+declare int %qux()
+