xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/directcond.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -verify-machineinstrs -o - %s -mtriple=arm64-apple-ios7.0 -aarch64-atomic-cfg-tidy=0 | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -mattr=-fp-armv8 -aarch64-atomic-cfg-tidy=0 | FileCheck --check-prefix=CHECK-NOFP %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine i32 @test_select_i32(i1 %bit, i32 %a, i32 %b) {
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_select_i32:
6*9880d681SAndroid Build Coastguard Worker  %val = select i1 %bit, i32 %a, i32 %b
7*9880d681SAndroid Build Coastguard Worker; CHECK: tst w0, #0x1
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: csel w0, w1, w2, ne
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker  ret i32 %val
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerdefine i64 @test_select_i64(i1 %bit, i64 %a, i64 %b) {
14*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_select_i64:
15*9880d681SAndroid Build Coastguard Worker  %val = select i1 %bit, i64 %a, i64 %b
16*9880d681SAndroid Build Coastguard Worker; CHECK: tst w0, #0x1
17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: csel x0, x1, x2, ne
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker  ret i64 %val
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerdefine float @test_select_float(i1 %bit, float %a, float %b) {
23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_select_float:
24*9880d681SAndroid Build Coastguard Worker  %val = select i1 %bit, float %a, float %b
25*9880d681SAndroid Build Coastguard Worker; CHECK: tst w0, #0x1
26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcsel s0, s0, s1, ne
27*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-NOT: fcsel
28*9880d681SAndroid Build Coastguard Worker  ret float %val
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdefine double @test_select_double(i1 %bit, double %a, double %b) {
32*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_select_double:
33*9880d681SAndroid Build Coastguard Worker  %val = select i1 %bit, double %a, double %b
34*9880d681SAndroid Build Coastguard Worker; CHECK: tst w0, #0x1
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcsel d0, d0, d1, ne
36*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-NOT: fcsel
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker  ret double %val
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine i32 @test_brcond(i1 %bit) {
42*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_brcond:
43*9880d681SAndroid Build Coastguard Worker  br i1 %bit, label %true, label %false
44*9880d681SAndroid Build Coastguard Worker; CHECK: tbz {{w[0-9]+}}, #0, {{.?LBB}}
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workertrue:
47*9880d681SAndroid Build Coastguard Worker  ret i32 0
48*9880d681SAndroid Build Coastguard Workerfalse:
49*9880d681SAndroid Build Coastguard Worker  ret i32 42
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerdefine i1 @test_setcc_float(float %lhs, float %rhs) {
53*9880d681SAndroid Build Coastguard Worker; CHECK: test_setcc_float
54*9880d681SAndroid Build Coastguard Worker  %val = fcmp oeq float %lhs, %rhs
55*9880d681SAndroid Build Coastguard Worker; CHECK: fcmp s0, s1
56*9880d681SAndroid Build Coastguard Worker; CHECK: cset w0, eq
57*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-NOT: fcmp
58*9880d681SAndroid Build Coastguard Worker  ret i1 %val
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdefine i1 @test_setcc_double(double %lhs, double %rhs) {
62*9880d681SAndroid Build Coastguard Worker; CHECK: test_setcc_double
63*9880d681SAndroid Build Coastguard Worker  %val = fcmp oeq double %lhs, %rhs
64*9880d681SAndroid Build Coastguard Worker; CHECK: fcmp d0, d1
65*9880d681SAndroid Build Coastguard Worker; CHECK: cset w0, eq
66*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-NOT: fcmp
67*9880d681SAndroid Build Coastguard Worker  ret i1 %val
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerdefine i1 @test_setcc_i32(i32 %lhs, i32 %rhs) {
71*9880d681SAndroid Build Coastguard Worker; CHECK: test_setcc_i32
72*9880d681SAndroid Build Coastguard Worker  %val = icmp ugt i32 %lhs, %rhs
73*9880d681SAndroid Build Coastguard Worker; CHECK: cmp w0, w1
74*9880d681SAndroid Build Coastguard Worker; CHECK: cset w0, hi
75*9880d681SAndroid Build Coastguard Worker  ret i1 %val
76*9880d681SAndroid Build Coastguard Worker}
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Workerdefine i1 @test_setcc_i64(i64 %lhs, i64 %rhs) {
79*9880d681SAndroid Build Coastguard Worker; CHECK: test_setcc_i64
80*9880d681SAndroid Build Coastguard Worker  %val = icmp ne i64 %lhs, %rhs
81*9880d681SAndroid Build Coastguard Worker; CHECK: cmp x0, x1
82*9880d681SAndroid Build Coastguard Worker; CHECK: cset w0, ne
83*9880d681SAndroid Build Coastguard Worker  ret i1 %val
84*9880d681SAndroid Build Coastguard Worker}
85