From f12791fc58574789cf0a557dc26fe705f84efbb5 Mon Sep 17 00:00:00 2001 From: Jiahan Xie <88367305+jiahanxie353@users.noreply.github.com> Date: Wed, 27 Nov 2024 12:34:37 -0500 Subject: [PATCH] [SCFToCalyx] remove redundant build switch group (#7910) --- lib/Conversion/SCFToCalyx/SCFToCalyx.cpp | 68 ------------------------ 1 file changed, 68 deletions(-) diff --git a/lib/Conversion/SCFToCalyx/SCFToCalyx.cpp b/lib/Conversion/SCFToCalyx/SCFToCalyx.cpp index 92b58479abd6..2b406b2c54dc 100644 --- a/lib/Conversion/SCFToCalyx/SCFToCalyx.cpp +++ b/lib/Conversion/SCFToCalyx/SCFToCalyx.cpp @@ -1625,70 +1625,6 @@ class BuildParGroups : public calyx::FuncOpPartialLoweringPattern { } }; -class BuildSwitchGroups : public calyx::FuncOpPartialLoweringPattern { - using FuncOpPartialLoweringPattern::FuncOpPartialLoweringPattern; - - LogicalResult - partiallyLowerFuncToComp(FuncOp funcOp, - PatternRewriter &rewriter) const override { - LogicalResult res = success(); - funcOp.walk([&](Operation *op) { - if (!isa(op)) - return WalkResult::advance(); - - auto switchOp = cast(op); - auto loc = switchOp.getLoc(); - - Region &defaultRegion = switchOp.getDefaultRegion(); - Operation *yieldOp = defaultRegion.front().getTerminator(); - Value defaultResult = yieldOp->getOperand(0); - - Value finalResult = defaultResult; - scf::IfOp prevIfOp = nullptr; - - rewriter.setInsertionPointAfter(switchOp); - for (size_t i = 0; i < switchOp.getCases().size(); i++) { - auto caseValueInt = switchOp.getCases()[i]; - if (prevIfOp) - rewriter.setInsertionPointToStart(&prevIfOp.getElseRegion().front()); - - Value caseValue = rewriter.create(loc, caseValueInt); - Value cond = rewriter.create( - loc, CmpIPredicate::eq, *switchOp.getODSOperands(0).begin(), - caseValue); - - auto ifOp = rewriter.create(loc, switchOp.getResultTypes(), - cond, /*hasElseRegion=*/true); - - Region &caseRegion = switchOp.getCaseRegions()[i]; - IRMapping mapping; - Block &emptyThenBlock = ifOp.getThenRegion().front(); - emptyThenBlock.erase(); - caseRegion.cloneInto(&ifOp.getThenRegion(), mapping); - - if (i == switchOp.getCases().size() - 1) { - rewriter.setInsertionPointToEnd(&ifOp.getElseRegion().front()); - rewriter.create(loc, defaultResult); - } - - if (prevIfOp) { - rewriter.setInsertionPointToEnd(&prevIfOp.getElseRegion().front()); - rewriter.create(loc, ifOp.getResult(0)); - } - - if (i == 0) - finalResult = ifOp.getResult(0); - prevIfOp = ifOp; - } - - rewriter.replaceOp(switchOp, finalResult); - - return WalkResult::advance(); - }); - return res; - } -}; - /// Builds a control schedule by traversing the CFG of the function and /// associating this with the previously created groups. /// For simplicity, the generated control flow is expanded for all possible @@ -2465,10 +2401,6 @@ void SCFToCalyxPass::runOnOperation() { addOncePattern(loweringPatterns, patternState, funcMap, *loweringState); - /// This pattern converts all scf.IndexSwitchOps to nested if-elses. - addOncePattern(loweringPatterns, patternState, funcMap, - *loweringState); - /// This pattern converts all index typed values to an i32 integer. addOncePattern(loweringPatterns, patternState, funcMap, *loweringState);