diff options
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp b/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp index 8f5b05b662b3..8405ba9ac326 100644 --- a/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp @@ -236,6 +236,7 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf, // Create an initial MachineBasicBlock for each LLVM BasicBlock in F. This // also creates the initial PHI MachineInstrs, though none of the input // operands are populated. + MBBMap.resize(Fn->getMaxBlockNumber()); for (const BasicBlock &BB : *Fn) { // Don't create MachineBasicBlocks for imaginary EH pad blocks. These blocks // are really data, and no instructions can live here. @@ -261,7 +262,7 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf, } MachineBasicBlock *MBB = mf.CreateMachineBasicBlock(&BB); - MBBMap[&BB] = MBB; + MBBMap[BB.getNumber()] = MBB; MF->push_back(MBB); // Transfer the address-taken flag. This is necessary because there could @@ -307,20 +308,16 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf, for (WinEHTryBlockMapEntry &TBME : EHInfo.TryBlockMap) { for (WinEHHandlerType &H : TBME.HandlerArray) { if (H.Handler) - H.Handler = MBBMap[cast<const BasicBlock *>(H.Handler)]; + H.Handler = getMBB(cast<const BasicBlock *>(H.Handler)); } } for (CxxUnwindMapEntry &UME : EHInfo.CxxUnwindMap) if (UME.Cleanup) - UME.Cleanup = MBBMap[cast<const BasicBlock *>(UME.Cleanup)]; - for (SEHUnwindMapEntry &UME : EHInfo.SEHUnwindMap) { - const auto *BB = cast<const BasicBlock *>(UME.Handler); - UME.Handler = MBBMap[BB]; - } - for (ClrEHUnwindMapEntry &CME : EHInfo.ClrEHUnwindMap) { - const auto *BB = cast<const BasicBlock *>(CME.Handler); - CME.Handler = MBBMap[BB]; - } + UME.Cleanup = getMBB(cast<const BasicBlock *>(UME.Cleanup)); + for (SEHUnwindMapEntry &UME : EHInfo.SEHUnwindMap) + UME.Handler = getMBB(cast<const BasicBlock *>(UME.Handler)); + for (ClrEHUnwindMapEntry &CME : EHInfo.ClrEHUnwindMap) + CME.Handler = getMBB(cast<const BasicBlock *>(CME.Handler)); } else if (Personality == EHPersonality::Wasm_CXX) { WasmEHFuncInfo &EHInfo = *MF->getWasmEHFuncInfo(); calculateWasmEHInfo(&fn, EHInfo); @@ -330,16 +327,16 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf, for (auto &KV : EHInfo.SrcToUnwindDest) { const auto *Src = cast<const BasicBlock *>(KV.first); const auto *Dest = cast<const BasicBlock *>(KV.second); - SrcToUnwindDest[MBBMap[Src]] = MBBMap[Dest]; + SrcToUnwindDest[getMBB(Src)] = getMBB(Dest); } EHInfo.SrcToUnwindDest = std::move(SrcToUnwindDest); DenseMap<BBOrMBB, SmallPtrSet<BBOrMBB, 4>> UnwindDestToSrcs; for (auto &KV : EHInfo.UnwindDestToSrcs) { const auto *Dest = cast<const BasicBlock *>(KV.first); - UnwindDestToSrcs[MBBMap[Dest]] = SmallPtrSet<BBOrMBB, 4>(); + MachineBasicBlock *DestMBB = getMBB(Dest); + UnwindDestToSrcs[DestMBB] = SmallPtrSet<BBOrMBB, 4>(); for (const auto P : KV.second) - UnwindDestToSrcs[MBBMap[Dest]].insert( - MBBMap[cast<const BasicBlock *>(P)]); + UnwindDestToSrcs[DestMBB].insert(getMBB(cast<const BasicBlock *>(P))); } EHInfo.UnwindDestToSrcs = std::move(UnwindDestToSrcs); } |
