When converting phi nodes into select instructions, we shouldn't promote PHI
authorChris Lattner <sabre@nondot.org>
Thu, 14 Oct 2004 05:12:50 +0000 (05:12 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 14 Oct 2004 05:12:50 +0000 (05:12 +0000)
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

test/Transforms/SimplifyCFG/PhiNoEliminate.ll [new file with mode: 0644]

diff --git a/test/Transforms/SimplifyCFG/PhiNoEliminate.ll b/test/Transforms/SimplifyCFG/PhiNoEliminate.ll
new file mode 100644 (file)
index 0000000..6e7c9f5
--- /dev/null
@@ -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()
+