Index: flang/include/flang/Optimizer/CodeGen/CGOps.td =================================================================== --- flang/include/flang/Optimizer/CodeGen/CGOps.td +++ 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. Index: flang/include/flang/Optimizer/Dialect/FIRDialect.td =================================================================== --- flang/include/flang/Optimizer/Dialect/FIRDialect.td +++ 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 Index: flang/include/flang/Optimizer/HLFIR/HLFIROpBase.td =================================================================== --- flang/include/flang/Optimizer/HLFIR/HLFIROpBase.td +++ flang/include/flang/Optimizer/HLFIR/HLFIROpBase.td @@ -39,6 +39,7 @@ let useDefaultTypePrinterParser = 1; let cppNamespace = "hlfir"; + let useFoldAPI = kEmitFoldAdaptorFolder; } Index: flang/lib/Optimizer/Dialect/FIROps.cpp =================================================================== --- flang/lib/Optimizer/Dialect/FIROps.cpp +++ 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())) {