Skip to content

Commit c99c213

Browse files
authored
[mlir][Flang][NFC] Replace use of vector.insertelement/extractelement (#143272)
This PR is part of the last step to remove `vector.extractelement` and `vector.insertelement` ops (RFC: https://discourse.llvm.org/t/rfc-psa-remove-vector-extractelement-and-vector-insertelement-ops-in-favor-of-vector-extract-and-vector-insert-ops). It replaces `vector.insertelement` and `vector.extractelement` with `vector.insert` and `vector.extract` in Flang. It looks like no lit tests are impacted?
1 parent 921c6db commit c99c213

File tree

4 files changed

+14
-4
lines changed

4 files changed

+14
-4
lines changed

flang/include/flang/Optimizer/Support/InitFIR.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "mlir/Dialect/Affine/Passes.h"
2424
#include "mlir/Dialect/Complex/IR/Complex.h"
2525
#include "mlir/Dialect/Func/Extensions/InlinerExtension.h"
26+
#include "mlir/Dialect/Index/IR/IndexDialect.h"
2627
#include "mlir/Dialect/LLVMIR/NVVMDialect.h"
2728
#include "mlir/Dialect/OpenACC/Transforms/Passes.h"
2829
#include "mlir/Dialect/SCF/Transforms/Passes.h"
@@ -41,7 +42,8 @@ namespace fir::support {
4142
mlir::cf::ControlFlowDialect, mlir::func::FuncDialect, \
4243
mlir::vector::VectorDialect, mlir::math::MathDialect, \
4344
mlir::complex::ComplexDialect, mlir::DLTIDialect, cuf::CUFDialect, \
44-
mlir::NVVM::NVVMDialect, mlir::gpu::GPUDialect
45+
mlir::NVVM::NVVMDialect, mlir::gpu::GPUDialect, \
46+
mlir::index::IndexDialect
4547

4648
#define FLANG_CODEGEN_DIALECT_LIST FIRCodeGenDialect, mlir::LLVM::LLVMDialect
4749

flang/lib/Optimizer/Builder/PPCIntrinsicCall.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "flang/Evaluate/common.h"
1818
#include "flang/Optimizer/Builder/FIRBuilder.h"
1919
#include "flang/Optimizer/Builder/MutableBox.h"
20+
#include "mlir/Dialect/Index/IR/IndexOps.h"
2021
#include "mlir/Dialect/Vector/IR/VectorOps.h"
2122

2223
namespace fir {
@@ -1685,7 +1686,9 @@ PPCIntrinsicLibrary::genVecExtract(mlir::Type resultType,
16851686
if (!isNativeVecElemOrderOnLE())
16861687
uremOp = convertVectorElementOrder(builder, loc, vecTyInfo, uremOp);
16871688

1688-
return builder.create<mlir::vector::ExtractElementOp>(loc, varg0, uremOp);
1689+
mlir::Value index = builder.createOrFold<mlir::index::CastUOp>(
1690+
loc, builder.getIndexType(), uremOp);
1691+
return builder.create<mlir::vector::ExtractOp>(loc, varg0, index);
16891692
}
16901693

16911694
// VEC_INSERT
@@ -1706,8 +1709,10 @@ PPCIntrinsicLibrary::genVecInsert(mlir::Type resultType,
17061709
if (!isNativeVecElemOrderOnLE())
17071710
uremOp = convertVectorElementOrder(builder, loc, vecTyInfo, uremOp);
17081711

1709-
auto res{builder.create<mlir::vector::InsertElementOp>(loc, argBases[0],
1710-
varg1, uremOp)};
1712+
mlir::Value index = builder.createOrFold<mlir::index::CastUOp>(
1713+
loc, builder.getIndexType(), uremOp);
1714+
mlir::Value res =
1715+
builder.create<mlir::vector::InsertOp>(loc, argBases[0], varg1, index);
17111716
return builder.create<fir::ConvertOp>(loc, vecTyInfo.toFirVectorType(), res);
17121717
}
17131718

flang/lib/Optimizer/CodeGen/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ add_flang_library(FIRCodeGen
3737
MLIRComplexToROCDLLibraryCalls
3838
MLIRComplexToStandard
3939
MLIRGPUDialect
40+
MLIRIndexToLLVM
4041
MLIRMathToFuncs
4142
MLIRMathToLLVM
4243
MLIRMathToLibm

flang/lib/Optimizer/CodeGen/CodeGen.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "mlir/Conversion/ComplexToStandard/ComplexToStandard.h"
3838
#include "mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h"
3939
#include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h"
40+
#include "mlir/Conversion/IndexToLLVM/IndexToLLVM.h"
4041
#include "mlir/Conversion/LLVMCommon/Pattern.h"
4142
#include "mlir/Conversion/MathToFuncs/MathToFuncs.h"
4243
#include "mlir/Conversion/MathToLLVM/MathToLLVM.h"
@@ -4224,6 +4225,7 @@ class FIRToLLVMLowering
42244225
if (!isAMDGCN)
42254226
mlir::populateMathToLibmConversionPatterns(pattern);
42264227
mlir::populateComplexToLLVMConversionPatterns(typeConverter, pattern);
4228+
mlir::index::populateIndexToLLVMConversionPatterns(typeConverter, pattern);
42274229
mlir::populateVectorToLLVMConversionPatterns(typeConverter, pattern);
42284230

42294231
// Flang specific overloads for OpenMP operations, to allow for special

0 commit comments

Comments
 (0)