diff --git a/flang/include/flang/Optimizer/CodeGen/CGOps.td b/flang/include/flang/Optimizer/CodeGen/CGOps.td --- a/flang/include/flang/Optimizer/CodeGen/CGOps.td +++ b/flang/include/flang/Optimizer/CodeGen/CGOps.td @@ -20,6 +20,7 @@ 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 --- a/flang/include/flang/Optimizer/Dialect/FIRDialect.td +++ b/flang/include/flang/Optimizer/Dialect/FIRDialect.td @@ -31,6 +31,7 @@ // 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 --- a/flang/include/flang/Optimizer/HLFIR/HLFIROpBase.td +++ b/flang/include/flang/Optimizer/HLFIR/HLFIROpBase.td @@ -39,6 +39,7 @@ 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 --- a/flang/lib/Optimizer/Dialect/FIROps.cpp +++ b/flang/lib/Optimizer/Dialect/FIROps.cpp @@ -600,7 +600,7 @@ // 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 @@ // 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 @@ 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())) {