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