192 lines · plain
1// RUN: mlir-opt -convert-spirv-to-llvm %s | FileCheck %s2 3//===----------------------------------------------------------------------===//4// spirv.Bitcast5//===----------------------------------------------------------------------===//6 7// CHECK-LABEL: @bitcast_float_to_integer_scalar8spirv.func @bitcast_float_to_integer_scalar(%arg0 : f32) "None" {9 // CHECK: llvm.bitcast {{.*}} : f32 to i3210 %0 = spirv.Bitcast %arg0: f32 to i3211 spirv.Return12}13 14// CHECK-LABEL: @bitcast_float_to_integer_vector15spirv.func @bitcast_float_to_integer_vector(%arg0 : vector<3xf32>) "None" {16 // CHECK: {{.*}} = llvm.bitcast {{.*}} : vector<3xf32> to vector<3xi32>17 %0 = spirv.Bitcast %arg0: vector<3xf32> to vector<3xi32>18 spirv.Return19}20 21// CHECK-LABEL: @bitcast_vector_to_scalar22spirv.func @bitcast_vector_to_scalar(%arg0 : vector<2xf32>) "None" {23 // CHECK: {{.*}} = llvm.bitcast {{.*}} : vector<2xf32> to i6424 %0 = spirv.Bitcast %arg0: vector<2xf32> to i6425 spirv.Return26}27 28// CHECK-LABEL: @bitcast_scalar_to_vector29spirv.func @bitcast_scalar_to_vector(%arg0 : f64) "None" {30 // CHECK: {{.*}} = llvm.bitcast {{.*}} : f64 to vector<2xi32>31 %0 = spirv.Bitcast %arg0: f64 to vector<2xi32>32 spirv.Return33}34 35// CHECK-LABEL: @bitcast_vector_to_vector36spirv.func @bitcast_vector_to_vector(%arg0 : vector<4xf32>) "None" {37 // CHECK: {{.*}} = llvm.bitcast {{.*}} : vector<4xf32> to vector<2xi64>38 %0 = spirv.Bitcast %arg0: vector<4xf32> to vector<2xi64>39 spirv.Return40}41 42// CHECK-LABEL: @bitcast_pointer43spirv.func @bitcast_pointer(%arg0: !spirv.ptr<f32, Function>) "None" {44 // CHECK-NOT: llvm.bitcast45 %0 = spirv.Bitcast %arg0 : !spirv.ptr<f32, Function> to !spirv.ptr<i32, Function>46 spirv.Return47}48 49//===----------------------------------------------------------------------===//50// spirv.ConvertFToS51//===----------------------------------------------------------------------===//52 53// CHECK-LABEL: @convert_float_to_signed_scalar54spirv.func @convert_float_to_signed_scalar(%arg0: f32) "None" {55 // CHECK: llvm.fptosi %{{.*}} : f32 to i3256 %0 = spirv.ConvertFToS %arg0: f32 to i3257 spirv.Return58}59 60// CHECK-LABEL: @convert_float_to_signed_vector61spirv.func @convert_float_to_signed_vector(%arg0: vector<2xf32>) "None" {62 // CHECK: llvm.fptosi %{{.*}} : vector<2xf32> to vector<2xi32>63 %0 = spirv.ConvertFToS %arg0: vector<2xf32> to vector<2xi32>64 spirv.Return65}66 67//===----------------------------------------------------------------------===//68// spirv.ConvertFToU69//===----------------------------------------------------------------------===//70 71// CHECK-LABEL: @convert_float_to_unsigned_scalar72spirv.func @convert_float_to_unsigned_scalar(%arg0: f32) "None" {73 // CHECK: llvm.fptoui %{{.*}} : f32 to i3274 %0 = spirv.ConvertFToU %arg0: f32 to i3275 spirv.Return76}77 78// CHECK-LABEL: @convert_float_to_unsigned_vector79spirv.func @convert_float_to_unsigned_vector(%arg0: vector<2xf32>) "None" {80 // CHECK: llvm.fptoui %{{.*}} : vector<2xf32> to vector<2xi32>81 %0 = spirv.ConvertFToU %arg0: vector<2xf32> to vector<2xi32>82 spirv.Return83}84 85//===----------------------------------------------------------------------===//86// spirv.ConvertSToF87//===----------------------------------------------------------------------===//88 89// CHECK-LABEL: @convert_signed_to_float_scalar90spirv.func @convert_signed_to_float_scalar(%arg0: i32) "None" {91 // CHECK: llvm.sitofp %{{.*}} : i32 to f3292 %0 = spirv.ConvertSToF %arg0: i32 to f3293 spirv.Return94}95 96// CHECK-LABEL: @convert_signed_to_float_vector97spirv.func @convert_signed_to_float_vector(%arg0: vector<3xi32>) "None" {98 // CHECK: llvm.sitofp %{{.*}} : vector<3xi32> to vector<3xf32>99 %0 = spirv.ConvertSToF %arg0: vector<3xi32> to vector<3xf32>100 spirv.Return101}102 103//===----------------------------------------------------------------------===//104// spirv.ConvertUToF105//===----------------------------------------------------------------------===//106 107// CHECK-LABEL: @convert_unsigned_to_float_scalar108spirv.func @convert_unsigned_to_float_scalar(%arg0: i32) "None" {109 // CHECK: llvm.uitofp %{{.*}} : i32 to f32110 %0 = spirv.ConvertUToF %arg0: i32 to f32111 spirv.Return112}113 114// CHECK-LABEL: @convert_unsigned_to_float_vector115spirv.func @convert_unsigned_to_float_vector(%arg0: vector<3xi32>) "None" {116 // CHECK: llvm.uitofp %{{.*}} : vector<3xi32> to vector<3xf32>117 %0 = spirv.ConvertUToF %arg0: vector<3xi32> to vector<3xf32>118 spirv.Return119}120 121//===----------------------------------------------------------------------===//122// spirv.FConvert123//===----------------------------------------------------------------------===//124 125// CHECK-LABEL: @fconvert_scalar126spirv.func @fconvert_scalar(%arg0: f32, %arg1: f64) "None" {127 // CHECK: llvm.fpext %{{.*}} : f32 to f64128 %0 = spirv.FConvert %arg0: f32 to f64129 130 // CHECK: llvm.fptrunc %{{.*}} : f64 to f32131 %1 = spirv.FConvert %arg1: f64 to f32132 spirv.Return133}134 135// CHECK-LABEL: @fconvert_vector136spirv.func @fconvert_vector(%arg0: vector<2xf32>, %arg1: vector<2xf64>) "None" {137 // CHECK: llvm.fpext %{{.*}} : vector<2xf32> to vector<2xf64>138 %0 = spirv.FConvert %arg0: vector<2xf32> to vector<2xf64>139 140 // CHECK: llvm.fptrunc %{{.*}} : vector<2xf64> to vector<2xf32>141 %1 = spirv.FConvert %arg1: vector<2xf64> to vector<2xf32>142 spirv.Return143}144 145//===----------------------------------------------------------------------===//146// spirv.SConvert147//===----------------------------------------------------------------------===//148 149// CHECK-LABEL: @sconvert_scalar150spirv.func @sconvert_scalar(%arg0: i32, %arg1: i64) "None" {151 // CHECK: llvm.sext %{{.*}} : i32 to i64152 %0 = spirv.SConvert %arg0: i32 to i64153 154 // CHECK: llvm.trunc %{{.*}} : i64 to i32155 %1 = spirv.SConvert %arg1: i64 to i32156 spirv.Return157}158 159// CHECK-LABEL: @sconvert_vector160spirv.func @sconvert_vector(%arg0: vector<3xi32>, %arg1: vector<3xi64>) "None" {161 // CHECK: llvm.sext %{{.*}} : vector<3xi32> to vector<3xi64>162 %0 = spirv.SConvert %arg0: vector<3xi32> to vector<3xi64>163 164 // CHECK: llvm.trunc %{{.*}} : vector<3xi64> to vector<3xi32>165 %1 = spirv.SConvert %arg1: vector<3xi64> to vector<3xi32>166 spirv.Return167}168 169//===----------------------------------------------------------------------===//170// spirv.UConvert171//===----------------------------------------------------------------------===//172 173// CHECK-LABEL: @uconvert_scalar174spirv.func @uconvert_scalar(%arg0: i32, %arg1: i64) "None" {175 // CHECK: llvm.zext %{{.*}} : i32 to i64176 %0 = spirv.UConvert %arg0: i32 to i64177 178 // CHECK: llvm.trunc %{{.*}} : i64 to i32179 %1 = spirv.UConvert %arg1: i64 to i32180 spirv.Return181}182 183// CHECK-LABEL: @uconvert_vector184spirv.func @uconvert_vector(%arg0: vector<3xi32>, %arg1: vector<3xi64>) "None" {185 // CHECK: llvm.zext %{{.*}} : vector<3xi32> to vector<3xi64>186 %0 = spirv.UConvert %arg0: vector<3xi32> to vector<3xi64>187 188 // CHECK: llvm.trunc %{{.*}} : vector<3xi64> to vector<3xi32>189 %1 = spirv.UConvert %arg1: vector<3xi64> to vector<3xi32>190 spirv.Return191}192