xref: /llvm-project/llvm/test/CodeGen/SPIRV/llvm-intrinsics/llvm-vector-reduce/fadd.ll (revision 67d3ef74b31e1517d4f679e754cc2b3041c95901)
1*67d3ef74SVyacheslav Levytskyy; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_function_pointers %s -o - | FileCheck %s
2*67d3ef74SVyacheslav Levytskyy; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
3540d2551SVyacheslav Levytskyy
4*67d3ef74SVyacheslav Levytskyy; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_function_pointers %s -o - | FileCheck %s
5*67d3ef74SVyacheslav Levytskyy; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
6540d2551SVyacheslav Levytskyy
7540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[Half:.*]] = OpTypeFloat 16
8540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[HalfVec2:.*]] = OpTypeVector %[[Half]] 2
9540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[HalfVec3:.*]] = OpTypeVector %[[Half]] 3
10540d2551SVyacheslav Levytskyy
11540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[Float:.*]] = OpTypeFloat 32
12540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[FloatVec2:.*]] = OpTypeVector %[[Float]] 2
13540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[FloatVec3:.*]] = OpTypeVector %[[Float]] 3
14540d2551SVyacheslav Levytskyy
15540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[Double:.*]] = OpTypeFloat 64
16540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[DoubleVec2:.*]] = OpTypeVector %[[Double]] 2
17540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[DoubleVec3:.*]] = OpTypeVector %[[Double]] 3
18540d2551SVyacheslav Levytskyy
19540d2551SVyacheslav Levytskyy; CHECK: OpFunction
20540d2551SVyacheslav Levytskyy; CHECK: %[[Param2Half:.*]] = OpFunctionParameter %[[Half]]
21540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec2Half:.*]] = OpFunctionParameter %[[HalfVec2]]
22540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2HalfItem0:.*]] = OpCompositeExtract %[[Half]] %[[ParamVec2Half]] 0
23540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2HalfR1:.*]] = OpFAdd %[[Half]] %[[Param2Half]] %[[Vec2HalfItem0]]
24540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2HalfItem1:.*]] = OpCompositeExtract %[[Half]] %[[ParamVec2Half]] 1
25540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2HalfR2:.*]] = OpFAdd %[[Half]] %[[Vec2HalfR1]] %[[Vec2HalfItem1]]
26540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec2HalfR2]]
27540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
28540d2551SVyacheslav Levytskyy
29540d2551SVyacheslav Levytskyy; CHECK: OpFunction
30540d2551SVyacheslav Levytskyy; CHECK: %[[Param2Half:.*]] = OpFunctionParameter %[[Half]]
31540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec3Half:.*]] = OpFunctionParameter %[[HalfVec3]]
32540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3HalfItem0:.*]] = OpCompositeExtract %[[Half]] %[[ParamVec3Half]] 0
33540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3HalfR1:.*]] = OpFAdd %[[Half]] %[[Param2Half]] %[[Vec3HalfItem0]]
34540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3HalfItem1:.*]] = OpCompositeExtract %[[Half]] %[[ParamVec3Half]] 1
35540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3HalfR2:.*]] = OpFAdd %[[Half]] %[[Vec3HalfR1]] %[[Vec3HalfItem1]]
36540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3HalfItem2:.*]] = OpCompositeExtract %[[Half]] %[[ParamVec3Half]] 2
37540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3HalfR3:.*]] = OpFAdd %[[Half]] %[[Vec3HalfR2]] %[[Vec3HalfItem2]]
38540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec3HalfR3]]
39540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
40540d2551SVyacheslav Levytskyy
41540d2551SVyacheslav Levytskyy; CHECK: OpFunction
42540d2551SVyacheslav Levytskyy; CHECK: %[[Param2Float:.*]] = OpFunctionParameter %[[Float]]
43540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec2Float:.*]] = OpFunctionParameter %[[FloatVec2]]
44540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2FloatItem0:.*]] = OpCompositeExtract %[[Float]] %[[ParamVec2Float]] 0
45540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2FloatR1:.*]] = OpFAdd %[[Float]] %[[Param2Float]] %[[Vec2FloatItem0]]
46540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2FloatItem1:.*]] = OpCompositeExtract %[[Float]] %[[ParamVec2Float]] 1
47540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2FloatR2:.*]] = OpFAdd %[[Float]] %[[Vec2FloatR1]] %[[Vec2FloatItem1]]
48540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec2FloatR2]]
49540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
50540d2551SVyacheslav Levytskyy
51540d2551SVyacheslav Levytskyy; CHECK: OpFunction
52540d2551SVyacheslav Levytskyy; CHECK: %[[Param2Float:.*]] = OpFunctionParameter %[[Float]]
53540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec3Float:.*]] = OpFunctionParameter %[[FloatVec3]]
54540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3FloatItem0:.*]] = OpCompositeExtract %[[Float]] %[[ParamVec3Float]] 0
55540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3FloatR1:.*]] = OpFAdd %[[Float]] %[[Param2Float]] %[[Vec3FloatItem0]]
56540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3FloatItem1:.*]] = OpCompositeExtract %[[Float]] %[[ParamVec3Float]] 1
57540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3FloatR2:.*]] = OpFAdd %[[Float]] %[[Vec3FloatR1]] %[[Vec3FloatItem1]]
58540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3FloatItem2:.*]] = OpCompositeExtract %[[Float]] %[[ParamVec3Float]] 2
59540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3FloatR3:.*]] = OpFAdd %[[Float]] %[[Vec3FloatR2]] %[[Vec3FloatItem2]]
60540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec3FloatR3]]
61540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
62540d2551SVyacheslav Levytskyy
63540d2551SVyacheslav Levytskyy; CHECK: OpFunction
64540d2551SVyacheslav Levytskyy; CHECK: %[[Param2Double:.*]] = OpFunctionParameter %[[Double]]
65540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec2Double:.*]] = OpFunctionParameter %[[DoubleVec2]]
66540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2DoubleItem0:.*]] = OpCompositeExtract %[[Double]] %[[ParamVec2Double]] 0
67540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2DoubleR1:.*]] = OpFAdd %[[Double]] %[[Param2Double]] %[[Vec2DoubleItem0]]
68540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2DoubleItem1:.*]] = OpCompositeExtract %[[Double]] %[[ParamVec2Double]] 1
69540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2DoubleR2:.*]] = OpFAdd %[[Double]] %[[Vec2DoubleR1]] %[[Vec2DoubleItem1]]
70540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec2DoubleR2]]
71540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
72540d2551SVyacheslav Levytskyy
73540d2551SVyacheslav Levytskyy; CHECK: OpFunction
74540d2551SVyacheslav Levytskyy; CHECK: %[[Param2Double:.*]] = OpFunctionParameter %[[Double]]
75540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec3Double:.*]] = OpFunctionParameter %[[DoubleVec3]]
76540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3DoubleItem0:.*]] = OpCompositeExtract %[[Double]] %[[ParamVec3Double]] 0
77540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3DoubleR1:.*]] = OpFAdd %[[Double]] %[[Param2Double]] %[[Vec3DoubleItem0]]
78540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3DoubleItem1:.*]] = OpCompositeExtract %[[Double]] %[[ParamVec3Double]] 1
79540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3DoubleR2:.*]] = OpFAdd %[[Double]] %[[Vec3DoubleR1]] %[[Vec3DoubleItem1]]
80540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3DoubleItem2:.*]] = OpCompositeExtract %[[Double]] %[[ParamVec3Double]] 2
81540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3DoubleR3:.*]] = OpFAdd %[[Double]] %[[Vec3DoubleR2]] %[[Vec3DoubleItem2]]
82540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec3DoubleR3]]
83540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
84540d2551SVyacheslav Levytskyy
85540d2551SVyacheslav Levytskyydefine spir_func half @test_vector_reduce_fadd_v2half(half %sp, <2 x half> %v) {
86540d2551SVyacheslav Levytskyyentry:
87540d2551SVyacheslav Levytskyy  %res = call half @llvm.vector.reduce.fadd.v2half(half %sp, <2 x half> %v)
88540d2551SVyacheslav Levytskyy  ret half %res
89540d2551SVyacheslav Levytskyy}
90540d2551SVyacheslav Levytskyy
91540d2551SVyacheslav Levytskyydefine spir_func half @test_vector_reduce_fadd_v3half(half %sp, <3 x half> %v) {
92540d2551SVyacheslav Levytskyyentry:
93540d2551SVyacheslav Levytskyy  %res = call half @llvm.vector.reduce.fadd.v3half(half %sp, <3 x half> %v)
94540d2551SVyacheslav Levytskyy  ret half %res
95540d2551SVyacheslav Levytskyy}
96540d2551SVyacheslav Levytskyy
97540d2551SVyacheslav Levytskyydefine spir_func half @test_vector_reduce_fadd_v4half(half %sp, <4 x half> %v) {
98540d2551SVyacheslav Levytskyyentry:
99540d2551SVyacheslav Levytskyy  %res = call half @llvm.vector.reduce.fadd.v4half(half %sp, <4 x half> %v)
100540d2551SVyacheslav Levytskyy  ret half %res
101540d2551SVyacheslav Levytskyy}
102540d2551SVyacheslav Levytskyy
103540d2551SVyacheslav Levytskyydefine spir_func half @test_vector_reduce_fadd_v8half(half %sp, <8 x half> %v) {
104540d2551SVyacheslav Levytskyyentry:
105540d2551SVyacheslav Levytskyy  %res = call half @llvm.vector.reduce.fadd.v8half(half %sp, <8 x half> %v)
106540d2551SVyacheslav Levytskyy  ret half %res
107540d2551SVyacheslav Levytskyy}
108540d2551SVyacheslav Levytskyy
109540d2551SVyacheslav Levytskyydefine spir_func half @test_vector_reduce_fadd_v16half(half %sp, <16 x half> %v) {
110540d2551SVyacheslav Levytskyyentry:
111540d2551SVyacheslav Levytskyy  %res = call half @llvm.vector.reduce.fadd.v16half(half %sp, <16 x half> %v)
112540d2551SVyacheslav Levytskyy  ret half %res
113540d2551SVyacheslav Levytskyy}
114540d2551SVyacheslav Levytskyy
115540d2551SVyacheslav Levytskyydefine spir_func float @test_vector_reduce_fadd_v2float(float %sp, <2 x float> %v) {
116540d2551SVyacheslav Levytskyyentry:
117540d2551SVyacheslav Levytskyy  %res = call float @llvm.vector.reduce.fadd.v2float(float %sp, <2 x float> %v)
118540d2551SVyacheslav Levytskyy  ret float %res
119540d2551SVyacheslav Levytskyy}
120540d2551SVyacheslav Levytskyy
121540d2551SVyacheslav Levytskyydefine spir_func float @test_vector_reduce_fadd_v3float(float %sp, <3 x float> %v) {
122540d2551SVyacheslav Levytskyyentry:
123540d2551SVyacheslav Levytskyy  %res = call float @llvm.vector.reduce.fadd.v3float(float %sp, <3 x float> %v)
124540d2551SVyacheslav Levytskyy  ret float %res
125540d2551SVyacheslav Levytskyy}
126540d2551SVyacheslav Levytskyy
127540d2551SVyacheslav Levytskyydefine spir_func float @test_vector_reduce_fadd_v4float(float %sp, <4 x float> %v) {
128540d2551SVyacheslav Levytskyyentry:
129540d2551SVyacheslav Levytskyy  %res = call float @llvm.vector.reduce.fadd.v4float(float %sp, <4 x float> %v)
130540d2551SVyacheslav Levytskyy  ret float %res
131540d2551SVyacheslav Levytskyy}
132540d2551SVyacheslav Levytskyy
133540d2551SVyacheslav Levytskyydefine spir_func float @test_vector_reduce_fadd_v8float(float %sp, <8 x float> %v) {
134540d2551SVyacheslav Levytskyyentry:
135540d2551SVyacheslav Levytskyy  %res = call float @llvm.vector.reduce.fadd.v8float(float %sp, <8 x float> %v)
136540d2551SVyacheslav Levytskyy  ret float %res
137540d2551SVyacheslav Levytskyy}
138540d2551SVyacheslav Levytskyy
139540d2551SVyacheslav Levytskyydefine spir_func float @test_vector_reduce_fadd_v16float(float %sp, <16 x float> %v) {
140540d2551SVyacheslav Levytskyyentry:
141540d2551SVyacheslav Levytskyy  %res = call float @llvm.vector.reduce.fadd.v16float(float %sp, <16 x float> %v)
142540d2551SVyacheslav Levytskyy  ret float %res
143540d2551SVyacheslav Levytskyy}
144540d2551SVyacheslav Levytskyy
145540d2551SVyacheslav Levytskyy
146540d2551SVyacheslav Levytskyydefine spir_func double @test_vector_reduce_fadd_v2double(double %sp, <2 x double> %v) {
147540d2551SVyacheslav Levytskyyentry:
148540d2551SVyacheslav Levytskyy  %res = call double @llvm.vector.reduce.fadd.v2double(double %sp, <2 x double> %v)
149540d2551SVyacheslav Levytskyy  ret double %res
150540d2551SVyacheslav Levytskyy}
151540d2551SVyacheslav Levytskyy
152540d2551SVyacheslav Levytskyydefine spir_func double @test_vector_reduce_fadd_v3double(double %sp, <3 x double> %v) {
153540d2551SVyacheslav Levytskyyentry:
154540d2551SVyacheslav Levytskyy  %res = call double @llvm.vector.reduce.fadd.v3double(double %sp, <3 x double> %v)
155540d2551SVyacheslav Levytskyy  ret double %res
156540d2551SVyacheslav Levytskyy}
157540d2551SVyacheslav Levytskyy
158540d2551SVyacheslav Levytskyydefine spir_func double @test_vector_reduce_fadd_v4double(double %sp, <4 x double> %v) {
159540d2551SVyacheslav Levytskyyentry:
160540d2551SVyacheslav Levytskyy  %res = call double @llvm.vector.reduce.fadd.v4double(double %sp, <4 x double> %v)
161540d2551SVyacheslav Levytskyy  ret double %res
162540d2551SVyacheslav Levytskyy}
163540d2551SVyacheslav Levytskyy
164540d2551SVyacheslav Levytskyydefine spir_func double @test_vector_reduce_fadd_v8double(double %sp, <8 x double> %v) {
165540d2551SVyacheslav Levytskyyentry:
166540d2551SVyacheslav Levytskyy  %res = call double @llvm.vector.reduce.fadd.v8double(double %sp, <8 x double> %v)
167540d2551SVyacheslav Levytskyy  ret double %res
168540d2551SVyacheslav Levytskyy}
169540d2551SVyacheslav Levytskyy
170540d2551SVyacheslav Levytskyydefine spir_func double @test_vector_reduce_fadd_v16double(double %sp, <16 x double> %v) {
171540d2551SVyacheslav Levytskyyentry:
172540d2551SVyacheslav Levytskyy  %res = call double @llvm.vector.reduce.fadd.v16double(double %sp, <16 x double> %v)
173540d2551SVyacheslav Levytskyy  ret double %res
174540d2551SVyacheslav Levytskyy}
175540d2551SVyacheslav Levytskyy
176540d2551SVyacheslav Levytskyydeclare half @llvm.vector.reduce.fadd.v2half(half, <2 x half>)
177540d2551SVyacheslav Levytskyydeclare half @llvm.vector.reduce.fadd.v3half(half, <3 x half>)
178540d2551SVyacheslav Levytskyydeclare half @llvm.vector.reduce.fadd.v4half(half, <4 x half>)
179540d2551SVyacheslav Levytskyydeclare half @llvm.vector.reduce.fadd.v8half(half, <8 x half>)
180540d2551SVyacheslav Levytskyydeclare half @llvm.vector.reduce.fadd.v16half(half, <16 x half>)
181540d2551SVyacheslav Levytskyydeclare float @llvm.vector.reduce.fadd.v2float(float, <2 x float>)
182540d2551SVyacheslav Levytskyydeclare float @llvm.vector.reduce.fadd.v3float(float, <3 x float>)
183540d2551SVyacheslav Levytskyydeclare float @llvm.vector.reduce.fadd.v4float(float, <4 x float>)
184540d2551SVyacheslav Levytskyydeclare float @llvm.vector.reduce.fadd.v8float(float, <8 x float>)
185540d2551SVyacheslav Levytskyydeclare float @llvm.vector.reduce.fadd.v16float(float, <16 x float>)
186540d2551SVyacheslav Levytskyydeclare double @llvm.vector.reduce.fadd.v2double(double, <2 x double>)
187540d2551SVyacheslav Levytskyydeclare double @llvm.vector.reduce.fadd.v3double(double, <3 x double>)
188540d2551SVyacheslav Levytskyydeclare double @llvm.vector.reduce.fadd.v4double(double, <4 x double>)
189540d2551SVyacheslav Levytskyydeclare double @llvm.vector.reduce.fadd.v8double(double, <8 x double>)
190540d2551SVyacheslav Levytskyydeclare double @llvm.vector.reduce.fadd.v16double(double, <16 x double>)
191