xref: /aosp_15_r20/external/llvm/test/Transforms/MergeFunc/phi-check-blocks.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -mergefunc < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; Ensure that we do not merge functions that are identical with the
4*9880d681SAndroid Build Coastguard Worker; exception of the order of the incoming blocks to a phi.
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define linkonce_odr hidden i1 @first(i2)
7*9880d681SAndroid Build Coastguard Workerdefine linkonce_odr hidden i1 @first(i2) {
8*9880d681SAndroid Build Coastguard Workerentry:
9*9880d681SAndroid Build Coastguard Worker; CHECK: switch i2
10*9880d681SAndroid Build Coastguard Worker  switch i2 %0, label %default [
11*9880d681SAndroid Build Coastguard Worker    i2 0, label %L1
12*9880d681SAndroid Build Coastguard Worker    i2 1, label %L2
13*9880d681SAndroid Build Coastguard Worker    i2 -2, label %L3
14*9880d681SAndroid Build Coastguard Worker  ]
15*9880d681SAndroid Build Coastguard Workerdefault:
16*9880d681SAndroid Build Coastguard Worker  unreachable
17*9880d681SAndroid Build Coastguard WorkerL1:
18*9880d681SAndroid Build Coastguard Worker  br label %done
19*9880d681SAndroid Build Coastguard WorkerL2:
20*9880d681SAndroid Build Coastguard Worker  br label %done
21*9880d681SAndroid Build Coastguard WorkerL3:
22*9880d681SAndroid Build Coastguard Worker  br label %done
23*9880d681SAndroid Build Coastguard Workerdone:
24*9880d681SAndroid Build Coastguard Worker  %result = phi i1 [ true, %L1 ], [ false, %L2 ], [ false, %L3 ]
25*9880d681SAndroid Build Coastguard Worker; CHECK: ret i1
26*9880d681SAndroid Build Coastguard Worker  ret i1 %result
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define linkonce_odr hidden i1 @second(i2)
30*9880d681SAndroid Build Coastguard Workerdefine linkonce_odr hidden i1 @second(i2) {
31*9880d681SAndroid Build Coastguard Workerentry:
32*9880d681SAndroid Build Coastguard Worker; CHECK: switch i2
33*9880d681SAndroid Build Coastguard Worker  switch i2 %0, label %default [
34*9880d681SAndroid Build Coastguard Worker    i2 0, label %L1
35*9880d681SAndroid Build Coastguard Worker    i2 1, label %L2
36*9880d681SAndroid Build Coastguard Worker    i2 -2, label %L3
37*9880d681SAndroid Build Coastguard Worker  ]
38*9880d681SAndroid Build Coastguard Workerdefault:
39*9880d681SAndroid Build Coastguard Worker  unreachable
40*9880d681SAndroid Build Coastguard WorkerL1:
41*9880d681SAndroid Build Coastguard Worker  br label %done
42*9880d681SAndroid Build Coastguard WorkerL2:
43*9880d681SAndroid Build Coastguard Worker  br label %done
44*9880d681SAndroid Build Coastguard WorkerL3:
45*9880d681SAndroid Build Coastguard Worker  br label %done
46*9880d681SAndroid Build Coastguard Workerdone:
47*9880d681SAndroid Build Coastguard Worker  %result = phi i1 [ true, %L3 ], [ false, %L2 ], [ false, %L1 ]
48*9880d681SAndroid Build Coastguard Worker; CHECK: ret i1
49*9880d681SAndroid Build Coastguard Worker  ret i1 %result
50*9880d681SAndroid Build Coastguard Worker}
51