diff options
Diffstat (limited to 'clang/lib/CIR/Dialect')
| -rw-r--r-- | clang/lib/CIR/Dialect/IR/CIRDialect.cpp | 23 | ||||
| -rw-r--r-- | clang/lib/CIR/Dialect/Transforms/FlattenCFG.cpp | 4 | 
2 files changed, 17 insertions, 10 deletions
| diff --git a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp index 2d2ef42..7ba03ce 100644 --- a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp +++ b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp @@ -286,14 +286,14 @@ void cir::ConditionOp::getSuccessorRegions(    // Parent is a loop: condition may branch to the body or to the parent op.    if (auto loopOp = dyn_cast<LoopOpInterface>(getOperation()->getParentOp())) {      regions.emplace_back(&loopOp.getBody(), loopOp.getBody().getArguments()); -    regions.emplace_back(loopOp->getResults()); +    regions.emplace_back(getOperation(), loopOp->getResults());    }    assert(!cir::MissingFeatures::awaitOp());  }  MutableOperandRange -cir::ConditionOp::getMutableSuccessorOperands(RegionBranchPoint point) { +cir::ConditionOp::getMutableSuccessorOperands(RegionSuccessor point) {    // No values are yielded to the successor region.    return MutableOperandRange(getOperation(), 0, 0);  } @@ -989,7 +989,8 @@ void cir::IfOp::getSuccessorRegions(mlir::RegionBranchPoint point,                                      SmallVectorImpl<RegionSuccessor> ®ions) {    // The `then` and the `else` region branch back to the parent operation.    if (!point.isParent()) { -    regions.push_back(RegionSuccessor()); +    regions.push_back( +        RegionSuccessor(getOperation(), getOperation()->getResults()));      return;    } @@ -1039,7 +1040,7 @@ void cir::ScopeOp::getSuccessorRegions(      mlir::RegionBranchPoint point, SmallVectorImpl<RegionSuccessor> ®ions) {    // The only region always branch back to the parent operation.    if (!point.isParent()) { -    regions.push_back(RegionSuccessor(getODSResults(0))); +    regions.push_back(RegionSuccessor(getOperation(), getODSResults(0)));      return;    } @@ -1124,7 +1125,8 @@ Block *cir::BrCondOp::getSuccessorForOperands(ArrayRef<Attribute> operands) {  void cir::CaseOp::getSuccessorRegions(      mlir::RegionBranchPoint point, SmallVectorImpl<RegionSuccessor> ®ions) {    if (!point.isParent()) { -    regions.push_back(RegionSuccessor()); +    regions.push_back( +        RegionSuccessor(getOperation(), getOperation()->getResults()));      return;    }    regions.push_back(RegionSuccessor(&getCaseRegion())); @@ -1188,7 +1190,8 @@ static void printSwitchOp(OpAsmPrinter &p, cir::SwitchOp op,  void cir::SwitchOp::getSuccessorRegions(      mlir::RegionBranchPoint point, SmallVectorImpl<RegionSuccessor> ®ion) {    if (!point.isParent()) { -    region.push_back(RegionSuccessor()); +    region.push_back( +        RegionSuccessor(getOperation(), getOperation()->getResults()));      return;    } @@ -1402,7 +1405,8 @@ void cir::GlobalOp::getSuccessorRegions(      mlir::RegionBranchPoint point, SmallVectorImpl<RegionSuccessor> ®ions) {    // The `ctor` and `dtor` regions always branch back to the parent operation.    if (!point.isParent()) { -    regions.push_back(RegionSuccessor()); +    regions.push_back( +        RegionSuccessor(getOperation(), getOperation()->getResults()));      return;    } @@ -1961,7 +1965,7 @@ void cir::TernaryOp::getSuccessorRegions(      mlir::RegionBranchPoint point, SmallVectorImpl<RegionSuccessor> ®ions) {    // The `true` and the `false` region branch back to the parent operation.    if (!point.isParent()) { -    regions.push_back(RegionSuccessor(this->getODSResults(0))); +    regions.push_back(RegionSuccessor(getOperation(), this->getODSResults(0)));      return;    } @@ -2978,7 +2982,8 @@ void cir::TryOp::getSuccessorRegions(      llvm::SmallVectorImpl<mlir::RegionSuccessor> ®ions) {    // The `try` and the `catchers` region branch back to the parent operation.    if (!point.isParent()) { -    regions.push_back(mlir::RegionSuccessor()); +    regions.push_back( +        RegionSuccessor(getOperation(), getOperation()->getResults()));      return;    } diff --git a/clang/lib/CIR/Dialect/Transforms/FlattenCFG.cpp b/clang/lib/CIR/Dialect/Transforms/FlattenCFG.cpp index 21c96fe..ca7554e 100644 --- a/clang/lib/CIR/Dialect/Transforms/FlattenCFG.cpp +++ b/clang/lib/CIR/Dialect/Transforms/FlattenCFG.cpp @@ -606,10 +606,12 @@ public:      // `cir.try_call`.      llvm::SmallVector<cir::CallOp, 4> callsToRewrite;      tryOp.getTryRegion().walk([&](CallOp op) { +      if (op.getNothrow()) +        return; +        // Only grab calls within immediate closest TryOp scope.        if (op->getParentOfType<cir::TryOp>() != tryOp)          return; -      assert(!cir::MissingFeatures::opCallExceptionAttr());        callsToRewrite.push_back(op);      }); | 
