diff --git a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp --- a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp +++ b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp @@ -376,6 +376,8 @@ using AddFOpLowering = VectorConvertToLLVMPattern; using AddIOpLowering = VectorConvertToLLVMPattern; using AndOpLowering = VectorConvertToLLVMPattern; +using BitcastOpLowering = + VectorConvertToLLVMPattern; using CeilFOpLowering = VectorConvertToLLVMPattern; using CopySignOpLowering = VectorConvertToLLVMPattern; @@ -1128,6 +1130,7 @@ AndOpLowering, AssertOpLowering, AtomicRMWOpLowering, + BitcastOpLowering, BranchOpLowering, CallIndirectOpLowering, CallOpLowering, diff --git a/mlir/test/Conversion/StandardToLLVM/convert-nd-vector-to-llvmir.mlir b/mlir/test/Conversion/StandardToLLVM/convert-nd-vector-to-llvmir.mlir --- a/mlir/test/Conversion/StandardToLLVM/convert-nd-vector-to-llvmir.mlir +++ b/mlir/test/Conversion/StandardToLLVM/convert-nd-vector-to-llvmir.mlir @@ -180,3 +180,18 @@ %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 +} diff --git a/mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir b/mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir --- a/mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir +++ b/mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir @@ -928,6 +928,15 @@ // ----- +// 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>>