diff --git a/flang/include/flang/Optimizer/CodeGen/CGOps.td b/flang/include/flang/Optimizer/CodeGen/CGOps.td index d17e4f33bdaa2..7df9fdc421de6 100644 --- a/flang/include/flang/Optimizer/CodeGen/CGOps.td +++ b/flang/include/flang/Optimizer/CodeGen/CGOps.td @@ -20,6 +20,7 @@ include "flang/Optimizer/Dialect/FIRTypes.td" def fircg_Dialect : Dialect { let name = "fircg"; let cppNamespace = "::fir::cg"; + let useFoldAPI = kEmitFoldAdaptorFolder; } // Base class for FIR CG operations. diff --git a/flang/include/flang/Optimizer/Dialect/FIRDialect.td b/flang/include/flang/Optimizer/Dialect/FIRDialect.td index 40501176a4683..8042670ac76e8 100644 --- a/flang/include/flang/Optimizer/Dialect/FIRDialect.td +++ b/flang/include/flang/Optimizer/Dialect/FIRDialect.td @@ -31,6 +31,7 @@ def fir_Dialect : Dialect { // supported by some FIR operations. "arith::ArithDialect" ]; + let useFoldAPI = kEmitFoldAdaptorFolder; } #endif // FORTRAN_DIALECT_FIR_DIALECT diff --git a/flang/include/flang/Optimizer/HLFIR/HLFIROpBase.td b/flang/include/flang/Optimizer/HLFIR/HLFIROpBase.td index d17a4cbf5e1b6..dbcc83a15214a 100644 --- a/flang/include/flang/Optimizer/HLFIR/HLFIROpBase.td +++ b/flang/include/flang/Optimizer/HLFIR/HLFIROpBase.td @@ -39,6 +39,7 @@ def hlfir_Dialect : Dialect { let useDefaultTypePrinterParser = 1; let cppNamespace = "hlfir"; + let useFoldAPI = kEmitFoldAdaptorFolder; } diff --git a/flang/lib/Optimizer/Dialect/FIROps.cpp b/flang/lib/Optimizer/Dialect/FIROps.cpp index 7bee0a229ea3a..579fd8317ca9d 100644 --- a/flang/lib/Optimizer/Dialect/FIROps.cpp +++ b/flang/lib/Optimizer/Dialect/FIROps.cpp @@ -600,7 +600,7 @@ mlir::LogicalResult fir::ArrayModifyOp::verify() { // BoxAddrOp //===----------------------------------------------------------------------===// -mlir::OpFoldResult fir::BoxAddrOp::fold(llvm::ArrayRef opnds) { +mlir::OpFoldResult fir::BoxAddrOp::fold(FoldAdaptor adaptor) { if (auto *v = getVal().getDefiningOp()) { if (auto box = mlir::dyn_cast(v)) { if (!box.getSlice()) // Fold only if not sliced @@ -616,8 +616,7 @@ mlir::OpFoldResult fir::BoxAddrOp::fold(llvm::ArrayRef opnds) { // BoxCharLenOp //===----------------------------------------------------------------------===// -mlir::OpFoldResult -fir::BoxCharLenOp::fold(llvm::ArrayRef opnds) { +mlir::OpFoldResult fir::BoxCharLenOp::fold(FoldAdaptor adaptor) { if (auto v = getVal().getDefiningOp()) { if (auto box = mlir::dyn_cast(v)) return box.getLen(); @@ -885,7 +884,7 @@ void fir::ConvertOp::getCanonicalizationPatterns( ForwardConstantConvertPattern>(context); } -mlir::OpFoldResult fir::ConvertOp::fold(llvm::ArrayRef opnds) { +mlir::OpFoldResult fir::ConvertOp::fold(FoldAdaptor adaptor) { if (getValue().getType() == getType()) return getValue(); if (matchPattern(getValue(), mlir::m_Op())) {