xref: /llvm-project/llvm/test/CodeGen/X86/getmant-false-deps.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mcpu=sapphirerapids -mattr=+false-deps-getmant -mtriple=x86_64-unknown-unknown < %s | FileCheck %s --check-prefixes=ENABLE
3; RUN: llc -verify-machineinstrs -mcpu=sapphirerapids -mattr=-false-deps-getmant -mtriple=x86_64-unknown-unknown < %s | FileCheck %s --check-prefixes=DISABLE
4
5define <4 x float> @getmantps_mem_128(ptr %p0) {
6; ENABLE-LABEL: getmantps_mem_128:
7; ENABLE:       # %bb.0:
8; ENABLE-NEXT:    #APP
9; ENABLE-NEXT:    nop
10; ENABLE-NEXT:    #NO_APP
11; ENABLE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
12; ENABLE-NEXT:    vgetmantps $88, (%rdi), %xmm0
13; ENABLE-NEXT:    retq
14;
15; DISABLE-LABEL: getmantps_mem_128:
16; DISABLE:       # %bb.0:
17; DISABLE-NEXT:    #APP
18; DISABLE-NEXT:    nop
19; DISABLE-NEXT:    #NO_APP
20; DISABLE-NEXT:    vgetmantps $88, (%rdi), %xmm0
21; DISABLE-NEXT:    retq
22  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
23  %a0 = load <4 x float>, ptr %p0, align 64
24  %2 = call <4 x float> @llvm.x86.avx512.mask.getmant.ps.128(<4 x float> %a0, i32 88, <4 x float> undef, i8 -1)
25  ret <4 x float> %2
26}
27
28define <4 x float> @getmantps_broadcast_128(ptr %p0) {
29; ENABLE-LABEL: getmantps_broadcast_128:
30; ENABLE:       # %bb.0:
31; ENABLE-NEXT:    #APP
32; ENABLE-NEXT:    nop
33; ENABLE-NEXT:    #NO_APP
34; ENABLE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
35; ENABLE-NEXT:    vgetmantps $88, (%rdi){1to4}, %xmm0
36; ENABLE-NEXT:    retq
37;
38; DISABLE-LABEL: getmantps_broadcast_128:
39; DISABLE:       # %bb.0:
40; DISABLE-NEXT:    #APP
41; DISABLE-NEXT:    nop
42; DISABLE-NEXT:    #NO_APP
43; DISABLE-NEXT:    vgetmantps $88, (%rdi){1to4}, %xmm0
44; DISABLE-NEXT:    retq
45  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
46  %v0 = load float, ptr %p0, align 4
47  %t0 = insertelement <4 x float> undef, float %v0, i64 0
48  %a0 = shufflevector <4 x float> %t0, <4 x float> undef, <4 x i32> zeroinitializer
49  %2 = call <4 x float> @llvm.x86.avx512.mask.getmant.ps.128(<4 x float> %a0, i32 88, <4 x float> undef, i8 -1)
50  ret <4 x float> %2
51}
52
53declare <4 x float> @llvm.x86.avx512.mask.getmant.ps.128(<4 x float>, i32, <4 x float>, i8)
54
55define <8 x float> @getmantps_mem_256(ptr %p0) {
56; ENABLE-LABEL: getmantps_mem_256:
57; ENABLE:       # %bb.0:
58; ENABLE-NEXT:    #APP
59; ENABLE-NEXT:    nop
60; ENABLE-NEXT:    #NO_APP
61; ENABLE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
62; ENABLE-NEXT:    vgetmantps $88, (%rdi), %ymm0
63; ENABLE-NEXT:    retq
64;
65; DISABLE-LABEL: getmantps_mem_256:
66; DISABLE:       # %bb.0:
67; DISABLE-NEXT:    #APP
68; DISABLE-NEXT:    nop
69; DISABLE-NEXT:    #NO_APP
70; DISABLE-NEXT:    vgetmantps $88, (%rdi), %ymm0
71; DISABLE-NEXT:    retq
72  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
73  %a0 = load <8 x float>, ptr %p0, align 64
74  %2 = call <8 x float> @llvm.x86.avx512.mask.getmant.ps.256(<8 x float> %a0, i32 88, <8 x float> undef, i8 -1)
75  ret <8 x float> %2
76}
77
78define <8 x float> @getmantps_broadcast_256(ptr %p0) {
79; ENABLE-LABEL: getmantps_broadcast_256:
80; ENABLE:       # %bb.0:
81; ENABLE-NEXT:    #APP
82; ENABLE-NEXT:    nop
83; ENABLE-NEXT:    #NO_APP
84; ENABLE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
85; ENABLE-NEXT:    vgetmantps $88, (%rdi){1to8}, %ymm0
86; ENABLE-NEXT:    retq
87;
88; DISABLE-LABEL: getmantps_broadcast_256:
89; DISABLE:       # %bb.0:
90; DISABLE-NEXT:    #APP
91; DISABLE-NEXT:    nop
92; DISABLE-NEXT:    #NO_APP
93; DISABLE-NEXT:    vgetmantps $88, (%rdi){1to8}, %ymm0
94; DISABLE-NEXT:    retq
95  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
96  %v0 = load float, ptr %p0, align 4
97  %t0 = insertelement <8 x float> undef, float %v0, i64 0
98  %a0 = shufflevector <8 x float> %t0, <8 x float> undef, <8 x i32> zeroinitializer
99  %2 = call <8 x float> @llvm.x86.avx512.mask.getmant.ps.256(<8 x float> %a0, i32 88, <8 x float> undef, i8 -1)
100  ret <8 x float> %2
101}
102
103declare <8 x float> @llvm.x86.avx512.mask.getmant.ps.256(<8 x float>, i32, <8 x float>, i8)
104
105define <16 x float> @getmantps_mem_512(ptr %p0) {
106; ENABLE-LABEL: getmantps_mem_512:
107; ENABLE:       # %bb.0:
108; ENABLE-NEXT:    #APP
109; ENABLE-NEXT:    nop
110; ENABLE-NEXT:    #NO_APP
111; ENABLE-NEXT:    vpxor %xmm0, %xmm0, %xmm0
112; ENABLE-NEXT:    vgetmantps $88, (%rdi), %zmm0
113; ENABLE-NEXT:    retq
114;
115; DISABLE-LABEL: getmantps_mem_512:
116; DISABLE:       # %bb.0:
117; DISABLE-NEXT:    #APP
118; DISABLE-NEXT:    nop
119; DISABLE-NEXT:    #NO_APP
120; DISABLE-NEXT:    vgetmantps $88, (%rdi), %zmm0
121; DISABLE-NEXT:    retq
122  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
123  %a0 = load <16 x float>, ptr %p0, align 64
124  %2 = call <16 x float> @llvm.x86.avx512.mask.getmant.ps.512(<16 x float> %a0, i32 88, <16 x float> undef, i16 -1, i32 4)
125  ret <16 x float> %2
126}
127
128define <16 x float> @getmantps_broadcast_512(ptr %p0) {
129; ENABLE-LABEL: getmantps_broadcast_512:
130; ENABLE:       # %bb.0:
131; ENABLE-NEXT:    #APP
132; ENABLE-NEXT:    nop
133; ENABLE-NEXT:    #NO_APP
134; ENABLE-NEXT:    vpxor %xmm0, %xmm0, %xmm0
135; ENABLE-NEXT:    vgetmantps $88, (%rdi){1to16}, %zmm0
136; ENABLE-NEXT:    retq
137;
138; DISABLE-LABEL: getmantps_broadcast_512:
139; DISABLE:       # %bb.0:
140; DISABLE-NEXT:    #APP
141; DISABLE-NEXT:    nop
142; DISABLE-NEXT:    #NO_APP
143; DISABLE-NEXT:    vgetmantps $88, (%rdi){1to16}, %zmm0
144; DISABLE-NEXT:    retq
145  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
146  %v0 = load float, ptr %p0, align 4
147  %t0 = insertelement <16 x float> undef, float %v0, i64 0
148  %a0 = shufflevector <16 x float> %t0, <16 x float> undef, <16 x i32> zeroinitializer
149  %2 = call <16 x float> @llvm.x86.avx512.mask.getmant.ps.512(<16 x float> %a0, i32 88, <16 x float> undef, i16 -1, i32 4)
150  ret <16 x float> %2
151}
152
153declare <16 x float> @llvm.x86.avx512.mask.getmant.ps.512(<16 x float>, i32, <16 x float>, i16, i32)
154
155
156define <2 x double> @getmantpd_mem_128(ptr %p0) {
157; ENABLE-LABEL: getmantpd_mem_128:
158; ENABLE:       # %bb.0:
159; ENABLE-NEXT:    #APP
160; ENABLE-NEXT:    nop
161; ENABLE-NEXT:    #NO_APP
162; ENABLE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
163; ENABLE-NEXT:    vgetmantpd $88, (%rdi), %xmm0
164; ENABLE-NEXT:    retq
165;
166; DISABLE-LABEL: getmantpd_mem_128:
167; DISABLE:       # %bb.0:
168; DISABLE-NEXT:    #APP
169; DISABLE-NEXT:    nop
170; DISABLE-NEXT:    #NO_APP
171; DISABLE-NEXT:    vgetmantpd $88, (%rdi), %xmm0
172; DISABLE-NEXT:    retq
173  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
174  %a0 = load <2 x double>, ptr %p0, align 64
175  %2 = call <2 x double> @llvm.x86.avx512.mask.getmant.pd.128(<2 x double> %a0, i32 88, <2 x double> undef, i8 -1)
176  ret <2 x double> %2
177}
178
179define <2 x double> @getmantpd_broadcast_128(ptr %p0) {
180; ENABLE-LABEL: getmantpd_broadcast_128:
181; ENABLE:       # %bb.0:
182; ENABLE-NEXT:    #APP
183; ENABLE-NEXT:    nop
184; ENABLE-NEXT:    #NO_APP
185; ENABLE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
186; ENABLE-NEXT:    vgetmantpd $88, (%rdi){1to2}, %xmm0
187; ENABLE-NEXT:    retq
188;
189; DISABLE-LABEL: getmantpd_broadcast_128:
190; DISABLE:       # %bb.0:
191; DISABLE-NEXT:    #APP
192; DISABLE-NEXT:    nop
193; DISABLE-NEXT:    #NO_APP
194; DISABLE-NEXT:    vgetmantpd $88, (%rdi){1to2}, %xmm0
195; DISABLE-NEXT:    retq
196  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
197  %v0 = load double, ptr %p0, align 4
198  %t0 = insertelement <2 x double> undef, double %v0, i64 0
199  %a0 = shufflevector <2 x double> %t0, <2 x double> undef, <2 x i32> zeroinitializer
200  %2 = call <2 x double> @llvm.x86.avx512.mask.getmant.pd.128(<2 x double> %a0, i32 88, <2 x double> undef, i8 -1)
201  ret <2 x double> %2
202}
203
204declare <2 x double> @llvm.x86.avx512.mask.getmant.pd.128(<2 x double>, i32, <2 x double>, i8)
205
206define <4 x double> @getmantpd_mem_256(ptr %p0) {
207; ENABLE-LABEL: getmantpd_mem_256:
208; ENABLE:       # %bb.0:
209; ENABLE-NEXT:    #APP
210; ENABLE-NEXT:    nop
211; ENABLE-NEXT:    #NO_APP
212; ENABLE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
213; ENABLE-NEXT:    vgetmantpd $88, (%rdi), %ymm0
214; ENABLE-NEXT:    retq
215;
216; DISABLE-LABEL: getmantpd_mem_256:
217; DISABLE:       # %bb.0:
218; DISABLE-NEXT:    #APP
219; DISABLE-NEXT:    nop
220; DISABLE-NEXT:    #NO_APP
221; DISABLE-NEXT:    vgetmantpd $88, (%rdi), %ymm0
222; DISABLE-NEXT:    retq
223  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
224  %a0 = load <4 x double>, ptr %p0, align 64
225  %2 = call <4 x double> @llvm.x86.avx512.mask.getmant.pd.256(<4 x double> %a0, i32 88, <4 x double> undef, i8 -1)
226  ret <4 x double> %2
227}
228
229define <4 x double> @getmantpd_broadcast_256(ptr %p0) {
230; ENABLE-LABEL: getmantpd_broadcast_256:
231; ENABLE:       # %bb.0:
232; ENABLE-NEXT:    #APP
233; ENABLE-NEXT:    nop
234; ENABLE-NEXT:    #NO_APP
235; ENABLE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
236; ENABLE-NEXT:    vgetmantpd $88, (%rdi){1to4}, %ymm0
237; ENABLE-NEXT:    retq
238;
239; DISABLE-LABEL: getmantpd_broadcast_256:
240; DISABLE:       # %bb.0:
241; DISABLE-NEXT:    #APP
242; DISABLE-NEXT:    nop
243; DISABLE-NEXT:    #NO_APP
244; DISABLE-NEXT:    vgetmantpd $88, (%rdi){1to4}, %ymm0
245; DISABLE-NEXT:    retq
246  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
247  %v0 = load double, ptr %p0, align 4
248  %t0 = insertelement <4 x double> undef, double %v0, i64 0
249  %a0 = shufflevector <4 x double> %t0, <4 x double> undef, <4 x i32> zeroinitializer
250  %2 = call <4 x double> @llvm.x86.avx512.mask.getmant.pd.256(<4 x double> %a0, i32 88, <4 x double> undef, i8 -1)
251  ret <4 x double> %2
252}
253
254declare <4 x double> @llvm.x86.avx512.mask.getmant.pd.256(<4 x double>, i32, <4 x double>, i8)
255
256define <8 x double> @getmantpd_mem_512(ptr %p0) {
257; ENABLE-LABEL: getmantpd_mem_512:
258; ENABLE:       # %bb.0:
259; ENABLE-NEXT:    #APP
260; ENABLE-NEXT:    nop
261; ENABLE-NEXT:    #NO_APP
262; ENABLE-NEXT:    vpxor %xmm0, %xmm0, %xmm0
263; ENABLE-NEXT:    vgetmantpd $88, (%rdi), %zmm0
264; ENABLE-NEXT:    retq
265;
266; DISABLE-LABEL: getmantpd_mem_512:
267; DISABLE:       # %bb.0:
268; DISABLE-NEXT:    #APP
269; DISABLE-NEXT:    nop
270; DISABLE-NEXT:    #NO_APP
271; DISABLE-NEXT:    vgetmantpd $88, (%rdi), %zmm0
272; DISABLE-NEXT:    retq
273  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
274  %a0 = load <8 x double>, ptr %p0, align 64
275  %2 = call <8 x double> @llvm.x86.avx512.mask.getmant.pd.512(<8 x double> %a0, i32 88, <8 x double> undef, i8 -1, i32 4)
276  ret <8 x double> %2
277}
278
279define <8 x double> @getmantpd_broadcast_512(ptr %p0) {
280; ENABLE-LABEL: getmantpd_broadcast_512:
281; ENABLE:       # %bb.0:
282; ENABLE-NEXT:    #APP
283; ENABLE-NEXT:    nop
284; ENABLE-NEXT:    #NO_APP
285; ENABLE-NEXT:    vpxor %xmm0, %xmm0, %xmm0
286; ENABLE-NEXT:    vgetmantpd $88, (%rdi){1to8}, %zmm0
287; ENABLE-NEXT:    retq
288;
289; DISABLE-LABEL: getmantpd_broadcast_512:
290; DISABLE:       # %bb.0:
291; DISABLE-NEXT:    #APP
292; DISABLE-NEXT:    nop
293; DISABLE-NEXT:    #NO_APP
294; DISABLE-NEXT:    vgetmantpd $88, (%rdi){1to8}, %zmm0
295; DISABLE-NEXT:    retq
296  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
297  %v0 = load double, ptr %p0, align 4
298  %t0 = insertelement <8 x double> undef, double %v0, i64 0
299  %a0 = shufflevector <8 x double> %t0, <8 x double> undef, <8 x i32> zeroinitializer
300  %2 = call <8 x double> @llvm.x86.avx512.mask.getmant.pd.512(<8 x double> %a0, i32 88, <8 x double> undef, i8 -1, i32 4)
301  ret <8 x double> %2
302}
303
304declare <8 x double> @llvm.x86.avx512.mask.getmant.pd.512(<8 x double>, i32, <8 x double>, i8, i32)
305
306define <8 x half> @getmantsh(<8 x half> %a0, <8 x half> %a1) {
307; ENABLE-LABEL: getmantsh:
308; ENABLE:       # %bb.0:
309; ENABLE-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
310; ENABLE-NEXT:    #APP
311; ENABLE-NEXT:    nop
312; ENABLE-NEXT:    #NO_APP
313; ENABLE-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
314; ENABLE-NEXT:    vxorps %xmm1, %xmm1, %xmm1
315; ENABLE-NEXT:    vgetmantsh $11, %xmm2, %xmm0, %xmm1
316; ENABLE-NEXT:    vaddph %xmm2, %xmm0, %xmm0
317; ENABLE-NEXT:    vaddph %xmm0, %xmm1, %xmm0
318; ENABLE-NEXT:    retq
319;
320; DISABLE-LABEL: getmantsh:
321; DISABLE:       # %bb.0:
322; DISABLE-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
323; DISABLE-NEXT:    #APP
324; DISABLE-NEXT:    nop
325; DISABLE-NEXT:    #NO_APP
326; DISABLE-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
327; DISABLE-NEXT:    vgetmantsh $11, %xmm2, %xmm0, %xmm1
328; DISABLE-NEXT:    vaddph %xmm2, %xmm0, %xmm0
329; DISABLE-NEXT:    vaddph %xmm0, %xmm1, %xmm0
330; DISABLE-NEXT:    retq
331  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
332  %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 11, <8 x half> undef, i8 -1, i32 4)
333  %t = fadd <8 x half> %a0, %a1
334  %res = fadd <8 x half> %2, %t
335  ret <8 x half> %res
336}
337
338define <8 x half> @getmantsh_mem(<8 x half> %a0, ptr %p1) {
339; ENABLE-LABEL: getmantsh_mem:
340; ENABLE:       # %bb.0:
341; ENABLE-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
342; ENABLE-NEXT:    #APP
343; ENABLE-NEXT:    nop
344; ENABLE-NEXT:    #NO_APP
345; ENABLE-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
346; ENABLE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
347; ENABLE-NEXT:    vgetmantsh $11, (%rdi), %xmm1, %xmm0
348; ENABLE-NEXT:    vaddph %xmm1, %xmm0, %xmm0
349; ENABLE-NEXT:    retq
350;
351; DISABLE-LABEL: getmantsh_mem:
352; DISABLE:       # %bb.0:
353; DISABLE-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
354; DISABLE-NEXT:    #APP
355; DISABLE-NEXT:    nop
356; DISABLE-NEXT:    #NO_APP
357; DISABLE-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
358; DISABLE-NEXT:    vgetmantsh $11, (%rdi), %xmm1, %xmm0
359; DISABLE-NEXT:    vaddph %xmm1, %xmm0, %xmm0
360; DISABLE-NEXT:    retq
361  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
362  %a1 = load <8 x half>, ptr %p1, align 64
363  %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 11, <8 x half> undef, i8 -1, i32 4)
364  %res = fadd <8 x half> %2, %a0
365  ret <8 x half> %res
366}
367
368define <8 x half> @getmantsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {
369; ENABLE-LABEL: getmantsh_maskz:
370; ENABLE:       # %bb.0:
371; ENABLE-NEXT:    #APP
372; ENABLE-NEXT:    nop
373; ENABLE-NEXT:    #NO_APP
374; ENABLE-NEXT:    kmovb (%rdi), %k1
375; ENABLE-NEXT:    vxorps %xmm2, %xmm2, %xmm2
376; ENABLE-NEXT:    vgetmantsh $11, %xmm1, %xmm0, %xmm2 {%k1} {z}
377; ENABLE-NEXT:    vaddph %xmm1, %xmm0, %xmm0
378; ENABLE-NEXT:    vaddph %xmm0, %xmm2, %xmm0
379; ENABLE-NEXT:    retq
380;
381; DISABLE-LABEL: getmantsh_maskz:
382; DISABLE:       # %bb.0:
383; DISABLE-NEXT:    #APP
384; DISABLE-NEXT:    nop
385; DISABLE-NEXT:    #NO_APP
386; DISABLE-NEXT:    kmovb (%rdi), %k1
387; DISABLE-NEXT:    vgetmantsh $11, %xmm1, %xmm0, %xmm2 {%k1} {z}
388; DISABLE-NEXT:    vaddph %xmm1, %xmm0, %xmm0
389; DISABLE-NEXT:    vaddph %xmm0, %xmm2, %xmm0
390; DISABLE-NEXT:    retq
391  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
392  %2 = load i8, ptr %mask
393  %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 11, <8 x half> zeroinitializer, i8 %2, i32 4)
394  %t = fadd <8 x half> %a0, %a1
395  %res = fadd <8 x half> %3, %t
396  ret <8 x half> %res
397}
398
399declare <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half>, <8 x half>, i32, <8 x half>, i8, i32)
400
401define <4 x float> @getmantss(<4 x float> %a0, <4 x float> %a1) {
402; ENABLE-LABEL: getmantss:
403; ENABLE:       # %bb.0:
404; ENABLE-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
405; ENABLE-NEXT:    #APP
406; ENABLE-NEXT:    nop
407; ENABLE-NEXT:    #NO_APP
408; ENABLE-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
409; ENABLE-NEXT:    vxorps %xmm1, %xmm1, %xmm1
410; ENABLE-NEXT:    vgetmantss $11, %xmm2, %xmm0, %xmm1
411; ENABLE-NEXT:    vaddps %xmm2, %xmm0, %xmm0
412; ENABLE-NEXT:    vaddps %xmm0, %xmm1, %xmm0
413; ENABLE-NEXT:    retq
414;
415; DISABLE-LABEL: getmantss:
416; DISABLE:       # %bb.0:
417; DISABLE-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
418; DISABLE-NEXT:    #APP
419; DISABLE-NEXT:    nop
420; DISABLE-NEXT:    #NO_APP
421; DISABLE-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
422; DISABLE-NEXT:    vgetmantss $11, %xmm2, %xmm0, %xmm1
423; DISABLE-NEXT:    vaddps %xmm2, %xmm0, %xmm0
424; DISABLE-NEXT:    vaddps %xmm0, %xmm1, %xmm0
425; DISABLE-NEXT:    retq
426  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
427  %2 = call <4 x float> @llvm.x86.avx512.mask.getmant.ss(<4 x float> %a0, <4 x float> %a1, i32 11, <4 x float> undef, i8 -1, i32 4)
428  %t = fadd <4 x float> %a0, %a1
429  %res = fadd <4 x float> %2, %t
430  ret <4 x float> %res
431}
432
433define <4 x float> @getmantss_mem(<4 x float> %a0, ptr %p1) {
434; ENABLE-LABEL: getmantss_mem:
435; ENABLE:       # %bb.0:
436; ENABLE-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
437; ENABLE-NEXT:    #APP
438; ENABLE-NEXT:    nop
439; ENABLE-NEXT:    #NO_APP
440; ENABLE-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
441; ENABLE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
442; ENABLE-NEXT:    vgetmantss $11, (%rdi), %xmm1, %xmm0
443; ENABLE-NEXT:    vaddps %xmm1, %xmm0, %xmm0
444; ENABLE-NEXT:    retq
445;
446; DISABLE-LABEL: getmantss_mem:
447; DISABLE:       # %bb.0:
448; DISABLE-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
449; DISABLE-NEXT:    #APP
450; DISABLE-NEXT:    nop
451; DISABLE-NEXT:    #NO_APP
452; DISABLE-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
453; DISABLE-NEXT:    vgetmantss $11, (%rdi), %xmm1, %xmm0
454; DISABLE-NEXT:    vaddps %xmm1, %xmm0, %xmm0
455; DISABLE-NEXT:    retq
456  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
457  %a1 = load <4 x float>, ptr %p1, align 64
458  %2 = call <4 x float> @llvm.x86.avx512.mask.getmant.ss(<4 x float> %a0, <4 x float> %a1, i32 11, <4 x float> undef, i8 -1, i32 4)
459  %res = fadd <4 x float> %2, %a0
460  ret <4 x float> %res
461}
462
463define <4 x float> @getmantss_maskz(<4 x float> %a0, <4 x float> %a1, ptr %mask) {
464; ENABLE-LABEL: getmantss_maskz:
465; ENABLE:       # %bb.0:
466; ENABLE-NEXT:    #APP
467; ENABLE-NEXT:    nop
468; ENABLE-NEXT:    #NO_APP
469; ENABLE-NEXT:    kmovb (%rdi), %k1
470; ENABLE-NEXT:    vxorps %xmm2, %xmm2, %xmm2
471; ENABLE-NEXT:    vgetmantss $11, %xmm1, %xmm0, %xmm2 {%k1} {z}
472; ENABLE-NEXT:    vaddps %xmm1, %xmm0, %xmm0
473; ENABLE-NEXT:    vaddps %xmm0, %xmm2, %xmm0
474; ENABLE-NEXT:    retq
475;
476; DISABLE-LABEL: getmantss_maskz:
477; DISABLE:       # %bb.0:
478; DISABLE-NEXT:    #APP
479; DISABLE-NEXT:    nop
480; DISABLE-NEXT:    #NO_APP
481; DISABLE-NEXT:    kmovb (%rdi), %k1
482; DISABLE-NEXT:    vgetmantss $11, %xmm1, %xmm0, %xmm2 {%k1} {z}
483; DISABLE-NEXT:    vaddps %xmm1, %xmm0, %xmm0
484; DISABLE-NEXT:    vaddps %xmm0, %xmm2, %xmm0
485; DISABLE-NEXT:    retq
486  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
487  %2 = load i8, ptr %mask
488  %3 = call <4 x float> @llvm.x86.avx512.mask.getmant.ss(<4 x float> %a0, <4 x float> %a1, i32 11, <4 x float> zeroinitializer, i8 %2, i32 4)
489  %t = fadd <4 x float> %a0, %a1
490  %res = fadd <4 x float> %3, %t
491  ret <4 x float> %res
492}
493
494declare <4 x float> @llvm.x86.avx512.mask.getmant.ss(<4 x float>, <4 x float>, i32, <4 x float>, i8, i32)
495
496define <2 x double> @getmantsd(<2 x double> %a0, <2 x double> %a1) {
497; ENABLE-LABEL: getmantsd:
498; ENABLE:       # %bb.0:
499; ENABLE-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
500; ENABLE-NEXT:    #APP
501; ENABLE-NEXT:    nop
502; ENABLE-NEXT:    #NO_APP
503; ENABLE-NEXT:    vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
504; ENABLE-NEXT:    vxorps %xmm1, %xmm1, %xmm1
505; ENABLE-NEXT:    vgetmantsd $11, %xmm2, %xmm0, %xmm1
506; ENABLE-NEXT:    vaddpd %xmm2, %xmm0, %xmm0
507; ENABLE-NEXT:    vaddpd %xmm0, %xmm1, %xmm0
508; ENABLE-NEXT:    retq
509;
510; DISABLE-LABEL: getmantsd:
511; DISABLE:       # %bb.0:
512; DISABLE-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
513; DISABLE-NEXT:    #APP
514; DISABLE-NEXT:    nop
515; DISABLE-NEXT:    #NO_APP
516; DISABLE-NEXT:    vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
517; DISABLE-NEXT:    vgetmantsd $11, %xmm2, %xmm0, %xmm1
518; DISABLE-NEXT:    vaddpd %xmm2, %xmm0, %xmm0
519; DISABLE-NEXT:    vaddpd %xmm0, %xmm1, %xmm0
520; DISABLE-NEXT:    retq
521  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
522  %2 = call <2 x double> @llvm.x86.avx512.mask.getmant.sd(<2 x double> %a0, <2 x double> %a1, i32 11, <2 x double> undef, i8 -1, i32 4)
523  %t = fadd <2 x double> %a0, %a1
524  %res = fadd <2 x double> %2, %t
525  ret <2 x double> %res
526}
527
528define <2 x double> @getmantsd_mem(<2 x double> %a0, ptr %p1) {
529; ENABLE-LABEL: getmantsd_mem:
530; ENABLE:       # %bb.0:
531; ENABLE-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
532; ENABLE-NEXT:    #APP
533; ENABLE-NEXT:    nop
534; ENABLE-NEXT:    #NO_APP
535; ENABLE-NEXT:    vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
536; ENABLE-NEXT:    vxorps %xmm0, %xmm0, %xmm0
537; ENABLE-NEXT:    vgetmantsd $11, (%rdi), %xmm1, %xmm0
538; ENABLE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0
539; ENABLE-NEXT:    retq
540;
541; DISABLE-LABEL: getmantsd_mem:
542; DISABLE:       # %bb.0:
543; DISABLE-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
544; DISABLE-NEXT:    #APP
545; DISABLE-NEXT:    nop
546; DISABLE-NEXT:    #NO_APP
547; DISABLE-NEXT:    vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
548; DISABLE-NEXT:    vgetmantsd $11, (%rdi), %xmm1, %xmm0
549; DISABLE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0
550; DISABLE-NEXT:    retq
551  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
552  %a1 = load <2 x double>, ptr %p1, align 64
553  %2 = call <2 x double> @llvm.x86.avx512.mask.getmant.sd(<2 x double> %a0, <2 x double> %a1, i32 11, <2 x double> undef, i8 -1, i32 4)
554  %res = fadd <2 x double> %2, %a0
555  ret <2 x double> %res
556}
557
558define <2 x double> @getmantsd_maskz(<2 x double> %a0, <2 x double> %a1, ptr %mask) {
559; ENABLE-LABEL: getmantsd_maskz:
560; ENABLE:       # %bb.0:
561; ENABLE-NEXT:    #APP
562; ENABLE-NEXT:    nop
563; ENABLE-NEXT:    #NO_APP
564; ENABLE-NEXT:    kmovb (%rdi), %k1
565; ENABLE-NEXT:    vxorps %xmm2, %xmm2, %xmm2
566; ENABLE-NEXT:    vgetmantsd $11, %xmm1, %xmm0, %xmm2 {%k1} {z}
567; ENABLE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0
568; ENABLE-NEXT:    vaddpd %xmm0, %xmm2, %xmm0
569; ENABLE-NEXT:    retq
570;
571; DISABLE-LABEL: getmantsd_maskz:
572; DISABLE:       # %bb.0:
573; DISABLE-NEXT:    #APP
574; DISABLE-NEXT:    nop
575; DISABLE-NEXT:    #NO_APP
576; DISABLE-NEXT:    kmovb (%rdi), %k1
577; DISABLE-NEXT:    vgetmantsd $11, %xmm1, %xmm0, %xmm2 {%k1} {z}
578; DISABLE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0
579; DISABLE-NEXT:    vaddpd %xmm0, %xmm2, %xmm0
580; DISABLE-NEXT:    retq
581  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
582  %2 = load i8, ptr %mask
583  %3 = call <2 x double> @llvm.x86.avx512.mask.getmant.sd(<2 x double> %a0, <2 x double> %a1, i32 11, <2 x double> zeroinitializer, i8 %2, i32 4)
584  %t = fadd <2 x double> %a0, %a1
585  %res = fadd <2 x double> %3, %t
586  ret <2 x double> %res
587}
588
589declare <2 x double> @llvm.x86.avx512.mask.getmant.sd(<2 x double>, <2 x double>, i32, <2 x double>, i8, i32)
590