Skip to content

Commit a0d8a08

Browse files
committed
[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
1 parent 79b0576 commit a0d8a08

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,8 @@ using AbsFOpLowering = VectorConvertToLLVMPattern<AbsFOp, LLVM::FAbsOp>;
376376
using AddFOpLowering = VectorConvertToLLVMPattern<AddFOp, LLVM::FAddOp>;
377377
using AddIOpLowering = VectorConvertToLLVMPattern<AddIOp, LLVM::AddOp>;
378378
using AndOpLowering = VectorConvertToLLVMPattern<AndOp, LLVM::AndOp>;
379+
using BitcastOpLowering =
380+
VectorConvertToLLVMPattern<BitcastOp, LLVM::BitcastOp>;
379381
using CeilFOpLowering = VectorConvertToLLVMPattern<CeilFOp, LLVM::FCeilOp>;
380382
using CopySignOpLowering =
381383
VectorConvertToLLVMPattern<CopySignOp, LLVM::CopySignOp>;
@@ -1128,6 +1130,7 @@ void mlir::populateStdToLLVMConversionPatterns(LLVMTypeConverter &converter,
11281130
AndOpLowering,
11291131
AssertOpLowering,
11301132
AtomicRMWOpLowering,
1133+
BitcastOpLowering,
11311134
BranchOpLowering,
11321135
CallIndirectOpLowering,
11331136
CallOpLowering,

mlir/test/Conversion/StandardToLLVM/convert-nd-vector-to-llvmir.mlir

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,18 @@ func @shru_vector(%arg0 : vector<1x2x3xi64>) -> vector<1x2x3xi64> {
180180
%0 = shift_right_unsigned %arg0, %c1 : vector<1x2x3xi64>
181181
return %0 : vector<1x2x3xi64>
182182
}
183+
184+
// -----
185+
186+
// CHECK-LABEL: @bitcast_2d
187+
func @bitcast_2d(%arg0: vector<2x4xf32>) {
188+
// CHECK: llvm.mlir.undef
189+
// CHECK: llvm.extractvalue %{{.*}}[0]
190+
// CHECK: llvm.bitcast %{{.*}} : vector<4xf32> to vector<4xi32>
191+
// CHECK: llvm.insertvalue %{{.*}}, %{{.*}}[0]
192+
// CHECK: llvm.extractvalue %{{.*}}[1]
193+
// CHECK: llvm.bitcast %{{.*}} : vector<4xf32> to vector<4xi32>
194+
// CHECK: llvm.insertvalue %{{.*}}, %{{.*}}[1]
195+
std.bitcast %arg0 : vector<2x4xf32> to vector<2x4xi32>
196+
return
197+
}

mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -928,6 +928,15 @@ func @index_vector(%arg0: vector<4xindex>) {
928928

929929
// -----
930930

931+
// CHECK-LABEL: @bitcast_1d
932+
func @bitcast_1d(%arg0: vector<2xf32>) {
933+
// CHECK: llvm.bitcast %{{.*}} : vector<2xf32> to vector<2xi32>
934+
std.bitcast %arg0 : vector<2xf32> to vector<2xi32>
935+
return
936+
}
937+
938+
// -----
939+
931940
// CHECK-LABEL: func @cmpf_2dvector(
932941
func @cmpf_2dvector(%arg0 : vector<4x3xf32>, %arg1 : vector<4x3xf32>) {
933942
// CHECK: %[[EXTRACT1:.*]] = llvm.extractvalue %arg0[0] : !llvm.array<4 x vector<3xf32>>

0 commit comments

Comments
 (0)