OLD | NEW |
| (Empty) |
1 ; Show that we know how to translate vector division instructions. | |
2 | |
3 ; REQUIRES: allow_dump | |
4 | |
5 ; Compile using standalone assembler. | |
6 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -O2 -mattr=hwdiv-arm \ | |
7 ; RUN: | FileCheck %s --check-prefix=ASM | |
8 | |
9 ; Show bytes in assembled standalone code. | |
10 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \ | |
11 ; RUN: --args -O2 -mattr=hwdiv-arm \ | |
12 ; RUN: | FileCheck %s --check-prefix=DIS | |
13 | |
14 ; Compile using integrated assembler. | |
15 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -O2 -mattr=hwdiv-arm \ | |
16 ; RUN: | FileCheck %s --check-prefix=IASM | |
17 | |
18 ; Show bytes in assembled integrated code. | |
19 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \ | |
20 ; RUN: --args -O2 -mattr=hwdiv-arm \ | |
21 ; RUN: | FileCheck %s --check-prefix=DIS | |
22 | |
23 define internal <4 x float> @testVdivFloat4(<4 x float> %v1, <4 x float> %v2) { | |
24 ; ASM-LABEL: testVdivFloat4: | |
25 ; DIS-LABEL: 00000000 <testVdivFloat4>: | |
26 ; IASM-LABEL: testVdivFloat4: | |
27 | |
28 entry: | |
29 %res = fdiv <4 x float> %v1, %v2 | |
30 | |
31 ; TODO(eholk): this code could be a lot better. Fix the code generator | |
32 ; and update the test. Same for the rest of the tests. | |
33 | |
34 ; ASM: vdiv.f32 s12, s12, s13 | |
35 ; ASM-NEXT: vmov.f32 s8, s12 | |
36 ; ASM: vdiv.f32 s12, s12, s13 | |
37 ; ASM-NEXT: vmov.f32 s9, s12 | |
38 ; ASM: vdiv.f32 s12, s12, s13 | |
39 ; ASM-NEXT: vmov.f32 s10, s12 | |
40 ; ASM: vdiv.f32 s0, s0, s4 | |
41 ; ASM-NEXT: vmov.f32 s11, s0 | |
42 | |
43 ; DIS: 8: ee866a26 | |
44 ; DIS: 18: ee866a26 | |
45 ; DIS: 28: ee866a26 | |
46 ; DIS: 38: ee800a02 | |
47 | |
48 ; IASM-NOT: vdiv | |
49 | |
50 ret <4 x float> %res | |
51 } | |
52 | |
53 define internal <4 x i32> @testVdiv4i32(<4 x i32> %v1, <4 x i32> %v2) { | |
54 ; ASM-LABEL: testVdiv4i32: | |
55 ; DIS-LABEL: 00000050 <testVdiv4i32>: | |
56 ; IASM-LABEL: testVdiv4i32: | |
57 | |
58 entry: | |
59 %res = udiv <4 x i32> %v1, %v2 | |
60 | |
61 ; ASM: udiv r0, r0, r1 | |
62 ; ASM: udiv r0, r0, r1 | |
63 ; ASM: udiv r0, r0, r1 | |
64 ; ASM: udiv r0, r0, r1 | |
65 | |
66 ; DIS: 64: e730f110 | |
67 ; DIS: 80: e730f110 | |
68 ; DIS: 9c: e730f110 | |
69 ; DIS: b8: e730f110 | |
70 | |
71 ; IASM-NOT: udiv | |
72 | |
73 ret <4 x i32> %res | |
74 } | |
75 | |
76 define internal <8 x i16> @testVdiv8i16(<8 x i16> %v1, <8 x i16> %v2) { | |
77 ; ASM-LABEL: testVdiv8i16: | |
78 ; DIS-LABEL: 000000d0 <testVdiv8i16>: | |
79 ; IASM-LABEL: testVdiv8i16: | |
80 | |
81 entry: | |
82 %res = udiv <8 x i16> %v1, %v2 | |
83 | |
84 ; ASM: uxth r0, r0 | |
85 ; ASM: uxth r1, r1 | |
86 ; ASM: udiv r0, r0, r1 | |
87 ; ASM: uxth r0, r0 | |
88 ; ASM: uxth r1, r1 | |
89 ; ASM: udiv r0, r0, r1 | |
90 ; ASM: uxth r0, r0 | |
91 ; ASM: uxth r1, r1 | |
92 ; ASM: udiv r0, r0, r1 | |
93 ; ASM: uxth r0, r0 | |
94 ; ASM: uxth r1, r1 | |
95 ; ASM: udiv r0, r0, r1 | |
96 ; ASM: uxth r0, r0 | |
97 ; ASM: uxth r1, r1 | |
98 ; ASM: udiv r0, r0, r1 | |
99 ; ASM: uxth r0, r0 | |
100 ; ASM: uxth r1, r1 | |
101 ; ASM: udiv r0, r0, r1 | |
102 ; ASM: uxth r0, r0 | |
103 ; ASM: uxth r1, r1 | |
104 ; ASM: udiv r0, r0, r1 | |
105 ; ASM: uxth r0, r0 | |
106 ; ASM: uxth r1, r1 | |
107 ; ASM: udiv r0, r0, r1 | |
108 | |
109 ; DIS: e4: e6ff0070 | |
110 ; DIS: e8: e6ff1071 | |
111 ; DIS: ec: e730f110 | |
112 ; DIS: 108: e6ff0070 | |
113 ; DIS: 10c: e6ff1071 | |
114 ; DIS: 110: e730f110 | |
115 ; DIS: 12c: e6ff0070 | |
116 ; DIS: 130: e6ff1071 | |
117 ; DIS: 134: e730f110 | |
118 ; DIS: 150: e6ff0070 | |
119 ; DIS: 154: e6ff1071 | |
120 ; DIS: 158: e730f110 | |
121 ; DIS: 174: e6ff0070 | |
122 ; DIS: 178: e6ff1071 | |
123 ; DIS: 17c: e730f110 | |
124 ; DIS: 198: e6ff0070 | |
125 ; DIS: 19c: e6ff1071 | |
126 ; DIS: 1a0: e730f110 | |
127 ; DIS: 1bc: e6ff0070 | |
128 ; DIS: 1c0: e6ff1071 | |
129 ; DIS: 1c4: e730f110 | |
130 ; DIS: 1e0: e6ff0070 | |
131 ; DIS: 1e4: e6ff1071 | |
132 ; DIS: 1e8: e730f110 | |
133 | |
134 ; IASM-NOT: uxth | |
135 ; IASM-NOT: udiv | |
136 | |
137 ret <8 x i16> %res | |
138 } | |
139 | |
140 define internal <16 x i8> @testVdiv16i8(<16 x i8> %v1, <16 x i8> %v2) { | |
141 ; ASM-LABEL: testVdiv16i8: | |
142 ; DIS-LABEL: 00000200 <testVdiv16i8>: | |
143 ; IASM-LABEL: testVdiv16i8: | |
144 | |
145 entry: | |
146 %res = udiv <16 x i8> %v1, %v2 | |
147 | |
148 ; ASM: uxtb r0, r0 | |
149 ; ASM: uxtb r1, r1 | |
150 ; ASM: udiv r0, r0, r1 | |
151 ; ASM: uxtb r0, r0 | |
152 ; ASM: uxtb r1, r1 | |
153 ; ASM: udiv r0, r0, r1 | |
154 ; ASM: uxtb r0, r0 | |
155 ; ASM: uxtb r1, r1 | |
156 ; ASM: udiv r0, r0, r1 | |
157 ; ASM: uxtb r0, r0 | |
158 ; ASM: uxtb r1, r1 | |
159 ; ASM: udiv r0, r0, r1 | |
160 ; ASM: uxtb r0, r0 | |
161 ; ASM: uxtb r1, r1 | |
162 ; ASM: udiv r0, r0, r1 | |
163 ; ASM: uxtb r0, r0 | |
164 ; ASM: uxtb r1, r1 | |
165 ; ASM: udiv r0, r0, r1 | |
166 ; ASM: uxtb r0, r0 | |
167 ; ASM: uxtb r1, r1 | |
168 ; ASM: udiv r0, r0, r1 | |
169 ; ASM: uxtb r0, r0 | |
170 ; ASM: uxtb r1, r1 | |
171 ; ASM: udiv r0, r0, r1 | |
172 ; ASM: uxtb r0, r0 | |
173 ; ASM: uxtb r1, r1 | |
174 ; ASM: udiv r0, r0, r1 | |
175 ; ASM: uxtb r0, r0 | |
176 ; ASM: uxtb r1, r1 | |
177 ; ASM: udiv r0, r0, r1 | |
178 ; ASM: uxtb r0, r0 | |
179 ; ASM: uxtb r1, r1 | |
180 ; ASM: udiv r0, r0, r1 | |
181 ; ASM: uxtb r0, r0 | |
182 ; ASM: uxtb r1, r1 | |
183 ; ASM: udiv r0, r0, r1 | |
184 ; ASM: uxtb r0, r0 | |
185 ; ASM: uxtb r1, r1 | |
186 ; ASM: udiv r0, r0, r1 | |
187 ; ASM: uxtb r0, r0 | |
188 ; ASM: uxtb r1, r1 | |
189 ; ASM: udiv r0, r0, r1 | |
190 ; ASM: uxtb r0, r0 | |
191 ; ASM: uxtb r1, r1 | |
192 ; ASM: udiv r0, r0, r1 | |
193 ; ASM: uxtb r0, r0 | |
194 ; ASM: uxtb r1, r1 | |
195 ; ASM: udiv r0, r0, r1 | |
196 | |
197 ; DIS: 214: e6ef0070 | |
198 ; DIS: 218: e6ef1071 | |
199 ; DIS: 21c: e730f110 | |
200 ; DIS: 238: e6ef0070 | |
201 ; DIS: 23c: e6ef1071 | |
202 ; DIS: 240: e730f110 | |
203 ; DIS: 25c: e6ef0070 | |
204 ; DIS: 260: e6ef1071 | |
205 ; DIS: 264: e730f110 | |
206 ; DIS: 280: e6ef0070 | |
207 ; DIS: 284: e6ef1071 | |
208 ; DIS: 288: e730f110 | |
209 ; DIS: 2a4: e6ef0070 | |
210 ; DIS: 2a8: e6ef1071 | |
211 ; DIS: 2ac: e730f110 | |
212 ; DIS: 2c8: e6ef0070 | |
213 ; DIS: 2cc: e6ef1071 | |
214 ; DIS: 2d0: e730f110 | |
215 ; DIS: 2ec: e6ef0070 | |
216 ; DIS: 2f0: e6ef1071 | |
217 ; DIS: 2f4: e730f110 | |
218 ; DIS: 310: e6ef0070 | |
219 ; DIS: 314: e6ef1071 | |
220 ; DIS: 318: e730f110 | |
221 ; DIS: 334: e6ef0070 | |
222 ; DIS: 338: e6ef1071 | |
223 ; DIS: 33c: e730f110 | |
224 ; DIS: 358: e6ef0070 | |
225 ; DIS: 35c: e6ef1071 | |
226 ; DIS: 360: e730f110 | |
227 ; DIS: 37c: e6ef0070 | |
228 ; DIS: 380: e6ef1071 | |
229 ; DIS: 384: e730f110 | |
230 ; DIS: 3a0: e6ef0070 | |
231 ; DIS: 3a4: e6ef1071 | |
232 ; DIS: 3a8: e730f110 | |
233 ; DIS: 3c4: e6ef0070 | |
234 ; DIS: 3c8: e6ef1071 | |
235 ; DIS: 3cc: e730f110 | |
236 ; DIS: 3e8: e6ef0070 | |
237 ; DIS: 3ec: e6ef1071 | |
238 ; DIS: 3f0: e730f110 | |
239 ; DIS: 40c: e6ef0070 | |
240 ; DIS: 410: e6ef1071 | |
241 ; DIS: 414: e730f110 | |
242 ; DIS: 430: e6ef0070 | |
243 ; DIS: 434: e6ef1071 | |
244 ; DIS: 438: e730f110 | |
245 | |
246 ; IASM-NOT: uxtb | |
247 ; IASM-NOT: udiv | |
248 | |
249 ret <16 x i8> %res | |
250 } | |
OLD | NEW |