xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/machine_cse.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=aarch64-linux-gnuabi -O2 | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; marked as external to prevent possible optimizations
4*9880d681SAndroid Build Coastguard Worker@a = external global i32
5*9880d681SAndroid Build Coastguard Worker@b = external global i32
6*9880d681SAndroid Build Coastguard Worker@c = external global i32
7*9880d681SAndroid Build Coastguard Worker@d = external global i32
8*9880d681SAndroid Build Coastguard Worker@e = external global i32
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine void @combine-sign-comparisons-by-cse(i32 *%arg) {
11*9880d681SAndroid Build Coastguard Worker; CHECK: cmp
12*9880d681SAndroid Build Coastguard Worker; CHECK: b.ge
13*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
14*9880d681SAndroid Build Coastguard Worker; CHECK: b.le
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerentry:
17*9880d681SAndroid Build Coastguard Worker  %a = load i32, i32* @a, align 4
18*9880d681SAndroid Build Coastguard Worker  %b = load i32, i32* @b, align 4
19*9880d681SAndroid Build Coastguard Worker  %c = load i32, i32* @c, align 4
20*9880d681SAndroid Build Coastguard Worker  %d = load i32, i32* @d, align 4
21*9880d681SAndroid Build Coastguard Worker  %e = load i32, i32* @e, align 4
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %a, %e
24*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %land.lhs.true, label %lor.lhs.false
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerland.lhs.true:
27*9880d681SAndroid Build Coastguard Worker  %cmp1 = icmp eq i32 %b, %c
28*9880d681SAndroid Build Coastguard Worker  br i1 %cmp1, label %return, label %if.end
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerlor.lhs.false:
31*9880d681SAndroid Build Coastguard Worker  %cmp2 = icmp sgt i32 %a, %e
32*9880d681SAndroid Build Coastguard Worker  br i1 %cmp2, label %land.lhs.true3, label %if.end
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerland.lhs.true3:
35*9880d681SAndroid Build Coastguard Worker  %cmp4 = icmp eq i32 %b, %d
36*9880d681SAndroid Build Coastguard Worker  br i1 %cmp4, label %return, label %if.end
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerif.end:
39*9880d681SAndroid Build Coastguard Worker  br label %return
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerreturn:
42*9880d681SAndroid Build Coastguard Worker  %retval.0 = phi i32 [ 0, %if.end ], [ 1, %land.lhs.true3 ], [ 1, %land.lhs.true ]
43*9880d681SAndroid Build Coastguard Worker  store i32 %a, i32 *%arg
44*9880d681SAndroid Build Coastguard Worker  ret void
45*9880d681SAndroid Build Coastguard Worker}
46