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