diff options
| author | Matthias Braun <matze@braunis.de> | 2018-07-12 19:27:01 +0000 | 
|---|---|---|
| committer | Matthias Braun <matze@braunis.de> | 2018-07-12 19:27:01 +0000 | 
| commit | f03f32d4784f2b808dfdff568bcc023331e96cdb (patch) | |
| tree | 3398d97fed255cd62ad65858111770b6beaf2e11 /llvm/lib | |
| parent | 762dee516c3b1d4d1cf7d8c34921977fd1d60c5a (diff) | |
| download | bcm5719-llvm-f03f32d4784f2b808dfdff568bcc023331e96cdb.tar.gz bcm5719-llvm-f03f32d4784f2b808dfdff568bcc023331e96cdb.zip  | |
Revert "(HEAD -> master, origin/master, arcpatch-D37582) CodeGen: Remove pipeline dependencies on StackProtector; NFC"
This was triggering pass scheduling failures.
This reverts commit r336929.
llvm-svn: 336934
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 7 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/Legalizer.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/Localizer.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/RegBankSelect.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/Utils.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/LocalStackSlotAllocation.cpp | 21 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineFunctionPass.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/PrologEpilogInserter.cpp | 14 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/ResetMachineFunctionPass.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/StackColoring.cpp | 21 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/StackProtector.cpp | 62 | 
13 files changed, 69 insertions, 83 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index d4812202498..f5fee0b5f42 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -26,7 +26,6 @@  #include "llvm/CodeGen/MachineMemOperand.h"  #include "llvm/CodeGen/MachineOperand.h"  #include "llvm/CodeGen/MachineRegisterInfo.h" -#include "llvm/CodeGen/StackProtector.h"  #include "llvm/CodeGen/TargetFrameLowering.h"  #include "llvm/CodeGen/TargetLowering.h"  #include "llvm/CodeGen/TargetPassConfig.h" @@ -103,9 +102,7 @@ IRTranslator::IRTranslator() : MachineFunctionPass(ID) {  }  void IRTranslator::getAnalysisUsage(AnalysisUsage &AU) const { -  AU.addRequired<StackProtector>();    AU.addRequired<TargetPassConfig>(); -  getSelectionDAGFallbackAnalysisUsage(AU);    MachineFunctionPass::getAnalysisUsage(AU);  } @@ -1653,9 +1650,5 @@ bool IRTranslator::runOnMachineFunction(MachineFunction &CurMF) {    assert(&MF->front() == &NewEntryBB &&           "New entry wasn't next in the list of basic block!"); -  // Initialize stack protector information. -  StackProtector &SP = getAnalysis<StackProtector>(); -  SP.copyToMachineFrameInfo(MF->getFrameInfo()); -    return false;  } diff --git a/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp b/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp index c83c791327e..f483419c92f 100644 --- a/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp +++ b/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp @@ -56,7 +56,6 @@ InstructionSelect::InstructionSelect() : MachineFunctionPass(ID) {  void InstructionSelect::getAnalysisUsage(AnalysisUsage &AU) const {    AU.addRequired<TargetPassConfig>(); -  getSelectionDAGFallbackAnalysisUsage(AU);    MachineFunctionPass::getAnalysisUsage(AU);  } diff --git a/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp b/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp index 9a2aac998a8..6ce5851d436 100644 --- a/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp +++ b/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp @@ -47,7 +47,6 @@ Legalizer::Legalizer() : MachineFunctionPass(ID) {  void Legalizer::getAnalysisUsage(AnalysisUsage &AU) const {    AU.addRequired<TargetPassConfig>(); -  getSelectionDAGFallbackAnalysisUsage(AU);    MachineFunctionPass::getAnalysisUsage(AU);  } diff --git a/llvm/lib/CodeGen/GlobalISel/Localizer.cpp b/llvm/lib/CodeGen/GlobalISel/Localizer.cpp index 52b340753a5..d7dc2c2c18c 100644 --- a/llvm/lib/CodeGen/GlobalISel/Localizer.cpp +++ b/llvm/lib/CodeGen/GlobalISel/Localizer.cpp @@ -44,11 +44,6 @@ bool Localizer::shouldLocalize(const MachineInstr &MI) {    }  } -void Localizer::getAnalysisUsage(AnalysisUsage &AU) const { -  getSelectionDAGFallbackAnalysisUsage(AU); -  MachineFunctionPass::getAnalysisUsage(AU); -} -  bool Localizer::isLocalUse(MachineOperand &MOUse, const MachineInstr &Def,                             MachineBasicBlock *&InsertMBB) {    MachineInstr &MIUse = *MOUse.getParent(); diff --git a/llvm/lib/CodeGen/GlobalISel/RegBankSelect.cpp b/llvm/lib/CodeGen/GlobalISel/RegBankSelect.cpp index 79fa888357d..03bfae7c465 100644 --- a/llvm/lib/CodeGen/GlobalISel/RegBankSelect.cpp +++ b/llvm/lib/CodeGen/GlobalISel/RegBankSelect.cpp @@ -105,7 +105,6 @@ void RegBankSelect::getAnalysisUsage(AnalysisUsage &AU) const {      AU.addRequired<MachineBranchProbabilityInfo>();    }    AU.addRequired<TargetPassConfig>(); -  getSelectionDAGFallbackAnalysisUsage(AU);    MachineFunctionPass::getAnalysisUsage(AU);  } diff --git a/llvm/lib/CodeGen/GlobalISel/Utils.cpp b/llvm/lib/CodeGen/GlobalISel/Utils.cpp index 1a5f88743d5..055f4cb6458 100644 --- a/llvm/lib/CodeGen/GlobalISel/Utils.cpp +++ b/llvm/lib/CodeGen/GlobalISel/Utils.cpp @@ -18,7 +18,6 @@  #include "llvm/CodeGen/MachineInstrBuilder.h"  #include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h"  #include "llvm/CodeGen/MachineRegisterInfo.h" -#include "llvm/CodeGen/StackProtector.h"  #include "llvm/CodeGen/TargetInstrInfo.h"  #include "llvm/CodeGen/TargetPassConfig.h"  #include "llvm/CodeGen/TargetRegisterInfo.h" @@ -234,7 +233,3 @@ APFloat llvm::getAPFloatFromSize(double Val, unsigned Size) {    APF.convert(APFloat::IEEEhalf(), APFloat::rmNearestTiesToEven, &Ignored);    return APF;  } - -void llvm::getSelectionDAGFallbackAnalysisUsage(AnalysisUsage &AU) { -  AU.addPreserved<StackProtector>(); -} diff --git a/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp b/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp index f90ce0c8cd2..1dbf11ee96e 100644 --- a/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp +++ b/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp @@ -25,6 +25,7 @@  #include "llvm/CodeGen/MachineInstr.h"  #include "llvm/CodeGen/MachineOperand.h"  #include "llvm/CodeGen/MachineRegisterInfo.h" +#include "llvm/CodeGen/StackProtector.h"  #include "llvm/CodeGen/TargetFrameLowering.h"  #include "llvm/CodeGen/TargetOpcodes.h"  #include "llvm/CodeGen/TargetRegisterInfo.h" @@ -98,6 +99,7 @@ namespace {      void getAnalysisUsage(AnalysisUsage &AU) const override {        AU.setPreservesCFG(); +      AU.addRequired<StackProtector>();        MachineFunctionPass::getAnalysisUsage(AU);      }    }; @@ -107,8 +109,12 @@ namespace {  char LocalStackSlotPass::ID = 0;  char &llvm::LocalStackSlotAllocationID = LocalStackSlotPass::ID; -INITIALIZE_PASS(LocalStackSlotPass, DEBUG_TYPE, -                "Local Stack Slot Allocation", false, false) + +INITIALIZE_PASS_BEGIN(LocalStackSlotPass, DEBUG_TYPE, +                      "Local Stack Slot Allocation", false, false) +INITIALIZE_PASS_DEPENDENCY(StackProtector) +INITIALIZE_PASS_END(LocalStackSlotPass, DEBUG_TYPE, +                    "Local Stack Slot Allocation", false, false)  bool LocalStackSlotPass::runOnMachineFunction(MachineFunction &MF) {    MachineFrameInfo &MFI = MF.getFrameInfo(); @@ -196,6 +202,7 @@ void LocalStackSlotPass::calculateFrameObjectOffsets(MachineFunction &Fn) {      TFI.getStackGrowthDirection() == TargetFrameLowering::StackGrowsDown;    int64_t Offset = 0;    unsigned MaxAlign = 0; +  StackProtector *SP = &getAnalysis<StackProtector>();    // Make sure that the stack protector comes before the local variables on the    // stack. @@ -215,16 +222,16 @@ void LocalStackSlotPass::calculateFrameObjectOffsets(MachineFunction &Fn) {        if (MFI.getStackProtectorIndex() == (int)i)          continue; -      switch (MFI.getObjectSSPLayout(i)) { -      case MachineFrameInfo::SSPLK_None: +      switch (SP->getSSPLayout(MFI.getObjectAllocation(i))) { +      case StackProtector::SSPLK_None:          continue; -      case MachineFrameInfo::SSPLK_SmallArray: +      case StackProtector::SSPLK_SmallArray:          SmallArrayObjs.insert(i);          continue; -      case MachineFrameInfo::SSPLK_AddrOf: +      case StackProtector::SSPLK_AddrOf:          AddrOfObjs.insert(i);          continue; -      case MachineFrameInfo::SSPLK_LargeArray: +      case StackProtector::SSPLK_LargeArray:          LargeArrayObjs.insert(i);          continue;        } diff --git a/llvm/lib/CodeGen/MachineFunctionPass.cpp b/llvm/lib/CodeGen/MachineFunctionPass.cpp index 67ac95740e3..5ffe3300613 100644 --- a/llvm/lib/CodeGen/MachineFunctionPass.cpp +++ b/llvm/lib/CodeGen/MachineFunctionPass.cpp @@ -24,6 +24,7 @@  #include "llvm/CodeGen/MachineFunction.h"  #include "llvm/CodeGen/MachineModuleInfo.h"  #include "llvm/CodeGen/Passes.h" +#include "llvm/CodeGen/StackProtector.h"  #include "llvm/IR/Dominators.h"  #include "llvm/IR/Function.h" @@ -84,6 +85,7 @@ void MachineFunctionPass::getAnalysisUsage(AnalysisUsage &AU) const {    AU.addPreserved<MemoryDependenceWrapperPass>();    AU.addPreserved<ScalarEvolutionWrapperPass>();    AU.addPreserved<SCEVAAWrapperPass>(); +  AU.addPreserved<StackProtector>();    FunctionPass::getAnalysisUsage(AU);  } diff --git a/llvm/lib/CodeGen/PrologEpilogInserter.cpp b/llvm/lib/CodeGen/PrologEpilogInserter.cpp index fc62c8caf59..d27128b614b 100644 --- a/llvm/lib/CodeGen/PrologEpilogInserter.cpp +++ b/llvm/lib/CodeGen/PrologEpilogInserter.cpp @@ -38,6 +38,7 @@  #include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h"  #include "llvm/CodeGen/MachineRegisterInfo.h"  #include "llvm/CodeGen/RegisterScavenging.h" +#include "llvm/CodeGen/StackProtector.h"  #include "llvm/CodeGen/TargetFrameLowering.h"  #include "llvm/CodeGen/TargetInstrInfo.h"  #include "llvm/CodeGen/TargetOpcodes.h" @@ -142,6 +143,7 @@ INITIALIZE_PASS_BEGIN(PEI, DEBUG_TYPE, "Prologue/Epilogue Insertion", false,                        false)  INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)  INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree) +INITIALIZE_PASS_DEPENDENCY(StackProtector)  INITIALIZE_PASS_DEPENDENCY(MachineOptimizationRemarkEmitterPass)  INITIALIZE_PASS_END(PEI, DEBUG_TYPE,                      "Prologue/Epilogue Insertion & Frame Finalization", false, @@ -158,6 +160,7 @@ void PEI::getAnalysisUsage(AnalysisUsage &AU) const {    AU.setPreservesCFG();    AU.addPreserved<MachineLoopInfo>();    AU.addPreserved<MachineDominatorTree>(); +  AU.addRequired<StackProtector>();    AU.addRequired<MachineOptimizationRemarkEmitterPass>();    MachineFunctionPass::getAnalysisUsage(AU);  } @@ -692,6 +695,7 @@ AssignProtectedObjSet(const StackObjSet &UnassignedObjs,  /// abstract stack objects.  void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {    const TargetFrameLowering &TFI = *MF.getSubtarget().getFrameLowering(); +  StackProtector *SP = &getAnalysis<StackProtector>();    bool StackGrowsDown =      TFI.getStackGrowthDirection() == TargetFrameLowering::StackGrowsDown; @@ -840,16 +844,16 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {            EHRegNodeFrameIndex == (int)i)          continue; -      switch (MFI.getObjectSSPLayout(i)) { -      case MachineFrameInfo::SSPLK_None: +      switch (SP->getSSPLayout(MFI.getObjectAllocation(i))) { +      case StackProtector::SSPLK_None:          continue; -      case MachineFrameInfo::SSPLK_SmallArray: +      case StackProtector::SSPLK_SmallArray:          SmallArrayObjs.insert(i);          continue; -      case MachineFrameInfo::SSPLK_AddrOf: +      case StackProtector::SSPLK_AddrOf:          AddrOfObjs.insert(i);          continue; -      case MachineFrameInfo::SSPLK_LargeArray: +      case StackProtector::SSPLK_LargeArray:          LargeArrayObjs.insert(i);          continue;        } diff --git a/llvm/lib/CodeGen/ResetMachineFunctionPass.cpp b/llvm/lib/CodeGen/ResetMachineFunctionPass.cpp index a02302e6ff9..88d550e14a3 100644 --- a/llvm/lib/CodeGen/ResetMachineFunctionPass.cpp +++ b/llvm/lib/CodeGen/ResetMachineFunctionPass.cpp @@ -18,7 +18,6 @@  #include "llvm/CodeGen/MachineFunction.h"  #include "llvm/CodeGen/MachineFunctionPass.h"  #include "llvm/CodeGen/MachineRegisterInfo.h" -#include "llvm/CodeGen/StackProtector.h"  #include "llvm/CodeGen/Passes.h"  #include "llvm/IR/DiagnosticInfo.h"  #include "llvm/Support/Debug.h" @@ -45,11 +44,6 @@ namespace {      StringRef getPassName() const override { return "ResetMachineFunction"; } -    void getAnalysisUsage(AnalysisUsage &AU) const override { -      AU.addPreserved<StackProtector>(); -      MachineFunctionPass::getAnalysisUsage(AU); -    } -      bool runOnMachineFunction(MachineFunction &MF) override {        // No matter what happened, whether we successfully selected the function        // or not, nothing is going to use the vreg types after us. Make sure they diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index cebdc753bf6..f9e4bc6196b 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -328,6 +328,7 @@ void SelectionDAGISel::getAnalysisUsage(AnalysisUsage &AU) const {      AU.addRequired<AAResultsWrapperPass>();    AU.addRequired<GCModuleInfo>();    AU.addRequired<StackProtector>(); +  AU.addPreserved<StackProtector>();    AU.addPreserved<GCModuleInfo>();    AU.addRequired<TargetLibraryInfoWrapperPass>();    AU.addRequired<TargetTransformInfoWrapperPass>(); @@ -1543,7 +1544,6 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {    processDbgDeclares(FuncInfo);    // Iterate over all basic blocks in the function. -  StackProtector &SP = getAnalysis<StackProtector>();    for (const BasicBlock *LLVMBB : RPOT) {      if (OptLevel != CodeGenOpt::None) {        bool AllPredsVisited = true; @@ -1713,7 +1713,7 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {        FastIS->recomputeInsertPt();      } -    if (SP.shouldEmitSDCheck(*LLVMBB)) { +    if (getAnalysis<StackProtector>().shouldEmitSDCheck(*LLVMBB)) {        bool FunctionBasedInstrumentation =            TLI->getSSPStackGuardCheck(*Fn.getParent());        SDB->SPDescriptor.initialize(LLVMBB, FuncInfo->MBBMap[LLVMBB], @@ -1746,8 +1746,6 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {      ElidedArgCopyInstrs.clear();    } -  SP.copyToMachineFrameInfo(MF->getFrameInfo()); -    propagateSwiftErrorVRegs(FuncInfo);    delete FastIS; diff --git a/llvm/lib/CodeGen/StackColoring.cpp b/llvm/lib/CodeGen/StackColoring.cpp index f9d1eaf0307..0bd941e64aa 100644 --- a/llvm/lib/CodeGen/StackColoring.cpp +++ b/llvm/lib/CodeGen/StackColoring.cpp @@ -39,6 +39,7 @@  #include "llvm/CodeGen/Passes.h"  #include "llvm/CodeGen/SelectionDAGNodes.h"  #include "llvm/CodeGen/SlotIndexes.h" +#include "llvm/CodeGen/StackProtector.h"  #include "llvm/CodeGen/TargetOpcodes.h"  #include "llvm/CodeGen/WinEHFuncInfo.h"  #include "llvm/Config/llvm-config.h" @@ -422,6 +423,9 @@ class StackColoring : public MachineFunctionPass {    /// SlotIndex analysis object.    SlotIndexes *Indexes; +  /// The stack protector object. +  StackProtector *SP; +    /// The list of lifetime markers found. These markers are to be removed    /// once the coloring is done.    SmallVector<MachineInstr*, 8> Markers; @@ -520,11 +524,13 @@ char &llvm::StackColoringID = StackColoring::ID;  INITIALIZE_PASS_BEGIN(StackColoring, DEBUG_TYPE,                        "Merge disjoint stack slots", false, false)  INITIALIZE_PASS_DEPENDENCY(SlotIndexes) +INITIALIZE_PASS_DEPENDENCY(StackProtector)  INITIALIZE_PASS_END(StackColoring, DEBUG_TYPE,                      "Merge disjoint stack slots", false, false)  void StackColoring::getAnalysisUsage(AnalysisUsage &AU) const {    AU.addRequired<SlotIndexes>(); +  AU.addRequired<StackProtector>();    MachineFunctionPass::getAnalysisUsage(AU);  } @@ -930,17 +936,9 @@ void StackColoring::remapInstructions(DenseMap<int, int> &SlotRemap) {      MergedAllocas.insert(From);      MergedAllocas.insert(To); -    // Transfer the stack protector layout tag, but make sure that SSPLK_AddrOf -    // does not overwrite SSPLK_SmallArray or SSPLK_LargeArray, and make sure -    // that SSPLK_SmallArray does not overwrite SSPLK_LargeArray. -    MachineFrameInfo::SSPLayoutKind FromKind -        = MFI->getObjectSSPLayout(SI.first); -    MachineFrameInfo::SSPLayoutKind ToKind = MFI->getObjectSSPLayout(SI.second); -    if (FromKind != MachineFrameInfo::SSPLK_None && -        (ToKind == MachineFrameInfo::SSPLK_None || -         (ToKind != MachineFrameInfo::SSPLK_LargeArray && -          FromKind != MachineFrameInfo::SSPLK_AddrOf))) -      MFI->setObjectSSPLayout(SI.second, FromKind); +    // Allow the stack protector to adjust its value map to account for the +    // upcoming replacement. +    SP->adjustForColoring(From, To);      // The new alloca might not be valid in a llvm.dbg.declare for this      // variable, so undef out the use to make the verifier happy. @@ -1141,6 +1139,7 @@ bool StackColoring::runOnMachineFunction(MachineFunction &Func) {    MF = &Func;    MFI = &MF->getFrameInfo();    Indexes = &getAnalysis<SlotIndexes>(); +  SP = &getAnalysis<StackProtector>();    BlockLiveness.clear();    BasicBlocks.clear();    BasicBlockNumbering.clear(); diff --git a/llvm/lib/CodeGen/StackProtector.cpp b/llvm/lib/CodeGen/StackProtector.cpp index cb12c7ce6e8..9bc0c1fc043 100644 --- a/llvm/lib/CodeGen/StackProtector.cpp +++ b/llvm/lib/CodeGen/StackProtector.cpp @@ -70,6 +70,32 @@ INITIALIZE_PASS_END(StackProtector, DEBUG_TYPE,  FunctionPass *llvm::createStackProtectorPass() { return new StackProtector(); } +StackProtector::SSPLayoutKind +StackProtector::getSSPLayout(const AllocaInst *AI) const { +  return AI ? Layout.lookup(AI) : SSPLK_None; +} + +void StackProtector::adjustForColoring(const AllocaInst *From, +                                       const AllocaInst *To) { +  // When coloring replaces one alloca with another, transfer the SSPLayoutKind +  // tag from the remapped to the target alloca. The remapped alloca should +  // have a size smaller than or equal to the replacement alloca. +  SSPLayoutMap::iterator I = Layout.find(From); +  if (I != Layout.end()) { +    SSPLayoutKind Kind = I->second; +    Layout.erase(I); + +    // Transfer the tag, but make sure that SSPLK_AddrOf does not overwrite +    // SSPLK_SmallArray or SSPLK_LargeArray, and make sure that +    // SSPLK_SmallArray does not overwrite SSPLK_LargeArray. +    I = Layout.find(To); +    if (I == Layout.end()) +      Layout.insert(std::make_pair(To, Kind)); +    else if (I->second != SSPLK_LargeArray && Kind != SSPLK_AddrOf) +      I->second = Kind; +  } +} +  void StackProtector::getAnalysisUsage(AnalysisUsage &AU) const {    AU.addRequired<TargetPassConfig>();    AU.addPreserved<DominatorTreeWrapperPass>(); @@ -263,21 +289,18 @@ bool StackProtector::RequiresStackProtector() {              if (CI->getLimitedValue(SSPBufferSize) >= SSPBufferSize) {                // A call to alloca with size >= SSPBufferSize requires                // stack protectors. -              Layout.insert(std::make_pair(AI, -                                           MachineFrameInfo::SSPLK_LargeArray)); +              Layout.insert(std::make_pair(AI, SSPLK_LargeArray));                ORE.emit(RemarkBuilder);                NeedsProtector = true;              } else if (Strong) {                // Require protectors for all alloca calls in strong mode. -              Layout.insert(std::make_pair(AI, -                                           MachineFrameInfo::SSPLK_SmallArray)); +              Layout.insert(std::make_pair(AI, SSPLK_SmallArray));                ORE.emit(RemarkBuilder);                NeedsProtector = true;              }            } else {              // A call to alloca with a variable size requires protectors. -            Layout.insert(std::make_pair(AI, -                                         MachineFrameInfo::SSPLK_LargeArray)); +            Layout.insert(std::make_pair(AI, SSPLK_LargeArray));              ORE.emit(RemarkBuilder);              NeedsProtector = true;            } @@ -286,9 +309,8 @@ bool StackProtector::RequiresStackProtector() {          bool IsLarge = false;          if (ContainsProtectableArray(AI->getAllocatedType(), IsLarge, Strong)) { -          Layout.insert(std::make_pair(AI, IsLarge -                                       ? MachineFrameInfo::SSPLK_LargeArray -                                       : MachineFrameInfo::SSPLK_SmallArray)); +          Layout.insert(std::make_pair(AI, IsLarge ? SSPLK_LargeArray +                                                   : SSPLK_SmallArray));            ORE.emit([&]() {              return OptimizationRemark(DEBUG_TYPE, "StackProtectorBuffer", &I)                     << "Stack protection applied to function " @@ -302,7 +324,7 @@ bool StackProtector::RequiresStackProtector() {          if (Strong && HasAddressTaken(AI)) {            ++NumAddrTaken; -          Layout.insert(std::make_pair(AI, MachineFrameInfo::SSPLK_AddrOf)); +          Layout.insert(std::make_pair(AI, SSPLK_AddrOf));            ORE.emit([&]() {              return OptimizationRemark(DEBUG_TYPE, "StackProtectorAddressTaken",                                        &I) @@ -512,23 +534,3 @@ BasicBlock *StackProtector::CreateFailBB() {  bool StackProtector::shouldEmitSDCheck(const BasicBlock &BB) const {    return HasPrologue && !HasIRCheck && dyn_cast<ReturnInst>(BB.getTerminator());  } - -void StackProtector::copyToMachineFrameInfo(MachineFrameInfo &MFI) const { -  if (Layout.empty()) -    return; - -  for (int I = 0, E = MFI.getObjectIndexEnd(); I != E; ++I) { -    if (MFI.isDeadObjectIndex(I)) -      continue; - -    const AllocaInst *AI = MFI.getObjectAllocation(I); -    if (!AI) -      continue; - -    SSPLayoutMap::const_iterator LI = Layout.find(AI); -    if (LI == Layout.end()) -      continue; - -    MFI.setObjectSSPLayout(I, LI->second); -  } -}  | 

