From 3819789be6b83ac7af619b8279a0c480f9bffeeb Mon Sep 17 00:00:00 2001 From: George Mitenkov Date: Mon, 29 Jun 2020 20:32:40 -0400 Subject: [PATCH] [MLIR][SPIRVToLLVM] Added Bitcast conversion pattern Added conversion pattern and tests for `spv.Bitcast` op. This one has a direct mapping in LLVM dialect so `DirectConversionPattern` was used. Differential Revision: https://reviews.llvm.org/D82748 --- .../Conversion/SPIRVToLLVM/ConvertSPIRVToLLVM.cpp | 1 + .../Conversion/SPIRVToLLVM/cast-ops-to-llvm.mlir | 34 ++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/mlir/lib/Conversion/SPIRVToLLVM/ConvertSPIRVToLLVM.cpp b/mlir/lib/Conversion/SPIRVToLLVM/ConvertSPIRVToLLVM.cpp index 83be1c5..771610e 100644 --- a/mlir/lib/Conversion/SPIRVToLLVM/ConvertSPIRVToLLVM.cpp +++ b/mlir/lib/Conversion/SPIRVToLLVM/ConvertSPIRVToLLVM.cpp @@ -388,6 +388,7 @@ void mlir::populateSPIRVToLLVMConversionPatterns( NotPattern, // Cast ops + DirectConversionPattern, DirectConversionPattern, DirectConversionPattern, DirectConversionPattern, diff --git a/mlir/test/Conversion/SPIRVToLLVM/cast-ops-to-llvm.mlir b/mlir/test/Conversion/SPIRVToLLVM/cast-ops-to-llvm.mlir index 6a77224..0d101f3 100644 --- a/mlir/test/Conversion/SPIRVToLLVM/cast-ops-to-llvm.mlir +++ b/mlir/test/Conversion/SPIRVToLLVM/cast-ops-to-llvm.mlir @@ -1,6 +1,40 @@ // RUN: mlir-opt -convert-spirv-to-llvm %s | FileCheck %s //===----------------------------------------------------------------------===// +// spv.Bitcast +//===----------------------------------------------------------------------===// + +func @bitcast_float_to_integer_scalar(%arg0 : f32) { + // CHECK: {{.*}} = llvm.bitcast {{.*}} : !llvm.float to !llvm.i32 + %0 = spv.Bitcast %arg0: f32 to i32 + return +} + +func @bitcast_float_to_integer_vector(%arg0 : vector<3xf32>) { + // CHECK: {{.*}} = llvm.bitcast {{.*}} : !llvm<"<3 x float>"> to !llvm<"<3 x i32>"> + %0 = spv.Bitcast %arg0: vector<3xf32> to vector<3xi32> + return +} + +func @bitcast_vector_to_scalar(%arg0 : vector<2xf32>) { + // CHECK: {{.*}} = llvm.bitcast {{.*}} : !llvm<"<2 x float>"> to !llvm.i64 + %0 = spv.Bitcast %arg0: vector<2xf32> to i64 + return +} + +func @bitcast_scalar_to_vector(%arg0 : f64) { + // CHECK: {{.*}} = llvm.bitcast {{.*}} : !llvm.double to !llvm<"<2 x i32>"> + %0 = spv.Bitcast %arg0: f64 to vector<2xi32> + return +} + +func @bitcast_vector_to_vector(%arg0 : vector<4xf32>) { + // CHECK: {{.*}} = llvm.bitcast {{.*}} : !llvm<"<4 x float>"> to !llvm<"<2 x i64>"> + %0 = spv.Bitcast %arg0: vector<4xf32> to vector<2xi64> + return +} + +//===----------------------------------------------------------------------===// // spv.ConvertFToS //===----------------------------------------------------------------------===// -- 2.7.4