[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
This commit is contained in:
George Mitenkov 2020-06-29 20:32:40 -04:00 committed by Lei Zhang
parent 71b9d89df7
commit 3819789be6
2 changed files with 35 additions and 0 deletions

View File

@ -388,6 +388,7 @@ void mlir::populateSPIRVToLLVMConversionPatterns(
NotPattern<spirv::NotOp>,
// Cast ops
DirectConversionPattern<spirv::BitcastOp, LLVM::BitcastOp>,
DirectConversionPattern<spirv::ConvertFToSOp, LLVM::FPToSIOp>,
DirectConversionPattern<spirv::ConvertFToUOp, LLVM::FPToUIOp>,
DirectConversionPattern<spirv::ConvertSToFOp, LLVM::SIToFPOp>,

View File

@ -1,5 +1,39 @@
// 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
//===----------------------------------------------------------------------===//