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.

llvm-svn: 16972
This commit is contained in:
Chris Lattner 2004-10-14 05:12:50 +00:00
parent 69812714cd
commit 6299141c4e
1 changed files with 29 additions and 0 deletions

View File

@ -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()