xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/fast-isel-select.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=ARM
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-linux-gnueabi | FileCheck %s --check-prefix=ARM
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=THUMB
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv8-apple-ios | FileCheck %s --check-prefix=THUMB
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine i32 @t1(i1 %c) nounwind readnone {
7*9880d681SAndroid Build Coastguard Workerentry:
8*9880d681SAndroid Build Coastguard Worker; ARM: t1
9*9880d681SAndroid Build Coastguard Worker; ARM: movw r{{[1-9]}}, #10
10*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1
11*9880d681SAndroid Build Coastguard Worker; ARM: moveq r{{[1-9]}}, #20
12*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r{{[1-9]}}
13*9880d681SAndroid Build Coastguard Worker; THUMB: t1
14*9880d681SAndroid Build Coastguard Worker; THUMB: movs r{{[1-9]}}, #10
15*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1
16*9880d681SAndroid Build Coastguard Worker; THUMB: it eq
17*9880d681SAndroid Build Coastguard Worker; THUMB: moveq r{{[1-9]}}, #20
18*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r{{[1-9]}}
19*9880d681SAndroid Build Coastguard Worker  %0 = select i1 %c, i32 10, i32 20
20*9880d681SAndroid Build Coastguard Worker  ret i32 %0
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdefine i32 @t2(i1 %c, i32 %a) nounwind readnone {
24*9880d681SAndroid Build Coastguard Workerentry:
25*9880d681SAndroid Build Coastguard Worker; ARM: t2
26*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1
27*9880d681SAndroid Build Coastguard Worker; ARM: moveq r{{[1-9]}}, #20
28*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r{{[1-9]}}
29*9880d681SAndroid Build Coastguard Worker; THUMB: t2
30*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1
31*9880d681SAndroid Build Coastguard Worker; THUMB: it eq
32*9880d681SAndroid Build Coastguard Worker; THUMB: moveq r{{[1-9]}}, #20
33*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r{{[1-9]}}
34*9880d681SAndroid Build Coastguard Worker  %0 = select i1 %c, i32 %a, i32 20
35*9880d681SAndroid Build Coastguard Worker  ret i32 %0
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerdefine i32 @t3(i1 %c, i32 %a, i32 %b) nounwind readnone {
39*9880d681SAndroid Build Coastguard Workerentry:
40*9880d681SAndroid Build Coastguard Worker; ARM: t3
41*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1
42*9880d681SAndroid Build Coastguard Worker; ARM: movne r2, r1
43*9880d681SAndroid Build Coastguard Worker; ARM: add r0, r2, r1
44*9880d681SAndroid Build Coastguard Worker; THUMB: t3
45*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1
46*9880d681SAndroid Build Coastguard Worker; THUMB: it ne
47*9880d681SAndroid Build Coastguard Worker; THUMB: movne r2, r1
48*9880d681SAndroid Build Coastguard Worker; THUMB: add.w r0, r2, r1
49*9880d681SAndroid Build Coastguard Worker  %0 = select i1 %c, i32 %a, i32 %b
50*9880d681SAndroid Build Coastguard Worker  %1 = add i32 %0, %a
51*9880d681SAndroid Build Coastguard Worker  ret i32 %1
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdefine i32 @t4(i1 %c) nounwind readnone {
55*9880d681SAndroid Build Coastguard Workerentry:
56*9880d681SAndroid Build Coastguard Worker; ARM: t4
57*9880d681SAndroid Build Coastguard Worker; ARM: mvn r{{[1-9]}}, #9
58*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1
59*9880d681SAndroid Build Coastguard Worker; ARM: mvneq r{{[1-9]}}, #0
60*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r{{[1-9]}}
61*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t4
62*9880d681SAndroid Build Coastguard Worker; THUMB: mvn [[REG:r[1-9]+]], #9
63*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1
64*9880d681SAndroid Build Coastguard Worker; THUMB: it eq
65*9880d681SAndroid Build Coastguard Worker; THUMB: mvneq [[REG]], #0
66*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, [[REG]]
67*9880d681SAndroid Build Coastguard Worker  %0 = select i1 %c, i32 -10, i32 -1
68*9880d681SAndroid Build Coastguard Worker  ret i32 %0
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Workerdefine i32 @t5(i1 %c, i32 %a) nounwind readnone {
72*9880d681SAndroid Build Coastguard Workerentry:
73*9880d681SAndroid Build Coastguard Worker; ARM: t5
74*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1
75*9880d681SAndroid Build Coastguard Worker; ARM: mvneq r{{[1-9]}}, #1
76*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r{{[1-9]}}
77*9880d681SAndroid Build Coastguard Worker; THUMB: t5
78*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1
79*9880d681SAndroid Build Coastguard Worker; THUMB: it eq
80*9880d681SAndroid Build Coastguard Worker; THUMB: mvneq r{{[1-9]}}, #1
81*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r{{[1-9]}}
82*9880d681SAndroid Build Coastguard Worker  %0 = select i1 %c, i32 %a, i32 -2
83*9880d681SAndroid Build Coastguard Worker  ret i32 %0
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Worker; Check one large negative immediates.
87*9880d681SAndroid Build Coastguard Workerdefine i32 @t6(i1 %c, i32 %a) nounwind readnone {
88*9880d681SAndroid Build Coastguard Workerentry:
89*9880d681SAndroid Build Coastguard Worker; ARM: t6
90*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1
91*9880d681SAndroid Build Coastguard Worker; ARM: mvneq r{{[1-9]}}, #978944
92*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r{{[1-9]}}
93*9880d681SAndroid Build Coastguard Worker; THUMB: t6
94*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1
95*9880d681SAndroid Build Coastguard Worker; THUMB: it eq
96*9880d681SAndroid Build Coastguard Worker; THUMB: mvneq r{{[1-9]}}, #978944
97*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r{{[1-9]}}
98*9880d681SAndroid Build Coastguard Worker  %0 = select i1 %c, i32 %a, i32 -978945
99*9880d681SAndroid Build Coastguard Worker  ret i32 %0
100*9880d681SAndroid Build Coastguard Worker}
101