Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / DirectX / fdot.ll
blob3e13b2ad2650c8ebaf14e8ca8523ec2613039726
1 ; RUN: opt -S  -dxil-op-lower  < %s | FileCheck %s
3 ; Make sure dxil operation function calls for dot are generated for int/uint vectors.
5 ; CHECK-LABEL: dot_half2
6 define noundef half @dot_half2(<2 x half> noundef %a, <2 x half> noundef %b) {
7 entry:
8 ; CHECK: extractelement <2 x half> %a, i32 0
9 ; CHECK: extractelement <2 x half> %a, i32 1
10 ; CHECK: extractelement <2 x half> %b, i32 0
11 ; CHECK: extractelement <2 x half> %b, i32 1
12 ; CHECK: call half @dx.op.dot2.f16(i32 54, half %{{.*}}, half %{{.*}}, half %{{.*}}, half %{{.*}})
13   %dx.dot = call half @llvm.dx.dot2.v2f16(<2 x half> %a, <2 x half> %b)
14   ret half %dx.dot
17 ; CHECK-LABEL: dot_half3
18 define noundef half @dot_half3(<3 x half> noundef %a, <3 x half> noundef %b) {
19 entry:
20 ; CHECK: extractelement <3 x half> %a, i32 0
21 ; CHECK: extractelement <3 x half> %a, i32 1
22 ; CHECK: extractelement <3 x half> %a, i32 2
23 ; CHECK: extractelement <3 x half> %b, i32 0
24 ; CHECK: extractelement <3 x half> %b, i32 1
25 ; CHECK: extractelement <3 x half> %b, i32 2
26 ; CHECK: call half @dx.op.dot3.f16(i32 55, half %{{.*}}, half %{{.*}}, half %{{.*}}, half %{{.*}}, half %{{.*}}, half %{{.*}})
27   %dx.dot = call half @llvm.dx.dot3.v3f16(<3 x half> %a, <3 x half> %b)
28   ret half %dx.dot
31 ; CHECK-LABEL: dot_half4
32 define noundef half @dot_half4(<4 x half> noundef %a, <4 x half> noundef %b) {
33 entry:
34 ; CHECK: extractelement <4 x half> %a, i32 0
35 ; CHECK: extractelement <4 x half> %a, i32 1
36 ; CHECK: extractelement <4 x half> %a, i32 2
37 ; CHECK: extractelement <4 x half> %a, i32 3
38 ; CHECK: extractelement <4 x half> %b, i32 0
39 ; CHECK: extractelement <4 x half> %b, i32 1
40 ; CHECK: extractelement <4 x half> %b, i32 2
41 ; CHECK: extractelement <4 x half> %b, i32 3
42 ; CHECK: call half @dx.op.dot4.f16(i32 56, half %{{.*}}, half %{{.*}}, half %{{.*}}, half %{{.*}}, half %{{.*}}, half %{{.*}}, half %{{.*}}, half %{{.*}})
43   %dx.dot = call half @llvm.dx.dot4.v4f16(<4 x half> %a, <4 x half> %b)
44   ret half %dx.dot
47 ; CHECK-LABEL: dot_float2
48 define noundef float @dot_float2(<2 x float> noundef %a, <2 x float> noundef %b) {
49 entry:
50 ; CHECK: extractelement <2 x float> %a, i32 0
51 ; CHECK: extractelement <2 x float> %a, i32 1
52 ; CHECK: extractelement <2 x float> %b, i32 0
53 ; CHECK: extractelement <2 x float> %b, i32 1
54 ; CHECK: call float @dx.op.dot2.f32(i32 54, float %{{.*}}, float %{{.*}}, float %{{.*}}, float %{{.*}})
55   %dx.dot = call float @llvm.dx.dot2.v2f32(<2 x float> %a, <2 x float> %b)
56   ret float %dx.dot
59 ; CHECK-LABEL: dot_float3
60 define noundef float @dot_float3(<3 x float> noundef %a, <3 x float> noundef %b) {
61 entry:
62 ; CHECK: extractelement <3 x float> %a, i32 0
63 ; CHECK: extractelement <3 x float> %a, i32 1
64 ; CHECK: extractelement <3 x float> %a, i32 2
65 ; CHECK: extractelement <3 x float> %b, i32 0
66 ; CHECK: extractelement <3 x float> %b, i32 1
67 ; CHECK: extractelement <3 x float> %b, i32 2
68 ; CHECK: call float @dx.op.dot3.f32(i32 55, float %{{.*}}, float %{{.*}}, float %{{.*}}, float %{{.*}}, float %{{.*}}, float %{{.*}})
69   %dx.dot = call float @llvm.dx.dot3.v3f32(<3 x float> %a, <3 x float> %b)
70   ret float %dx.dot
73 ; CHECK-LABEL: dot_float4
74 define noundef float @dot_float4(<4 x float> noundef %a, <4 x float> noundef %b) {
75 entry:
76 ; CHECK: extractelement <4 x float> %a, i32 0
77 ; CHECK: extractelement <4 x float> %a, i32 1
78 ; CHECK: extractelement <4 x float> %a, i32 2
79 ; CHECK: extractelement <4 x float> %a, i32 3
80 ; CHECK: extractelement <4 x float> %b, i32 0
81 ; CHECK: extractelement <4 x float> %b, i32 1
82 ; CHECK: extractelement <4 x float> %b, i32 2
83 ; CHECK: extractelement <4 x float> %b, i32 3
84 ; CHECK: call float @dx.op.dot4.f32(i32 56, float %{{.*}}, float %{{.*}}, float %{{.*}}, float %{{.*}}, float %{{.*}}, float %{{.*}}, float %{{.*}}, float %{{.*}})
85   %dx.dot = call float @llvm.dx.dot4.v4f32(<4 x float> %a, <4 x float> %b)
86   ret float %dx.dot
89 declare half  @llvm.dx.dot.v2f16(<2 x half> , <2 x half> )
90 declare half  @llvm.dx.dot.v3f16(<3 x half> , <3 x half> )
91 declare half  @llvm.dx.dot.v4f16(<4 x half> , <4 x half> )
92 declare float @llvm.dx.dot.v2f32(<2 x float>, <2 x float>)
93 declare float @llvm.dx.dot.v3f32(<3 x float>, <3 x float>)
94 declare float @llvm.dx.dot.v4f32(<4 x float>, <4 x float>)