xref: /aosp_15_r20/external/llvm/test/Transforms/SimplifyCFG/PhiBlockMerge.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by update_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; Test merging of blocks that only have PHI nodes in them
3*9880d681SAndroid Build Coastguard Worker;
4*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -simplifycfg -S | FileCheck %s
5*9880d681SAndroid Build Coastguard Worker;
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine i32 @test(i1 %a, i1 %b) {
8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test(
9*9880d681SAndroid Build Coastguard Worker; CHECK:       M:
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[DOT:%.*]] = select i1 %b, i32 0, i32 1
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[W:%.*]] = select i1 %a, i32 2, i32 [[DOT]]
12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = add i32 [[W]], 1
13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i32 [[R]]
14*9880d681SAndroid Build Coastguard Worker;
15*9880d681SAndroid Build Coastguard Worker  br i1 %a, label %M, label %O
16*9880d681SAndroid Build Coastguard WorkerO:              ; preds = %0
17*9880d681SAndroid Build Coastguard Worker  br i1 %b, label %N, label %Q
18*9880d681SAndroid Build Coastguard WorkerQ:              ; preds = %O
19*9880d681SAndroid Build Coastguard Worker  br label %N
20*9880d681SAndroid Build Coastguard WorkerN:              ; preds = %Q, %O
21*9880d681SAndroid Build Coastguard Worker  ; This block should be foldable into M
22*9880d681SAndroid Build Coastguard Worker  %Wp = phi i32 [ 0, %O ], [ 1, %Q ]              ; <i32> [#uses=1]
23*9880d681SAndroid Build Coastguard Worker  br label %M
24*9880d681SAndroid Build Coastguard WorkerM:              ; preds = %N, %0
25*9880d681SAndroid Build Coastguard Worker  %W = phi i32 [ %Wp, %N ], [ 2, %0 ]             ; <i32> [#uses=1]
26*9880d681SAndroid Build Coastguard Worker  %R = add i32 %W, 1              ; <i32> [#uses=1]
27*9880d681SAndroid Build Coastguard Worker  ret i32 %R
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30