blob: 4eef1d6bb988dfb4511a7e2533213bd7e33fe30d [file] [log] [blame]
Mehdi Amini945a6602015-02-27 18:32:11 +00001; 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; 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; 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; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv8-apple-ios | FileCheck %s --check-prefix=THUMB
Chad Rosier7ddd63c2011-11-11 06:20:39 +00005
6define i32 @t1(i1 %c) nounwind readnone {
7entry:
8; ARM: t1
9; ARM: movw r{{[1-9]}}, #10
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000010; ARM: tst r0, #1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000011; ARM: moveq r{{[1-9]}}, #20
12; ARM: mov r0, r{{[1-9]}}
13; THUMB: t1
14; THUMB: movs r{{[1-9]}}, #10
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000015; THUMB: tst.w r0, #1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000016; THUMB: it eq
17; THUMB: moveq r{{[1-9]}}, #20
18; THUMB: mov r0, r{{[1-9]}}
19 %0 = select i1 %c, i32 10, i32 20
20 ret i32 %0
21}
22
23define i32 @t2(i1 %c, i32 %a) nounwind readnone {
24entry:
25; ARM: t2
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000026; ARM: tst r0, #1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000027; ARM: moveq r{{[1-9]}}, #20
28; ARM: mov r0, r{{[1-9]}}
29; THUMB: t2
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000030; THUMB: tst.w r0, #1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000031; THUMB: it eq
32; THUMB: moveq r{{[1-9]}}, #20
33; THUMB: mov r0, r{{[1-9]}}
34 %0 = select i1 %c, i32 %a, i32 20
35 ret i32 %0
36}
37
38define i32 @t3(i1 %c, i32 %a, i32 %b) nounwind readnone {
39entry:
40; ARM: t3
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000041; ARM: tst r0, #1
Jim Grosbach71a78f92013-08-20 19:12:42 +000042; ARM: movne r2, r1
43; ARM: add r0, r2, r1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000044; THUMB: t3
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000045; THUMB: tst.w r0, #1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000046; THUMB: it ne
Jim Grosbach71a78f92013-08-20 19:12:42 +000047; THUMB: movne r2, r1
48; THUMB: add.w r0, r2, r1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000049 %0 = select i1 %c, i32 %a, i32 %b
Jim Grosbach71a78f92013-08-20 19:12:42 +000050 %1 = add i32 %0, %a
51 ret i32 %1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000052}
53
54define i32 @t4(i1 %c) nounwind readnone {
55entry:
56; ARM: t4
57; ARM: mvn r{{[1-9]}}, #9
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000058; ARM: tst r0, #1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000059; ARM: mvneq r{{[1-9]}}, #0
60; ARM: mov r0, r{{[1-9]}}
Juergen Ributzka4bf6c012014-08-19 19:05:24 +000061; THUMB-LABEL: t4
62; THUMB: mvn [[REG:r[1-9]+]], #9
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000063; THUMB: tst.w r0, #1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000064; THUMB: it eq
Juergen Ributzka4bf6c012014-08-19 19:05:24 +000065; THUMB: mvneq [[REG]], #0
66; THUMB: mov r0, [[REG]]
Chad Rosier7ddd63c2011-11-11 06:20:39 +000067 %0 = select i1 %c, i32 -10, i32 -1
68 ret i32 %0
69}
70
71define i32 @t5(i1 %c, i32 %a) nounwind readnone {
72entry:
73; ARM: t5
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000074; ARM: tst r0, #1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000075; ARM: mvneq r{{[1-9]}}, #1
76; ARM: mov r0, r{{[1-9]}}
77; THUMB: t5
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000078; THUMB: tst.w r0, #1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000079; THUMB: it eq
80; THUMB: mvneq r{{[1-9]}}, #1
81; THUMB: mov r0, r{{[1-9]}}
82 %0 = select i1 %c, i32 %a, i32 -2
83 ret i32 %0
84}
85
86; Check one large negative immediates.
87define i32 @t6(i1 %c, i32 %a) nounwind readnone {
88entry:
89; ARM: t6
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000090; ARM: tst r0, #1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000091; ARM: mvneq r{{[1-9]}}, #978944
92; ARM: mov r0, r{{[1-9]}}
93; THUMB: t6
Ahmed Bougachae8d0c4c2015-05-06 04:14:02 +000094; THUMB: tst.w r0, #1
Chad Rosier7ddd63c2011-11-11 06:20:39 +000095; THUMB: it eq
96; THUMB: mvneq r{{[1-9]}}, #978944
97; THUMB: mov r0, r{{[1-9]}}
98 %0 = select i1 %c, i32 %a, i32 -978945
99 ret i32 %0
100}