void UserValue::print(raw_ostream &OS, const TargetRegisterInfo *TRI) { if (const MDString *MDS = dyn_cast<MDString>(variable->getOperand(2))) OS << "!\"" << MDS->getString() << "\"\t"; if (offset) OS << '+' << offset; for (LocMap::const_iterator I = locInts.begin(); I.valid(); ++I) { OS << " [" << I.start() << ';' << I.stop() << "):"; if (I.value() == ~0u) OS << "undef"; else OS << I.value(); } for (unsigned i = 0, e = locations.size(); i != e; ++i) OS << " Loc" << i << '=' << locations[i]; OS << '\n'; }
void UserValue::print(raw_ostream &OS, const TargetRegisterInfo *TRI) { auto *DV = cast<DILocalVariable>(Variable); OS << "!\""; printExtendedName(OS, DV, dl); OS << "\"\t"; for (LocMap::const_iterator I = locInts.begin(); I.valid(); ++I) { OS << " [" << I.start() << ';' << I.stop() << "):"; if (I.value() == UndefLocNo) OS << "undef"; else OS << I.value(); } for (unsigned i = 0, e = locations.size(); i != e; ++i) { OS << " Loc" << i << '='; locations[i].print(OS, TRI); } OS << '\n'; }
void UserValue::print(raw_ostream &OS, const TargetMachine *TM) { DIVariable DV(variable); OS << "!\""; DV.printExtendedName(OS); OS << "\"\t"; if (offset) OS << '+' << offset; for (LocMap::const_iterator I = locInts.begin(); I.valid(); ++I) { OS << " [" << I.start() << ';' << I.stop() << "):"; if (I.value() == ~0u) OS << "undef"; else OS << I.value(); } for (unsigned i = 0, e = locations.size(); i != e; ++i) { OS << " Loc" << i << '='; locations[i].print(OS, TM); } OS << '\n'; }
void UserValue::emitDebugValues(VirtRegMap *VRM, LiveIntervals &LIS, const TargetInstrInfo &TII) { MachineFunction::iterator MFEnd = VRM->getMachineFunction().end(); for (LocMap::const_iterator I = locInts.begin(); I.valid();) { SlotIndex Start = I.start(); SlotIndex Stop = I.stop(); unsigned LocNo = I.value(); DEBUG(dbgs() << "\t[" << Start << ';' << Stop << "):" << LocNo); MachineFunction::iterator MBB = LIS.getMBBFromIndex(Start); SlotIndex MBBEnd = LIS.getMBBEndIdx(MBB); DEBUG(dbgs() << " BB#" << MBB->getNumber() << '-' << MBBEnd); insertDebugValue(MBB, Start, LocNo, LIS, TII); // This interval may span multiple basic blocks. // Insert a DBG_VALUE into each one. while(Stop > MBBEnd) { // Move to the next block. Start = MBBEnd; if (++MBB == MFEnd) break; MBBEnd = LIS.getMBBEndIdx(MBB); DEBUG(dbgs() << " BB#" << MBB->getNumber() << '-' << MBBEnd); insertDebugValue(MBB, Start, LocNo, LIS, TII); } DEBUG(dbgs() << '\n'); if (MBB == MFEnd) break; ++I; if (Stop == MBBEnd) continue; // The current interval ends before MBB. // Insert a kill if there is a gap. if (!I.valid() || I.start() > Stop) insertDebugKill(MBB, Stop, LIS, TII); } }