Skip to content
LiveIntervalAnalysis.cpp 75 KiB
Newer Older
        std::string msg;
        raw_string_ostream Msg(msg);
        Msg << "Ran out of registers during register allocation!";
        if (MI->isInlineAsm()) {
          Msg << "\nPlease check your inline asm statement for invalid "
          MI->print(Msg, tm_);
        report_fatal_error(Msg.str());
      for (const unsigned* AS = tri_->getSubRegisters(PReg); *AS; ++AS) {
        if (!hasInterval(*AS))
          continue;
        LiveInterval &spli = getInterval(*AS);
        if (spli.liveAt(Index))
Lang Hames's avatar
Lang Hames committed
          spli.removeRange(Index.getLoadIndex(),
                           Index.getNextIndex().getBaseIndex());

LiveRange LiveIntervals::addLiveRangeToEndOfBlock(unsigned reg,
  LiveInterval& Interval = getOrCreateInterval(reg);
  VNInfo* VN = Interval.getNextValue(
Lang Hames's avatar
Lang Hames committed
    SlotIndex(getInstructionIndex(startInst).getDefIndex()),
    startInst, true, getVNInfoAllocator());
Lang Hames's avatar
Lang Hames committed
  VN->setHasPHIKill(true);
Lang Hames's avatar
Lang Hames committed
  VN->kills.push_back(indexes_->getTerminatorGap(startInst->getParent()));
Lang Hames's avatar
Lang Hames committed
     SlotIndex(getInstructionIndex(startInst).getDefIndex()),
     getMBBEndIdx(startInst->getParent()), VN);
David Greene's avatar
 
David Greene committed