diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:46:15 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:46:15 +0000 | 
| commit | dd58ef019b700900793a1eb48b52123db01b654e (patch) | |
| tree | fcfbb4df56a744f4ddc6122c50521dd3f1c5e196 /lib/CodeGen/MachineModuleInfo.cpp | |
| parent | 2fe5752e3a7c345cdb59e869278d36af33c13fa4 (diff) | |
Notes
Diffstat (limited to 'lib/CodeGen/MachineModuleInfo.cpp')
| -rw-r--r-- | lib/CodeGen/MachineModuleInfo.cpp | 86 | 
1 files changed, 6 insertions, 80 deletions
| diff --git a/lib/CodeGen/MachineModuleInfo.cpp b/lib/CodeGen/MachineModuleInfo.cpp index 6a206249d834..1956a701d8e6 100644 --- a/lib/CodeGen/MachineModuleInfo.cpp +++ b/lib/CodeGen/MachineModuleInfo.cpp @@ -9,12 +9,12 @@  #include "llvm/CodeGen/MachineModuleInfo.h"  #include "llvm/ADT/PointerUnion.h" -#include "llvm/Analysis/LibCallSemantics.h" +#include "llvm/ADT/TinyPtrVector.h" +#include "llvm/Analysis/EHPersonalities.h"  #include "llvm/Analysis/ValueTracking.h"  #include "llvm/CodeGen/MachineFunction.h"  #include "llvm/CodeGen/MachineFunctionPass.h"  #include "llvm/CodeGen/Passes.h" -#include "llvm/CodeGen/WinEHFuncInfo.h"  #include "llvm/IR/Constants.h"  #include "llvm/IR/DerivedTypes.h"  #include "llvm/IR/GlobalVariable.h" @@ -35,7 +35,7 @@ char MachineModuleInfo::ID = 0;  MachineModuleInfoImpl::~MachineModuleInfoImpl() {}  namespace llvm { -class MMIAddrLabelMapCallbackPtr : CallbackVH { +class MMIAddrLabelMapCallbackPtr final : CallbackVH {    MMIAddrLabelMap *Map;  public:    MMIAddrLabelMapCallbackPtr() : Map(nullptr) {} @@ -209,9 +209,8 @@ bool MachineModuleInfo::doInitialization(Module &M) {    CurCallSite = 0;    CallsEHReturn = false;    CallsUnwindInit = false; +  HasEHFunclets = false;    DbgInfoAvailable = UsesVAFloatArgument = UsesMorestackAddr = false; -  // Always emit some info, by default "no personality" info. -  Personalities.push_back(nullptr);    PersonalityTypeCache = EHPersonality::Unknown;    AddrLabelSymbols = nullptr;    TheModule = nullptr; @@ -249,6 +248,7 @@ void MachineModuleInfo::EndFunction() {    FilterEnds.clear();    CallsEHReturn = false;    CallsUnwindInit = false; +  HasEHFunclets = false;    VariableDbgInfos.clear();  } @@ -314,32 +314,11 @@ MCSymbol *MachineModuleInfo::addLandingPad(MachineBasicBlock *LandingPad) {    return LandingPadLabel;  } -/// addPersonality - Provide the personality function for the exception -/// information. -void MachineModuleInfo::addPersonality(MachineBasicBlock *LandingPad, -                                       const Function *Personality) { -  LandingPadInfo &LP = getOrCreateLandingPadInfo(LandingPad); -  LP.Personality = Personality; -  addPersonality(Personality); -} -  void MachineModuleInfo::addPersonality(const Function *Personality) {    for (unsigned i = 0; i < Personalities.size(); ++i)      if (Personalities[i] == Personality)        return; - -  // If this is the first personality we're adding go -  // ahead and add it at the beginning. -  if (!Personalities[0]) -    Personalities[0] = Personality; -  else -    Personalities.push_back(Personality); -} - -void MachineModuleInfo::addWinEHState(MachineBasicBlock *LandingPad, -                                      int State) { -  LandingPadInfo &LP = getOrCreateLandingPadInfo(LandingPad); -  LP.WinEHState = State; +  Personalities.push_back(Personality);  }  /// addCatchTypeInfo - Provide the catch typeinfo for a landing pad. @@ -481,56 +460,3 @@ try_next:;    FilterIds.push_back(0); // terminator    return FilterID;  } - -/// getPersonality - Return the personality function for the current function. -const Function *MachineModuleInfo::getPersonality() const { -  for (const LandingPadInfo &LPI : LandingPads) -    if (LPI.Personality) -      return LPI.Personality; -  return nullptr; -} - -EHPersonality MachineModuleInfo::getPersonalityType() { -  if (PersonalityTypeCache == EHPersonality::Unknown) { -    if (const Function *F = getPersonality()) -      PersonalityTypeCache = classifyEHPersonality(F); -  } -  return PersonalityTypeCache; -} - -/// getPersonalityIndex - Return unique index for current personality -/// function. NULL/first personality function should always get zero index. -unsigned MachineModuleInfo::getPersonalityIndex() const { -  const Function* Personality = nullptr; - -  // Scan landing pads. If there is at least one non-NULL personality - use it. -  for (unsigned i = 0, e = LandingPads.size(); i != e; ++i) -    if (LandingPads[i].Personality) { -      Personality = LandingPads[i].Personality; -      break; -    } - -  for (unsigned i = 0, e = Personalities.size(); i < e; ++i) { -    if (Personalities[i] == Personality) -      return i; -  } - -  // This will happen if the current personality function is -  // in the zero index. -  return 0; -} - -const Function *MachineModuleInfo::getWinEHParent(const Function *F) const { -  StringRef WinEHParentName = -      F->getFnAttribute("wineh-parent").getValueAsString(); -  if (WinEHParentName.empty() || WinEHParentName == F->getName()) -    return F; -  return F->getParent()->getFunction(WinEHParentName); -} - -WinEHFuncInfo &MachineModuleInfo::getWinEHFuncInfo(const Function *F) { -  auto &Ptr = FuncInfoMap[getWinEHParent(F)]; -  if (!Ptr) -    Ptr.reset(new WinEHFuncInfo); -  return *Ptr; -} | 
