xref: /llvm-project/llvm/test/CodeGen/SPIRV/llvm-intrinsics/llvm-vector-reduce/fmaximum.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
2540d2551SVyacheslav Levytskyy; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
3540d2551SVyacheslav Levytskyy
4540d2551SVyacheslav Levytskyytarget triple = "spir64-unknown-unknown"
5540d2551SVyacheslav Levytskyy
6540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[Half:.*]] = OpTypeFloat 16
7540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[HalfVec2:.*]] = OpTypeVector %[[Half]] 2
8540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[HalfVec3:.*]] = OpTypeVector %[[Half]] 3
9540d2551SVyacheslav Levytskyy
10540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[Float:.*]] = OpTypeFloat 32
11540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[FloatVec2:.*]] = OpTypeVector %[[Float]] 2
12540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[FloatVec3:.*]] = OpTypeVector %[[Float]] 3
13540d2551SVyacheslav Levytskyy
14540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[Double:.*]] = OpTypeFloat 64
15540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[DoubleVec2:.*]] = OpTypeVector %[[Double]] 2
16540d2551SVyacheslav Levytskyy; CHECK-DAG: %[[DoubleVec3:.*]] = OpTypeVector %[[Double]] 3
17540d2551SVyacheslav Levytskyy
18540d2551SVyacheslav Levytskyy; CHECK: OpFunction
19540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec2Half:.*]] = OpFunctionParameter %[[HalfVec2]]
20540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2HalfItem0:.*]] = OpCompositeExtract %[[Half]] %[[ParamVec2Half]] 0
21540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2HalfItem1:.*]] = OpCompositeExtract %[[Half]] %[[ParamVec2Half]] 1
22540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2HalfR1:.*]] = OpExtInst %[[Half]] %[[#]] fmax %[[Vec2HalfItem0]] %[[Vec2HalfItem1]]
23540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec2HalfR1]]
24540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
25540d2551SVyacheslav Levytskyy
26540d2551SVyacheslav Levytskyy; CHECK: OpFunction
27540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec3Half:.*]] = OpFunctionParameter %[[HalfVec3]]
28540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3HalfItem0:.*]] = OpCompositeExtract %[[Half]] %[[ParamVec3Half]] 0
29540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3HalfItem1:.*]] = OpCompositeExtract %[[Half]] %[[ParamVec3Half]] 1
30540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3HalfItem2:.*]] = OpCompositeExtract %[[Half]] %[[ParamVec3Half]] 2
31540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3HalfR1:.*]] = OpExtInst %[[Half]] %[[#]] fmax %[[Vec3HalfItem0]] %[[Vec3HalfItem1]]
32540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3HalfR2:.*]] = OpExtInst %[[Half]] %[[#]] fmax %[[Vec3HalfR1]] %[[Vec3HalfItem2]]
33540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec3HalfR2]]
34540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
35540d2551SVyacheslav Levytskyy
36540d2551SVyacheslav Levytskyy; CHECK: OpFunction
37540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec2Float:.*]] = OpFunctionParameter %[[FloatVec2]]
38540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2FloatItem0:.*]] = OpCompositeExtract %[[Float]] %[[ParamVec2Float]] 0
39540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2FloatItem1:.*]] = OpCompositeExtract %[[Float]] %[[ParamVec2Float]] 1
40540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2FloatR1:.*]] = OpExtInst %[[Float]] %[[#]] fmax %[[Vec2FloatItem0]] %[[Vec2FloatItem1]]
41540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec2FloatR1]]
42540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
43540d2551SVyacheslav Levytskyy
44540d2551SVyacheslav Levytskyy; CHECK: OpFunction
45540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec3Float:.*]] = OpFunctionParameter %[[FloatVec3]]
46540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3FloatItem0:.*]] = OpCompositeExtract %[[Float]] %[[ParamVec3Float]] 0
47540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3FloatItem1:.*]] = OpCompositeExtract %[[Float]] %[[ParamVec3Float]] 1
48540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3FloatItem2:.*]] = OpCompositeExtract %[[Float]] %[[ParamVec3Float]] 2
49540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3FloatR1:.*]] = OpExtInst %[[Float]] %[[#]] fmax %[[Vec3FloatItem0]] %[[Vec3FloatItem1]]
50540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3FloatR2:.*]] = OpExtInst %[[Float]] %[[#]] fmax %[[Vec3FloatR1]] %[[Vec3FloatItem2]]
51540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec3FloatR2]]
52540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
53540d2551SVyacheslav Levytskyy
54540d2551SVyacheslav Levytskyy; CHECK: OpFunction
55540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec2Double:.*]] = OpFunctionParameter %[[DoubleVec2]]
56540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2DoubleItem0:.*]] = OpCompositeExtract %[[Double]] %[[ParamVec2Double]] 0
57540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2DoubleItem1:.*]] = OpCompositeExtract %[[Double]] %[[ParamVec2Double]] 1
58540d2551SVyacheslav Levytskyy; CHECK: %[[Vec2DoubleR1:.*]] = OpExtInst %[[Double]] %[[#]] fmax %[[Vec2DoubleItem0]] %[[Vec2DoubleItem1]]
59540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec2DoubleR1]]
60540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
61540d2551SVyacheslav Levytskyy
62540d2551SVyacheslav Levytskyy; CHECK: OpFunction
63540d2551SVyacheslav Levytskyy; CHECK: %[[ParamVec3Double:.*]] = OpFunctionParameter %[[DoubleVec3]]
64540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3DoubleItem0:.*]] = OpCompositeExtract %[[Double]] %[[ParamVec3Double]] 0
65540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3DoubleItem1:.*]] = OpCompositeExtract %[[Double]] %[[ParamVec3Double]] 1
66540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3DoubleItem2:.*]] = OpCompositeExtract %[[Double]] %[[ParamVec3Double]] 2
67540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3DoubleR1:.*]] = OpExtInst %[[Double]] %[[#]] fmax %[[Vec3DoubleItem0]] %[[Vec3DoubleItem1]]
68540d2551SVyacheslav Levytskyy; CHECK: %[[Vec3DoubleR2:.*]] = OpExtInst %[[Double]] %[[#]] fmax %[[Vec3DoubleR1]] %[[Vec3DoubleItem2]]
69540d2551SVyacheslav Levytskyy; CHECK: OpReturnValue %[[Vec3DoubleR2]]
70540d2551SVyacheslav Levytskyy; CHECK: OpFunctionEnd
71540d2551SVyacheslav Levytskyy
72540d2551SVyacheslav Levytskyydefine spir_func half @test_vector_reduce_fmaximum_v2half(<2 x half> %v) {
73540d2551SVyacheslav Levytskyyentry:
74540d2551SVyacheslav Levytskyy  %res = call half @llvm.vector.reduce.fmaximum.v2half(<2 x half> %v)
75540d2551SVyacheslav Levytskyy  ret half %res
76540d2551SVyacheslav Levytskyy}
77540d2551SVyacheslav Levytskyy
78540d2551SVyacheslav Levytskyydefine spir_func half @test_vector_reduce_fmaximum_v3half(<3 x half> %v) {
79540d2551SVyacheslav Levytskyyentry:
80540d2551SVyacheslav Levytskyy  %res = call half @llvm.vector.reduce.fmaximum.v3half(<3 x half> %v)
81540d2551SVyacheslav Levytskyy  ret half %res
82540d2551SVyacheslav Levytskyy}
83540d2551SVyacheslav Levytskyy
84540d2551SVyacheslav Levytskyydefine spir_func half @test_vector_reduce_fmaximum_v4half(<4 x half> %v) {
85540d2551SVyacheslav Levytskyyentry:
86540d2551SVyacheslav Levytskyy  %res = call half @llvm.vector.reduce.fmaximum.v4half(<4 x half> %v)
87540d2551SVyacheslav Levytskyy  ret half %res
88540d2551SVyacheslav Levytskyy}
89540d2551SVyacheslav Levytskyy
90540d2551SVyacheslav Levytskyydefine spir_func half @test_vector_reduce_fmaximum_v8half(<8 x half> %v) {
91540d2551SVyacheslav Levytskyyentry:
92540d2551SVyacheslav Levytskyy  %res = call half @llvm.vector.reduce.fmaximum.v8half(<8 x half> %v)
93540d2551SVyacheslav Levytskyy  ret half %res
94540d2551SVyacheslav Levytskyy}
95540d2551SVyacheslav Levytskyy
96540d2551SVyacheslav Levytskyydefine spir_func half @test_vector_reduce_fmaximum_v16half(<16 x half> %v) {
97540d2551SVyacheslav Levytskyyentry:
98540d2551SVyacheslav Levytskyy  %res = call half @llvm.vector.reduce.fmaximum.v16half(<16 x half> %v)
99540d2551SVyacheslav Levytskyy  ret half %res
100540d2551SVyacheslav Levytskyy}
101540d2551SVyacheslav Levytskyy
102540d2551SVyacheslav Levytskyydefine spir_func float @test_vector_reduce_fmaximum_v2float(<2 x float> %v) {
103540d2551SVyacheslav Levytskyyentry:
104540d2551SVyacheslav Levytskyy  %res = call float @llvm.vector.reduce.fmaximum.v2float(<2 x float> %v)
105540d2551SVyacheslav Levytskyy  ret float %res
106540d2551SVyacheslav Levytskyy}
107540d2551SVyacheslav Levytskyy
108540d2551SVyacheslav Levytskyydefine spir_func float @test_vector_reduce_fmaximum_v3float(<3 x float> %v) {
109540d2551SVyacheslav Levytskyyentry:
110540d2551SVyacheslav Levytskyy  %res = call float @llvm.vector.reduce.fmaximum.v3float(<3 x float> %v)
111540d2551SVyacheslav Levytskyy  ret float %res
112540d2551SVyacheslav Levytskyy}
113540d2551SVyacheslav Levytskyy
114540d2551SVyacheslav Levytskyydefine spir_func float @test_vector_reduce_fmaximum_v4float(<4 x float> %v) {
115540d2551SVyacheslav Levytskyyentry:
116540d2551SVyacheslav Levytskyy  %res = call float @llvm.vector.reduce.fmaximum.v4float(<4 x float> %v)
117540d2551SVyacheslav Levytskyy  ret float %res
118540d2551SVyacheslav Levytskyy}
119540d2551SVyacheslav Levytskyy
120540d2551SVyacheslav Levytskyydefine spir_func float @test_vector_reduce_fmaximum_v8float(<8 x float> %v) {
121540d2551SVyacheslav Levytskyyentry:
122540d2551SVyacheslav Levytskyy  %res = call float @llvm.vector.reduce.fmaximum.v8float(<8 x float> %v)
123540d2551SVyacheslav Levytskyy  ret float %res
124540d2551SVyacheslav Levytskyy}
125540d2551SVyacheslav Levytskyy
126540d2551SVyacheslav Levytskyydefine spir_func float @test_vector_reduce_fmaximum_v16float(<16 x float> %v) {
127540d2551SVyacheslav Levytskyyentry:
128540d2551SVyacheslav Levytskyy  %res = call float @llvm.vector.reduce.fmaximum.v16float(<16 x float> %v)
129540d2551SVyacheslav Levytskyy  ret float %res
130540d2551SVyacheslav Levytskyy}
131540d2551SVyacheslav Levytskyy
132540d2551SVyacheslav Levytskyy
133540d2551SVyacheslav Levytskyydefine spir_func double @test_vector_reduce_fmaximum_v2double(<2 x double> %v) {
134540d2551SVyacheslav Levytskyyentry:
135540d2551SVyacheslav Levytskyy  %res = call double @llvm.vector.reduce.fmaximum.v2double(<2 x double> %v)
136540d2551SVyacheslav Levytskyy  ret double %res
137540d2551SVyacheslav Levytskyy}
138540d2551SVyacheslav Levytskyy
139540d2551SVyacheslav Levytskyydefine spir_func double @test_vector_reduce_fmaximum_v3double(<3 x double> %v) {
140540d2551SVyacheslav Levytskyyentry:
141540d2551SVyacheslav Levytskyy  %res = call double @llvm.vector.reduce.fmaximum.v3double(<3 x double> %v)
142540d2551SVyacheslav Levytskyy  ret double %res
143540d2551SVyacheslav Levytskyy}
144540d2551SVyacheslav Levytskyy
145540d2551SVyacheslav Levytskyydefine spir_func double @test_vector_reduce_fmaximum_v4double(<4 x double> %v) {
146540d2551SVyacheslav Levytskyyentry:
147540d2551SVyacheslav Levytskyy  %res = call double @llvm.vector.reduce.fmaximum.v4double(<4 x double> %v)
148540d2551SVyacheslav Levytskyy  ret double %res
149540d2551SVyacheslav Levytskyy}
150540d2551SVyacheslav Levytskyy
151540d2551SVyacheslav Levytskyydefine spir_func double @test_vector_reduce_fmaximum_v8double(<8 x double> %v) {
152540d2551SVyacheslav Levytskyyentry:
153540d2551SVyacheslav Levytskyy  %res = call double @llvm.vector.reduce.fmaximum.v8double(<8 x double> %v)
154540d2551SVyacheslav Levytskyy  ret double %res
155540d2551SVyacheslav Levytskyy}
156540d2551SVyacheslav Levytskyy
157540d2551SVyacheslav Levytskyydefine spir_func double @test_vector_reduce_fmaximum_v16double(<16 x double> %v) {
158540d2551SVyacheslav Levytskyyentry:
159540d2551SVyacheslav Levytskyy  %res = call double @llvm.vector.reduce.fmaximum.v16double(<16 x double> %v)
160540d2551SVyacheslav Levytskyy  ret double %res
161540d2551SVyacheslav Levytskyy}
162540d2551SVyacheslav Levytskyy
163540d2551SVyacheslav Levytskyydeclare half @llvm.vector.reduce.fmaximum.v2half(<2 x half>)
164540d2551SVyacheslav Levytskyydeclare half @llvm.vector.reduce.fmaximum.v3half(<3 x half>)
165540d2551SVyacheslav Levytskyydeclare half @llvm.vector.reduce.fmaximum.v4half(<4 x half>)
166540d2551SVyacheslav Levytskyydeclare half @llvm.vector.reduce.fmaximum.v8half(<8 x half>)
167540d2551SVyacheslav Levytskyydeclare half @llvm.vector.reduce.fmaximum.v16half(<16 x half>)
168540d2551SVyacheslav Levytskyydeclare float @llvm.vector.reduce.fmaximum.v2float(<2 x float>)
169540d2551SVyacheslav Levytskyydeclare float @llvm.vector.reduce.fmaximum.v3float(<3 x float>)
170540d2551SVyacheslav Levytskyydeclare float @llvm.vector.reduce.fmaximum.v4float(<4 x float>)
171540d2551SVyacheslav Levytskyydeclare float @llvm.vector.reduce.fmaximum.v8float(<8 x float>)
172540d2551SVyacheslav Levytskyydeclare float @llvm.vector.reduce.fmaximum.v16float(<16 x float>)
173540d2551SVyacheslav Levytskyydeclare double @llvm.vector.reduce.fmaximum.v2double(<2 x double>)
174540d2551SVyacheslav Levytskyydeclare double @llvm.vector.reduce.fmaximum.v3double(<3 x double>)
175540d2551SVyacheslav Levytskyydeclare double @llvm.vector.reduce.fmaximum.v4double(<4 x double>)
176540d2551SVyacheslav Levytskyydeclare double @llvm.vector.reduce.fmaximum.v8double(<8 x double>)
177540d2551SVyacheslav Levytskyydeclare double @llvm.vector.reduce.fmaximum.v16double(<16 x double>)
178