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