clang 20.0.0git
|
Go to the source code of this file.
Enumerations | |
enum | ForActivation_t { ForActivation , ForDeactivation } |
Functions | |
static void | createStoreInstBefore (llvm::Value *value, Address addr, llvm::BasicBlock::iterator beforeInst, CodeGenFunction &CGF) |
static llvm::LoadInst * | createLoadInstBefore (Address addr, const Twine &name, llvm::BasicBlock::iterator beforeInst, CodeGenFunction &CGF) |
static llvm::LoadInst * | createLoadInstBefore (Address addr, const Twine &name, CodeGenFunction &CGF) |
static void | ResolveAllBranchFixups (CodeGenFunction &CGF, llvm::SwitchInst *Switch, llvm::BasicBlock *CleanupEntry) |
All the branch fixups on the EH stack have propagated out past the outermost normal cleanup; resolve them all by adding cases to the given switch instruction. | |
static llvm::SwitchInst * | TransitionToCleanupSwitch (CodeGenFunction &CGF, llvm::BasicBlock *Block) |
Transitions the terminator of the given exit-block of a cleanup to be a cleanup switch. | |
static llvm::BasicBlock * | CreateNormalEntry (CodeGenFunction &CGF, EHCleanupScope &Scope) |
static llvm::BasicBlock * | SimplifyCleanupEntry (CodeGenFunction &CGF, llvm::BasicBlock *Entry) |
Attempts to reduce a cleanup's entry block to a fallthrough. | |
static void | EmitCleanup (CodeGenFunction &CGF, EHScopeStack::Cleanup *Fn, EHScopeStack::Cleanup::Flags flags, Address ActiveFlag) |
static void | ForwardPrebranchedFallthrough (llvm::BasicBlock *Exit, llvm::BasicBlock *From, llvm::BasicBlock *To) |
static void | destroyOptimisticNormalEntry (CodeGenFunction &CGF, EHCleanupScope &scope) |
We don't need a normal entry block for the given cleanup. | |
static bool | IsUsedAsEHCleanup (EHScopeStack &EHStack, EHScopeStack::stable_iterator cleanup) |
static void | SetupCleanupBlockActivation (CodeGenFunction &CGF, EHScopeStack::stable_iterator C, ForActivation_t kind, llvm::Instruction *dominatingIP) |
The given cleanup block is changing activation state. | |
static void | EmitSehScope (CodeGenFunction &CGF, llvm::FunctionCallee &SehCppScope) |
enum ForActivation_t |
Enumerator | |
---|---|
ForActivation | |
ForDeactivation |
Definition at line 1203 of file CGCleanup.cpp.
|
static |
Definition at line 311 of file CGCleanup.cpp.
References clang::CodeGen::Address::emitRawPointer(), clang::CodeGen::Address::getAlignment(), clang::CharUnits::getAsAlign(), and clang::CodeGen::Address::getElementType().
|
static |
Definition at line 303 of file CGCleanup.cpp.
References clang::CodeGen::Address::emitRawPointer(), clang::CodeGen::Address::getAlignment(), clang::CharUnits::getAsAlign(), and clang::CodeGen::Address::getElementType().
Referenced by TransitionToCleanupSwitch().
|
static |
Definition at line 505 of file CGCleanup.cpp.
References clang::CodeGen::CodeGenFunction::createBasicBlock().
|
static |
Definition at line 295 of file CGCleanup.cpp.
References clang::CodeGen::Address::emitRawPointer(), clang::CodeGen::Address::getAlignment(), and clang::CharUnits::getAsAlign().
Referenced by ResolveAllBranchFixups(), and SetupCleanupBlockActivation().
|
static |
We don't need a normal entry block for the given cleanup.
Optimistic fixup branches can cause these blocks to come into existence anyway; if so, destroy it.
The validity of this transformation is very much specific to the exact ways in which we form branches to cleanup entries.
Definition at line 604 of file CGCleanup.cpp.
References clang::CodeGen::EHCleanupScope::getNormalBlock(), clang::CodeGen::RawAddress::getPointer(), clang::CodeGen::CodeGenFunction::getUnreachableBlock(), and clang::CodeGen::CodeGenFunction::NormalCleanupDest.
|
static |
Definition at line 555 of file CGCleanup.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::HaveInsertPoint(), and clang::CodeGen::Address::isValid().
|
static |
Definition at line 1323 of file CGCleanup.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CodeGenFunction::CurrentFuncletPad, clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::getBundlesForFunclet(), and clang::CodeGen::CodeGenFunction::getInvokeDest().
|
static |
Definition at line 580 of file CGCleanup.cpp.
References E, and clang::Switch.
|
static |
Definition at line 1182 of file CGCleanup.cpp.
References clang::CodeGen::EHScopeStack::find(), clang::CodeGen::EHScope::getEnclosingEHScope(), clang::CodeGen::EHScopeStack::getInnermostEHScope(), and clang::CodeGen::EHScope::hasEHBranches().
Referenced by SetupCleanupBlockActivation().
|
static |
All the branch fixups on the EH stack have propagated out past the outermost normal cleanup; resolve them all by adding cases to the given switch instruction.
Definition at line 320 of file CGCleanup.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::EHScopeStack::clearFixups(), createStoreInstBefore(), clang::CodeGen::BranchFixup::Destination, clang::CodeGen::BranchFixup::DestinationIndex, E, clang::CodeGen::CodeGenFunction::EHStack, clang::CodeGen::EHScopeStack::getBranchFixup(), clang::CodeGen::CodeGenFunction::getNormalCleanupDestSlot(), clang::CodeGen::EHScopeStack::getNumBranchFixups(), clang::CodeGen::BranchFixup::InitialBranch, clang::CodeGen::BranchFixup::OptimisticBranchBlock, and clang::Switch.
|
static |
The given cleanup block is changing activation state.
Configure a cleanup variable if necessary.
It would be good if we had some way of determining if there were extra uses after the change-over point.
Definition at line 1213 of file CGCleanup.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::C, clang::CodeGen::CGBuilderTy::CreateStore(), createStoreInstBefore(), clang::CodeGen::CodeGenFunction::CreateTempAlloca(), clang::CodeGen::CodeGenFunction::EHStack, clang::CodeGen::EHScopeStack::find(), ForActivation, ForDeactivation, clang::CodeGen::CodeGenFunction::isInConditionalBranch(), IsUsedAsEHCleanup(), clang::CharUnits::One(), and clang::CodeGen::CodeGenFunction::setBeforeOutermostConditional().
|
static |
Attempts to reduce a cleanup's entry block to a fallthrough.
This is basically llvm::MergeBlockIntoPredecessor, except simplified/optimized for the tighter constraints on cleanup blocks.
Returns the new block, whatever it is.
Definition at line 521 of file CGCleanup.cpp.
References clang::CodeGen::CodeGenFunction::Builder.
|
static |
Transitions the terminator of the given exit-block of a cleanup to be a cleanup switch.
Definition at line 358 of file CGCleanup.cpp.
References clang::Block, createLoadInstBefore(), clang::CodeGen::CodeGenFunction::getNormalCleanupDestSlot(), and clang::Switch.