diff --git a/flang/include/flang/Optimizer/Builder/FIRBuilder.h b/flang/include/flang/Optimizer/Builder/FIRBuilder.h index 78ee6f00cbdb0..8b4c2f73a84e8 100644 --- a/flang/include/flang/Optimizer/Builder/FIRBuilder.h +++ b/flang/include/flang/Optimizer/Builder/FIRBuilder.h @@ -530,21 +530,21 @@ class FirOpBuilder : public mlir::OpBuilder, public mlir::OpBuilder::Listener { /// bodies. IfBuilder genIfOp(mlir::Location loc, mlir::TypeRange results, mlir::Value cdt, bool withElseRegion) { - auto op = create(loc, results, cdt, withElseRegion); + auto op = fir::IfOp::create(*this, loc, results, cdt, withElseRegion); return IfBuilder(op, *this); } /// Create an IfOp with no "else" region, and no result values. /// Usage: genIfThen(loc, cdt).genThen(lambda).end(); IfBuilder genIfThen(mlir::Location loc, mlir::Value cdt) { - auto op = create(loc, mlir::TypeRange(), cdt, false); + auto op = fir::IfOp::create(*this, loc, mlir::TypeRange(), cdt, false); return IfBuilder(op, *this); } /// Create an IfOp with an "else" region, and no result values. /// Usage: genIfThenElse(loc, cdt).genThen(lambda).genElse(lambda).end(); IfBuilder genIfThenElse(mlir::Location loc, mlir::Value cdt) { - auto op = create(loc, mlir::TypeRange(), cdt, true); + auto op = fir::IfOp::create(*this, loc, mlir::TypeRange(), cdt, true); return IfBuilder(op, *this); } diff --git a/flang/include/flang/Optimizer/Builder/Factory.h b/flang/include/flang/Optimizer/Builder/Factory.h index 4e5c52ac44e07..e67ef457c8b4c 100644 --- a/flang/include/flang/Optimizer/Builder/Factory.h +++ b/flang/include/flang/Optimizer/Builder/Factory.h @@ -49,8 +49,8 @@ void genCharacterCopy(mlir::Value src, mlir::Value srcLen, mlir::Value dst, if (!srcLen && !dstLen && srcTy.getFKind() == dstTy.getFKind() && srcTy.getLen() == dstTy.getLen()) { // same size, so just use load and store - auto load = builder.template create(loc, src); - builder.template create(loc, load, dst); + auto load = fir::LoadOp::create(builder, loc, src); + fir::StoreOp::create(builder, loc, load, dst); return; } auto zero = builder.template create(loc, 0); @@ -70,75 +70,72 @@ void genCharacterCopy(mlir::Value src, mlir::Value srcLen, mlir::Value dst, if (!srcLen && !dstLen && srcTy.getLen() >= dstTy.getLen()) { auto upper = builder.template create( loc, dstTy.getLen() - 1); - auto loop = builder.template create(loc, zero, upper, one); + auto loop = fir::DoLoopOp::create(builder, loc, zero, upper, one); auto insPt = builder.saveInsertionPoint(); builder.setInsertionPointToStart(loop.getBody()); auto csrcTy = toArrayTy(srcTy); - auto csrc = builder.template create(loc, csrcTy, src); - auto in = builder.template create( - loc, toCoorTy(csrcTy), csrc, loop.getInductionVar()); - auto load = builder.template create(loc, in); + auto csrc = fir::ConvertOp::create(builder, loc, csrcTy, src); + auto in = fir::CoordinateOp::create(builder, loc, toCoorTy(csrcTy), csrc, + loop.getInductionVar()); + auto load = fir::LoadOp::create(builder, loc, in); auto cdstTy = toArrayTy(dstTy); - auto cdst = builder.template create(loc, cdstTy, dst); - auto out = builder.template create( - loc, toCoorTy(cdstTy), cdst, loop.getInductionVar()); + auto cdst = fir::ConvertOp::create(builder, loc, cdstTy, dst); + auto out = fir::CoordinateOp::create(builder, loc, toCoorTy(cdstTy), cdst, + loop.getInductionVar()); mlir::Value cast = srcTy.getFKind() == dstTy.getFKind() ? load.getResult() - : builder - .template create(loc, toEleTy(cdstTy), load) + : fir::ConvertOp::create(builder, loc, toEleTy(cdstTy), load) .getResult(); - builder.template create(loc, cast, out); + fir::StoreOp::create(builder, loc, cast, out); builder.restoreInsertionPoint(insPt); return; } auto minusOne = [&](mlir::Value v) -> mlir::Value { return builder.template create( - loc, builder.template create(loc, one.getType(), v), - one); + loc, fir::ConvertOp::create(builder, loc, one.getType(), v), one); }; mlir::Value len = dstLen ? minusOne(dstLen) : builder .template create( loc, dstTy.getLen() - 1) .getResult(); - auto loop = builder.template create(loc, zero, len, one); + auto loop = fir::DoLoopOp::create(builder, loc, zero, len, one); auto insPt = builder.saveInsertionPoint(); builder.setInsertionPointToStart(loop.getBody()); mlir::Value slen = - srcLen - ? builder.template create(loc, one.getType(), srcLen) - .getResult() - : builder - .template create(loc, - srcTy.getLen()) - .getResult(); + srcLen ? fir::ConvertOp::create(builder, loc, one.getType(), srcLen) + .getResult() + : builder + .template create( + loc, srcTy.getLen()) + .getResult(); auto cond = builder.template create( loc, mlir::arith::CmpIPredicate::slt, loop.getInductionVar(), slen); - auto ifOp = builder.template create(loc, cond, /*withElse=*/true); + auto ifOp = fir::IfOp::create(builder, loc, cond, /*withElse=*/true); builder.setInsertionPointToStart(&ifOp.getThenRegion().front()); auto csrcTy = toArrayTy(srcTy); - auto csrc = builder.template create(loc, csrcTy, src); - auto in = builder.template create( - loc, toCoorTy(csrcTy), csrc, loop.getInductionVar()); - auto load = builder.template create(loc, in); + auto csrc = fir::ConvertOp::create(builder, loc, csrcTy, src); + auto in = fir::CoordinateOp::create(builder, loc, toCoorTy(csrcTy), csrc, + loop.getInductionVar()); + auto load = fir::LoadOp::create(builder, loc, in); auto cdstTy = toArrayTy(dstTy); - auto cdst = builder.template create(loc, cdstTy, dst); - auto out = builder.template create( - loc, toCoorTy(cdstTy), cdst, loop.getInductionVar()); + auto cdst = fir::ConvertOp::create(builder, loc, cdstTy, dst); + auto out = fir::CoordinateOp::create(builder, loc, toCoorTy(cdstTy), cdst, + loop.getInductionVar()); mlir::Value cast = srcTy.getFKind() == dstTy.getFKind() ? load.getResult() - : builder.template create(loc, toEleTy(cdstTy), load) + : fir::ConvertOp::create(builder, loc, toEleTy(cdstTy), load) .getResult(); - builder.template create(loc, cast, out); + fir::StoreOp::create(builder, loc, cast, out); builder.setInsertionPointToStart(&ifOp.getElseRegion().front()); - auto space = builder.template create( - loc, toEleTy(cdstTy), llvm::ArrayRef{' '}); - auto cdst2 = builder.template create(loc, cdstTy, dst); - auto out2 = builder.template create( - loc, toCoorTy(cdstTy), cdst2, loop.getInductionVar()); - builder.template create(loc, space, out2); + auto space = fir::StringLitOp::create(builder, loc, toEleTy(cdstTy), + llvm::ArrayRef{' '}); + auto cdst2 = fir::ConvertOp::create(builder, loc, cdstTy, dst); + auto out2 = fir::CoordinateOp::create(builder, loc, toCoorTy(cdstTy), cdst2, + loop.getInductionVar()); + fir::StoreOp::create(builder, loc, space, out2); builder.restoreInsertionPoint(insPt); } diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp index 1e88431b0eb1f..61476efbee1fc 100644 --- a/flang/lib/Lower/Bridge.cpp +++ b/flang/lib/Lower/Bridge.cpp @@ -796,7 +796,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { auto empty = fir::factory::createUnallocatedBox( *builder, loc, new_box->getBoxTy(), box.nonDeferredLenParams(), {}); - builder->create(loc, empty, new_box->getAddr()); + fir::StoreOp::create(*builder, loc, empty, new_box->getAddr()); return; } // Copy allocation status of Allocatables, creating new storage if @@ -843,7 +843,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { auto empty = fir::factory::createUnallocatedBox( *builder, loc, new_box->getBoxTy(), new_box->nonDeferredLenParams(), {}); - builder->create(loc, empty, new_box->getAddr()); + fir::StoreOp::create(*builder, loc, empty, new_box->getAddr()); }); if_builder.end(); }, @@ -1322,8 +1322,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { if (isPointer) { // Set LHS target to the target of RHS (do not copy the RHS // target data into the LHS target storage). - auto loadVal = builder->create(loc, rhs); - builder->create(loc, loadVal, lhs); + auto loadVal = fir::LoadOp::create(*builder, loc, rhs); + fir::StoreOp::create(*builder, loc, loadVal, lhs); } else if (isAllocatable && flags.test(Fortran::semantics::Symbol::Flag::OmpCopyIn)) { // For copyin allocatable variables, RHS must be copied to lhs @@ -1377,8 +1377,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { } else if (lhs.getBoxOf()) { fir::factory::CharacterExprHelper{*builder, loc}.createAssign(lhs, rhs); } else { - auto loadVal = builder->create(loc, fir::getBase(rhs)); - builder->create(loc, loadVal, fir::getBase(lhs)); + auto loadVal = fir::LoadOp::create(*builder, loc, fir::getBase(rhs)); + fir::StoreOp::create(*builder, loc, loadVal, fir::getBase(lhs)); } } @@ -1629,7 +1629,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { blockList.push_back(defaultBlock); if (valueList[branchCount - 1] == 0) // Swap IO ERR and default blocks. std::swap(blockList[branchCount - 1], blockList[branchCount]); - builder->create(loc, selector, valueList, blockList); + fir::SelectOp::create(*builder, loc, selector, valueList, blockList); return; } mlir::Type selectorType = selector.getType(); @@ -1738,13 +1738,13 @@ class FirConverter : public Fortran::lower::AbstractConverter { mlir::Value resultVal = resultSymBox.match( [&](const fir::CharBoxValue &x) -> mlir::Value { if (Fortran::semantics::IsBindCProcedure(functionSymbol)) - return builder->create(loc, x.getBuffer()); + return fir::LoadOp::create(*builder, loc, x.getBuffer()); return fir::factory::CharacterExprHelper{*builder, loc} .createEmboxChar(x.getBuffer(), x.getLen()); }, [&](const fir::MutableBoxValue &x) -> mlir::Value { mlir::Value resultRef = resultSymBox.getAddr(); - mlir::Value load = builder->create(loc, resultRef); + mlir::Value load = fir::LoadOp::create(*builder, loc, resultRef); unsigned rank = x.rank(); if (x.isAllocatable() && rank > 0) { // ALLOCATABLE array result must have default lower bounds. @@ -1760,9 +1760,9 @@ class FirConverter : public Fortran::lower::AbstractConverter { llvm::SmallVector lbounds{rank, one}; auto shiftTy = fir::ShiftType::get(builder->getContext(), rank); mlir::Value shiftOp = - builder->create(loc, shiftTy, lbounds); - load = builder->create( - loc, load.getType(), load, shiftOp, /*slice=*/mlir::Value{}); + fir::ShiftOp::create(*builder, loc, shiftTy, lbounds); + load = fir::ReboxOp::create(*builder, loc, load.getType(), load, + shiftOp, /*slice=*/mlir::Value{}); } return load; }, @@ -1776,7 +1776,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { if (resultRef.getType() != resultRefType) resultRef = builder->createConvertWithVolatileCast( loc, resultRefType, resultRef); - return builder->create(loc, resultRef); + return fir::LoadOp::create(*builder, loc, resultRef); }); genExitRoutine(false, resultVal); } @@ -1802,8 +1802,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { if (Fortran::semantics::IsFunction(symbol)) { genReturnSymbol(symbol); } else if (Fortran::semantics::HasAlternateReturns(symbol)) { - mlir::Value retval = builder->create( - toLocation(), getAltReturnResult(symbol)); + mlir::Value retval = fir::LoadOp::create(*builder, toLocation(), + getAltReturnResult(symbol)); genExitRoutine(false, retval); } else { genExitRoutine(false); @@ -1956,7 +1956,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { } if (!labelList.empty()) { auto selectExpr = - builder->create(loc, getSymbolAddress(symbol)); + fir::LoadOp::create(*builder, loc, getSymbolAddress(symbol)); // Add a default error target in case the goto is nonconforming. mlir::Block *errorBlock = builder->getBlock()->splitBlock(builder->getInsertionPoint()); @@ -1968,7 +1968,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { *builder, loc, "Assigned GOTO variable '" + symbol.name().ToString() + "' does not have a valid target label value"); - builder->create(loc); + fir::UnreachableOp::create(*builder, loc); } fir::ReduceOperationEnum @@ -2485,7 +2485,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { if (!isConst) { mlir::Value stepValue = nestSts.back(); info.stepVariable = builder->createTemporary(loc, stepValue.getType()); - builder->create(loc, stepValue, info.stepVariable); + fir::StoreOp::create(*builder, loc, stepValue, info.stepVariable); } } @@ -2498,8 +2498,9 @@ class FirConverter : public Fortran::lower::AbstractConverter { // The loop variable is a doLoop op argument. mlir::Type loopVarType = info.getLoopVariableType(); - auto loopOp = builder->create( - loc, lowerValue, upperValue, stepValue, /*unordered=*/false, + auto loopOp = fir::DoLoopOp::create( + *builder, loc, lowerValue, upperValue, stepValue, + /*unordered=*/false, /*finalCountValue=*/true, builder->createConvert(loc, loopVarType, lowerValue)); info.loopOp = loopOp; @@ -2507,7 +2508,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { mlir::Value loopValue = loopOp.getRegionIterArgs()[0]; // Update the loop variable value in case it has non-index references. - builder->create(loc, loopValue, info.loopVariable); + fir::StoreOp::create(*builder, loc, loopValue, info.loopVariable); addLoopAnnotationAttr(info, dirs); continue; } @@ -2539,13 +2540,13 @@ class FirConverter : public Fortran::lower::AbstractConverter { builder->create(loc, cond, one, tripCount); } info.tripVariable = builder->createTemporary(loc, tripCount.getType()); - builder->create(loc, tripCount, info.tripVariable); - builder->create(loc, lowerValue, info.loopVariable); + fir::StoreOp::create(*builder, loc, tripCount, info.tripVariable); + fir::StoreOp::create(*builder, loc, lowerValue, info.loopVariable); // Unstructured loop header - generate loop condition and mask. // Note - Currently there is no way to tag a loop as a concurrent loop. startBlock(info.headerBlock); - tripCount = builder->create(loc, info.tripVariable); + tripCount = fir::LoadOp::create(*builder, loc, info.tripVariable); mlir::Value zero = builder->createIntegerConstant(loc, tripCount.getType(), 0); auto cond = builder->create( @@ -2573,7 +2574,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { } if (genDoConcurrent) { - auto loopWrapperOp = builder->create(loc); + auto loopWrapperOp = fir::DoConcurrentOp::create(*builder, loc); builder->setInsertionPointToStart( builder->createBlock(&loopWrapperOp.getRegion())); @@ -2583,8 +2584,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { } builder->setInsertionPointToEnd(loopWrapperOp.getBody()); - auto loopOp = builder->create( - loc, nestLBs, nestUBs, nestSts, /*loopAnnotation=*/nullptr, + auto loopOp = fir::DoConcurrentLoopOp::create( + *builder, loc, nestLBs, nestUBs, nestSts, /*loopAnnotation=*/nullptr, /*local_vars=*/mlir::ValueRange{}, /*local_syms=*/nullptr, /*reduce_vars=*/mlir::ValueRange{}, /*reduce_byref=*/nullptr, /*reduce_syms=*/nullptr, @@ -2604,7 +2605,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { info.loopOp = loopOp; mlir::Value loopValue = builder->createConvert(loc, info.getLoopVariableType(), blockArg); - builder->create(loc, loopValue, info.loopVariable); + fir::StoreOp::create(*builder, loc, loopValue, info.loopVariable); if (info.maskExpr) { Fortran::lower::StatementContext stmtCtx; @@ -2612,8 +2613,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { stmtCtx.finalizeAndReset(); mlir::Value maskCondCast = builder->createConvert(loc, builder->getI1Type(), maskCond); - auto ifOp = builder->create(loc, maskCondCast, - /*withElseRegion=*/false); + auto ifOp = fir::IfOp::create(*builder, loc, maskCondCast, + /*withElseRegion=*/false); builder->setInsertionPointToStart(&ifOp.getThenRegion().front()); } } @@ -2659,35 +2660,35 @@ class FirConverter : public Fortran::lower::AbstractConverter { mlir::Value step = builder->createConvert( loc, info.getLoopVariableType(), doLoopOp.getStep()); mlir::Value loopVar = - builder->create(loc, info.loopVariable); + fir::LoadOp::create(*builder, loc, info.loopVariable); results.push_back( builder->create(loc, loopVar, step, iofAttr)); - builder->create(loc, results); + fir::ResultOp::create(*builder, loc, results); builder->setInsertionPointAfter(doLoopOp); // The loop control variable may be used after the loop. - builder->create(loc, doLoopOp.getResult(1), - info.loopVariable); + fir::StoreOp::create(*builder, loc, doLoopOp.getResult(1), + info.loopVariable); continue; } // Unstructured loop - decrement tripVariable and step loopVariable. mlir::Value tripCount = - builder->create(loc, info.tripVariable); + fir::LoadOp::create(*builder, loc, info.tripVariable); mlir::Value one = builder->createIntegerConstant(loc, tripCount.getType(), 1); tripCount = builder->create(loc, tripCount, one); - builder->create(loc, tripCount, info.tripVariable); - mlir::Value value = builder->create(loc, info.loopVariable); + fir::StoreOp::create(*builder, loc, tripCount, info.tripVariable); + mlir::Value value = fir::LoadOp::create(*builder, loc, info.loopVariable); mlir::Value step; if (info.stepVariable) - step = builder->create(loc, info.stepVariable); + step = fir::LoadOp::create(*builder, loc, info.stepVariable); else step = genControlValue(info.stepExpr, info); if (info.hasRealControl) value = builder->create(loc, value, step); else value = builder->create(loc, value, step, iofAttr); - builder->create(loc, value, info.loopVariable); + fir::StoreOp::create(*builder, loc, value, info.loopVariable); genBranch(info.headerBlock); if (&info != &incrementLoopNestInfo.front()) // not outermost @@ -2708,8 +2709,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { Fortran::lower::pft::Evaluation &succ = *e.controlSuccessor; bool hasElse = succ.isA() || succ.isA(); - auto ifOp = builder->create(toLocation(), cond, - /*withElseRegion=*/hasElse); + auto ifOp = fir::IfOp::create(*builder, toLocation(), cond, + /*withElseRegion=*/hasElse); builder->setInsertionPointToStart(&ifOp.getThenRegion().front()); return ifOp; }; @@ -2814,7 +2815,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { llvm::ArrayRef{ fir::getAdaptToByRefAttr(*builder)}); mlir::Value cast = builder->createConvert(loc, toTy, inducVar); - builder->create(loc, cast, tmp); + fir::StoreOp::create(*builder, loc, cast, tmp); addSymbol(*sym, tmp, /*force=*/true); } @@ -2896,11 +2897,11 @@ class FirConverter : public Fortran::lower::AbstractConverter { lowerExpr(*Fortran::semantics::GetExpr(*optStep))) : builder->createIntegerConstant(loc, idxTy, 1); } - auto lp = builder->create( - loc, lb, ub, by, /*unordered=*/true, + auto lp = fir::DoLoopOp::create( + *builder, loc, lb, ub, by, /*unordered=*/true, /*finalCount=*/false, explicitIterSpace.getInnerArgs()); if ((!loops.empty() || !outermost) && !lp.getRegionIterArgs().empty()) - builder->create(loc, lp.getResults()); + fir::ResultOp::create(*builder, loc, lp.getResults()); explicitIterSpace.setInnerArgs(lp.getRegionIterArgs()); builder->setInsertionPointToStart(lp.getBody()); forceControlVariableBinding(ctrlVar, lp.getInductionVar()); @@ -2918,12 +2919,12 @@ class FirConverter : public Fortran::lower::AbstractConverter { genExprValue(*Fortran::semantics::GetExpr(mask.value()), stmtCtx); mlir::Value cond = builder->createConvert(loc, i1Ty, fir::getBase(maskExv)); - auto ifOp = builder->create( - loc, explicitIterSpace.innerArgTypes(), cond, - /*withElseRegion=*/true); - builder->create(loc, ifOp.getResults()); + auto ifOp = fir::IfOp::create(*builder, loc, + explicitIterSpace.innerArgTypes(), cond, + /*withElseRegion=*/true); + fir::ResultOp::create(*builder, loc, ifOp.getResults()); builder->setInsertionPointToStart(&ifOp.getElseRegion().front()); - builder->create(loc, explicitIterSpace.getInnerArgs()); + fir::ResultOp::create(*builder, loc, explicitIterSpace.getInnerArgs()); builder->setInsertionPointToStart(&ifOp.getThenRegion().front()); } }; @@ -3083,7 +3084,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { builder->getStringAttr(controlVar->name().ToString())); localSymbols.addVariableDefinition(*controlVar, forallIndex, /*force=*/true); - auto end = builder->create(loc); + auto end = fir::FirEndOp::create(*builder, loc); builder->setInsertionPoint(end); } @@ -3094,7 +3095,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { auto forallMaskOp = builder->create(loc); evaluateControl(*maskExpr, forallMaskOp.getMaskRegion(), /*isMask=*/true); builder->createBlock(&forallMaskOp.getBody()); - auto end = builder->create(loc); + auto end = fir::FirEndOp::create(*builder, loc); builder->setInsertionPoint(end); } } @@ -3356,9 +3357,9 @@ class FirConverter : public Fortran::lower::AbstractConverter { loc, 1); // Use index type directly // Ensure lb, ub, and step are of index type using fir.convert - lb = builder->create(loc, idxTy, lb); - ub = builder->create(loc, idxTy, ub); - step = builder->create(loc, idxTy, step); + lb = fir::ConvertOp::create(*builder, loc, idxTy, lb); + ub = fir::ConvertOp::create(*builder, loc, idxTy, ub); + step = fir::ConvertOp::create(*builder, loc, idxTy, step); lbs.push_back(lb); ubs.push_back(ub); @@ -3454,7 +3455,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { op.getLoopRegions().front()->front().getArguments(), ivValues)) { mlir::Value convArg = builder->createConvert(loc, fir::unwrapRefType(value.getType()), arg); - builder->create(loc, convArg, value); + fir::StoreOp::create(*builder, loc, convArg, value); } if (crtEval->lowerAsStructured()) { @@ -3467,7 +3468,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { for (Fortran::lower::pft::Evaluation &e : crtEval->getNestedEvaluations()) genFIR(e); - builder->create(loc); + fir::FirEndOp::create(*builder, loc); builder->setInsertionPointAfter(op); } @@ -3608,8 +3609,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { // The selector is in an ssa register. Any temps that may have been // generated while evaluating it can be cleaned up now. stmtCtx.finalizeAndReset(); - builder->create(loc, selector, attrList, valueList, - blockList); + fir::SelectCaseOp::create(*builder, loc, selector, attrList, valueList, + blockList); return; } @@ -3832,8 +3833,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { // the default case (F'2023 11.1.10.2.). The selector cannot be an // assumed-size if it is allocatable or pointer, so the check is skipped. if (!Fortran::evaluate::IsAllocatableOrPointerObject(*selectorExpr)) { - mlir::Value isAssumedSize = builder->create( - loc, builder->getI1Type(), selector); + mlir::Value isAssumedSize = fir::IsAssumedSizeOp::create( + *builder, loc, builder->getI1Type(), selector); // Create new block to hold the fir.select_case for the non assumed-size // cases. mlir::Block *selectCaseBlock = insertBlock(blockList[0]); @@ -3845,10 +3846,11 @@ class FirConverter : public Fortran::lower::AbstractConverter { startBlock(selectCaseBlock); } // Create fir.select_case for the other rank cases. - mlir::Value rank = builder->create(loc, rankType, selector); + mlir::Value rank = + fir::BoxRankOp::create(*builder, loc, rankType, selector); stmtCtx.finalizeAndReset(); - builder->create(loc, rank, attrList, valueList, - blockList); + fir::SelectCaseOp::create(*builder, loc, rank, attrList, valueList, + blockList); } // Get associating entity symbol inside case statement scope. @@ -4057,8 +4059,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { } attrList.push_back(mlir::UnitAttr::get(context)); blockList.push_back(defaultBlock); - builder->create(loc, fir::getBase(selector), - attrList, blockList); + fir::SelectTypeOp::create(*builder, loc, fir::getBase(selector), + attrList, blockList); // If the actual position of CLASS DEFAULT type guard is not the last // one, it needs to be put back at its correct position for the rest of @@ -4133,13 +4135,14 @@ class FirConverter : public Fortran::lower::AbstractConverter { fir::ReferenceType::get(addrTy, selectorIsVolatile()); if (isPointer || isAllocatable) refTy = addrTy; - exactValue = builder->create( - loc, refTy, fir::getBase(selector)); + exactValue = fir::BoxAddrOp::create(*builder, loc, refTy, + fir::getBase(selector)); const Fortran::semantics::IntrinsicTypeSpec *intrinsic = typeSpec->declTypeSpec->AsIntrinsic(); if (isArray) { - mlir::Value exact = builder->create( - loc, fir::BoxType::get(addrTy, selectorIsVolatile()), + mlir::Value exact = fir::ConvertOp::create( + *builder, loc, + fir::BoxType::get(addrTy, selectorIsVolatile()), fir::getBase(selector)); addAssocEntitySymbol(selectorBox->clone(exact)); } else if (intrinsic->category() == @@ -4154,8 +4157,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { } } else if (std::holds_alternative( typeSpec->u)) { - exactValue = builder->create( - loc, fir::BoxType::get(addrTy, selectorIsVolatile()), + exactValue = fir::ConvertOp::create( + *builder, loc, fir::BoxType::get(addrTy, selectorIsVolatile()), fir::getBase(selector)); addAssocEntitySymbol(selectorBox->clone(exactValue)); } @@ -4179,8 +4182,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { if (classTy == baseTy) { addAssocEntitySymbol(selector); } else { - mlir::Value derived = builder->create( - loc, classTy, fir::getBase(selector)); + mlir::Value derived = fir::ConvertOp::create( + *builder, loc, classTy, fir::getBase(selector)); addAssocEntitySymbol(selectorBox->clone(derived)); } } @@ -4474,21 +4477,21 @@ class FirConverter : public Fortran::lower::AbstractConverter { mlir::Type indexTy = builder->getIndexType(); mlir::Type boundArrayTy = fir::SequenceType::get( {static_cast(lbounds.size())}, builder->getI64Type()); - mlir::Value boundArray = builder->create(loc, boundArrayTy); - mlir::Value array = builder->create(loc, boundArrayTy); + mlir::Value boundArray = fir::AllocaOp::create(*builder, loc, boundArrayTy); + mlir::Value array = fir::UndefOp::create(*builder, loc, boundArrayTy); for (unsigned i = 0; i < lbounds.size(); ++i) { - array = builder->create( - loc, boundArrayTy, array, lbounds[i], + array = fir::InsertValueOp::create( + *builder, loc, boundArrayTy, array, lbounds[i], builder->getArrayAttr({builder->getIntegerAttr( builder->getIndexType(), static_cast(i))})); } - builder->create(loc, array, boundArray); + fir::StoreOp::create(*builder, loc, array, boundArray); mlir::Type boxTy = fir::BoxType::get(boundArrayTy); mlir::Value ext = builder->createIntegerConstant(loc, indexTy, lbounds.size()); llvm::SmallVector shapes = {ext}; mlir::Value shapeOp = builder->genShape(loc, shapes); - return builder->create(loc, boxTy, boundArray, shapeOp); + return fir::EmboxOp::create(*builder, loc, boxTy, boundArray, shapeOp); } // Generate pointer assignment with possibly empty bounds-spec. R1035: a @@ -4624,7 +4627,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { loc, *this, assign.rhs, localSymbols, rhsContext); // Create pointer descriptor value from the RHS. if (rhs.isMutableBox()) - rhs = hlfir::Entity{builder->create(loc, rhs)}; + rhs = hlfir::Entity{fir::LoadOp::create(*builder, loc, rhs)}; mlir::Value rhsBox = hlfir::genVariableBox( loc, *builder, rhs, lhsBoxType.getBoxTypeWithNewShape(rhs.getRank())); // Apply lower bounds or reshaping if any. @@ -4636,8 +4639,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { for (const Fortran::evaluate::ExtentExpr &lbExpr : *lbExprs) lbounds.push_back(lowerToIndexValue(loc, lbExpr, rhsContext)); mlir::Value shift = builder->genShift(loc, lbounds); - rhsBox = builder->create(loc, lhsBoxType, rhsBox, shift, - /*slice=*/mlir::Value{}); + rhsBox = fir::ReboxOp::create(*builder, loc, lhsBoxType, rhsBox, shift, + /*slice=*/mlir::Value{}); } else if (const auto *boundExprs = std::get_if( &assign.u); @@ -4655,8 +4658,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { *builder, loc, lbounds.back(), ub, zero, one)); } mlir::Value shape = builder->genShape(loc, lbounds, extents); - rhsBox = builder->create(loc, lhsBoxType, rhsBox, shape, - /*slice=*/mlir::Value{}); + rhsBox = fir::ReboxOp::create(*builder, loc, lhsBoxType, rhsBox, shape, + /*slice=*/mlir::Value{}); } return rhsBox; } @@ -4670,30 +4673,30 @@ class FirConverter : public Fortran::lower::AbstractConverter { mlir::Type indexTy = builder->getIndexType(); mlir::Type boundArrayTy = fir::SequenceType::get( {2, static_cast(lbounds.size())}, builder->getI64Type()); - mlir::Value boundArray = builder->create(loc, boundArrayTy); - mlir::Value array = builder->create(loc, boundArrayTy); + mlir::Value boundArray = fir::AllocaOp::create(*builder, loc, boundArrayTy); + mlir::Value array = fir::UndefOp::create(*builder, loc, boundArrayTy); for (unsigned i = 0; i < lbounds.size(); ++i) { - array = builder->create( - loc, boundArrayTy, array, lbounds[i], + array = fir::InsertValueOp::create( + *builder, loc, boundArrayTy, array, lbounds[i], builder->getArrayAttr( {builder->getIntegerAttr(builder->getIndexType(), 0), builder->getIntegerAttr(builder->getIndexType(), static_cast(i))})); - array = builder->create( - loc, boundArrayTy, array, ubounds[i], + array = fir::InsertValueOp::create( + *builder, loc, boundArrayTy, array, ubounds[i], builder->getArrayAttr( {builder->getIntegerAttr(builder->getIndexType(), 1), builder->getIntegerAttr(builder->getIndexType(), static_cast(i))})); } - builder->create(loc, array, boundArray); + fir::StoreOp::create(*builder, loc, array, boundArray); mlir::Type boxTy = fir::BoxType::get(boundArrayTy); mlir::Value ext = builder->createIntegerConstant(loc, indexTy, lbounds.size()); mlir::Value c2 = builder->createIntegerConstant(loc, indexTy, 2); llvm::SmallVector shapes = {c2, ext}; mlir::Value shapeOp = builder->genShape(loc, shapes); - return builder->create(loc, boxTy, boundArray, shapeOp); + return fir::EmboxOp::create(*builder, loc, boxTy, boundArray, shapeOp); } // Pointer assignment with bounds-remapping. R1036: a bounds-remapping is a @@ -4767,7 +4770,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { if (explicitIterationSpace()) { mlir::ValueRange inners = explicitIterSpace.getInnerArgs(); if (!inners.empty()) - builder->create(loc, inners); + fir::ResultOp::create(*builder, loc, inners); } } @@ -5268,7 +5271,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { mlir::Value pteVal = fir::getBase(pte); mlir::Value cnvrt = Fortran::lower::addCrayPointerInst( loc, *builder, ptrVal, ptrTy, pteVal.getType()); - addr = builder->create(loc, cnvrt); + addr = fir::LoadOp::create(*builder, loc, cnvrt); } mlir::Value cast = isVector ? val @@ -5278,7 +5281,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { addr = builder->createConvert( toLocation(), builder->getRefType(toTy), addr); } - builder->create(loc, cast, addr); + fir::StoreOp::create(*builder, loc, cast, addr); } else if (isCharacterCategory(lhsType->category())) { // Fortran 2018 10.2.1.3 p10 and p11 fir::factory::CharacterExprHelper{*builder, loc}.createAssign( @@ -5392,7 +5395,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { if (whereOp) { // For HLFIR, create fir.end terminator in the last hlfir.elsewhere, or // in the hlfir.where if it had no elsewhere. - builder->create(loc); + fir::FirEndOp::create(*builder, loc); builder->setInsertionPointAfter(whereOp); } } @@ -5494,7 +5497,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { lowerWhereMaskToHlfir(loc, mask); builder->createBlock(&whereOp.getBody()); genAssignment(*assign.typedAssignment->v); - builder->create(loc); + fir::FirEndOp::create(*builder, loc); builder->setInsertionPointAfter(whereOp); return; } @@ -5557,12 +5560,12 @@ class FirConverter : public Fortran::lower::AbstractConverter { // If the address points to a boxed pointer, we need to dereference it if (auto refType = mlir::dyn_cast(addr.getType())) { if (auto boxType = mlir::dyn_cast(refType.getEleTy())) { - mlir::Value boxValue = builder->create(loc, addr); - addr = builder->create(loc, boxValue); + mlir::Value boxValue = fir::LoadOp::create(*builder, loc, addr); + addr = fir::BoxAddrOp::create(*builder, loc, boxValue); } } - builder->create(loc, labelValue, addr); + fir::StoreOp::create(*builder, loc, labelValue, addr); } void genFIR(const Fortran::parser::FormatStmt &) { @@ -5613,8 +5616,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { assert(expr && "missing alternate return expression"); mlir::Value altReturnIndex = builder->createConvert( loc, builder->getIndexType(), createFIRExpr(loc, expr, stmtCtx)); - builder->create(loc, altReturnIndex, - getAltReturnResult(symbol)); + fir::StoreOp::create(*builder, loc, altReturnIndex, + getAltReturnResult(symbol)); } } // Branch to the last block of the SUBROUTINE, which has the actual return. @@ -5725,7 +5728,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { // Always generate fir.dummy_scope even if there are no arguments. // It is currently used to create proper TBAA forest. if (lowerToHighLevelFIR()) { - mlir::Value scopeOp = builder->create(toLocation()); + mlir::Value scopeOp = fir::DummyScopeOp::create(*builder, toLocation()); setDummyArgsScope(scopeOp); } if (std::optional @@ -5767,10 +5770,10 @@ class FirConverter : public Fortran::lower::AbstractConverter { mlir::Value ones = builder->createIntegerConstant( loc, testExcept.getFunctionType().getInput(0), -1); mlir::Value exceptSet = - builder->create(loc, testExcept, ones).getResult(0); - builder->create(loc, clearExcept, exceptSet); + fir::CallOp::create(*builder, loc, testExcept, ones).getResult(0); + fir::CallOp::create(*builder, loc, clearExcept, exceptSet); bridge.fctCtx().attachCleanup([=]() { - builder->create(endLoc, raiseExcept, exceptSet); + fir::CallOp::create(*builder, endLoc, raiseExcept, exceptSet); }); } if (funit.mayModifyHaltingMode) { @@ -5783,12 +5786,12 @@ class FirConverter : public Fortran::lower::AbstractConverter { mlir::func::FuncOp enableExcept = fir::factory::getFeenableexcept(*builder); mlir::Value exceptSet = - builder->create(loc, getExcept).getResult(0); + fir::CallOp::create(*builder, loc, getExcept).getResult(0); mlir::Value ones = builder->createIntegerConstant( loc, disableExcept.getFunctionType().getInput(0), -1); bridge.fctCtx().attachCleanup([=]() { - builder->create(endLoc, disableExcept, ones); - builder->create(endLoc, enableExcept, exceptSet); + fir::CallOp::create(*builder, endLoc, disableExcept, ones); + fir::CallOp::create(*builder, endLoc, enableExcept, exceptSet); }); } if (funit.mayModifyRoundingMode) { @@ -5800,9 +5803,9 @@ class FirConverter : public Fortran::lower::AbstractConverter { mlir::func::FuncOp setRounding = fir::factory::getLlvmSetRounding(*builder); mlir::Value roundingMode = - builder->create(loc, getRounding).getResult(0); + fir::CallOp::create(*builder, loc, getRounding).getResult(0); bridge.fctCtx().attachCleanup([=]() { - builder->create(endLoc, setRounding, roundingMode); + fir::CallOp::create(*builder, endLoc, setRounding, roundingMode); }); } if ((funit.mayModifyUnderflowMode) && @@ -5960,8 +5963,8 @@ class FirConverter : public Fortran::lower::AbstractConverter { // convert the storage to the symbol type so that the hlfir.declare // gets the correct type for this symbol - preAlloc = builder->create(getCurrentLocation(), - wrappedSymTy, preAlloc); + preAlloc = fir::ConvertOp::create(*builder, getCurrentLocation(), + wrappedSymTy, preAlloc); } Fortran::lower::mapSymbolAttributes(*this, altResult, localSymbols, @@ -5997,7 +6000,7 @@ class FirConverter : public Fortran::lower::AbstractConverter { builder->createTemporary(loc, idxTy, toStringRef(symbol.name())); addSymbol(symbol, altResult); mlir::Value zero = builder->createIntegerConstant(loc, idxTy, 0); - builder->create(loc, zero, altResult); + fir::StoreOp::create(*builder, loc, zero, altResult); } if (Fortran::lower::pft::Evaluation *alternateEntryEval = @@ -6471,23 +6474,23 @@ class FirConverter : public Fortran::lower::AbstractConverter { // FIXME: Is there a way to create a `zeroinitializer` in LLVM-IR dialect? // For now, explicitly set lazy ragged header to all zeros. // auto nilTup = builder->createNullConstant(loc, ty); - // builder->create(loc, nilTup, hdr); + // fir::StoreOp::create(*builder, loc, nilTup, hdr); mlir::Type i32Ty = builder->getIntegerType(32); mlir::Value zero = builder->createIntegerConstant(loc, i32Ty, 0); mlir::Value zero64 = builder->createIntegerConstant(loc, i64Ty, 0); - mlir::Value flags = builder->create( - loc, builder->getRefType(i64Ty), hdr, zero); - builder->create(loc, zero64, flags); + mlir::Value flags = fir::CoordinateOp::create( + *builder, loc, builder->getRefType(i64Ty), hdr, zero); + fir::StoreOp::create(*builder, loc, zero64, flags); mlir::Value one = builder->createIntegerConstant(loc, i32Ty, 1); mlir::Value nullPtr1 = builder->createNullConstant(loc, buffTy); - mlir::Value var = builder->create( - loc, builder->getRefType(buffTy), hdr, one); - builder->create(loc, nullPtr1, var); + mlir::Value var = fir::CoordinateOp::create( + *builder, loc, builder->getRefType(buffTy), hdr, one); + fir::StoreOp::create(*builder, loc, nullPtr1, var); mlir::Value two = builder->createIntegerConstant(loc, i32Ty, 2); mlir::Value nullPtr2 = builder->createNullConstant(loc, shTy); - mlir::Value shape = builder->create( - loc, builder->getRefType(shTy), hdr, two); - builder->create(loc, nullPtr2, shape); + mlir::Value shape = fir::CoordinateOp::create( + *builder, loc, builder->getRefType(shTy), hdr, two); + fir::StoreOp::create(*builder, loc, nullPtr2, shape); implicitIterSpace.addMaskVariable(exp, var, shape, hdr); explicitIterSpace.outermostContext().attachCleanup( [builder = this->builder, hdr, loc]() { diff --git a/flang/lib/Lower/ConvertExpr.cpp b/flang/lib/Lower/ConvertExpr.cpp index 33df654b24a54..5588f62e7a0c1 100644 --- a/flang/lib/Lower/ConvertExpr.cpp +++ b/flang/lib/Lower/ConvertExpr.cpp @@ -2866,10 +2866,9 @@ class ScalarExprLowering { /*withElseRegion=*/true) .genThen([&]() { auto rebox = - builder - .create( - loc, actualTy, box, mlir::Value{}, - /*slice=*/mlir::Value{}) + fir::ReboxOp::create(builder, loc, actualTy, + box, mlir::Value{}, + /*slice=*/mlir::Value{}) .getResult(); fir::ResultOp::create(builder, loc, rebox); }) @@ -4209,11 +4208,10 @@ class ArrayExprLowering { // Adjust indices for any shift of the origin of the array. llvm::SmallVector indices = fir::factory::originateIndices( loc, *builder, tmp.getType(), shape, iters.iterVec()); - auto addr = - builder->create(loc, eleRefTy, tmp, shape, - /*slice=*/mlir::Value{}, indices, - /*typeParams=*/mlir::ValueRange{}); - auto load = builder->create(loc, addr); + auto addr = fir::ArrayCoorOp::create(*builder, loc, eleRefTy, tmp, shape, + /*slice=*/mlir::Value{}, indices, + /*typeParams=*/mlir::ValueRange{}); + auto load = fir::LoadOp::create(*builder, loc, addr); return builder->createConvert(loc, i1Ty, load); }; } @@ -4541,7 +4539,7 @@ class ArrayExprLowering { mlir::ValueRange{}, shape); fir::FirOpBuilder *bldr = &converter.getFirOpBuilder(); stmtCtx.attachCleanup( - [bldr, loc, temp]() { bldr->create(loc, temp); }); + [bldr, loc, temp]() { fir::FreeMemOp::create(*bldr, loc, temp); }); mlir::Value shapeOp = genShapeOp(shape); return fir::ArrayLoadOp::create(builder, loc, seqTy, temp, shapeOp, /*slice=*/mlir::Value{}, @@ -5840,9 +5838,8 @@ class ArrayExprLowering { mlir::isa(memref.getType()) ? fir::ReboxOp::create(builder, loc, boxTy, memref, shape, slice) .getResult() - : builder - .create(loc, boxTy, memref, shape, slice, - fir::getTypeParams(extMemref)) + : fir::EmboxOp::create(builder, loc, boxTy, memref, shape, slice, + fir::getTypeParams(extMemref)) .getResult(); return [=](IterSpace) -> ExtValue { return fir::BoxValue(embox, lbounds, nonDeferredLenParams); @@ -6540,7 +6537,7 @@ class ArrayExprLowering { // Cleanup the temporary. fir::FirOpBuilder *bldr = &converter.getFirOpBuilder(); stmtCtx.attachCleanup( - [bldr, loc, mem]() { bldr->create(loc, mem); }); + [bldr, loc, mem]() { fir::FreeMemOp::create(*bldr, loc, mem); }); // Return the continuation. if (fir::isa_char(seqTy.getEleTy())) { @@ -6724,8 +6721,8 @@ class ArrayExprLowering { auto loc = getLoc(); auto newCoorRef = [bldr, coorTy, offsets, currentFunc, loc](mlir::Value val) -> mlir::Value { - return bldr->create(loc, bldr->getRefType(coorTy), - currentFunc(val), offsets); + return fir::CoordinateOp::create(*bldr, loc, bldr->getRefType(coorTy), + currentFunc(val), offsets); }; component.extendCoorRef = newCoorRef; } @@ -6855,7 +6852,8 @@ class ArrayExprLowering { auto loc = getLoc(); auto *bldr = &converter.getFirOpBuilder(); auto newCoorRef = [=](mlir::Value val) -> mlir::Value { - return bldr->create(loc, currentFunc(val)); + return fir::LoadOp::create(*bldr, loc, + currentFunc(val)); }; components.extendCoorRef = newCoorRef; deref = true; @@ -7103,7 +7101,7 @@ class ArrayExprLowering { } } else { auto eleVal = convertElementForUpdate(loc, eleTy, iters.getElement()); - builder->create(loc, eleVal, addr); + fir::StoreOp::create(*builder, loc, eleVal, addr); } return exv; }; diff --git a/flang/lib/Lower/ConvertProcedureDesignator.cpp b/flang/lib/Lower/ConvertProcedureDesignator.cpp index d4c535d71cb5f..cfdc0da016956 100644 --- a/flang/lib/Lower/ConvertProcedureDesignator.cpp +++ b/flang/lib/Lower/ConvertProcedureDesignator.cpp @@ -212,5 +212,5 @@ mlir::Value Fortran::lower::derefPassProcPointerComponent( "failed to retrieve pointer procedure component symbol"); hlfir::EntityWithAttributes pointerComp = designateProcedurePointerComponent( loc, converter, *procComponentSym, passedArg, symMap, stmtCtx); - return converter.getFirOpBuilder().create(loc, pointerComp); + return fir::LoadOp::create(converter.getFirOpBuilder(), loc, pointerComp); } diff --git a/flang/lib/Lower/CustomIntrinsicCall.cpp b/flang/lib/Lower/CustomIntrinsicCall.cpp index 2c5233bdd15ee..c6d5ca75e1f69 100644 --- a/flang/lib/Lower/CustomIntrinsicCall.cpp +++ b/flang/lib/Lower/CustomIntrinsicCall.cpp @@ -103,7 +103,7 @@ Fortran::lower::genIntrinsicCall(fir::FirOpBuilder &builder, mlir::Location loc, addr = fir::BoxAddrOp::create(builder, loc, box->getMemTy(), box->getAddr()); fir::FirOpBuilder *bldr = &builder; - stmtCtx.attachCleanup([=]() { bldr->create(loc, addr); }); + stmtCtx.attachCleanup([=]() { fir::FreeMemOp::create(*bldr, loc, addr); }); } return result; } diff --git a/flang/lib/Lower/IO.cpp b/flang/lib/Lower/IO.cpp index 51f192ec08fe6..4ad2ac01334fa 100644 --- a/flang/lib/Lower/IO.cpp +++ b/flang/lib/Lower/IO.cpp @@ -2522,12 +2522,10 @@ mlir::Value Fortran::lower::genInquireStatement( fir::getBase(converter.genExprAddr(loc, ioLengthVar, stmtCtx)); llvm::SmallVector args = {cookie}; mlir::Value length = - builder - .create( - loc, - fir::runtime::getIORuntimeFunc(loc, - builder), - args) + fir::CallOp::create( + builder, loc, + fir::runtime::getIORuntimeFunc(loc, builder), + args) .getResult(0); mlir::Value length1 = builder.createConvert(loc, converter.genType(*ioLengthVar), length); diff --git a/flang/lib/Optimizer/Builder/FIRBuilder.cpp b/flang/lib/Optimizer/Builder/FIRBuilder.cpp index 9867d2efecbf9..d1925c3602848 100644 --- a/flang/lib/Optimizer/Builder/FIRBuilder.cpp +++ b/flang/lib/Optimizer/Builder/FIRBuilder.cpp @@ -138,7 +138,7 @@ mlir::Type fir::FirOpBuilder::getRealType(int kind) { mlir::Value fir::FirOpBuilder::createNullConstant(mlir::Location loc, mlir::Type ptrType) { auto ty = ptrType ? ptrType : getRefType(getNoneType()); - return create(loc, ty); + return fir::ZeroOp::create(*this, loc, ty); } mlir::Value fir::FirOpBuilder::createIntegerConstant(mlir::Location loc, @@ -242,13 +242,13 @@ mlir::Value fir::FirOpBuilder::allocateLocal( // Create the local variable. if (name.empty()) { if (uniqName.empty()) - return create(loc, ty, pinned, elidedLenParams, indices, - attrs); - return create(loc, ty, uniqName, pinned, elidedLenParams, - indices, attrs); + return fir::AllocaOp::create(*this, loc, ty, pinned, elidedLenParams, + indices, attrs); + return fir::AllocaOp::create(*this, loc, ty, uniqName, pinned, + elidedLenParams, indices, attrs); } - return create(loc, ty, uniqName, name, pinned, elidedLenParams, - indices, attrs); + return fir::AllocaOp::create(*this, loc, ty, uniqName, name, pinned, + elidedLenParams, indices, attrs); } mlir::Value fir::FirOpBuilder::allocateLocal( @@ -328,8 +328,9 @@ mlir::Value fir::FirOpBuilder::createTemporaryAlloc( /*unique_name=*/llvm::StringRef{}, name, attr, lenParams, shape, attrs); } else { - return create(loc, type, /*unique_name=*/llvm::StringRef{}, - name, pinned, lenParams, shape, attrs); + return fir::AllocaOp::create(*this, loc, type, + /*unique_name=*/llvm::StringRef{}, name, + pinned, lenParams, shape, attrs); } } @@ -369,8 +370,9 @@ mlir::Value fir::FirOpBuilder::createHeapTemporary( fir::factory::elideLengthsAlreadyInType(type, lenParams); assert(!mlir::isa(type) && "cannot be a reference"); - return create(loc, type, /*unique_name=*/llvm::StringRef{}, - name, dynamicLength, dynamicShape, attrs); + return fir::AllocMemOp::create(*this, loc, type, + /*unique_name=*/llvm::StringRef{}, name, + dynamicLength, dynamicShape, attrs); } std::pair fir::FirOpBuilder::createAndDeclareTemp( @@ -385,7 +387,7 @@ std::pair fir::FirOpBuilder::createAndDeclareTemp( mlir::Value boxAddress = fir::factory::getAndEstablishBoxStorage( *this, loc, boxType, shape, typeParams, polymorphicMold); fir::runtime::genAllocatableAllocate(*this, loc, boxAddress); - mlir::Value box = create(loc, boxAddress); + mlir::Value box = fir::LoadOp::create(*this, loc, boxAddress); mlir::Value base = genDeclare(*this, loc, box, tmpName, /*shape=*/mlir::Value{}, typeParams, fir::FortranVariableFlagsAttr{}); @@ -442,8 +444,8 @@ fir::GlobalOp fir::FirOpBuilder::createGlobal( attrs.push_back(mlir::NamedAttribute( fir::GlobalOp::getDataAttrAttrName(globalOpName), dataAttr)); } - auto glob = create(loc, name, isConst, isTarget, type, value, - linkage, attrs); + auto glob = fir::GlobalOp::create(*this, loc, name, isConst, isTarget, type, + value, linkage, attrs); restoreInsertionPoint(insertPt); if (symbolTable) symbolTable->insert(glob); @@ -459,7 +461,7 @@ fir::GlobalOp fir::FirOpBuilder::createGlobal( auto module = getModule(); auto insertPt = saveInsertionPoint(); setInsertionPoint(module.getBody(), module.getBody()->end()); - auto glob = create(loc, name, isConst, isTarget, type, + auto glob = fir::GlobalOp::create(*this, loc, name, isConst, isTarget, type, mlir::Attribute{}, linkage); auto ®ion = glob.getRegion(); region.push_back(new mlir::Block); @@ -482,7 +484,7 @@ fir::FirOpBuilder::createTypeInfoOp(mlir::Location loc, return {typeInfo, InsertPoint{}}; InsertPoint insertPoint = saveInsertionPoint(); setInsertionPoint(module.getBody(), module.getBody()->end()); - auto typeInfo = create(loc, recordType, parentType); + auto typeInfo = fir::TypeInfoOp::create(*this, loc, recordType, parentType); if (symbolTable) symbolTable->insert(typeInfo); return {typeInfo, insertPoint}; @@ -538,14 +540,14 @@ mlir::Value fir::FirOpBuilder::convertWithSemantics( assert((fir::unwrapRefType(toTy) == fir::unwrapRefType(fir::unwrapPassByRefType(fromTy)) && "element types expected to match")); - return create(loc, toTy, val); + return fir::BoxAddrOp::create(*this, loc, toTy, val); } if (fir::isa_ref_type(fromTy) && mlir::isa(toTy)) { // Call is expecting a boxed procedure, not a reference to other data type. // Convert the reference to a procedure and embox it. mlir::Type procTy = mlir::cast(toTy).getEleTy(); mlir::Value proc = createConvert(loc, procTy, val); - return create(loc, toTy, proc); + return fir::EmboxProcOp::create(*this, loc, toTy, proc); } // Legacy: remove when removing non HLFIR lowering path. @@ -555,7 +557,7 @@ mlir::Value fir::FirOpBuilder::convertWithSemantics( fir::isPolymorphicType(toTy)) || (fir::isPolymorphicType(fromTy) && mlir::isa(toTy))) && !(fir::isUnlimitedPolymorphicType(fromTy) && fir::isAssumedType(toTy))) - return create(loc, toTy, val, mlir::Value{}, + return fir::ReboxOp::create(*this, loc, toTy, val, mlir::Value{}, /*slice=*/mlir::Value{}); return createConvert(loc, toTy, val); @@ -568,7 +570,7 @@ mlir::Value fir::FirOpBuilder::createVolatileCast(mlir::Location loc, fir::updateTypeWithVolatility(val.getType(), isVolatile); if (volatileAdjustedType == val.getType()) return val; - return create(loc, volatileAdjustedType, val); + return fir::VolatileCastOp::create(*this, loc, volatileAdjustedType, val); } mlir::Value fir::FirOpBuilder::createConvertWithVolatileCast(mlir::Location loc, @@ -602,12 +604,12 @@ void fir::FirOpBuilder::createStoreWithConvert(mlir::Location loc, mlir::Type unwrapedRefType = fir::unwrapRefType(addr.getType()); val = createVolatileCast(loc, fir::isa_volatile_type(unwrapedRefType), val); mlir::Value cast = createConvert(loc, unwrapedRefType, val); - create(loc, cast, addr); + fir::StoreOp::create(*this, loc, cast, addr); } mlir::Value fir::FirOpBuilder::loadIfRef(mlir::Location loc, mlir::Value val) { if (fir::isa_ref_type(val.getType())) - return create(loc, val); + return fir::LoadOp::create(*this, loc, val); return val; } @@ -620,13 +622,13 @@ fir::StringLitOp fir::FirOpBuilder::createStringLitOp(mlir::Location loc, auto sizeTag = mlir::StringAttr::get(getContext(), fir::StringLitOp::size()); mlir::NamedAttribute sizeAttr(sizeTag, getI64IntegerAttr(data.size())); llvm::SmallVector attrs{dataAttr, sizeAttr}; - return create(loc, llvm::ArrayRef{type}, + return fir::StringLitOp::create(*this, loc, llvm::ArrayRef{type}, mlir::ValueRange{}, attrs); } mlir::Value fir::FirOpBuilder::genShape(mlir::Location loc, llvm::ArrayRef exts) { - return create(loc, exts); + return fir::ShapeOp::create(*this, loc, exts); } mlir::Value fir::FirOpBuilder::genShape(mlir::Location loc, @@ -640,7 +642,7 @@ mlir::Value fir::FirOpBuilder::genShape(mlir::Location loc, shapeArgs.push_back(lb); shapeArgs.push_back(ext); } - return create(loc, shapeType, shapeArgs); + return fir::ShapeShiftOp::create(*this, loc, shapeType, shapeArgs); } mlir::Value fir::FirOpBuilder::genShape(mlir::Location loc, @@ -653,7 +655,7 @@ mlir::Value fir::FirOpBuilder::genShape(mlir::Location loc, mlir::Value fir::FirOpBuilder::genShift(mlir::Location loc, llvm::ArrayRef shift) { auto shiftType = fir::ShiftType::get(getContext(), shift.size()); - return create(loc, shiftType, shift); + return fir::ShiftOp::create(*this, loc, shiftType, shift); } mlir::Value fir::FirOpBuilder::createShape(mlir::Location loc, @@ -665,7 +667,7 @@ mlir::Value fir::FirOpBuilder::createShape(mlir::Location loc, if (!box.getLBounds().empty()) { auto shiftType = fir::ShiftType::get(getContext(), box.getLBounds().size()); - return create(loc, shiftType, box.getLBounds()); + return fir::ShiftOp::create(*this, loc, shiftType, box.getLBounds()); } return {}; }, @@ -694,7 +696,7 @@ mlir::Value fir::FirOpBuilder::createSlice(mlir::Location loc, trips.push_back(v); trips.push_back(one); } - return create(loc, trips, path); + return fir::SliceOp::create(*this, loc, trips, path); } for (auto [lbnd, extent] : llvm::zip(lbounds, extents)) { auto lb = createConvert(loc, idxTy, lbnd); @@ -705,7 +707,7 @@ mlir::Value fir::FirOpBuilder::createSlice(mlir::Location loc, trips.push_back(ub); trips.push_back(one); } - return create(loc, trips, path); + return fir::SliceOp::create(*this, loc, trips, path); }; return exv.match( [&](const fir::ArrayBoxValue &box) { @@ -725,7 +727,7 @@ mlir::Value fir::FirOpBuilder::createSlice(mlir::Location loc, }, [&](auto) -> mlir::Value { fir::emitFatalError(loc, "not an array"); }); } - return create(loc, triples, path); + return fir::SliceOp::create(*this, loc, triples, path); } mlir::Value fir::FirOpBuilder::createBox(mlir::Location loc, @@ -763,43 +765,44 @@ mlir::Value fir::FirOpBuilder::createBox(mlir::Location loc, mlir::Value empty; mlir::ValueRange emptyRange; mlir::Value s = createShape(loc, exv); - return create(loc, boxTy, itemAddr, s, /*slice=*/empty, + return fir::EmboxOp::create(*this, loc, boxTy, itemAddr, s, + /*slice=*/empty, /*typeparams=*/emptyRange, isPolymorphic ? box.getSourceBox() : tdesc); }, [&](const fir::CharArrayBoxValue &box) -> mlir::Value { mlir::Value s = createShape(loc, exv); if (fir::factory::CharacterExprHelper::hasConstantLengthInType(exv)) - return create(loc, boxTy, itemAddr, s); + return fir::EmboxOp::create(*this, loc, boxTy, itemAddr, s); mlir::Value emptySlice; llvm::SmallVector lenParams{box.getLen()}; - return create(loc, boxTy, itemAddr, s, emptySlice, + return fir::EmboxOp::create(*this, loc, boxTy, itemAddr, s, emptySlice, lenParams); }, [&](const fir::CharBoxValue &box) -> mlir::Value { if (fir::factory::CharacterExprHelper::hasConstantLengthInType(exv)) - return create(loc, boxTy, itemAddr); + return fir::EmboxOp::create(*this, loc, boxTy, itemAddr); mlir::Value emptyShape, emptySlice; llvm::SmallVector lenParams{box.getLen()}; - return create(loc, boxTy, itemAddr, emptyShape, + return fir::EmboxOp::create(*this, loc, boxTy, itemAddr, emptyShape, emptySlice, lenParams); }, [&](const fir::MutableBoxValue &x) -> mlir::Value { - return create( - loc, fir::factory::getMutableIRBox(*this, loc, x)); + return fir::LoadOp::create( + *this, loc, fir::factory::getMutableIRBox(*this, loc, x)); }, [&](const fir::PolymorphicValue &p) -> mlir::Value { mlir::Value empty; mlir::ValueRange emptyRange; - return create(loc, boxTy, itemAddr, empty, empty, + return fir::EmboxOp::create(*this, loc, boxTy, itemAddr, empty, empty, emptyRange, isPolymorphic ? p.getSourceBox() : tdesc); }, [&](const auto &) -> mlir::Value { mlir::Value empty; mlir::ValueRange emptyRange; - return create(loc, boxTy, itemAddr, empty, empty, + return fir::EmboxOp::create(*this, loc, boxTy, itemAddr, empty, empty, emptyRange, tdesc); }); } @@ -810,8 +813,8 @@ mlir::Value fir::FirOpBuilder::createBox(mlir::Location loc, mlir::Type boxType, llvm::ArrayRef lengths, mlir::Value tdesc) { mlir::Type valueOrSequenceType = fir::unwrapPassByRefType(boxType); - return create( - loc, boxType, addr, shape, slice, + return fir::EmboxOp::create( + *this, loc, boxType, addr, shape, slice, fir::factory::elideLengthsAlreadyInType(valueOrSequenceType, lengths), tdesc); } @@ -860,11 +863,12 @@ mlir::Value fir::FirOpBuilder::genExtentFromTriplet(mlir::Location loc, mlir::Value fir::FirOpBuilder::genAbsentOp(mlir::Location loc, mlir::Type argTy) { if (!fir::isCharacterProcedureTuple(argTy)) - return create(loc, argTy); + return fir::AbsentOp::create(*this, loc, argTy); - auto boxProc = - create(loc, mlir::cast(argTy).getType(0)); - mlir::Value charLen = create(loc, getCharacterLengthType()); + auto boxProc = fir::AbsentOp::create( + *this, loc, mlir::cast(argTy).getType(0)); + mlir::Value charLen = + fir::UndefOp::create(*this, loc, getCharacterLengthType()); return fir::factory::createCharacterProcedureTuple(*this, loc, argTy, boxProc, charLen); } @@ -972,9 +976,8 @@ mlir::Value fir::factory::readExtent(fir::FirOpBuilder &builder, return x.getExplicitExtents()[dim]; auto idxTy = builder.getIndexType(); auto dimVal = builder.createIntegerConstant(loc, idxTy, dim); - return builder - .create(loc, idxTy, idxTy, idxTy, x.getAddr(), - dimVal) + return fir::BoxDimsOp::create(builder, loc, idxTy, idxTy, idxTy, + x.getAddr(), dimVal) .getResult(1); }, [&](const fir::MutableBoxValue &x) -> mlir::Value { diff --git a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp index e62ed4811a37e..dec59ef159b76 100644 --- a/flang/lib/Optimizer/Builder/IntrinsicCall.cpp +++ b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp @@ -2402,7 +2402,7 @@ mlir::func::FuncOp IntrinsicLibrary::getWrapper(GeneratorType generator, for (mlir::BlockArgument bArg : function.front().getArguments()) { auto refType = mlir::dyn_cast(bArg.getType()); if (loadRefArguments && refType) { - auto loaded = localBuilder->create(localLoc, bArg); + auto loaded = fir::LoadOp::create(*localBuilder, localLoc, bArg); localArguments.push_back(loaded); } else { localArguments.push_back(bArg); @@ -3480,9 +3480,9 @@ void IntrinsicLibrary::genCFPointer(llvm::ArrayRef args) { fir::unwrapSequenceType(fir::unwrapPassByRefType(lower.getType())); for (int i = 0; i < arrayRank; ++i) { mlir::Value index = builder.createIntegerConstant(loc, idxType, i); - mlir::Value var = builder.create( - loc, builder.getRefType(lowerElementType), lower, index); - mlir::Value load = builder.create(loc, var); + mlir::Value var = fir::CoordinateOp::create( + builder, loc, builder.getRefType(lowerElementType), lower, index); + mlir::Value load = fir::LoadOp::create(builder, loc, var); lbounds.push_back(builder.createConvert(loc, idxType, load)); } } diff --git a/flang/lib/Optimizer/Builder/Runtime/Intrinsics.cpp b/flang/lib/Optimizer/Builder/Runtime/Intrinsics.cpp index 4b4954a3e738c..ee151576ace92 100644 --- a/flang/lib/Optimizer/Builder/Runtime/Intrinsics.cpp +++ b/flang/lib/Optimizer/Builder/Runtime/Intrinsics.cpp @@ -174,9 +174,8 @@ mlir::Value fir::runtime::genMalloc(fir::FirOpBuilder &builder, auto runtimeFunc = fir::runtime::getRuntimeFunc(loc, builder); auto argTy = runtimeFunc.getArgumentTypes()[0]; - return builder - .create(loc, runtimeFunc, - builder.createConvert(loc, argTy, size)) + return fir::CallOp::create(builder, loc, runtimeFunc, + builder.createConvert(loc, argTy, size)) .getResult(0); } diff --git a/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp b/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp index 05ebc46cab1b2..68f9d4115a981 100644 --- a/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp +++ b/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp @@ -178,13 +178,13 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { if (!savedStackPtr) savedStackPtr = genStackSave(loc); mlir::Value stack = - rewriter->create(loc, fir::dyn_cast_ptrEleTy(resTy)); + fir::AllocaOp::create(*rewriter, loc, fir::dyn_cast_ptrEleTy(resTy)); newInTyAndAttrs.push_back(m[0]); newOpers.push_back(stack); return [=](mlir::Operation *) -> mlir::Value { auto memTy = fir::ReferenceType::get(originalResTy); - auto cast = rewriter->create(loc, memTy, stack); - return rewriter->create(loc, cast); + auto cast = fir::ConvertOp::create(*rewriter, loc, memTy, stack); + return fir::LoadOp::create(*rewriter, loc, cast); }; } newResTys.push_back(resTy); @@ -238,10 +238,10 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { if (!savedStackPtr) savedStackPtr = genStackSave(loc); if (attr.isByVal()) { - mlir::Value mem = rewriter->create(loc, oldType); - rewriter->create(loc, oper, mem); + mlir::Value mem = fir::AllocaOp::create(*rewriter, loc, oldType); + fir::StoreOp::create(*rewriter, loc, oper, mem); if (mem.getType() != resTy) - mem = rewriter->create(loc, resTy, mem); + mem = fir::ConvertOp::create(*rewriter, loc, resTy, mem); newOpers.push_back(mem); } else { mlir::Value bitcast = @@ -261,16 +261,16 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { mlir::Type newType, bool inputMayBeBigger) { if (inputMayBeBigger) { auto newRefTy = fir::ReferenceType::get(newType); - auto mem = rewriter->create(loc, value.getType()); - rewriter->create(loc, value, mem); - auto cast = rewriter->create(loc, newRefTy, mem); - return rewriter->create(loc, cast); + auto mem = fir::AllocaOp::create(*rewriter, loc, value.getType()); + fir::StoreOp::create(*rewriter, loc, value, mem); + auto cast = fir::ConvertOp::create(*rewriter, loc, newRefTy, mem); + return fir::LoadOp::create(*rewriter, loc, cast); } else { auto oldRefTy = fir::ReferenceType::get(value.getType()); - auto mem = rewriter->create(loc, newType); - auto cast = rewriter->create(loc, oldRefTy, mem); - rewriter->create(loc, value, cast); - return rewriter->create(loc, mem); + auto mem = fir::AllocaOp::create(*rewriter, loc, newType); + auto cast = fir::ConvertOp::create(*rewriter, loc, oldRefTy, mem); + fir::StoreOp::create(*rewriter, loc, value, cast); + return fir::LoadOp::create(*rewriter, loc, mem); } } @@ -299,8 +299,8 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { auto ty = std::get(tup); auto index = e.index(); auto idx = rewriter->getIntegerAttr(iTy, index); - auto val = rewriter->create( - loc, ty, oper, rewriter->getArrayAttr(idx)); + auto val = fir::ExtractValueOp::create(*rewriter, loc, ty, oper, + rewriter->getArrayAttr(idx)); newOpers.push_back(val); } } @@ -437,9 +437,9 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { TODO(loc, "ABI of fir.dispatch with character arguments"); } auto m = specifics->boxcharArgumentType(boxTy.getEleTy()); - auto unbox = rewriter->create( - loc, std::get(m[0]), std::get(m[1]), - oper); + auto unbox = fir::UnboxCharOp::create( + *rewriter, loc, std::get(m[0]), + std::get(m[1]), oper); // unboxed CHARACTER arguments for (auto e : llvm::enumerate(m)) { unsigned idx = e.index(); @@ -539,13 +539,13 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { } else if constexpr (std::is_same_v, fir::CallOp>) { fir::CallOp newCall; if (callOp.getCallee()) { - newCall = rewriter->create(loc, *callOp.getCallee(), - newResTys, newOpers); + newCall = fir::CallOp::create(*rewriter, loc, *callOp.getCallee(), + newResTys, newOpers); } else { newOpers[0].setType(mlir::FunctionType::get( callOp.getContext(), mlir::TypeRange{newInTypes}.drop_front(dropFront), newResTys)); - newCall = rewriter->create(loc, newResTys, newOpers); + newCall = fir::CallOp::create(*rewriter, loc, newResTys, newOpers); } newCall.setFastmathAttr(callOp.getFastmathAttr()); // Always set ABI argument attributes on call operations, even when @@ -754,8 +754,8 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { trailingInTys.end()); // replace this op with a new one with the updated signature auto newTy = rewriter->getFunctionType(newInTypes, newResTys); - auto newOp = rewriter->create(addrOp.getLoc(), newTy, - addrOp.getSymbol()); + auto newOp = fir::AddrOfOp::create(*rewriter, addrOp.getLoc(), newTy, + addrOp.getSymbol()); replaceOp(addrOp, newOp.getResult()); } @@ -1002,8 +1002,8 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { rewriter->setInsertionPointToStart(&func.front()); auto oldArgTy = fir::ReferenceType::get(oldArgTys[fixup.index - offset]); - auto cast = rewriter->create(loc, oldArgTy, newArg); - auto load = rewriter->create(loc, cast); + auto cast = fir::ConvertOp::create(*rewriter, loc, oldArgTy, newArg); + auto load = fir::LoadOp::create(*rewriter, loc, cast); func.getArgument(fixup.index + 1).replaceAllUsesWith(load); func.front().eraseArgument(fixup.index + 1); } break; @@ -1035,8 +1035,9 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { if (fixup.second == 1) { rewriter->setInsertionPointToStart(&func.front()); auto boxTy = oldArgTys[fixup.index - offset - fixup.second]; - auto box = rewriter->create( - loc, boxTy, func.front().getArgument(fixup.index - 1), newArg); + auto box = fir::EmboxCharOp::create( + *rewriter, loc, boxTy, + func.front().getArgument(fixup.index - 1), newArg); func.getArgument(fixup.index + 1).replaceAllUsesWith(box); func.front().eraseArgument(fixup.index + 1); offset++; @@ -1053,8 +1054,8 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { auto oldOper = ret.getOperand(0); auto oldOperTy = fir::ReferenceType::get(oldOper.getType()); auto cast = - rewriter->create(loc, oldOperTy, newArg); - rewriter->create(loc, oldOper, cast); + fir::ConvertOp::create(*rewriter, loc, oldOperTy, newArg); + fir::StoreOp::create(*rewriter, loc, oldOper, cast); rewriter->create(loc); ret.erase(); }); @@ -1089,14 +1090,16 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { originalTy.getContext(), mlir::TypeRange{firstArg.getType(), newArg.getType()}); } - auto undef = rewriter->create(loc, pairTy); + auto undef = fir::UndefOp::create(*rewriter, loc, pairTy); auto iTy = rewriter->getIntegerType(32); auto zero = rewriter->getIntegerAttr(iTy, 0); auto one = rewriter->getIntegerAttr(iTy, 1); - mlir::Value pair1 = rewriter->create( - loc, pairTy, undef, firstArg, rewriter->getArrayAttr(zero)); - mlir::Value pair = rewriter->create( - loc, pairTy, pair1, newArg, rewriter->getArrayAttr(one)); + mlir::Value pair1 = fir::InsertValueOp::create( + *rewriter, loc, pairTy, undef, firstArg, + rewriter->getArrayAttr(zero)); + mlir::Value pair = + fir::InsertValueOp::create(*rewriter, loc, pairTy, pair1, + newArg, rewriter->getArrayAttr(one)); // Cast local argument tuple to original type via memory if needed. if (pairTy != originalTy) pair = convertValueInMemory(loc, pair, originalTy, @@ -1117,8 +1120,8 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase { func.front().addArgument(trailingTys[fixup.second], loc); auto boxTy = oldArgTys[fixup.index - offset]; rewriter->setInsertionPointToStart(&func.front()); - auto box = rewriter->create(loc, boxTy, newBufArg, - newLenArg); + auto box = fir::EmboxCharOp::create(*rewriter, loc, boxTy, newBufArg, + newLenArg); func.getArgument(fixup.index + 1).replaceAllUsesWith(box); func.front().eraseArgument(fixup.index + 1); } break; diff --git a/flang/lib/Optimizer/Transforms/PolymorphicOpConversion.cpp b/flang/lib/Optimizer/Transforms/PolymorphicOpConversion.cpp index 2c6601dec6e16..25a8f7af5b0a2 100644 --- a/flang/lib/Optimizer/Transforms/PolymorphicOpConversion.cpp +++ b/flang/lib/Optimizer/Transforms/PolymorphicOpConversion.cpp @@ -447,9 +447,8 @@ llvm::LogicalResult SelectTypeConv::genTypeLadderStep( rewriter.getI1Type()), {runtimeAttr}); } - cmp = rewriter - .create(loc, callee, - mlir::ValueRange{descSelector, typeDesc}) + cmp = fir::CallOp::create(rewriter, loc, callee, + mlir::ValueRange{descSelector, typeDesc}) .getResult(0); }