blob: 809dc6cc6ba129a213dfe656f33f5655fc2d33e3 [file] [log] [blame]
Sjoerd Meijer96e10b52016-12-15 09:38:59 +00001; RUN: llc -mtriple=thumbv7m-linux-gnu < %s | FileCheck %s --check-prefix=CHECK --check-prefix=T2
2; RUN: llc -mtriple=thumbv6m-linux-gnu < %s | FileCheck %s --check-prefix=CHECK --check-prefix=T1
3
4; CHECK-LABEL: single_bit:
5; CHECK: lsls r0, r0, #23
6; T2-NEXT: mov
7; T2-NEXT: it
8; T1-NEXT: bmi
9define i32 @single_bit(i32 %p) {
10 %a = and i32 %p, 256
11 %b = icmp eq i32 %a, 0
12 br i1 %b, label %true, label %false
13
14true:
15 ret i32 1
16
17false:
18 ret i32 2
19}
20
21; CHECK-LABEL: multi_bit_lsb_ubfx:
22; CHECK: lsls r0, r0, #24
23; T2-NEXT: mov
24; T2-NEXT: it
25; T1-NEXT: beq
26define i32 @multi_bit_lsb_ubfx(i32 %p) {
27 %a = and i32 %p, 255
28 %b = icmp eq i32 %a, 0
29 br i1 %b, label %true, label %false
30
31true:
32 ret i32 1
33
34false:
35 ret i32 2
36}
37
38; CHECK-LABEL: multi_bit_msb:
39; CHECK: lsrs r0, r0, #24
40; T2-NEXT: mov
41; T2-NEXT: it
42; T1-NEXT: beq
43define i32 @multi_bit_msb(i32 %p) {
44 %a = and i32 %p, 4278190080 ; 0xff000000
45 %b = icmp eq i32 %a, 0
46 br i1 %b, label %true, label %false
47
48true:
49 ret i32 1
50
51false:
52 ret i32 2
53}
54
55; CHECK-LABEL: multi_bit_nosb:
56; T1: lsls r0, r0, #8
57; T1-NEXT: lsrs r0, r0, #24
58; T2: tst.w
59; T2-NEXT: it
60; T1-NEXT: beq
61define i32 @multi_bit_nosb(i32 %p) {
62 %a = and i32 %p, 16711680 ; 0x00ff0000
63 %b = icmp eq i32 %a, 0
64 br i1 %b, label %true, label %false
65
66true:
67 ret i32 1
68
69false:
70 ret i32 2
71}