diff options
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/MachineOutliner.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/MachineOutliner.cpp b/llvm/lib/CodeGen/MachineOutliner.cpp index 6b9faddd9b2..49d0893afd7 100644 --- a/llvm/lib/CodeGen/MachineOutliner.cpp +++ b/llvm/lib/CodeGen/MachineOutliner.cpp @@ -625,6 +625,9 @@ struct InstructionMapper { /// Inverse of \p InstructionIntegerMap. DenseMap<unsigned, MachineInstr *> IntegerInstructionMap; + /// Correspondence between \p MachineBasicBlocks and target-defined flags. + DenseMap<MachineBasicBlock *, unsigned> MBBFlagsMap; + /// The vector of unsigned integers that the module is mapped to. std::vector<unsigned> UnsignedVec; @@ -748,6 +751,9 @@ struct InstructionMapper { if (!TII.isMBBSafeToOutlineFrom(MBB, Flags)) return; + // Store info for the MBB for later outlining. + MBBFlagsMap[&MBB] = Flags; + MachineBasicBlock::iterator It = MBB.begin(); // The number of instructions in this block that will be considered for @@ -1106,10 +1112,11 @@ unsigned MachineOutliner::findCandidates( MachineBasicBlock::iterator StartIt = Mapper.InstrList[StartIdx]; MachineBasicBlock::iterator EndIt = Mapper.InstrList[EndIdx]; + MachineBasicBlock *MBB = StartIt->getParent(); CandidatesForRepeatedSeq.emplace_back(StartIdx, StringLen, StartIt, - EndIt, StartIt->getParent(), - FunctionList.size()); + EndIt, MBB, FunctionList.size(), + Mapper.MBBFlagsMap[MBB]); } } |