xref: /aosp_15_r20/external/llvm/test/Transforms/SimplifyCFG/PhiEliminate3.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test merging of blocks containing complex expressions,
2*9880d681SAndroid Build Coastguard Worker; with various folding thresholds
3*9880d681SAndroid Build Coastguard Worker;
4*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -simplifycfg -S -phi-node-folding-threshold=1 | grep N:
5*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -simplifycfg -S -phi-node-folding-threshold=2 | not grep N:
6*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -simplifycfg -S -phi-node-folding-threshold=2 | grep M:
7*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -simplifycfg -S -phi-node-folding-threshold=7 | not grep M:
8*9880d681SAndroid Build Coastguard Worker;
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine i32 @test(i1 %a, i1 %b, i32 %i, i32 %j, i32 %k) {
11*9880d681SAndroid Build Coastguard Workerentry:
12*9880d681SAndroid Build Coastguard Worker        br i1 %a, label %M, label %O
13*9880d681SAndroid Build Coastguard WorkerO:
14*9880d681SAndroid Build Coastguard Worker        br i1 %b, label %P, label %Q
15*9880d681SAndroid Build Coastguard WorkerP:
16*9880d681SAndroid Build Coastguard Worker        %iaj = add i32 %i, %j
17*9880d681SAndroid Build Coastguard Worker        %iajak = add i32 %iaj, %k
18*9880d681SAndroid Build Coastguard Worker        br label %N
19*9880d681SAndroid Build Coastguard WorkerQ:
20*9880d681SAndroid Build Coastguard Worker        %ixj = xor i32 %i, %j
21*9880d681SAndroid Build Coastguard Worker        %ixjxk = xor i32 %ixj, %k
22*9880d681SAndroid Build Coastguard Worker        br label %N
23*9880d681SAndroid Build Coastguard WorkerN:
24*9880d681SAndroid Build Coastguard Worker        ; This phi should be foldable if threshold >= 2
25*9880d681SAndroid Build Coastguard Worker        %Wp = phi i32 [ %iajak, %P ], [ %ixjxk, %Q ]
26*9880d681SAndroid Build Coastguard Worker        %Wp2 = add i32 %Wp, %Wp
27*9880d681SAndroid Build Coastguard Worker        br label %M
28*9880d681SAndroid Build Coastguard WorkerM:
29*9880d681SAndroid Build Coastguard Worker        ; This phi should be foldable if threshold >= 7
30*9880d681SAndroid Build Coastguard Worker        %W = phi i32 [ %Wp2, %N ], [ 2, %entry ]
31*9880d681SAndroid Build Coastguard Worker        %R = add i32 %W, 1
32*9880d681SAndroid Build Coastguard Worker        ret i32 %R
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Worker
35