diff --git a/mlir/lib/Conversion/SPIRVToLLVM/ConvertSPIRVToLLVM.cpp b/mlir/lib/Conversion/SPIRVToLLVM/ConvertSPIRVToLLVM.cpp --- a/mlir/lib/Conversion/SPIRVToLLVM/ConvertSPIRVToLLVM.cpp +++ b/mlir/lib/Conversion/SPIRVToLLVM/ConvertSPIRVToLLVM.cpp @@ -576,6 +576,7 @@ DirectConversionPattern, DirectConversionPattern, DirectConversionPattern, + DirectConversionPattern, DirectConversionPattern, DirectConversionPattern, DirectConversionPattern, @@ -641,6 +642,10 @@ IComparePattern, NotPattern, + // Miscellaneous ops + DirectConversionPattern, + DirectConversionPattern, + // Shift ops ShiftPattern, ShiftPattern, diff --git a/mlir/test/Conversion/SPIRVToLLVM/arithmetic-ops-to-llvm.mlir b/mlir/test/Conversion/SPIRVToLLVM/arithmetic-ops-to-llvm.mlir --- a/mlir/test/Conversion/SPIRVToLLVM/arithmetic-ops-to-llvm.mlir +++ b/mlir/test/Conversion/SPIRVToLLVM/arithmetic-ops-to-llvm.mlir @@ -96,6 +96,22 @@ return } +//===----------------------------------------------------------------------===// +// spv.FMul +//===----------------------------------------------------------------------===// + +func @fmul_scalar(%arg0: f32, %arg1: f32) { + // CHECK: %{{.*}} = llvm.fmul %{{.*}}, %{{.*}} : !llvm.float + %0 = spv.FMul %arg0, %arg1 : f32 + return +} + +func @fmul_vector(%arg0: vector<2xf32>, %arg1: vector<2xf32>) { + // CHECK: %{{.*}} = llvm.fmul %{{.*}}, %{{.*}} : !llvm<"<2 x float>"> + %0 = spv.FMul %arg0, %arg1 : vector<2xf32> + return +} + //===----------------------------------------------------------------------===// // spv.FRem //===----------------------------------------------------------------------===// diff --git a/mlir/test/Conversion/SPIRVToLLVM/misc-ops-to-llvm.mlir b/mlir/test/Conversion/SPIRVToLLVM/misc-ops-to-llvm.mlir new file mode 100644 --- /dev/null +++ b/mlir/test/Conversion/SPIRVToLLVM/misc-ops-to-llvm.mlir @@ -0,0 +1,35 @@ +// RUN: mlir-opt -convert-spirv-to-llvm %s | FileCheck %s + +//===----------------------------------------------------------------------===// +// spv.Select +//===----------------------------------------------------------------------===// + +func @select_scalar(%arg0: i1, %arg1: vector<3xi32>, %arg2: f32) { + // CHECK: %{{.*}} = llvm.select %{{.*}}, %{{.*}}, %{{.*}} : !llvm.i1, !llvm<"<3 x i32>"> + %0 = spv.Select %arg0, %arg1, %arg1 : i1, vector<3xi32> + // CHECK: %{{.*}} = llvm.select %{{.*}}, %{{.*}}, %{{.*}} : !llvm.i1, !llvm.float + %1 = spv.Select %arg0, %arg2, %arg2 : i1, f32 + return +} + +func @select_vector(%arg0: vector<2xi1>, %arg1: vector<2xi32>) { + // CHECK: %{{.*}} = llvm.select %{{.*}}, %{{.*}}, %{{.*}} : !llvm<"<2 x i1>">, !llvm<"<2 x i32>"> + %0 = spv.Select %arg0, %arg1, %arg1 : vector<2xi1>, vector<2xi32> + return +} + +//===----------------------------------------------------------------------===// +// spv.Undef +//===----------------------------------------------------------------------===// + +func @undef_scalar() { + // CHECK: %{{.*}} = llvm.mlir.undef : !llvm.float + %0 = spv.undef : f32 + return +} + +func @undef_vector() { + // CHECK: %{{.*}} = llvm.mlir.undef : !llvm<"<2 x i32>"> + %0 = spv.undef : vector<2xi32> + return +}