[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / srem-seteq-illegal-types.ll
blob58bafebd5b702fc94001338b213b83d90c20a1e1
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv7-none-eabi < %s | FileCheck %s
4 define i1 @test_srem_odd(i29 %X) nounwind {
5 ; CHECK-LABEL: test_srem_odd:
6 ; CHECK:       @ %bb.0:
7 ; CHECK-NEXT:    movw r1, #24493
8 ; CHECK-NEXT:    movw r2, #33099
9 ; CHECK-NEXT:    movt r1, #41
10 ; CHECK-NEXT:    movt r2, #8026
11 ; CHECK-NEXT:    mla r0, r0, r2, r1
12 ; CHECK-NEXT:    movw r2, #48987
13 ; CHECK-NEXT:    movt r2, #82
14 ; CHECK-NEXT:    bic r1, r0, #-536870912
15 ; CHECK-NEXT:    movs r0, #0
16 ; CHECK-NEXT:    cmp r1, r2
17 ; CHECK-NEXT:    it lo
18 ; CHECK-NEXT:    movlo r0, #1
19 ; CHECK-NEXT:    bx lr
20   %srem = srem i29 %X, 99
21   %cmp = icmp eq i29 %srem, 0
22   ret i1 %cmp
25 define i1 @test_srem_even(i4 %X) nounwind {
26 ; CHECK-LABEL: test_srem_even:
27 ; CHECK:       @ %bb.0:
28 ; CHECK-NEXT:    sbfx r1, r0, #0, #4
29 ; CHECK-NEXT:    add.w r1, r1, r1, lsl #1
30 ; CHECK-NEXT:    ubfx r2, r1, #7, #1
31 ; CHECK-NEXT:    add.w r1, r2, r1, lsr #4
32 ; CHECK-NEXT:    add.w r1, r1, r1, lsl #1
33 ; CHECK-NEXT:    sub.w r0, r0, r1, lsl #1
34 ; CHECK-NEXT:    and r0, r0, #15
35 ; CHECK-NEXT:    subs r0, #1
36 ; CHECK-NEXT:    clz r0, r0
37 ; CHECK-NEXT:    lsrs r0, r0, #5
38 ; CHECK-NEXT:    bx lr
39   %srem = srem i4 %X, 6
40   %cmp = icmp eq i4 %srem, 1
41   ret i1 %cmp
44 define i1 @test_srem_pow2_setne(i6 %X) nounwind {
45 ; CHECK-LABEL: test_srem_pow2_setne:
46 ; CHECK:       @ %bb.0:
47 ; CHECK-NEXT:    sbfx r1, r0, #0, #6
48 ; CHECK-NEXT:    ubfx r1, r1, #9, #2
49 ; CHECK-NEXT:    add r1, r0
50 ; CHECK-NEXT:    and r1, r1, #60
51 ; CHECK-NEXT:    subs r0, r0, r1
52 ; CHECK-NEXT:    ands r0, r0, #63
53 ; CHECK-NEXT:    it ne
54 ; CHECK-NEXT:    movne r0, #1
55 ; CHECK-NEXT:    bx lr
56   %srem = srem i6 %X, 4
57   %cmp = icmp ne i6 %srem, 0
58   ret i1 %cmp
61 define <3 x i1> @test_srem_vec(<3 x i33> %X) nounwind {
62 ; CHECK-LABEL: test_srem_vec:
63 ; CHECK:       @ %bb.0:
64 ; CHECK-NEXT:    .save {r4, r5, r6, r7, lr}
65 ; CHECK-NEXT:    push {r4, r5, r6, r7, lr}
66 ; CHECK-NEXT:    .pad #4
67 ; CHECK-NEXT:    sub sp, #4
68 ; CHECK-NEXT:    .vsave {d8, d9}
69 ; CHECK-NEXT:    vpush {d8, d9}
70 ; CHECK-NEXT:    mov r6, r0
71 ; CHECK-NEXT:    and r0, r3, #1
72 ; CHECK-NEXT:    mov r5, r1
73 ; CHECK-NEXT:    rsbs r1, r0, #0
74 ; CHECK-NEXT:    mov r0, r2
75 ; CHECK-NEXT:    movs r2, #9
76 ; CHECK-NEXT:    movs r3, #0
77 ; CHECK-NEXT:    bl __aeabi_ldivmod
78 ; CHECK-NEXT:    and r0, r5, #1
79 ; CHECK-NEXT:    mov r7, r2
80 ; CHECK-NEXT:    rsbs r1, r0, #0
81 ; CHECK-NEXT:    mov r4, r3
82 ; CHECK-NEXT:    mov r0, r6
83 ; CHECK-NEXT:    movs r2, #9
84 ; CHECK-NEXT:    movs r3, #0
85 ; CHECK-NEXT:    bl __aeabi_ldivmod
86 ; CHECK-NEXT:    ldr r1, [sp, #44]
87 ; CHECK-NEXT:    vmov.32 d8[0], r2
88 ; CHECK-NEXT:    ldr r0, [sp, #40]
89 ; CHECK-NEXT:    mov r5, r3
90 ; CHECK-NEXT:    and r1, r1, #1
91 ; CHECK-NEXT:    mvn r2, #8
92 ; CHECK-NEXT:    rsbs r1, r1, #0
93 ; CHECK-NEXT:    mov.w r3, #-1
94 ; CHECK-NEXT:    vmov.32 d9[0], r7
95 ; CHECK-NEXT:    bl __aeabi_ldivmod
96 ; CHECK-NEXT:    vmov.32 d16[0], r2
97 ; CHECK-NEXT:    adr r0, .LCPI3_0
98 ; CHECK-NEXT:    vmov.32 d9[1], r4
99 ; CHECK-NEXT:    vld1.64 {d18, d19}, [r0:128]
100 ; CHECK-NEXT:    adr r0, .LCPI3_1
101 ; CHECK-NEXT:    vmov.32 d16[1], r3
102 ; CHECK-NEXT:    vmov.32 d8[1], r5
103 ; CHECK-NEXT:    vand q8, q8, q9
104 ; CHECK-NEXT:    vld1.64 {d20, d21}, [r0:128]
105 ; CHECK-NEXT:    adr r0, .LCPI3_2
106 ; CHECK-NEXT:    vand q11, q4, q9
107 ; CHECK-NEXT:    vld1.64 {d18, d19}, [r0:128]
108 ; CHECK-NEXT:    vceq.i32 q10, q11, q10
109 ; CHECK-NEXT:    vceq.i32 q8, q8, q9
110 ; CHECK-NEXT:    vrev64.32 q9, q10
111 ; CHECK-NEXT:    vrev64.32 q11, q8
112 ; CHECK-NEXT:    vand q9, q10, q9
113 ; CHECK-NEXT:    vand q8, q8, q11
114 ; CHECK-NEXT:    vmvn q9, q9
115 ; CHECK-NEXT:    vmvn q8, q8
116 ; CHECK-NEXT:    vmovn.i64 d18, q9
117 ; CHECK-NEXT:    vmovn.i64 d16, q8
118 ; CHECK-NEXT:    vmov.32 r0, d18[0]
119 ; CHECK-NEXT:    vmov.32 r1, d18[1]
120 ; CHECK-NEXT:    vmov.32 r2, d16[0]
121 ; CHECK-NEXT:    vpop {d8, d9}
122 ; CHECK-NEXT:    add sp, #4
123 ; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}
124 ; CHECK-NEXT:    .p2align 4
125 ; CHECK-NEXT:  @ %bb.1:
126 ; CHECK-NEXT:  .LCPI3_0:
127 ; CHECK-NEXT:    .long 4294967295 @ 0xffffffff
128 ; CHECK-NEXT:    .long 1 @ 0x1
129 ; CHECK-NEXT:    .long 4294967295 @ 0xffffffff
130 ; CHECK-NEXT:    .long 1 @ 0x1
131 ; CHECK-NEXT:  .LCPI3_1:
132 ; CHECK-NEXT:    .long 3 @ 0x3
133 ; CHECK-NEXT:    .long 0 @ 0x0
134 ; CHECK-NEXT:    .long 4294967293 @ 0xfffffffd
135 ; CHECK-NEXT:    .long 1 @ 0x1
136 ; CHECK-NEXT:  .LCPI3_2:
137 ; CHECK-NEXT:    .long 3 @ 0x3
138 ; CHECK-NEXT:    .long 0 @ 0x0
139 ; CHECK-NEXT:    .long 0 @ 0x0
140 ; CHECK-NEXT:    .long 0 @ 0x0
141   %srem = srem <3 x i33> %X, <i33 9, i33 9, i33 -9>
142   %cmp = icmp ne <3 x i33> %srem, <i33 3, i33 -3, i33 3>
143   ret <3 x i1> %cmp