[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / X86 / pr57340.ll
bloba6ae7ce5ccd15dd1898c9195d9ebf74d7d861cab
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s
4 define void @main.41() local_unnamed_addr #1 {
5 ; CHECK-LABEL: main.41:
6 ; CHECK:       # %bb.0: # %entry
7 ; CHECK-NEXT:    vpbroadcastw (%rax), %xmm0
8 ; CHECK-NEXT:    vmovdqu (%rax), %ymm2
9 ; CHECK-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm3
10 ; CHECK-NEXT:    vmovdqa {{.*#+}} ymm1 = [31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
11 ; CHECK-NEXT:    vpermi2w %ymm3, %ymm2, %ymm1
12 ; CHECK-NEXT:    vpextrw $0, %xmm0, %eax
13 ; CHECK-NEXT:    movzwl %ax, %eax
14 ; CHECK-NEXT:    vmovd %eax, %xmm0
15 ; CHECK-NEXT:    vcvtph2ps %xmm0, %xmm0
16 ; CHECK-NEXT:    vmovdqu (%rax), %xmm5
17 ; CHECK-NEXT:    vpextrw $0, %xmm5, %eax
18 ; CHECK-NEXT:    movzwl %ax, %eax
19 ; CHECK-NEXT:    vmovd %eax, %xmm2
20 ; CHECK-NEXT:    vcvtph2ps %xmm2, %xmm2
21 ; CHECK-NEXT:    vucomiss %xmm0, %xmm2
22 ; CHECK-NEXT:    setnp %al
23 ; CHECK-NEXT:    sete %cl
24 ; CHECK-NEXT:    testb %al, %cl
25 ; CHECK-NEXT:    vpsrld $16, %xmm1, %xmm3
26 ; CHECK-NEXT:    vpextrw $0, %xmm3, %eax
27 ; CHECK-NEXT:    movzwl %ax, %eax
28 ; CHECK-NEXT:    vmovd %eax, %xmm3
29 ; CHECK-NEXT:    vpsrld $16, %xmm5, %xmm4
30 ; CHECK-NEXT:    vpextrw $0, %xmm4, %eax
31 ; CHECK-NEXT:    movzwl %ax, %eax
32 ; CHECK-NEXT:    vmovd %eax, %xmm4
33 ; CHECK-NEXT:    setne %al
34 ; CHECK-NEXT:    andl $1, %eax
35 ; CHECK-NEXT:    vcvtph2ps %xmm3, %xmm6
36 ; CHECK-NEXT:    vcvtph2ps %xmm4, %xmm3
37 ; CHECK-NEXT:    kmovw %eax, %k0
38 ; CHECK-NEXT:    vucomiss %xmm6, %xmm3
39 ; CHECK-NEXT:    setnp %al
40 ; CHECK-NEXT:    sete %cl
41 ; CHECK-NEXT:    testb %al, %cl
42 ; CHECK-NEXT:    setne %al
43 ; CHECK-NEXT:    kmovd %eax, %k1
44 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
45 ; CHECK-NEXT:    kshiftrw $14, %k1, %k1
46 ; CHECK-NEXT:    korw %k1, %k0, %k0
47 ; CHECK-NEXT:    movw $-5, %ax
48 ; CHECK-NEXT:    kmovd %eax, %k1
49 ; CHECK-NEXT:    kandw %k1, %k0, %k0
50 ; CHECK-NEXT:    vprolq $32, %xmm1, %xmm4
51 ; CHECK-NEXT:    vpextrw $0, %xmm4, %eax
52 ; CHECK-NEXT:    movzwl %ax, %eax
53 ; CHECK-NEXT:    vmovd %eax, %xmm4
54 ; CHECK-NEXT:    vcvtph2ps %xmm4, %xmm4
55 ; CHECK-NEXT:    vucomiss %xmm4, %xmm0
56 ; CHECK-NEXT:    setnp %al
57 ; CHECK-NEXT:    sete %cl
58 ; CHECK-NEXT:    testb %al, %cl
59 ; CHECK-NEXT:    setne %al
60 ; CHECK-NEXT:    kmovd %eax, %k1
61 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
62 ; CHECK-NEXT:    kshiftrw $13, %k1, %k1
63 ; CHECK-NEXT:    korw %k1, %k0, %k0
64 ; CHECK-NEXT:    movw $-9, %ax
65 ; CHECK-NEXT:    kmovd %eax, %k1
66 ; CHECK-NEXT:    vpsrlq $48, %xmm1, %xmm4
67 ; CHECK-NEXT:    vpextrw $0, %xmm4, %eax
68 ; CHECK-NEXT:    kandw %k1, %k0, %k0
69 ; CHECK-NEXT:    movzwl %ax, %eax
70 ; CHECK-NEXT:    vmovd %eax, %xmm4
71 ; CHECK-NEXT:    vcvtph2ps %xmm4, %xmm6
72 ; CHECK-NEXT:    vpsrlq $48, %xmm5, %xmm4
73 ; CHECK-NEXT:    vpextrw $0, %xmm4, %eax
74 ; CHECK-NEXT:    movzwl %ax, %eax
75 ; CHECK-NEXT:    vmovd %eax, %xmm4
76 ; CHECK-NEXT:    vcvtph2ps %xmm4, %xmm4
77 ; CHECK-NEXT:    vucomiss %xmm6, %xmm4
78 ; CHECK-NEXT:    setnp %al
79 ; CHECK-NEXT:    sete %cl
80 ; CHECK-NEXT:    testb %al, %cl
81 ; CHECK-NEXT:    setne %al
82 ; CHECK-NEXT:    kmovd %eax, %k1
83 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
84 ; CHECK-NEXT:    kshiftrw $12, %k1, %k1
85 ; CHECK-NEXT:    korw %k1, %k0, %k0
86 ; CHECK-NEXT:    movw $-17, %ax
87 ; CHECK-NEXT:    kmovd %eax, %k1
88 ; CHECK-NEXT:    vpshufd {{.*#+}} xmm6 = xmm1[2,3,0,1]
89 ; CHECK-NEXT:    vpextrw $0, %xmm6, %eax
90 ; CHECK-NEXT:    kandw %k1, %k0, %k0
91 ; CHECK-NEXT:    movzwl %ax, %eax
92 ; CHECK-NEXT:    vmovd %eax, %xmm6
93 ; CHECK-NEXT:    vcvtph2ps %xmm6, %xmm6
94 ; CHECK-NEXT:    vucomiss %xmm6, %xmm0
95 ; CHECK-NEXT:    setnp %al
96 ; CHECK-NEXT:    sete %cl
97 ; CHECK-NEXT:    testb %al, %cl
98 ; CHECK-NEXT:    setne %al
99 ; CHECK-NEXT:    kmovd %eax, %k1
100 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
101 ; CHECK-NEXT:    kshiftrw $11, %k1, %k1
102 ; CHECK-NEXT:    korw %k1, %k0, %k0
103 ; CHECK-NEXT:    movw $-33, %ax
104 ; CHECK-NEXT:    kmovd %eax, %k1
105 ; CHECK-NEXT:    vpsrldq {{.*#+}} xmm6 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
106 ; CHECK-NEXT:    vpextrw $0, %xmm6, %eax
107 ; CHECK-NEXT:    movzwl %ax, %eax
108 ; CHECK-NEXT:    vmovd %eax, %xmm6
109 ; CHECK-NEXT:    vcvtph2ps %xmm6, %xmm7
110 ; CHECK-NEXT:    vpsrldq {{.*#+}} xmm6 = xmm5[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
111 ; CHECK-NEXT:    vpextrw $0, %xmm6, %eax
112 ; CHECK-NEXT:    kandw %k1, %k0, %k0
113 ; CHECK-NEXT:    movzwl %ax, %eax
114 ; CHECK-NEXT:    vmovd %eax, %xmm6
115 ; CHECK-NEXT:    vcvtph2ps %xmm6, %xmm6
116 ; CHECK-NEXT:    vucomiss %xmm7, %xmm6
117 ; CHECK-NEXT:    setnp %al
118 ; CHECK-NEXT:    sete %cl
119 ; CHECK-NEXT:    testb %al, %cl
120 ; CHECK-NEXT:    setne %al
121 ; CHECK-NEXT:    kmovd %eax, %k1
122 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
123 ; CHECK-NEXT:    kshiftrw $10, %k1, %k1
124 ; CHECK-NEXT:    korw %k1, %k0, %k0
125 ; CHECK-NEXT:    movw $-65, %ax
126 ; CHECK-NEXT:    kmovd %eax, %k1
127 ; CHECK-NEXT:    kandw %k1, %k0, %k0
128 ; CHECK-NEXT:    vpshufd {{.*#+}} xmm7 = xmm1[3,3,3,3]
129 ; CHECK-NEXT:    vpextrw $0, %xmm7, %eax
130 ; CHECK-NEXT:    movzwl %ax, %eax
131 ; CHECK-NEXT:    vmovd %eax, %xmm7
132 ; CHECK-NEXT:    vcvtph2ps %xmm7, %xmm7
133 ; CHECK-NEXT:    vucomiss %xmm7, %xmm0
134 ; CHECK-NEXT:    setnp %al
135 ; CHECK-NEXT:    sete %cl
136 ; CHECK-NEXT:    testb %al, %cl
137 ; CHECK-NEXT:    setne %al
138 ; CHECK-NEXT:    kmovd %eax, %k1
139 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
140 ; CHECK-NEXT:    kshiftrw $9, %k1, %k1
141 ; CHECK-NEXT:    korw %k1, %k0, %k0
142 ; CHECK-NEXT:    movw $-129, %ax
143 ; CHECK-NEXT:    kmovd %eax, %k1
144 ; CHECK-NEXT:    kandw %k1, %k0, %k0
145 ; CHECK-NEXT:    vpsrldq {{.*#+}} xmm7 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
146 ; CHECK-NEXT:    vpextrw $0, %xmm7, %eax
147 ; CHECK-NEXT:    movzwl %ax, %eax
148 ; CHECK-NEXT:    vmovd %eax, %xmm7
149 ; CHECK-NEXT:    vcvtph2ps %xmm7, %xmm7
150 ; CHECK-NEXT:    vpsrldq {{.*#+}} xmm5 = xmm5[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
151 ; CHECK-NEXT:    vpextrw $0, %xmm5, %eax
152 ; CHECK-NEXT:    movzwl %ax, %eax
153 ; CHECK-NEXT:    vmovd %eax, %xmm5
154 ; CHECK-NEXT:    vcvtph2ps %xmm5, %xmm5
155 ; CHECK-NEXT:    vucomiss %xmm7, %xmm5
156 ; CHECK-NEXT:    setnp %al
157 ; CHECK-NEXT:    sete %cl
158 ; CHECK-NEXT:    testb %al, %cl
159 ; CHECK-NEXT:    setne %al
160 ; CHECK-NEXT:    kmovd %eax, %k1
161 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
162 ; CHECK-NEXT:    kshiftrw $8, %k1, %k1
163 ; CHECK-NEXT:    korw %k1, %k0, %k0
164 ; CHECK-NEXT:    movw $-257, %ax # imm = 0xFEFF
165 ; CHECK-NEXT:    kmovd %eax, %k1
166 ; CHECK-NEXT:    kandw %k1, %k0, %k0
167 ; CHECK-NEXT:    vextracti128 $1, %ymm1, %xmm1
168 ; CHECK-NEXT:    vpextrw $0, %xmm1, %eax
169 ; CHECK-NEXT:    movzwl %ax, %eax
170 ; CHECK-NEXT:    vmovd %eax, %xmm7
171 ; CHECK-NEXT:    vcvtph2ps %xmm7, %xmm7
172 ; CHECK-NEXT:    vucomiss %xmm7, %xmm2
173 ; CHECK-NEXT:    setnp %al
174 ; CHECK-NEXT:    sete %cl
175 ; CHECK-NEXT:    testb %al, %cl
176 ; CHECK-NEXT:    setne %al
177 ; CHECK-NEXT:    kmovd %eax, %k1
178 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
179 ; CHECK-NEXT:    kshiftrw $7, %k1, %k1
180 ; CHECK-NEXT:    korw %k1, %k0, %k0
181 ; CHECK-NEXT:    movw $-513, %ax # imm = 0xFDFF
182 ; CHECK-NEXT:    kmovd %eax, %k1
183 ; CHECK-NEXT:    kandw %k1, %k0, %k0
184 ; CHECK-NEXT:    vpsrld $16, %xmm1, %xmm2
185 ; CHECK-NEXT:    vpextrw $0, %xmm2, %eax
186 ; CHECK-NEXT:    movzwl %ax, %eax
187 ; CHECK-NEXT:    vmovd %eax, %xmm2
188 ; CHECK-NEXT:    vcvtph2ps %xmm2, %xmm2
189 ; CHECK-NEXT:    vucomiss %xmm2, %xmm3
190 ; CHECK-NEXT:    setnp %al
191 ; CHECK-NEXT:    sete %cl
192 ; CHECK-NEXT:    testb %al, %cl
193 ; CHECK-NEXT:    setne %al
194 ; CHECK-NEXT:    kmovd %eax, %k1
195 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
196 ; CHECK-NEXT:    kshiftrw $6, %k1, %k1
197 ; CHECK-NEXT:    korw %k1, %k0, %k0
198 ; CHECK-NEXT:    movw $-1025, %ax # imm = 0xFBFF
199 ; CHECK-NEXT:    kmovd %eax, %k1
200 ; CHECK-NEXT:    vprolq $32, %xmm1, %xmm2
201 ; CHECK-NEXT:    vpextrw $0, %xmm2, %eax
202 ; CHECK-NEXT:    movzwl %ax, %eax
203 ; CHECK-NEXT:    vmovd %eax, %xmm2
204 ; CHECK-NEXT:    vcvtph2ps %xmm2, %xmm2
205 ; CHECK-NEXT:    kandw %k1, %k0, %k0
206 ; CHECK-NEXT:    vucomiss %xmm2, %xmm0
207 ; CHECK-NEXT:    setnp %al
208 ; CHECK-NEXT:    sete %cl
209 ; CHECK-NEXT:    testb %al, %cl
210 ; CHECK-NEXT:    setne %al
211 ; CHECK-NEXT:    kmovd %eax, %k1
212 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
213 ; CHECK-NEXT:    kshiftrw $5, %k1, %k1
214 ; CHECK-NEXT:    korw %k1, %k0, %k0
215 ; CHECK-NEXT:    movw $-2049, %ax # imm = 0xF7FF
216 ; CHECK-NEXT:    kmovd %eax, %k1
217 ; CHECK-NEXT:    kandw %k1, %k0, %k0
218 ; CHECK-NEXT:    vpsrlq $48, %xmm1, %xmm2
219 ; CHECK-NEXT:    vpextrw $0, %xmm2, %eax
220 ; CHECK-NEXT:    movzwl %ax, %eax
221 ; CHECK-NEXT:    vmovd %eax, %xmm2
222 ; CHECK-NEXT:    vcvtph2ps %xmm2, %xmm2
223 ; CHECK-NEXT:    vucomiss %xmm2, %xmm4
224 ; CHECK-NEXT:    setnp %al
225 ; CHECK-NEXT:    sete %cl
226 ; CHECK-NEXT:    testb %al, %cl
227 ; CHECK-NEXT:    setne %al
228 ; CHECK-NEXT:    kmovd %eax, %k1
229 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
230 ; CHECK-NEXT:    kshiftrw $4, %k1, %k1
231 ; CHECK-NEXT:    korw %k1, %k0, %k0
232 ; CHECK-NEXT:    movw $-4097, %ax # imm = 0xEFFF
233 ; CHECK-NEXT:    kmovd %eax, %k1
234 ; CHECK-NEXT:    vpshufd {{.*#+}} xmm2 = xmm1[2,3,0,1]
235 ; CHECK-NEXT:    vpextrw $0, %xmm2, %eax
236 ; CHECK-NEXT:    kandw %k1, %k0, %k0
237 ; CHECK-NEXT:    movzwl %ax, %eax
238 ; CHECK-NEXT:    vmovd %eax, %xmm2
239 ; CHECK-NEXT:    vcvtph2ps %xmm2, %xmm2
240 ; CHECK-NEXT:    vucomiss %xmm2, %xmm0
241 ; CHECK-NEXT:    setnp %al
242 ; CHECK-NEXT:    sete %cl
243 ; CHECK-NEXT:    testb %al, %cl
244 ; CHECK-NEXT:    setne %al
245 ; CHECK-NEXT:    kmovd %eax, %k1
246 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
247 ; CHECK-NEXT:    kshiftrw $3, %k1, %k1
248 ; CHECK-NEXT:    korw %k1, %k0, %k0
249 ; CHECK-NEXT:    movw $-8193, %ax # imm = 0xDFFF
250 ; CHECK-NEXT:    kmovd %eax, %k1
251 ; CHECK-NEXT:    kandw %k1, %k0, %k0
252 ; CHECK-NEXT:    vpsrldq {{.*#+}} xmm2 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
253 ; CHECK-NEXT:    vpextrw $0, %xmm2, %eax
254 ; CHECK-NEXT:    movzwl %ax, %eax
255 ; CHECK-NEXT:    vmovd %eax, %xmm2
256 ; CHECK-NEXT:    vcvtph2ps %xmm2, %xmm2
257 ; CHECK-NEXT:    vucomiss %xmm2, %xmm6
258 ; CHECK-NEXT:    setnp %al
259 ; CHECK-NEXT:    sete %cl
260 ; CHECK-NEXT:    testb %al, %cl
261 ; CHECK-NEXT:    setne %al
262 ; CHECK-NEXT:    kmovd %eax, %k1
263 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
264 ; CHECK-NEXT:    kshiftrw $2, %k1, %k1
265 ; CHECK-NEXT:    korw %k1, %k0, %k0
266 ; CHECK-NEXT:    movw $-16385, %ax # imm = 0xBFFF
267 ; CHECK-NEXT:    kmovd %eax, %k1
268 ; CHECK-NEXT:    kandw %k1, %k0, %k0
269 ; CHECK-NEXT:    vpshufd {{.*#+}} xmm2 = xmm1[3,3,3,3]
270 ; CHECK-NEXT:    vpextrw $0, %xmm2, %eax
271 ; CHECK-NEXT:    movzwl %ax, %eax
272 ; CHECK-NEXT:    vmovd %eax, %xmm2
273 ; CHECK-NEXT:    vcvtph2ps %xmm2, %xmm2
274 ; CHECK-NEXT:    vucomiss %xmm2, %xmm0
275 ; CHECK-NEXT:    setnp %al
276 ; CHECK-NEXT:    sete %cl
277 ; CHECK-NEXT:    testb %al, %cl
278 ; CHECK-NEXT:    setne %al
279 ; CHECK-NEXT:    kmovd %eax, %k1
280 ; CHECK-NEXT:    kshiftlw $14, %k1, %k1
281 ; CHECK-NEXT:    korw %k1, %k0, %k0
282 ; CHECK-NEXT:    kshiftlw $1, %k0, %k0
283 ; CHECK-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
284 ; CHECK-NEXT:    vpextrw $0, %xmm0, %eax
285 ; CHECK-NEXT:    movzwl %ax, %eax
286 ; CHECK-NEXT:    vmovd %eax, %xmm0
287 ; CHECK-NEXT:    vcvtph2ps %xmm0, %xmm0
288 ; CHECK-NEXT:    kshiftrw $1, %k0, %k0
289 ; CHECK-NEXT:    vucomiss %xmm0, %xmm5
290 ; CHECK-NEXT:    setnp %al
291 ; CHECK-NEXT:    sete %cl
292 ; CHECK-NEXT:    testb %al, %cl
293 ; CHECK-NEXT:    setne %al
294 ; CHECK-NEXT:    kmovd %eax, %k1
295 ; CHECK-NEXT:    kshiftlw $15, %k1, %k1
296 ; CHECK-NEXT:    korw %k1, %k0, %k1
297 ; CHECK-NEXT:    vmovdqu8 {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 {%k1} {z}
298 ; CHECK-NEXT:    vmovdqa %xmm0, (%rax)
299 ; CHECK-NEXT:    vzeroupper
300 ; CHECK-NEXT:    retq
301 entry:
302   %.pre = load half, ptr undef, align 16
303   %vector.recur.init = insertelement <16 x half> poison, half %.pre, i64 15
304   %wide.load = load <16 x half>, ptr undef, align 2
305   %0 = shufflevector <16 x half> %vector.recur.init, <16 x half> %wide.load, <16 x i32> <i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30>
306   %1 = fcmp oeq <16 x half> %wide.load, %0
307   %2 = zext <16 x i1> %1 to <16 x i8>
308   store <16 x i8> %2, ptr undef, align 16
309   ret void
312 attributes #1 = { nounwind uwtable "target-cpu"="skx" }