xref: /llvm-project/mlir/test/Conversion/SPIRVToLLVM/gl-ops-to-llvm.mlir (revision 41f3b83fb066b4c3273e9abe02a8630864f22f30)
1// RUN: mlir-opt -convert-spirv-to-llvm %s | FileCheck %s
2
3//===----------------------------------------------------------------------===//
4// spirv.GL.Ceil
5//===----------------------------------------------------------------------===//
6
7// CHECK-LABEL: @ceil
8spirv.func @ceil(%arg0: f32, %arg1: vector<3xf16>) "None" {
9  // CHECK: llvm.intr.ceil(%{{.*}}) : (f32) -> f32
10  %0 = spirv.GL.Ceil %arg0 : f32
11  // CHECK: llvm.intr.ceil(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
12  %1 = spirv.GL.Ceil %arg1 : vector<3xf16>
13  spirv.Return
14}
15
16//===----------------------------------------------------------------------===//
17// spirv.GL.Cos
18//===----------------------------------------------------------------------===//
19
20// CHECK-LABEL: @cos
21spirv.func @cos(%arg0: f32, %arg1: vector<3xf16>) "None" {
22  // CHECK: llvm.intr.cos(%{{.*}}) : (f32) -> f32
23  %0 = spirv.GL.Cos %arg0 : f32
24  // CHECK: llvm.intr.cos(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
25  %1 = spirv.GL.Cos %arg1 : vector<3xf16>
26  spirv.Return
27}
28
29//===----------------------------------------------------------------------===//
30// spirv.GL.Exp
31//===----------------------------------------------------------------------===//
32
33// CHECK-LABEL: @exp
34spirv.func @exp(%arg0: f32, %arg1: vector<3xf16>) "None" {
35  // CHECK: llvm.intr.exp(%{{.*}}) : (f32) -> f32
36  %0 = spirv.GL.Exp %arg0 : f32
37  // CHECK: llvm.intr.exp(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
38  %1 = spirv.GL.Exp %arg1 : vector<3xf16>
39  spirv.Return
40}
41
42//===----------------------------------------------------------------------===//
43// spirv.GL.FAbs
44//===----------------------------------------------------------------------===//
45
46// CHECK-LABEL: @fabs
47spirv.func @fabs(%arg0: f32, %arg1: vector<3xf16>) "None" {
48  // CHECK: llvm.intr.fabs(%{{.*}}) : (f32) -> f32
49  %0 = spirv.GL.FAbs %arg0 : f32
50  // CHECK: llvm.intr.fabs(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
51  %1 = spirv.GL.FAbs %arg1 : vector<3xf16>
52  spirv.Return
53}
54
55//===----------------------------------------------------------------------===//
56// spirv.GL.Floor
57//===----------------------------------------------------------------------===//
58
59// CHECK-LABEL: @floor
60spirv.func @floor(%arg0: f32, %arg1: vector<3xf16>) "None" {
61  // CHECK: llvm.intr.floor(%{{.*}}) : (f32) -> f32
62  %0 = spirv.GL.Floor %arg0 : f32
63  // CHECK: llvm.intr.floor(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
64  %1 = spirv.GL.Floor %arg1 : vector<3xf16>
65  spirv.Return
66}
67
68//===----------------------------------------------------------------------===//
69// spirv.GL.FMax
70//===----------------------------------------------------------------------===//
71
72// CHECK-LABEL: @fmax
73spirv.func @fmax(%arg0: f32, %arg1: vector<3xf16>) "None" {
74  // CHECK: llvm.intr.maxnum(%{{.*}}, %{{.*}}) : (f32, f32) -> f32
75  %0 = spirv.GL.FMax %arg0, %arg0 : f32
76  // CHECK: llvm.intr.maxnum(%{{.*}}, %{{.*}}) : (vector<3xf16>, vector<3xf16>) -> vector<3xf16>
77  %1 = spirv.GL.FMax %arg1, %arg1 : vector<3xf16>
78  spirv.Return
79}
80
81//===----------------------------------------------------------------------===//
82// spirv.GL.FMin
83//===----------------------------------------------------------------------===//
84
85// CHECK-LABEL: @fmin
86spirv.func @fmin(%arg0: f32, %arg1: vector<3xf16>) "None" {
87  // CHECK: llvm.intr.minnum(%{{.*}}, %{{.*}}) : (f32, f32) -> f32
88  %0 = spirv.GL.FMin %arg0, %arg0 : f32
89  // CHECK: llvm.intr.minnum(%{{.*}}, %{{.*}}) : (vector<3xf16>, vector<3xf16>) -> vector<3xf16>
90  %1 = spirv.GL.FMin %arg1, %arg1 : vector<3xf16>
91  spirv.Return
92}
93
94//===----------------------------------------------------------------------===//
95// spirv.GL.Log
96//===----------------------------------------------------------------------===//
97
98// CHECK-LABEL: @log
99spirv.func @log(%arg0: f32, %arg1: vector<3xf16>) "None" {
100  // CHECK: llvm.intr.log(%{{.*}}) : (f32) -> f32
101  %0 = spirv.GL.Log %arg0 : f32
102  // CHECK: llvm.intr.log(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
103  %1 = spirv.GL.Log %arg1 : vector<3xf16>
104  spirv.Return
105}
106
107//===----------------------------------------------------------------------===//
108// spirv.GL.Sin
109//===----------------------------------------------------------------------===//
110
111// CHECK-LABEL: @sin
112spirv.func @sin(%arg0: f32, %arg1: vector<3xf16>) "None" {
113  // CHECK: llvm.intr.sin(%{{.*}}) : (f32) -> f32
114  %0 = spirv.GL.Sin %arg0 : f32
115  // CHECK: llvm.intr.sin(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
116  %1 = spirv.GL.Sin %arg1 : vector<3xf16>
117  spirv.Return
118}
119
120//===----------------------------------------------------------------------===//
121// spirv.GL.SMax
122//===----------------------------------------------------------------------===//
123
124// CHECK-LABEL: @smax
125spirv.func @smax(%arg0: i16, %arg1: vector<3xi32>) "None" {
126  // CHECK: llvm.intr.smax(%{{.*}}, %{{.*}}) : (i16, i16) -> i16
127  %0 = spirv.GL.SMax %arg0, %arg0 : i16
128  // CHECK: llvm.intr.smax(%{{.*}}, %{{.*}}) : (vector<3xi32>, vector<3xi32>) -> vector<3xi32>
129  %1 = spirv.GL.SMax %arg1, %arg1 : vector<3xi32>
130  spirv.Return
131}
132
133//===----------------------------------------------------------------------===//
134// spirv.GL.SMin
135//===----------------------------------------------------------------------===//
136
137// CHECK-LABEL: @smin
138spirv.func @smin(%arg0: i16, %arg1: vector<3xi32>) "None" {
139  // CHECK: llvm.intr.smin(%{{.*}}, %{{.*}}) : (i16, i16) -> i16
140  %0 = spirv.GL.SMin %arg0, %arg0 : i16
141  // CHECK: llvm.intr.smin(%{{.*}}, %{{.*}}) : (vector<3xi32>, vector<3xi32>) -> vector<3xi32>
142  %1 = spirv.GL.SMin %arg1, %arg1 : vector<3xi32>
143  spirv.Return
144}
145
146//===----------------------------------------------------------------------===//
147// spirv.GL.Sqrt
148//===----------------------------------------------------------------------===//
149
150// CHECK-LABEL: @sqrt
151spirv.func @sqrt(%arg0: f32, %arg1: vector<3xf16>) "None" {
152  // CHECK: llvm.intr.sqrt(%{{.*}}) : (f32) -> f32
153  %0 = spirv.GL.Sqrt %arg0 : f32
154  // CHECK: llvm.intr.sqrt(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
155  %1 = spirv.GL.Sqrt %arg1 : vector<3xf16>
156  spirv.Return
157}
158
159//===----------------------------------------------------------------------===//
160// spirv.GL.Tan
161//===----------------------------------------------------------------------===//
162
163// CHECK-LABEL: @tan
164spirv.func @tan(%arg0: f32) "None" {
165  // CHECK: %[[SIN:.*]] = llvm.intr.sin(%{{.*}}) : (f32) -> f32
166  // CHECK: %[[COS:.*]] = llvm.intr.cos(%{{.*}}) : (f32) -> f32
167  // CHECK: llvm.fdiv %[[SIN]], %[[COS]] : f32
168  %0 = spirv.GL.Tan %arg0 : f32
169  spirv.Return
170}
171
172//===----------------------------------------------------------------------===//
173// spirv.GL.Tanh
174//===----------------------------------------------------------------------===//
175
176// CHECK-LABEL: @tanh
177spirv.func @tanh(%arg0: f32) "None" {
178  // CHECK: %[[TWO:.*]] = llvm.mlir.constant(2.000000e+00 : f32) : f32
179  // CHECK: %[[X2:.*]] = llvm.fmul %[[TWO]], %{{.*}} : f32
180  // CHECK: %[[EXP:.*]] = llvm.intr.exp(%[[X2]]) : (f32) -> f32
181  // CHECK: %[[ONE:.*]] = llvm.mlir.constant(1.000000e+00 : f32) : f32
182  // CHECK: %[[T0:.*]] = llvm.fsub %[[EXP]], %[[ONE]] : f32
183  // CHECK: %[[T1:.*]] = llvm.fadd %[[EXP]], %[[ONE]] : f32
184  // CHECK: llvm.fdiv %[[T0]], %[[T1]] : f32
185  %0 = spirv.GL.Tanh %arg0 : f32
186  spirv.Return
187}
188
189//===----------------------------------------------------------------------===//
190// spirv.GL.InverseSqrt
191//===----------------------------------------------------------------------===//
192
193// CHECK-LABEL: @inverse_sqrt
194spirv.func @inverse_sqrt(%arg0: f32) "None" {
195  // CHECK: %[[ONE:.*]] = llvm.mlir.constant(1.000000e+00 : f32) : f32
196  // CHECK: %[[SQRT:.*]] = llvm.intr.sqrt(%{{.*}}) : (f32) -> f32
197  // CHECK: llvm.fdiv %[[ONE]], %[[SQRT]] : f32
198  %0 = spirv.GL.InverseSqrt %arg0 : f32
199  spirv.Return
200}
201