[flang-commits] [flang] c99c213 - [mlir][Flang][NFC] Replace use of `vector.insertelement/extractelement` (#143272)
via flang-commits
flang-commits at lists.llvm.org
Fri Jul 18 14:43:06 PDT 2025
Author: Diego Caballero
Date: 2025-07-18T14:43:03-07:00
New Revision: c99c213e725adee22c386d2059118a49f0c57054
URL: https://github.com/llvm/llvm-project/commit/c99c213e725adee22c386d2059118a49f0c57054
DIFF: https://github.com/llvm/llvm-project/commit/c99c213e725adee22c386d2059118a49f0c57054.diff
LOG: [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?
Added:
Modified:
flang/include/flang/Optimizer/Support/InitFIR.h
flang/lib/Optimizer/Builder/PPCIntrinsicCall.cpp
flang/lib/Optimizer/CodeGen/CMakeLists.txt
flang/lib/Optimizer/CodeGen/CodeGen.cpp
Removed:
################################################################################
diff --git a/flang/include/flang/Optimizer/Support/InitFIR.h b/flang/include/flang/Optimizer/Support/InitFIR.h
index 8bb4791859bb7..aacba233a2b32 100644
--- a/flang/include/flang/Optimizer/Support/InitFIR.h
+++ b/flang/include/flang/Optimizer/Support/InitFIR.h
@@ -23,6 +23,7 @@
#include "mlir/Dialect/Affine/Passes.h"
#include "mlir/Dialect/Complex/IR/Complex.h"
#include "mlir/Dialect/Func/Extensions/InlinerExtension.h"
+#include "mlir/Dialect/Index/IR/IndexDialect.h"
#include "mlir/Dialect/LLVMIR/NVVMDialect.h"
#include "mlir/Dialect/OpenACC/Transforms/Passes.h"
#include "mlir/Dialect/SCF/Transforms/Passes.h"
@@ -41,7 +42,8 @@ namespace fir::support {
mlir::cf::ControlFlowDialect, mlir::func::FuncDialect, \
mlir::vector::VectorDialect, mlir::math::MathDialect, \
mlir::complex::ComplexDialect, mlir::DLTIDialect, cuf::CUFDialect, \
- mlir::NVVM::NVVMDialect, mlir::gpu::GPUDialect
+ mlir::NVVM::NVVMDialect, mlir::gpu::GPUDialect, \
+ mlir::index::IndexDialect
#define FLANG_CODEGEN_DIALECT_LIST FIRCodeGenDialect, mlir::LLVM::LLVMDialect
diff --git a/flang/lib/Optimizer/Builder/PPCIntrinsicCall.cpp b/flang/lib/Optimizer/Builder/PPCIntrinsicCall.cpp
index 0094ce892d61b..db12c84496b10 100644
--- a/flang/lib/Optimizer/Builder/PPCIntrinsicCall.cpp
+++ b/flang/lib/Optimizer/Builder/PPCIntrinsicCall.cpp
@@ -17,6 +17,7 @@
#include "flang/Evaluate/common.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/MutableBox.h"
+#include "mlir/Dialect/Index/IR/IndexOps.h"
#include "mlir/Dialect/Vector/IR/VectorOps.h"
namespace fir {
@@ -1685,7 +1686,9 @@ PPCIntrinsicLibrary::genVecExtract(mlir::Type resultType,
if (!isNativeVecElemOrderOnLE())
uremOp = convertVectorElementOrder(builder, loc, vecTyInfo, uremOp);
- return builder.create<mlir::vector::ExtractElementOp>(loc, varg0, uremOp);
+ mlir::Value index = builder.createOrFold<mlir::index::CastUOp>(
+ loc, builder.getIndexType(), uremOp);
+ return builder.create<mlir::vector::ExtractOp>(loc, varg0, index);
}
// VEC_INSERT
@@ -1706,8 +1709,10 @@ PPCIntrinsicLibrary::genVecInsert(mlir::Type resultType,
if (!isNativeVecElemOrderOnLE())
uremOp = convertVectorElementOrder(builder, loc, vecTyInfo, uremOp);
- auto res{builder.create<mlir::vector::InsertElementOp>(loc, argBases[0],
- varg1, uremOp)};
+ mlir::Value index = builder.createOrFold<mlir::index::CastUOp>(
+ loc, builder.getIndexType(), uremOp);
+ mlir::Value res =
+ builder.create<mlir::vector::InsertOp>(loc, argBases[0], varg1, index);
return builder.create<fir::ConvertOp>(loc, vecTyInfo.toFirVectorType(), res);
}
diff --git a/flang/lib/Optimizer/CodeGen/CMakeLists.txt b/flang/lib/Optimizer/CodeGen/CMakeLists.txt
index 16c7944a885a1..d5ea3c7a8e282 100644
--- a/flang/lib/Optimizer/CodeGen/CMakeLists.txt
+++ b/flang/lib/Optimizer/CodeGen/CMakeLists.txt
@@ -37,6 +37,7 @@ add_flang_library(FIRCodeGen
MLIRComplexToROCDLLibraryCalls
MLIRComplexToStandard
MLIRGPUDialect
+ MLIRIndexToLLVM
MLIRMathToFuncs
MLIRMathToLLVM
MLIRMathToLibm
diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
index d879382555c39..609ba27bc212b 100644
--- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp
+++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
@@ -37,6 +37,7 @@
#include "mlir/Conversion/ComplexToStandard/ComplexToStandard.h"
#include "mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h"
#include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h"
+#include "mlir/Conversion/IndexToLLVM/IndexToLLVM.h"
#include "mlir/Conversion/LLVMCommon/Pattern.h"
#include "mlir/Conversion/MathToFuncs/MathToFuncs.h"
#include "mlir/Conversion/MathToLLVM/MathToLLVM.h"
@@ -4224,6 +4225,7 @@ class FIRToLLVMLowering
if (!isAMDGCN)
mlir::populateMathToLibmConversionPatterns(pattern);
mlir::populateComplexToLLVMConversionPatterns(typeConverter, pattern);
+ mlir::index::populateIndexToLLVMConversionPatterns(typeConverter, pattern);
mlir::populateVectorToLLVMConversionPatterns(typeConverter, pattern);
// Flang specific overloads for OpenMP operations, to allow for special
More information about the flang-commits
mailing list