|
clang 24.0.0git
|
#include "CIRGenCleanup.h"#include "CIRGenFunction.h"#include "clang/AST/RecursiveASTVisitor.h"#include "clang/CIR/MissingFeatures.h"Go to the source code of this file.
Functions | |
| static void | hoistAllocaOutOfCleanupScope (CIRGenFunction &cgf, Address addr, cir::CleanupScopeOp scope) |
If the alloca that backs addr is currently nested inside the body region of scope, hoist it, and any cast chain leading to it, out of the. | |
| static void | closeConditionalCleanupScope (CIRGenFunction &cgf, const CIRGenFunction::ConditionalCleanupScope &condScope) |
| Close a cleanup scope opened by a ConditionalEvaluation. | |
| static void | setupCleanupBlockDeactivation (CIRGenFunction &cgf, EHScopeStack::stable_iterator c, mlir::Operation *dominatingIP) |
| The given cleanup block is being deactivated. | |
| static void | emitCleanupBody (CIRGenFunction &cgf, EHScopeStack::Cleanup *cleanup, EHScopeStack::Cleanup::Flags flags, Address activeFlag, mlir::Location loc) |
| static void | emitCleanup (CIRGenFunction &cgf, cir::CleanupScopeOp cleanupScope, EHScopeStack::Cleanup *cleanup, EHScopeStack::Cleanup::Flags flags, Address activeFlag) |
| static bool | bodyHasBranchThroughExits (mlir::Region &bodyRegion) |
| Check whether a cleanup scope body contains any non-yield exits that branch through the cleanup. | |
|
static |
Check whether a cleanup scope body contains any non-yield exits that branch through the cleanup.
These exits branch through the cleanup and require the normal cleanup to be executed even when the cleanup has been deactivated.
Definition at line 644 of file CIRGenCleanup.cpp.
References clang::isa().
Referenced by clang::CIRGen::CIRGenFunction::popCleanupBlock().
|
static |
Close a cleanup scope opened by a ConditionalEvaluation.
Terminate its body region and emit this scope's slice of deferredConditionalCleanupStack into its cleanup region, in reverse of push order. An insertion point that was inside the scope's body is moved to immediately after the scope op.
Definition at line 200 of file CIRGenCleanup.cpp.
References clang::CIRGen::CIRGenBuilderTy::createLoad(), cir::CIRBaseBuilderTy::createYield(), clang::CIRGen::CIRGenFunction::ConditionalCleanupScope::deferredCleanupStackSize, clang::CIRGen::CIRGenFunction::deferredConditionalCleanupStack, clang::CIRGen::CIRGenFunction::emitDestroy(), clang::CIRGen::CIRGenFunction::getBuilder(), hoistAllocaOutOfCleanupScope(), and clang::CIRGen::CIRGenFunction::ConditionalCleanupScope::scope.
Referenced by clang::CIRGen::CIRGenFunction::FullExprCleanupScope::exit().
|
static |
Definition at line 619 of file CIRGenCleanup.cpp.
References cir::CIRBaseBuilderTy::createYield(), emitCleanupBody(), and clang::CIRGen::CIRGenFunction::getBuilder().
Referenced by clang::CIRGen::CIRGenFunction::popCleanupBlock(), and clang::interp::Compiler< Emitter >::visitReturnStmt().
|
static |
Definition at line 594 of file CIRGenCleanup.cpp.
References cir::CIRBaseBuilderTy::createFlagLoad(), cir::CIRBaseBuilderTy::createYield(), clang::CIRGen::CIRGenFunction::getBuilder(), clang::CIRGen::Address::getPointer(), clang::CIRGen::CIRGenFunction::haveInsertPoint(), and clang::CIRGen::Address::isValid().
Referenced by emitCleanup(), and clang::CIRGen::CIRGenFunction::emitLoopConditionCleanups().
|
static |
If the alloca that backs addr is currently nested inside the body region of scope, hoist it, and any cast chain leading to it, out of the.
Definition at line 152 of file CIRGenCleanup.cpp.
References clang::cast(), cir::CIRBaseBuilderTy::getBestAllocaInsertPoint(), clang::CIRGen::Address::getPointer(), and clang::CIRGen::Address::getUnderlyingAllocaOp().
Referenced by closeConditionalCleanupScope().
|
static |
The given cleanup block is being deactivated.
Configure a cleanup variable if necessary.
Definition at line 530 of file CIRGenCleanup.cpp.
References clang::cast(), cir::CIRBaseBuilderTy::createFlagStore(), clang::CIRGen::CIRGenFunction::createTempAllocaWithoutCast(), clang::CIRGen::CIRGenFunction::ehStack, clang::CIRGen::EHScopeStack::find(), clang::CIRGen::EHCleanupScope::getActiveFlag(), cir::CIRBaseBuilderTy::getBool(), cir::CIRBaseBuilderTy::getBoolTy(), clang::CIRGen::CIRGenFunction::getBuilder(), clang::CIRGen::EHCleanupScope::isEHCleanup(), clang::CIRGen::CIRGenFunction::isInConditionalBranch(), clang::CIRGen::EHCleanupScope::isNormalCleanup(), clang::CharUnits::One(), clang::CIRGen::EHCleanupScope::setActiveFlag(), clang::CIRGen::CIRGenFunction::setBeforeOutermostConditional(), clang::CIRGen::EHCleanupScope::setTestFlagInEHCleanup(), and clang::CIRGen::EHCleanupScope::setTestFlagInNormalCleanup().
Referenced by clang::CIRGen::CIRGenFunction::deactivateCleanupBlock().