xref: /aosp_15_r20/external/llvm/test/Transforms/SimplifyCFG/PhiNoEliminate.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -simplifycfg -S | \
2*9880d681SAndroid Build Coastguard Worker; RUN:   not grep select
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker;; The PHI node in this example should not be turned into a select, as we are
5*9880d681SAndroid Build Coastguard Worker;; not able to ifcvt the entire block.  As such, converting to a select just
6*9880d681SAndroid Build Coastguard Worker;; introduces inefficiency without saving copies.
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine i32 @bar(i1 %C) {
9*9880d681SAndroid Build Coastguard Workerentry:
10*9880d681SAndroid Build Coastguard Worker        br i1 %C, label %then, label %endif
11*9880d681SAndroid Build Coastguard Workerthen:           ; preds = %entry
12*9880d681SAndroid Build Coastguard Worker        %tmp.3 = call i32 @qux( )               ; <i32> [#uses=0]
13*9880d681SAndroid Build Coastguard Worker        br label %endif
14*9880d681SAndroid Build Coastguard Workerendif:          ; preds = %then, %entry
15*9880d681SAndroid Build Coastguard Worker        %R = phi i32 [ 123, %entry ], [ 12312, %then ]          ; <i32> [#uses=1]
16*9880d681SAndroid Build Coastguard Worker        ;; stuff to disable tail duplication
17*9880d681SAndroid Build Coastguard Worker        call i32 @qux( )                ; <i32>:0 [#uses=0]
18*9880d681SAndroid Build Coastguard Worker        call i32 @qux( )                ; <i32>:1 [#uses=0]
19*9880d681SAndroid Build Coastguard Worker        call i32 @qux( )                ; <i32>:2 [#uses=0]
20*9880d681SAndroid Build Coastguard Worker        call i32 @qux( )                ; <i32>:3 [#uses=0]
21*9880d681SAndroid Build Coastguard Worker        call i32 @qux( )                ; <i32>:4 [#uses=0]
22*9880d681SAndroid Build Coastguard Worker        call i32 @qux( )                ; <i32>:5 [#uses=0]
23*9880d681SAndroid Build Coastguard Worker        call i32 @qux( )                ; <i32>:6 [#uses=0]
24*9880d681SAndroid Build Coastguard Worker        ret i32 %R
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerdeclare i32 @qux()
28