From eaa67a3cf041009ae33a45159d0465262c3af5dc Mon Sep 17 00:00:00 2001 From: Maksim Levental Date: Tue, 22 Jul 2025 09:40:45 -0500 Subject: [mlir][NFC] update `Conversion` create APIs (5/n) (#149887) See https://github.com/llvm/llvm-project/pull/147168 for more info. --- .../ControlFlowToSCF/ControlFlowToSCF.cpp | 38 ++++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) (limited to 'mlir/lib/Conversion/ControlFlowToSCF/ControlFlowToSCF.cpp') diff --git a/mlir/lib/Conversion/ControlFlowToSCF/ControlFlowToSCF.cpp b/mlir/lib/Conversion/ControlFlowToSCF/ControlFlowToSCF.cpp index 9831dcaaaccc..c8311eb5a643 100644 --- a/mlir/lib/Conversion/ControlFlowToSCF/ControlFlowToSCF.cpp +++ b/mlir/lib/Conversion/ControlFlowToSCF/ControlFlowToSCF.cpp @@ -33,8 +33,8 @@ ControlFlowToSCFTransformation::createStructuredBranchRegionOp( MutableArrayRef regions) { if (auto condBrOp = dyn_cast(controlFlowCondOp)) { assert(regions.size() == 2); - auto ifOp = builder.create(controlFlowCondOp->getLoc(), - resultTypes, condBrOp.getCondition()); + auto ifOp = scf::IfOp::create(builder, controlFlowCondOp->getLoc(), + resultTypes, condBrOp.getCondition()); ifOp.getThenRegion().takeBody(regions[0]); ifOp.getElseRegion().takeBody(regions[1]); return ifOp.getOperation(); @@ -43,8 +43,8 @@ ControlFlowToSCFTransformation::createStructuredBranchRegionOp( if (auto switchOp = dyn_cast(controlFlowCondOp)) { // `getCFGSwitchValue` returns an i32 that we need to convert to index // fist. - auto cast = builder.create( - controlFlowCondOp->getLoc(), builder.getIndexType(), + auto cast = arith::IndexCastUIOp::create( + builder, controlFlowCondOp->getLoc(), builder.getIndexType(), switchOp.getFlag()); SmallVector cases; if (auto caseValues = switchOp.getCaseValues()) @@ -55,8 +55,9 @@ ControlFlowToSCFTransformation::createStructuredBranchRegionOp( assert(regions.size() == cases.size() + 1); - auto indexSwitchOp = builder.create( - controlFlowCondOp->getLoc(), resultTypes, cast, cases, cases.size()); + auto indexSwitchOp = + scf::IndexSwitchOp::create(builder, controlFlowCondOp->getLoc(), + resultTypes, cast, cases, cases.size()); indexSwitchOp.getDefaultRegion().takeBody(regions[0]); for (auto &&[targetRegion, sourceRegion] : @@ -75,7 +76,7 @@ LogicalResult ControlFlowToSCFTransformation::createStructuredBranchRegionTerminatorOp( Location loc, OpBuilder &builder, Operation *branchRegionOp, Operation *replacedControlFlowOp, ValueRange results) { - builder.create(loc, results); + scf::YieldOp::create(builder, loc, results); return success(); } @@ -84,23 +85,24 @@ ControlFlowToSCFTransformation::createStructuredDoWhileLoopOp( OpBuilder &builder, Operation *replacedOp, ValueRange loopVariablesInit, Value condition, ValueRange loopVariablesNextIter, Region &&loopBody) { Location loc = replacedOp->getLoc(); - auto whileOp = builder.create(loc, loopVariablesInit.getTypes(), - loopVariablesInit); + auto whileOp = scf::WhileOp::create( + builder, loc, loopVariablesInit.getTypes(), loopVariablesInit); whileOp.getBefore().takeBody(loopBody); builder.setInsertionPointToEnd(&whileOp.getBefore().back()); // `getCFGSwitchValue` returns a i32. We therefore need to truncate the // condition to i1 first. It is guaranteed to be either 0 or 1 already. - builder.create( - loc, builder.create(loc, builder.getI1Type(), condition), + scf::ConditionOp::create( + builder, loc, + arith::TruncIOp::create(builder, loc, builder.getI1Type(), condition), loopVariablesNextIter); Block *afterBlock = builder.createBlock(&whileOp.getAfter()); afterBlock->addArguments( loopVariablesInit.getTypes(), SmallVector(loopVariablesInit.size(), loc)); - builder.create(loc, afterBlock->getArguments()); + scf::YieldOp::create(builder, loc, afterBlock->getArguments()); return whileOp.getOperation(); } @@ -108,8 +110,8 @@ ControlFlowToSCFTransformation::createStructuredDoWhileLoopOp( Value ControlFlowToSCFTransformation::getCFGSwitchValue(Location loc, OpBuilder &builder, unsigned int value) { - return builder.create(loc, - builder.getI32IntegerAttr(value)); + return arith::ConstantOp::create(builder, loc, + builder.getI32IntegerAttr(value)); } void ControlFlowToSCFTransformation::createCFGSwitchOp( @@ -117,15 +119,15 @@ void ControlFlowToSCFTransformation::createCFGSwitchOp( ArrayRef caseValues, BlockRange caseDestinations, ArrayRef caseArguments, Block *defaultDest, ValueRange defaultArgs) { - builder.create(loc, flag, defaultDest, defaultArgs, - llvm::to_vector_of(caseValues), - caseDestinations, caseArguments); + cf::SwitchOp::create(builder, loc, flag, defaultDest, defaultArgs, + llvm::to_vector_of(caseValues), + caseDestinations, caseArguments); } Value ControlFlowToSCFTransformation::getUndefValue(Location loc, OpBuilder &builder, Type type) { - return builder.create(loc, type, nullptr); + return ub::PoisonOp::create(builder, loc, type, nullptr); } FailureOr -- cgit v1.2.3