11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2- ; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu -mattr=+zu | FileCheck %s --check-prefix= ZU
3- ; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu | FileCheck %s --check-prefix= NOZU
2+ ; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu -mattr=+zu | FileCheck %s --check-prefixes=CHECK, ZU
3+ ; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu | FileCheck %s --check-prefixes=CHECK, NOZU
44
55; Test generation of 16b imulzu when -mattr=+zu is specified.
66; The mulzu_* tests check for basic generation, which is limited to cases where a
@@ -89,37 +89,24 @@ define i64 @mulzu_16_64_mem(ptr %P) {
8989; cases should match.
9090
9191define void @mulzu_16_store (i16 %A , ptr %R ) {
92- ; ZU-LABEL: mulzu_16_store:
93- ; ZU: # %bb.0:
94- ; ZU-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
95- ; ZU-NEXT: movw %ax, (%rsi)
96- ; ZU-NEXT: retq
97- ;
98- ; NOZU-LABEL: mulzu_16_store:
99- ; NOZU: # %bb.0:
100- ; NOZU-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
101- ; NOZU-NEXT: movw %ax, (%rsi)
102- ; NOZU-NEXT: retq
92+ ; CHECK-LABEL: mulzu_16_store:
93+ ; CHECK: # %bb.0:
94+ ; CHECK-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
95+ ; CHECK-NEXT: movw %ax, (%rsi)
96+ ; CHECK-NEXT: retq
10397 %gep = getelementptr i16 , ptr %R , i64 0
10498 %mul = mul i16 %A , 1234
10599 store i16 %mul , ptr %gep
106100 ret void
107101}
108102
109103define i32 @mulzu_16_store_32 (i16 %A , ptr %R ) {
110- ; ZU-LABEL: mulzu_16_store_32:
111- ; ZU: # %bb.0:
112- ; ZU-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
113- ; ZU-NEXT: movw %ax, (%rsi)
114- ; ZU-NEXT: movzwl %ax, %eax
115- ; ZU-NEXT: retq
116- ;
117- ; NOZU-LABEL: mulzu_16_store_32:
118- ; NOZU: # %bb.0:
119- ; NOZU-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
120- ; NOZU-NEXT: movw %ax, (%rsi)
121- ; NOZU-NEXT: movzwl %ax, %eax
122- ; NOZU-NEXT: retq
104+ ; CHECK-LABEL: mulzu_16_store_32:
105+ ; CHECK: # %bb.0:
106+ ; CHECK-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
107+ ; CHECK-NEXT: movw %ax, (%rsi)
108+ ; CHECK-NEXT: movzwl %ax, %eax
109+ ; CHECK-NEXT: retq
123110 %gep = getelementptr i16 , ptr %R , i64 0
124111 %mul = mul i16 %A , 1234
125112 store i16 %mul , ptr %gep
@@ -128,19 +115,12 @@ define i32 @mulzu_16_store_32(i16 %A, ptr %R) {
128115}
129116
130117define i64 @mulzu_16_store_64 (i16 %A , ptr %R ) {
131- ; ZU-LABEL: mulzu_16_store_64:
132- ; ZU: # %bb.0:
133- ; ZU-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
134- ; ZU-NEXT: movw %ax, (%rsi)
135- ; ZU-NEXT: movzwl %ax, %eax
136- ; ZU-NEXT: retq
137- ;
138- ; NOZU-LABEL: mulzu_16_store_64:
139- ; NOZU: # %bb.0:
140- ; NOZU-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
141- ; NOZU-NEXT: movw %ax, (%rsi)
142- ; NOZU-NEXT: movzwl %ax, %eax
143- ; NOZU-NEXT: retq
118+ ; CHECK-LABEL: mulzu_16_store_64:
119+ ; CHECK: # %bb.0:
120+ ; CHECK-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
121+ ; CHECK-NEXT: movw %ax, (%rsi)
122+ ; CHECK-NEXT: movzwl %ax, %eax
123+ ; CHECK-NEXT: retq
144124 %gep = getelementptr i16 , ptr %R , i64 0
145125 %mul = mul i16 %A , 1234
146126 store i16 %mul , ptr %gep
@@ -149,34 +129,22 @@ define i64 @mulzu_16_store_64(i16 %A, ptr %R) {
149129}
150130
151131define i32 @mulzu_sext_16_32 (i16 %A ) {
152- ; ZU-LABEL: mulzu_sext_16_32:
153- ; ZU: # %bb.0:
154- ; ZU-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
155- ; ZU-NEXT: cwtl
156- ; ZU-NEXT: retq
157- ;
158- ; NOZU-LABEL: mulzu_sext_16_32:
159- ; NOZU: # %bb.0:
160- ; NOZU-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
161- ; NOZU-NEXT: cwtl
162- ; NOZU-NEXT: retq
132+ ; CHECK-LABEL: mulzu_sext_16_32:
133+ ; CHECK: # %bb.0:
134+ ; CHECK-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
135+ ; CHECK-NEXT: cwtl
136+ ; CHECK-NEXT: retq
163137 %mul = mul i16 %A , 1234
164138 %r = sext i16 %mul to i32
165139 ret i32 %r
166140}
167141
168142define i64 @mulzu_sext_16_64 (i16 %A ) {
169- ; ZU-LABEL: mulzu_sext_16_64:
170- ; ZU: # %bb.0:
171- ; ZU-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
172- ; ZU-NEXT: movswq %ax, %rax
173- ; ZU-NEXT: retq
174- ;
175- ; NOZU-LABEL: mulzu_sext_16_64:
176- ; NOZU: # %bb.0:
177- ; NOZU-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
178- ; NOZU-NEXT: movswq %ax, %rax
179- ; NOZU-NEXT: retq
143+ ; CHECK-LABEL: mulzu_sext_16_64:
144+ ; CHECK: # %bb.0:
145+ ; CHECK-NEXT: imull $1234, %edi, %eax # imm = 0x4D2
146+ ; CHECK-NEXT: movswq %ax, %rax
147+ ; CHECK-NEXT: retq
180148 %mul = mul i16 %A , 1234
181149 %r = sext i16 %mul to i64
182150 ret i64 %r
@@ -188,112 +156,71 @@ define i64 @mulzu_sext_16_64(i16 %A) {
188156
189157define i16 @mul4_16 (i16 %A ) {
190158;
191- ; ZU-LABEL: mul4_16:
192- ; ZU: # %bb.0:
193- ; ZU-NEXT: # kill: def $edi killed $edi def $rdi
194- ; ZU-NEXT: leal (,%rdi,4), %eax
195- ; ZU-NEXT: # kill: def $ax killed $ax killed $eax
196- ; ZU-NEXT: retq
197- ;
198- ; NOZU-LABEL: mul4_16:
199- ; NOZU: # %bb.0:
200- ; NOZU-NEXT: # kill: def $edi killed $edi def $rdi
201- ; NOZU-NEXT: leal (,%rdi,4), %eax
202- ; NOZU-NEXT: # kill: def $ax killed $ax killed $eax
203- ; NOZU-NEXT: retq
159+ ; CHECK-LABEL: mul4_16:
160+ ; CHECK: # %bb.0:
161+ ; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
162+ ; CHECK-NEXT: leal (,%rdi,4), %eax
163+ ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
164+ ; CHECK-NEXT: retq
204165 %mul = mul i16 %A , 4
205166 ret i16 %mul
206167}
207168
208169define i16 @mul4096_16 (i16 %A ) {
209170;
210- ; ZU-LABEL: mul4096_16:
211- ; ZU: # %bb.0:
212- ; ZU-NEXT: movl %edi, %eax
213- ; ZU-NEXT: shll $12, %eax
214- ; ZU-NEXT: # kill: def $ax killed $ax killed $eax
215- ; ZU-NEXT: retq
216- ;
217- ; NOZU-LABEL: mul4096_16:
218- ; NOZU: # %bb.0:
219- ; NOZU-NEXT: movl %edi, %eax
220- ; NOZU-NEXT: shll $12, %eax
221- ; NOZU-NEXT: # kill: def $ax killed $ax killed $eax
222- ; NOZU-NEXT: retq
171+ ; CHECK-LABEL: mul4096_16:
172+ ; CHECK: # %bb.0:
173+ ; CHECK-NEXT: movl %edi, %eax
174+ ; CHECK-NEXT: shll $12, %eax
175+ ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
176+ ; CHECK-NEXT: retq
223177 %mul = mul i16 %A , 4096
224178 ret i16 %mul
225179}
226180
227181define i16 @mulmin4096_16 (i16 %A ) {
228182;
229- ; ZU-LABEL: mulmin4096_16:
230- ; ZU: # %bb.0:
231- ; ZU-NEXT: movl %edi, %eax
232- ; ZU-NEXT: shll $12, %eax
233- ; ZU-NEXT: negl %eax
234- ; ZU-NEXT: # kill: def $ax killed $ax killed $eax
235- ; ZU-NEXT: retq
236- ;
237- ; NOZU-LABEL: mulmin4096_16:
238- ; NOZU: # %bb.0:
239- ; NOZU-NEXT: movl %edi, %eax
240- ; NOZU-NEXT: shll $12, %eax
241- ; NOZU-NEXT: negl %eax
242- ; NOZU-NEXT: # kill: def $ax killed $ax killed $eax
243- ; NOZU-NEXT: retq
183+ ; CHECK-LABEL: mulmin4096_16:
184+ ; CHECK: # %bb.0:
185+ ; CHECK-NEXT: movl %edi, %eax
186+ ; CHECK-NEXT: shll $12, %eax
187+ ; CHECK-NEXT: negl %eax
188+ ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
189+ ; CHECK-NEXT: retq
244190 %mul = mul i16 %A , -4096
245191 ret i16 %mul
246192}
247193
248194define i16 @mul4_16_minsize (i16 %A ) minsize {
249195;
250- ; ZU-LABEL: mul4_16_minsize:
251- ; ZU: # %bb.0:
252- ; ZU-NEXT: # kill: def $edi killed $edi def $rdi
253- ; ZU-NEXT: leal (,%rdi,4), %eax
254- ; ZU-NEXT: # kill: def $ax killed $ax killed $eax
255- ; ZU-NEXT: retq
256- ;
257- ; NOZU-LABEL: mul4_16_minsize:
258- ; NOZU: # %bb.0:
259- ; NOZU-NEXT: # kill: def $edi killed $edi def $rdi
260- ; NOZU-NEXT: leal (,%rdi,4), %eax
261- ; NOZU-NEXT: # kill: def $ax killed $ax killed $eax
262- ; NOZU-NEXT: retq
196+ ; CHECK-LABEL: mul4_16_minsize:
197+ ; CHECK: # %bb.0:
198+ ; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
199+ ; CHECK-NEXT: leal (,%rdi,4), %eax
200+ ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
201+ ; CHECK-NEXT: retq
263202 %mul = mul i16 %A , 4
264203 ret i16 %mul
265204}
266205
267206define i16 @mul0_16 (i16 %A ) {
268207;
269- ; ZU-LABEL: mul0_16:
270- ; ZU: # %bb.0:
271- ; ZU-NEXT: xorl %eax, %eax
272- ; ZU-NEXT: retq
273- ;
274- ; NOZU-LABEL: mul0_16:
275- ; NOZU: # %bb.0:
276- ; NOZU-NEXT: xorl %eax, %eax
277- ; NOZU-NEXT: retq
208+ ; CHECK-LABEL: mul0_16:
209+ ; CHECK: # %bb.0:
210+ ; CHECK-NEXT: xorl %eax, %eax
211+ ; CHECK-NEXT: retq
278212 %mul = mul i16 %A , 0
279213 ret i16 %mul
280214}
281215
282216define i16 @mul4294967295_16 (i16 %A ) {
283217;
284- ; ZU-LABEL: mul4294967295_16:
285- ; ZU: # %bb.0:
286- ; ZU-NEXT: movl %edi, %eax
287- ; ZU-NEXT: negl %eax
288- ; ZU-NEXT: # kill: def $ax killed $ax killed $eax
289- ; ZU-NEXT: retq
290- ;
291- ; NOZU-LABEL: mul4294967295_16:
292- ; NOZU: # %bb.0:
293- ; NOZU-NEXT: movl %edi, %eax
294- ; NOZU-NEXT: negl %eax
295- ; NOZU-NEXT: # kill: def $ax killed $ax killed $eax
296- ; NOZU-NEXT: retq
218+ ; CHECK-LABEL: mul4294967295_16:
219+ ; CHECK: # %bb.0:
220+ ; CHECK-NEXT: movl %edi, %eax
221+ ; CHECK-NEXT: negl %eax
222+ ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
223+ ; CHECK-NEXT: retq
297224 %mul = mul i16 %A , 4294967295
298225 ret i16 %mul
299226}
0 commit comments