[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / mlir / test / Conversion / SPIRVToLLVM / gl-ops-to-llvm.mlir
blobe1936e2fd8abea04f86ef94cfb09645612eeed2f
1 // RUN: mlir-opt -convert-spirv-to-llvm %s | FileCheck %s
3 //===----------------------------------------------------------------------===//
4 // spirv.GL.Ceil
5 //===----------------------------------------------------------------------===//
7 // CHECK-LABEL: @ceil
8 spirv.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
16 //===----------------------------------------------------------------------===//
17 // spirv.GL.Cos
18 //===----------------------------------------------------------------------===//
20 // CHECK-LABEL: @cos
21 spirv.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
29 //===----------------------------------------------------------------------===//
30 // spirv.GL.Exp
31 //===----------------------------------------------------------------------===//
33 // CHECK-LABEL: @exp
34 spirv.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
42 //===----------------------------------------------------------------------===//
43 // spirv.GL.FAbs
44 //===----------------------------------------------------------------------===//
46 // CHECK-LABEL: @fabs
47 spirv.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
55 //===----------------------------------------------------------------------===//
56 // spirv.GL.Floor
57 //===----------------------------------------------------------------------===//
59 // CHECK-LABEL: @floor
60 spirv.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
68 //===----------------------------------------------------------------------===//
69 // spirv.GL.FMax
70 //===----------------------------------------------------------------------===//
72 // CHECK-LABEL: @fmax
73 spirv.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
81 //===----------------------------------------------------------------------===//
82 // spirv.GL.FMin
83 //===----------------------------------------------------------------------===//
85 // CHECK-LABEL: @fmin
86 spirv.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
94 //===----------------------------------------------------------------------===//
95 // spirv.GL.Log
96 //===----------------------------------------------------------------------===//
98 // CHECK-LABEL: @log
99 spirv.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
107 //===----------------------------------------------------------------------===//
108 // spirv.GL.Sin
109 //===----------------------------------------------------------------------===//
111 // CHECK-LABEL: @sin
112 spirv.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
120 //===----------------------------------------------------------------------===//
121 // spirv.GL.SMax
122 //===----------------------------------------------------------------------===//
124 // CHECK-LABEL: @smax
125 spirv.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
133 //===----------------------------------------------------------------------===//
134 // spirv.GL.SMin
135 //===----------------------------------------------------------------------===//
137 // CHECK-LABEL: @smin
138 spirv.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
146 //===----------------------------------------------------------------------===//
147 // spirv.GL.Sqrt
148 //===----------------------------------------------------------------------===//
150 // CHECK-LABEL: @sqrt
151 spirv.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
159 //===----------------------------------------------------------------------===//
160 // spirv.GL.Tan
161 //===----------------------------------------------------------------------===//
163 // CHECK-LABEL: @tan
164 spirv.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
172 //===----------------------------------------------------------------------===//
173 // spirv.GL.Tanh
174 //===----------------------------------------------------------------------===//
176 // CHECK-LABEL: @tanh
177 spirv.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
189 //===----------------------------------------------------------------------===//
190 // spirv.GL.InverseSqrt
191 //===----------------------------------------------------------------------===//
193 // CHECK-LABEL: @inverse_sqrt
194 spirv.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