13#ifndef LLVM_CLANG_LIB_CODEGEN_CGCLEANUP_H
14#define LLVM_CLANG_LIB_CODEGEN_CGCLEANUP_H
19#include "llvm/ADT/STLExtras.h"
20#include "llvm/ADT/SetVector.h"
21#include "llvm/ADT/SmallPtrSet.h"
22#include "llvm/ADT/SmallVector.h"
23#include "llvm/IR/Instruction.h"
50 llvm::BasicBlock *CachedLandingPad;
51 llvm::BasicBlock *CachedEHDispatchBlock;
55 class CommonBitFields {
57 LLVM_PREFERRED_TYPE(
Kind)
60 enum { NumCommonBits = 3 };
67 unsigned NumHandlers : 32 - NumCommonBits;
75 LLVM_PREFERRED_TYPE(
bool)
76 unsigned IsNormalCleanup : 1;
79 LLVM_PREFERRED_TYPE(
bool)
80 unsigned IsEHCleanup : 1;
83 LLVM_PREFERRED_TYPE(
bool)
84 unsigned IsActive : 1;
87 LLVM_PREFERRED_TYPE(
bool)
88 unsigned IsLifetimeMarker : 1;
91 LLVM_PREFERRED_TYPE(
bool)
92 unsigned TestFlagInNormalCleanup : 1;
95 LLVM_PREFERRED_TYPE(
bool)
96 unsigned TestFlagInEHCleanup : 1;
100 unsigned CleanupSize : 12;
107 unsigned NumFilters : 32 - NumCommonBits;
119 : CachedLandingPad(nullptr), CachedEHDispatchBlock(nullptr),
120 EnclosingEHScope(enclosingEHScope) {
127 return CachedLandingPad;
131 CachedLandingPad = block;
135 return CachedEHDispatchBlock;
139 CachedEHDispatchBlock = block;
144 return !block->use_empty();
149 return EnclosingEHScope;
180 return reinterpret_cast<Handler*
>(
this+1);
183 const Handler *getHandlers()
const {
184 return reinterpret_cast<const Handler*
>(
this+1);
196 assert(
CatchBits.NumHandlers == numHandlers &&
"NumHandlers overflow?");