[mlir] Add std.bitcast -> llvm.bitcast conversion
The conversion is a straightforward one-to-one mapping with optional unrolling for nD vectors, similarly to other cast operations. Depends On D107889 Reviewed By: cota, akuegel Differential Revision: https://reviews.llvm.org/D107891
This commit is contained in:
parent
79b0576dd4
commit
a0d8a08e3e
|
@ -376,6 +376,8 @@ using AbsFOpLowering = VectorConvertToLLVMPattern<AbsFOp, LLVM::FAbsOp>;
|
|||
using AddFOpLowering = VectorConvertToLLVMPattern<AddFOp, LLVM::FAddOp>;
|
||||
using AddIOpLowering = VectorConvertToLLVMPattern<AddIOp, LLVM::AddOp>;
|
||||
using AndOpLowering = VectorConvertToLLVMPattern<AndOp, LLVM::AndOp>;
|
||||
using BitcastOpLowering =
|
||||
VectorConvertToLLVMPattern<BitcastOp, LLVM::BitcastOp>;
|
||||
using CeilFOpLowering = VectorConvertToLLVMPattern<CeilFOp, LLVM::FCeilOp>;
|
||||
using CopySignOpLowering =
|
||||
VectorConvertToLLVMPattern<CopySignOp, LLVM::CopySignOp>;
|
||||
|
@ -1128,6 +1130,7 @@ void mlir::populateStdToLLVMConversionPatterns(LLVMTypeConverter &converter,
|
|||
AndOpLowering,
|
||||
AssertOpLowering,
|
||||
AtomicRMWOpLowering,
|
||||
BitcastOpLowering,
|
||||
BranchOpLowering,
|
||||
CallIndirectOpLowering,
|
||||
CallOpLowering,
|
||||
|
|
|
@ -180,3 +180,18 @@ func @shru_vector(%arg0 : vector<1x2x3xi64>) -> vector<1x2x3xi64> {
|
|||
%0 = shift_right_unsigned %arg0, %c1 : vector<1x2x3xi64>
|
||||
return %0 : vector<1x2x3xi64>
|
||||
}
|
||||
|
||||
// -----
|
||||
|
||||
// CHECK-LABEL: @bitcast_2d
|
||||
func @bitcast_2d(%arg0: vector<2x4xf32>) {
|
||||
// CHECK: llvm.mlir.undef
|
||||
// CHECK: llvm.extractvalue %{{.*}}[0]
|
||||
// CHECK: llvm.bitcast %{{.*}} : vector<4xf32> to vector<4xi32>
|
||||
// CHECK: llvm.insertvalue %{{.*}}, %{{.*}}[0]
|
||||
// CHECK: llvm.extractvalue %{{.*}}[1]
|
||||
// CHECK: llvm.bitcast %{{.*}} : vector<4xf32> to vector<4xi32>
|
||||
// CHECK: llvm.insertvalue %{{.*}}, %{{.*}}[1]
|
||||
std.bitcast %arg0 : vector<2x4xf32> to vector<2x4xi32>
|
||||
return
|
||||
}
|
||||
|
|
|
@ -928,6 +928,15 @@ func @index_vector(%arg0: vector<4xindex>) {
|
|||
|
||||
// -----
|
||||
|
||||
// CHECK-LABEL: @bitcast_1d
|
||||
func @bitcast_1d(%arg0: vector<2xf32>) {
|
||||
// CHECK: llvm.bitcast %{{.*}} : vector<2xf32> to vector<2xi32>
|
||||
std.bitcast %arg0 : vector<2xf32> to vector<2xi32>
|
||||
return
|
||||
}
|
||||
|
||||
// -----
|
||||
|
||||
// CHECK-LABEL: func @cmpf_2dvector(
|
||||
func @cmpf_2dvector(%arg0 : vector<4x3xf32>, %arg1 : vector<4x3xf32>) {
|
||||
// CHECK: %[[EXTRACT1:.*]] = llvm.extractvalue %arg0[0] : !llvm.array<4 x vector<3xf32>>
|
||||
|
|
Loading…
Reference in a new issue