@@ -861,7 +861,7 @@ class SlotTracker : public AbstractSlotTrackerStorage {
861861 // / Add all of the metadata from an instruction.
862862 void processInstructionMetadata (const Instruction &I);
863863
864- // / Add all of the metadata from an instruction .
864+ // / Add all of the metadata from a DbgRecord .
865865 void processDbgRecordMetadata (const DbgRecord &DPV);
866866};
867867
@@ -1140,6 +1140,9 @@ void SlotTracker::processFunctionMetadata(const Function &F) {
11401140
11411141void SlotTracker::processDbgRecordMetadata (const DbgRecord &DR) {
11421142 if (const DPValue *DPV = dyn_cast<const DPValue>(&DR)) {
1143+ // Process metadata used by DbgRecords; we only specifically care about the
1144+ // DILocalVariable, DILocation, and DIAssignID fields, as the Value and
1145+ // Expression fields should only be printed inline and so do not use a slot.
11431146 CreateMetadataSlot (DPV->getVariable ());
11441147 if (DPV->isDbgAssign ())
11451148 CreateMetadataSlot (DPV->getAssignID ());
@@ -2703,6 +2706,7 @@ class AssemblyWriter {
27032706 void printDPValue (const DPValue &DPI);
27042707 void printDPLabel (const DPLabel &DPL);
27052708 void printDbgRecord (const DbgRecord &DPI);
2709+ void printDbgRecordLine (const DbgRecord &DPI);
27062710
27072711 void printUseListOrder (const Value *V, const std::vector<unsigned > &Shuffle);
27082712 void printUseLists (const Function *F);
@@ -3885,9 +3889,6 @@ void AssemblyWriter::printTypeIdentities() {
38853889
38863890// / printFunction - Print all aspects of a function.
38873891void AssemblyWriter::printFunction (const Function *F) {
3888- bool ConvertBack = F->IsNewDbgInfoFormat ;
3889- if (ConvertBack)
3890- const_cast <Function *>(F)->convertFromNewDbgValues ();
38913892 if (AnnotationWriter) AnnotationWriter->emitFunctionAnnot (F, Out);
38923893
38933894 if (F->isMaterializable ())
@@ -4030,8 +4031,6 @@ void AssemblyWriter::printFunction(const Function *F) {
40304031 Out << " }\n " ;
40314032 }
40324033
4033- if (ConvertBack)
4034- const_cast <Function *>(F)->convertToNewDbgValues ();
40354034 Machine.purgeFunction ();
40364035}
40374036
@@ -4098,6 +4097,8 @@ void AssemblyWriter::printBasicBlock(const BasicBlock *BB) {
40984097
40994098 // Output all of the instructions in the basic block...
41004099 for (const Instruction &I : *BB) {
4100+ for (const DbgRecord &DR : I.getDbgValueRange ())
4101+ printDbgRecordLine (DR);
41014102 printInstructionLine (I);
41024103 }
41034104
@@ -4611,12 +4612,10 @@ void AssemblyWriter::printDbgRecord(const DbgRecord &DR) {
46114612 llvm_unreachable (" Unexpected DbgRecord kind" );
46124613}
46134614
4614- void AssemblyWriter::printDPValue (const DPValue &Value) {
4615- // There's no formal representation of a DPValue -- print purely as a
4616- // debugging aid.
4617- Out << " DPValue " ;
4618-
4619- switch (Value.getType ()) {
4615+ void AssemblyWriter::printDPValue (const DPValue &DPV) {
4616+ auto WriterCtx = getContext ();
4617+ Out << " #dbg_" ;
4618+ switch (DPV.getType ()) {
46204619 case DPValue::LocationType::Value:
46214620 Out << " value" ;
46224621 break ;
@@ -4629,35 +4628,39 @@ void AssemblyWriter::printDPValue(const DPValue &Value) {
46294628 default :
46304629 llvm_unreachable (" Tried to print a DPValue with an invalid LocationType!" );
46314630 }
4632- Out << " { " ;
4633- auto WriterCtx = getContext ();
4634- WriteAsOperandInternal (Out, Value.getRawLocation (), WriterCtx, true );
4631+ Out << " (" ;
4632+ WriteAsOperandInternal (Out, DPV.getRawLocation (), WriterCtx, true );
46354633 Out << " , " ;
4636- WriteAsOperandInternal (Out, Value .getVariable (), WriterCtx, true );
4634+ WriteAsOperandInternal (Out, DPV .getVariable (), WriterCtx, true );
46374635 Out << " , " ;
4638- WriteAsOperandInternal (Out, Value .getExpression (), WriterCtx, true );
4636+ WriteAsOperandInternal (Out, DPV .getExpression (), WriterCtx, true );
46394637 Out << " , " ;
4640- if (Value .isDbgAssign ()) {
4641- WriteAsOperandInternal (Out, Value .getAssignID (), WriterCtx, true );
4638+ if (DPV .isDbgAssign ()) {
4639+ WriteAsOperandInternal (Out, DPV .getAssignID (), WriterCtx, true );
46424640 Out << " , " ;
4643- WriteAsOperandInternal (Out, Value .getRawAddress (), WriterCtx, true );
4641+ WriteAsOperandInternal (Out, DPV .getRawAddress (), WriterCtx, true );
46444642 Out << " , " ;
4645- WriteAsOperandInternal (Out, Value .getAddressExpression (), WriterCtx, true );
4643+ WriteAsOperandInternal (Out, DPV .getAddressExpression (), WriterCtx, true );
46464644 Out << " , " ;
46474645 }
4648- WriteAsOperandInternal (Out, Value.getDebugLoc ().get (), WriterCtx, true );
4649- Out << " marker @" << Value.getMarker ();
4650- Out << " }" ;
4646+ WriteAsOperandInternal (Out, DPV.getDebugLoc ().getAsMDNode (), WriterCtx, true );
4647+ Out << " )" ;
4648+ }
4649+
4650+ // / printDbgRecordLine - Print a DbgRecord with indentation and a newline
4651+ // / character.
4652+ void AssemblyWriter::printDbgRecordLine (const DbgRecord &DR) {
4653+ // Print lengthier indentation to bring out-of-line with instructions.
4654+ Out << " " ;
4655+ printDbgRecord (DR);
4656+ Out << ' \n ' ;
46514657}
46524658
46534659void AssemblyWriter::printDPLabel (const DPLabel &Label) {
4654- // There's no formal representation of a DPLabel -- print purely as
4655- // a debugging aid.
4656- Out << " DPLabel { " ;
46574660 auto WriterCtx = getContext ();
4661+ Out << " #dbg_label(" ;
46584662 WriteAsOperandInternal (Out, Label.getLabel (), WriterCtx, true );
4659- Out << " marker @" << Label.getMarker ();
4660- Out << " }" ;
4663+ Out << " )" ;
46614664}
46624665
46634666void AssemblyWriter::printMetadataAttachments (
@@ -4805,19 +4808,11 @@ void BasicBlock::print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW,
48054808
48064809void Module::print (raw_ostream &ROS, AssemblyAnnotationWriter *AAW,
48074810 bool ShouldPreserveUseListOrder, bool IsForDebug) const {
4808- // RemoveDIs: always print with debug-info in intrinsic format.
4809- bool ConvertAfter = IsNewDbgInfoFormat;
4810- if (IsNewDbgInfoFormat)
4811- const_cast <Module *>(this )->convertFromNewDbgValues ();
4812-
48134811 SlotTracker SlotTable (this );
48144812 formatted_raw_ostream OS (ROS);
48154813 AssemblyWriter W (OS, SlotTable, this , AAW, IsForDebug,
48164814 ShouldPreserveUseListOrder);
48174815 W.printModule (this );
4818-
4819- if (ConvertAfter)
4820- const_cast <Module *>(this )->convertToNewDbgValues ();
48214816}
48224817
48234818void NamedMDNode::print (raw_ostream &ROS, bool IsForDebug) const {
@@ -4908,8 +4903,6 @@ void DPValue::print(raw_ostream &ROS, bool IsForDebug) const {
49084903
49094904void DPMarker::print (raw_ostream &ROS, ModuleSlotTracker &MST,
49104905 bool IsForDebug) const {
4911- // There's no formal representation of a DPMarker -- print purely as a
4912- // debugging aid.
49134906 formatted_raw_ostream OS (ROS);
49144907 SlotTracker EmptySlotTable (static_cast <const Module *>(nullptr ));
49154908 SlotTracker &SlotTable =
@@ -4931,8 +4924,6 @@ void DPLabel::print(raw_ostream &ROS, bool IsForDebug) const {
49314924
49324925void DPValue::print (raw_ostream &ROS, ModuleSlotTracker &MST,
49334926 bool IsForDebug) const {
4934- // There's no formal representation of a DPValue -- print purely as a
4935- // debugging aid.
49364927 formatted_raw_ostream OS (ROS);
49374928 SlotTracker EmptySlotTable (static_cast <const Module *>(nullptr ));
49384929 SlotTracker &SlotTable =
@@ -4950,8 +4941,6 @@ void DPValue::print(raw_ostream &ROS, ModuleSlotTracker &MST,
49504941
49514942void DPLabel::print (raw_ostream &ROS, ModuleSlotTracker &MST,
49524943 bool IsForDebug) const {
4953- // There's no formal representation of a DbgLabelRecord -- print purely as
4954- // a debugging aid.
49554944 formatted_raw_ostream OS (ROS);
49564945 SlotTracker EmptySlotTable (static_cast <const Module *>(nullptr ));
49574946 SlotTracker &SlotTable =
0 commit comments