xref: /llvm-project/llvm/test/CodeGen/X86/avx512bf16-intrinsics-upgrade.ll (revision bc1819389fb4701cdeba5e093278e32dd668d6d5)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512bf16 --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X86
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bf16 --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X64
4
5declare <32 x i16> @llvm.x86.avx512bf16.cvtne2ps2bf16.512(<16 x float>, <16 x float>) #3
6
7define <8 x i64> @test_mm512_cvtne2ps2bf16_512(<16 x float> %A, <16 x float> %B) local_unnamed_addr #2 {
8; CHECK-LABEL: test_mm512_cvtne2ps2bf16_512:
9; CHECK:       # %bb.0: # %entry
10; CHECK-NEXT:    vcvtne2ps2bf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7f,0x48,0x72,0xc1]
11; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]
12entry:
13  %0 = tail call <32 x i16> @llvm.x86.avx512bf16.cvtne2ps2bf16.512(<16 x float> %A, <16 x float> %B) #4
14  %1 = bitcast <32 x i16> %0 to <8 x i64>
15  ret <8 x i64> %1
16}
17
18define <8 x i64> @test_mm512_maskz_cvtne2ps2bf16_512(<16 x float> %A, <16 x float> %B, i32 %U) local_unnamed_addr #2 {
19; X86-LABEL: test_mm512_maskz_cvtne2ps2bf16_512:
20; X86:       # %bb.0: # %entry
21; X86-NEXT:    vcvtne2ps2bf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7f,0x48,0x72,0xc1]
22; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]
23; X86-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0xff,0xc9,0x6f,0xc0]
24; X86-NEXT:    retl # encoding: [0xc3]
25;
26; X64-LABEL: test_mm512_maskz_cvtne2ps2bf16_512:
27; X64:       # %bb.0: # %entry
28; X64-NEXT:    vcvtne2ps2bf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7f,0x48,0x72,0xc1]
29; X64-NEXT:    kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]
30; X64-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0xff,0xc9,0x6f,0xc0]
31; X64-NEXT:    retq # encoding: [0xc3]
32entry:
33  %0 = tail call <32 x i16> @llvm.x86.avx512bf16.cvtne2ps2bf16.512(<16 x float> %A, <16 x float> %B) #4
34  %1 = bitcast i32 %U to <32 x i1>
35  %2 = select <32 x i1> %1, <32 x i16> %0, <32 x i16> zeroinitializer
36  %3 = bitcast <32 x i16> %2 to <8 x i64>
37  ret <8 x i64> %3
38}
39
40define <8 x i64> @test_mm512_mask_cvtne2ps2bf16_512(<8 x i64> %C, i32 %U, <16 x float> %A, <16 x float> %B) local_unnamed_addr #2 {
41; X86-LABEL: test_mm512_mask_cvtne2ps2bf16_512:
42; X86:       # %bb.0: # %entry
43; X86-NEXT:    vcvtne2ps2bf16 %zmm2, %zmm1, %zmm1 # encoding: [0x62,0xf2,0x77,0x48,0x72,0xca]
44; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]
45; X86-NEXT:    vmovdqu16 %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf1,0xff,0x49,0x6f,0xc1]
46; X86-NEXT:    retl # encoding: [0xc3]
47;
48; X64-LABEL: test_mm512_mask_cvtne2ps2bf16_512:
49; X64:       # %bb.0: # %entry
50; X64-NEXT:    vcvtne2ps2bf16 %zmm2, %zmm1, %zmm1 # encoding: [0x62,0xf2,0x77,0x48,0x72,0xca]
51; X64-NEXT:    kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]
52; X64-NEXT:    vmovdqu16 %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf1,0xff,0x49,0x6f,0xc1]
53; X64-NEXT:    retq # encoding: [0xc3]
54entry:
55  %0 = tail call <32 x i16> @llvm.x86.avx512bf16.cvtne2ps2bf16.512(<16 x float> %A, <16 x float> %B) #4
56  %1 = bitcast <8 x i64> %C to <32 x i16>
57  %2 = bitcast i32 %U to <32 x i1>
58  %3 = select <32 x i1> %2, <32 x i16> %0, <32 x i16> %1
59  %4 = bitcast <32 x i16> %3 to <8 x i64>
60  ret <8 x i64> %4
61}
62
63declare <16 x i16> @llvm.x86.avx512bf16.cvtneps2bf16.512(<16 x float>) #3
64
65define <4 x i64> @test_mm512_cvtneps2bf16_512(<16 x float> %A) local_unnamed_addr #2 {
66; CHECK-LABEL: test_mm512_cvtneps2bf16_512:
67; CHECK:       # %bb.0: # %entry
68; CHECK-NEXT:    vcvtneps2bf16 %zmm0, %ymm0 # encoding: [0x62,0xf2,0x7e,0x48,0x72,0xc0]
69; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]
70entry:
71  %0 = tail call <16 x i16> @llvm.x86.avx512bf16.cvtneps2bf16.512(<16 x float> %A) #4
72  %1 = bitcast <16 x i16> %0 to <4 x i64>
73  ret <4 x i64> %1
74}
75
76define <4 x i64> @test_mm512_maskz_cvtneps2bf16_512(<16 x float> %A, i16 %U) local_unnamed_addr #2 {
77; X86-LABEL: test_mm512_maskz_cvtneps2bf16_512:
78; X86:       # %bb.0: # %entry
79; X86-NEXT:    vcvtneps2bf16 %zmm0, %ymm0 # encoding: [0x62,0xf2,0x7e,0x48,0x72,0xc0]
80; X86-NEXT:    kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]
81; X86-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0xff,0xc9,0x6f,0xc0]
82; X86-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
83; X86-NEXT:    retl # encoding: [0xc3]
84;
85; X64-LABEL: test_mm512_maskz_cvtneps2bf16_512:
86; X64:       # %bb.0: # %entry
87; X64-NEXT:    vcvtneps2bf16 %zmm0, %ymm0 # encoding: [0x62,0xf2,0x7e,0x48,0x72,0xc0]
88; X64-NEXT:    kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]
89; X64-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0xff,0xc9,0x6f,0xc0]
90; X64-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
91; X64-NEXT:    retq # encoding: [0xc3]
92entry:
93  %0 = tail call <16 x i16> @llvm.x86.avx512bf16.cvtneps2bf16.512(<16 x float> %A) #4
94  %1 = bitcast i16 %U to <16 x i1>
95  %2 = select <16 x i1> %1, <16 x i16> %0, <16 x i16> zeroinitializer
96  %3 = bitcast <16 x i16> %2 to <4 x i64>
97  ret <4 x i64> %3
98}
99
100define <4 x i64> @test_mm512_mask_cvtneps2bf16_512(<4 x i64> %C, i16 %U, <16 x float> %A) local_unnamed_addr #2 {
101; X86-LABEL: test_mm512_mask_cvtneps2bf16_512:
102; X86:       # %bb.0: # %entry
103; X86-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
104; X86-NEXT:    vcvtneps2bf16 %zmm1, %ymm1 # encoding: [0x62,0xf2,0x7e,0x48,0x72,0xc9]
105; X86-NEXT:    kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]
106; X86-NEXT:    vmovdqu16 %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf1,0xff,0x49,0x6f,0xc1]
107; X86-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
108; X86-NEXT:    retl # encoding: [0xc3]
109;
110; X64-LABEL: test_mm512_mask_cvtneps2bf16_512:
111; X64:       # %bb.0: # %entry
112; X64-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
113; X64-NEXT:    vcvtneps2bf16 %zmm1, %ymm1 # encoding: [0x62,0xf2,0x7e,0x48,0x72,0xc9]
114; X64-NEXT:    kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]
115; X64-NEXT:    vmovdqu16 %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf1,0xff,0x49,0x6f,0xc1]
116; X64-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
117; X64-NEXT:    retq # encoding: [0xc3]
118entry:
119  %0 = tail call <16 x i16> @llvm.x86.avx512bf16.cvtneps2bf16.512(<16 x float> %A) #4
120  %1 = bitcast <4 x i64> %C to <16 x i16>
121  %2 = bitcast i16 %U to <16 x i1>
122  %3 = select <16 x i1> %2, <16 x i16> %0, <16 x i16> %1
123  %4 = bitcast <16 x i16> %3 to <4 x i64>
124  ret <4 x i64> %4
125}
126
127declare <16 x float> @llvm.x86.avx512bf16.dpbf16ps.512(<16 x float>, <16 x i32>, <16 x i32>) #3
128
129define <16 x float> @test_mm512_dpbf16ps_512(<16 x float> %E, <16 x i32> %A, <16 x i32> %B) local_unnamed_addr #2 {
130; CHECK-LABEL: test_mm512_dpbf16ps_512:
131; CHECK:       # %bb.0: # %entry
132; CHECK-NEXT:    vdpbf16ps %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x76,0x48,0x52,0xc2]
133; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]
134entry:
135  %0 = tail call <16 x float> @llvm.x86.avx512bf16.dpbf16ps.512(<16 x float> %E, <16 x i32> %A, <16 x i32> %B) #4
136  ret <16 x float> %0
137}
138
139define <16 x float> @test_mm512_maskz_dpbf16ps_512(<16 x float> %E, <16 x i32> %A, <16 x i32> %B, i16 zeroext %U) local_unnamed_addr #2 {
140; X86-LABEL: test_mm512_maskz_dpbf16ps_512:
141; X86:       # %bb.0: # %entry
142; X86-NEXT:    kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]
143; X86-NEXT:    vdpbf16ps %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x76,0xc9,0x52,0xc2]
144; X86-NEXT:    retl # encoding: [0xc3]
145;
146; X64-LABEL: test_mm512_maskz_dpbf16ps_512:
147; X64:       # %bb.0: # %entry
148; X64-NEXT:    kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]
149; X64-NEXT:    vdpbf16ps %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x76,0xc9,0x52,0xc2]
150; X64-NEXT:    retq # encoding: [0xc3]
151entry:
152  %0 = tail call <16 x float> @llvm.x86.avx512bf16.dpbf16ps.512(<16 x float> %E, <16 x i32> %A, <16 x i32> %B) #4
153  %1 = bitcast i16 %U to <16 x i1>
154  %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> zeroinitializer
155  ret <16 x float> %2
156}
157define <16 x float> @test_mm512_mask_dpbf16ps_512(i16 zeroext %U, <16 x float> %E, <16 x i32> %A, <16 x i32> %B) local_unnamed_addr #2 {
158; X86-LABEL: test_mm512_mask_dpbf16ps_512:
159; X86:       # %bb.0: # %entry
160; X86-NEXT:    kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]
161; X86-NEXT:    vdpbf16ps %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x76,0x49,0x52,0xc2]
162; X86-NEXT:    retl # encoding: [0xc3]
163;
164; X64-LABEL: test_mm512_mask_dpbf16ps_512:
165; X64:       # %bb.0: # %entry
166; X64-NEXT:    kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]
167; X64-NEXT:    vdpbf16ps %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x76,0x49,0x52,0xc2]
168; X64-NEXT:    retq # encoding: [0xc3]
169entry:
170  %0 = tail call <16 x float> @llvm.x86.avx512bf16.dpbf16ps.512(<16 x float> %E, <16 x i32> %A, <16 x i32> %B) #4
171  %1 = bitcast i16 %U to <16 x i1>
172  %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %E
173  ret <16 x float> %2
174}
175