brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.8 KiB · 2026027 Raw
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