diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp --- a/llvm/lib/CodeGen/BranchFolding.cpp +++ b/llvm/lib/CodeGen/BranchFolding.cpp @@ -170,7 +170,7 @@ // Update call site info. std::for_each(MBB->begin(), MBB->end(), [MF](const MachineInstr &MI) { - if (MI.isCall(MachineInstr::IgnoreBundle)) + if (MI.isCandidateForCallSiteEntry()) MF->eraseCallSiteInfo(&MI); }); // Remove the block. diff --git a/llvm/lib/CodeGen/IfConversion.cpp b/llvm/lib/CodeGen/IfConversion.cpp --- a/llvm/lib/CodeGen/IfConversion.cpp +++ b/llvm/lib/CodeGen/IfConversion.cpp @@ -1851,7 +1851,7 @@ while (NumDups1 != 0) { // Since this instruction is going to be deleted, update call // site info state if the instruction is call instruction. - if (DI2->isCall(MachineInstr::IgnoreBundle)) + if (DI2->isCandidateForCallSiteEntry()) MBB2.getParent()->eraseCallSiteInfo(&*DI2); ++DI2; @@ -1900,7 +1900,7 @@ // Since this instruction is going to be deleted, update call // site info state if the instruction is call instruction. - if (DI1->isCall(MachineInstr::IgnoreBundle)) + if (DI1->isCandidateForCallSiteEntry()) MBB1.getParent()->eraseCallSiteInfo(&*DI1); // skip dbg_value instructions @@ -2188,8 +2188,8 @@ MachineInstr *MI = MF.CloneMachineInstr(&I); // Make a copy of the call site info. - if (MI->isCall(MachineInstr::IgnoreBundle)) - MF.copyCallSiteInfo(&I,MI); + if (I.isCandidateForCallSiteEntry()) + MF.copyCallSiteInfo(&I, MI); ToBBI.BB->insert(ToBBI.BB->end(), MI); ToBBI.NonPredSize++; diff --git a/llvm/lib/CodeGen/InlineSpiller.cpp b/llvm/lib/CodeGen/InlineSpiller.cpp --- a/llvm/lib/CodeGen/InlineSpiller.cpp +++ b/llvm/lib/CodeGen/InlineSpiller.cpp @@ -864,7 +864,8 @@ HSpiller.rmFromMergeableSpills(*MI, FI)) --NumSpills; LIS.ReplaceMachineInstrInMaps(*MI, *FoldMI); - if (MI->isCall()) + // Update the call site info. + if (MI->isCandidateForCallSiteEntry()) MI->getMF()->moveCallSiteInfo(MI, FoldMI); MI->eraseFromParent(); diff --git a/llvm/lib/CodeGen/LiveRangeEdit.cpp b/llvm/lib/CodeGen/LiveRangeEdit.cpp --- a/llvm/lib/CodeGen/LiveRangeEdit.cpp +++ b/llvm/lib/CodeGen/LiveRangeEdit.cpp @@ -231,7 +231,8 @@ return false; LLVM_DEBUG(dbgs() << " folded: " << *FoldMI); LIS.ReplaceMachineInstrInMaps(*UseMI, *FoldMI); - if (UseMI->isCall()) + // Update the call site info. + if (UseMI->isCandidateForCallSiteEntry()) UseMI->getMF()->moveCallSiteInfo(UseMI, FoldMI); UseMI->eraseFromParent(); DefMI->addRegisterDead(LI->reg, nullptr); diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp --- a/llvm/lib/CodeGen/MachineFunction.cpp +++ b/llvm/lib/CodeGen/MachineFunction.cpp @@ -863,7 +863,8 @@ MachineFunction::CallSiteInfoMap::iterator MachineFunction::getCallSiteInfo(const MachineInstr *MI) { - assert(MI->isCall() && "Call site info refers only to call instructions!"); + assert(MI->isCandidateForCallSiteEntry() && + "Call site info refers only to call (MI) candidates"); if (!Target.Options.EnableDebugEntryValues) return CallSitesInfo.end(); @@ -872,7 +873,11 @@ void MachineFunction::moveCallSiteInfo(const MachineInstr *Old, const MachineInstr *New) { - assert(New->isCall() && "Call site info refers only to call instructions!"); + assert(Old->isCandidateForCallSiteEntry() && + "Call site info refers only to call (MI) candidates"); + + if (!New->isCandidateForCallSiteEntry()) + return eraseCallSiteInfo(Old); CallSiteInfoMap::iterator CSIt = getCallSiteInfo(Old); if (CSIt == CallSitesInfo.end()) @@ -884,6 +889,8 @@ } void MachineFunction::eraseCallSiteInfo(const MachineInstr *MI) { + assert(MI->isCandidateForCallSiteEntry() && + "Call site info refers only to call (MI) candidates"); CallSiteInfoMap::iterator CSIt = getCallSiteInfo(MI); if (CSIt == CallSitesInfo.end()) return; @@ -892,7 +899,11 @@ void MachineFunction::copyCallSiteInfo(const MachineInstr *Old, const MachineInstr *New) { - assert(New->isCall() && "Call site info refers only to call instructions!"); + assert(Old->isCandidateForCallSiteEntry() && + "Call site info refers only to call (MI) candidates"); + + if (!New->isCandidateForCallSiteEntry()) + return eraseCallSiteInfo(Old); CallSiteInfoMap::iterator CSIt = getCallSiteInfo(Old); if (CSIt == CallSitesInfo.end()) diff --git a/llvm/lib/CodeGen/MachineOutliner.cpp b/llvm/lib/CodeGen/MachineOutliner.cpp --- a/llvm/lib/CodeGen/MachineOutliner.cpp +++ b/llvm/lib/CodeGen/MachineOutliner.cpp @@ -1260,7 +1260,7 @@ MOP.getReg(), true, /* isDef = true */ true /* isImp = true */)); } - if (MI.isCall()) + if (MI.isCandidateForCallSiteEntry()) MI.getMF()->eraseCallSiteInfo(&MI); }; // Copy over the defs in the outlined range. diff --git a/llvm/lib/CodeGen/PeepholeOptimizer.cpp b/llvm/lib/CodeGen/PeepholeOptimizer.cpp --- a/llvm/lib/CodeGen/PeepholeOptimizer.cpp +++ b/llvm/lib/CodeGen/PeepholeOptimizer.cpp @@ -1776,7 +1776,8 @@ LocalMIs.erase(MI); LocalMIs.erase(DefMI); LocalMIs.insert(FoldMI); - if (MI->isCall()) + // Update the call site info. + if (MI->isCandidateForCallSiteEntry()) MI->getMF()->moveCallSiteInfo(MI, FoldMI); MI->eraseFromParent(); DefMI->eraseFromParent(); diff --git a/llvm/lib/CodeGen/TargetInstrInfo.cpp b/llvm/lib/CodeGen/TargetInstrInfo.cpp --- a/llvm/lib/CodeGen/TargetInstrInfo.cpp +++ b/llvm/lib/CodeGen/TargetInstrInfo.cpp @@ -143,7 +143,7 @@ // from the end of MBB. while (Tail != MBB->end()) { auto MI = Tail++; - if (MI->isCall()) + if (MI->isCandidateForCallSiteEntry()) MBB->getParent()->eraseCallSiteInfo(&*MI); MBB->erase(MI); } diff --git a/llvm/lib/CodeGen/UnreachableBlockElim.cpp b/llvm/lib/CodeGen/UnreachableBlockElim.cpp --- a/llvm/lib/CodeGen/UnreachableBlockElim.cpp +++ b/llvm/lib/CodeGen/UnreachableBlockElim.cpp @@ -151,7 +151,7 @@ for (unsigned i = 0, e = DeadBlocks.size(); i != e; ++i) { // Remove any call site information for calls in the block. for (auto &I : DeadBlocks[i]->instrs()) - if (I.isCall(MachineInstr::IgnoreBundle)) + if (I.isCandidateForCallSiteEntry()) DeadBlocks[i]->getParent()->eraseCallSiteInfo(&I); DeadBlocks[i]->eraseFromParent(); diff --git a/llvm/lib/CodeGen/XRayInstrumentation.cpp b/llvm/lib/CodeGen/XRayInstrumentation.cpp --- a/llvm/lib/CodeGen/XRayInstrumentation.cpp +++ b/llvm/lib/CodeGen/XRayInstrumentation.cpp @@ -111,7 +111,7 @@ for (auto &MO : T.operands()) MIB.add(MO); Terminators.push_back(&T); - if (T.isCall()) + if (T.isCandidateForCallSiteEntry()) MF.eraseCallSiteInfo(&T); } } diff --git a/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp b/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp --- a/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp +++ b/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp @@ -1207,7 +1207,8 @@ // Update call site info and delete the pseudo instruction TCRETURN. - MBB.getParent()->moveCallSiteInfo(&MI, &*NewMI); + if (MI.isCandidateForCallSiteEntry()) + MI.getMF()->moveCallSiteInfo(&MI, &*NewMI); MBB.erase(MBBI); MBBI = NewMI; @@ -1410,8 +1411,8 @@ const bool Thumb = Opcode == ARM::tTPsoft; MachineInstrBuilder MIB; + MachineFunction *MF = MBB.getParent(); if (STI->genLongCalls()) { - MachineFunction *MF = MBB.getParent(); MachineConstantPool *MCP = MF->getConstantPool(); unsigned PCLabelID = AFI->createPICLabelUId(); MachineConstantPoolValue *CPV = @@ -1440,7 +1441,9 @@ MIB.cloneMemRefs(MI); TransferImpOps(MI, MIB, MIB); - MI.getMF()->moveCallSiteInfo(&MI, &*MIB); + // Update the call site info. + if (MI.isCandidateForCallSiteEntry()) + MF->moveCallSiteInfo(&MI, &*MIB); MI.eraseFromParent(); return true; } diff --git a/llvm/lib/Target/X86/X86ExpandPseudo.cpp b/llvm/lib/Target/X86/X86ExpandPseudo.cpp --- a/llvm/lib/Target/X86/X86ExpandPseudo.cpp +++ b/llvm/lib/Target/X86/X86ExpandPseudo.cpp @@ -275,7 +275,10 @@ MachineInstr &NewMI = *std::prev(MBBI); NewMI.copyImplicitOps(*MBBI->getParent()->getParent(), *MBBI); - MBB.getParent()->moveCallSiteInfo(&*MBBI, &NewMI); + + // Update the call site info. + if (MBBI->isCandidateForCallSiteEntry()) + MBB.getParent()->moveCallSiteInfo(&*MBBI, &NewMI); // Delete the pseudo instruction TCRETURN. MBB.erase(MBBI);