clang: lib/CodeGen/CGCleanup.cpp File Reference (original) (raw)
#include "[CGCleanup.h](CGCleanup%5F8h%5Fsource.html)"
#include "[CodeGenFunction.h](CodeGenFunction%5F8h%5Fsource.html)"
#include "llvm/Support/SaveAndRestore.h"
Go to the source code of this file.
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) |
◆ ForActivation_t
Enumerator |
---|
ForActivation |
ForDeactivation |
Definition at line 1203 of file CGCleanup.cpp.
◆ createLoadInstBefore() [1/2]
static llvm::LoadInst * createLoadInstBefore ( Address addr, const Twine & name, CodeGenFunction & CGF ) | static |
---|
◆ createLoadInstBefore() [2/2]
static llvm::LoadInst * createLoadInstBefore ( Address addr, const Twine & name, llvm::BasicBlock::iterator beforeInst, CodeGenFunction & CGF ) | static |
---|
◆ CreateNormalEntry()
◆ createStoreInstBefore()
◆ destroyOptimisticNormalEntry()
◆ EmitCleanup()
◆ EmitSehScope()
static void EmitSehScope ( CodeGenFunction & CGF, llvm::FunctionCallee & SehCppScope ) | static |
---|
◆ ForwardPrebranchedFallthrough()
static void ForwardPrebranchedFallthrough ( llvm::BasicBlock * Exit, llvm::BasicBlock * From, llvm::BasicBlock * To ) | static |
---|
◆ IsUsedAsEHCleanup()
◆ ResolveAllBranchFixups()
static void ResolveAllBranchFixups ( CodeGenFunction & CGF, llvm::SwitchInst * Switch, llvm::BasicBlock * CleanupEntry ) | 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.
◆ SetupCleanupBlockActivation()
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().
◆ SimplifyCleanupEntry()
static llvm::BasicBlock * SimplifyCleanupEntry ( CodeGenFunction & CGF, llvm::BasicBlock * Entry ) | 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.
◆ TransitionToCleanupSwitch()
static llvm::SwitchInst * TransitionToCleanupSwitch ( CodeGenFunction & CGF, llvm::BasicBlock * Block ) | static |
---|