@@ -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 a DbgRecord .
864+ // / Add all of the metadata from an instruction .
865865 void processDbgRecordMetadata (const DbgRecord &DPV);
866866};
867867
@@ -1140,9 +1140,6 @@ 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.
11461143 CreateMetadataSlot (DPV->getVariable ());
11471144 if (DPV->isDbgAssign ())
11481145 CreateMetadataSlot (DPV->getAssignID ());
@@ -2706,7 +2703,6 @@ class AssemblyWriter {
27062703 void printDPValue (const DPValue &DPI);
27072704 void printDPLabel (const DPLabel &DPL);
27082705 void printDbgRecord (const DbgRecord &DPI);
2709- void printDbgRecordLine (const DbgRecord &DPI);
27102706
27112707 void printUseListOrder (const Value *V, const std::vector<unsigned > &Shuffle);
27122708 void printUseLists (const Function *F);
@@ -3889,6 +3885,9 @@ void AssemblyWriter::printTypeIdentities() {
38893885
38903886// / printFunction - Print all aspects of a function.
38913887void AssemblyWriter::printFunction (const Function *F) {
3888+ bool ConvertBack = F->IsNewDbgInfoFormat ;
3889+ if (ConvertBack)
3890+ const_cast <Function *>(F)->convertFromNewDbgValues ();
38923891 if (AnnotationWriter) AnnotationWriter->emitFunctionAnnot (F, Out);
38933892
38943893 if (F->isMaterializable ())
@@ -4031,6 +4030,8 @@ void AssemblyWriter::printFunction(const Function *F) {
40314030 Out << " }\n " ;
40324031 }
40334032
4033+ if (ConvertBack)
4034+ const_cast <Function *>(F)->convertToNewDbgValues ();
40344035 Machine.purgeFunction ();
40354036}
40364037
@@ -4097,8 +4098,6 @@ void AssemblyWriter::printBasicBlock(const BasicBlock *BB) {
40974098
40984099 // Output all of the instructions in the basic block...
40994100 for (const Instruction &I : *BB) {
4100- for (const DbgRecord &DR : I.getDbgValueRange ())
4101- printDbgRecordLine (DR);
41024101 printInstructionLine (I);
41034102 }
41044103
@@ -4612,10 +4611,12 @@ void AssemblyWriter::printDbgRecord(const DbgRecord &DR) {
46124611 llvm_unreachable (" Unexpected DbgRecord kind" );
46134612}
46144613
4615- void AssemblyWriter::printDPValue (const DPValue &DPV) {
4616- auto WriterCtx = getContext ();
4617- Out << " #dbg_" ;
4618- switch (DPV.getType ()) {
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 ()) {
46194620 case DPValue::LocationType::Value:
46204621 Out << " value" ;
46214622 break ;
@@ -4628,39 +4629,35 @@ void AssemblyWriter::printDPValue(const DPValue &DPV) {
46284629 default :
46294630 llvm_unreachable (" Tried to print a DPValue with an invalid LocationType!" );
46304631 }
4631- Out << " (" ;
4632- WriteAsOperandInternal (Out, DPV.getRawLocation (), WriterCtx, true );
4632+ Out << " { " ;
4633+ auto WriterCtx = getContext ();
4634+ WriteAsOperandInternal (Out, Value.getRawLocation (), WriterCtx, true );
46334635 Out << " , " ;
4634- WriteAsOperandInternal (Out, DPV .getVariable (), WriterCtx, true );
4636+ WriteAsOperandInternal (Out, Value .getVariable (), WriterCtx, true );
46354637 Out << " , " ;
4636- WriteAsOperandInternal (Out, DPV .getExpression (), WriterCtx, true );
4638+ WriteAsOperandInternal (Out, Value .getExpression (), WriterCtx, true );
46374639 Out << " , " ;
4638- if (DPV .isDbgAssign ()) {
4639- WriteAsOperandInternal (Out, DPV .getAssignID (), WriterCtx, true );
4640+ if (Value .isDbgAssign ()) {
4641+ WriteAsOperandInternal (Out, Value .getAssignID (), WriterCtx, true );
46404642 Out << " , " ;
4641- WriteAsOperandInternal (Out, DPV .getRawAddress (), WriterCtx, true );
4643+ WriteAsOperandInternal (Out, Value .getRawAddress (), WriterCtx, true );
46424644 Out << " , " ;
4643- WriteAsOperandInternal (Out, DPV .getAddressExpression (), WriterCtx, true );
4645+ WriteAsOperandInternal (Out, Value .getAddressExpression (), WriterCtx, true );
46444646 Out << " , " ;
46454647 }
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 ' ;
4648+ WriteAsOperandInternal (Out, Value.getDebugLoc ().get (), WriterCtx, true );
4649+ Out << " marker @" << Value.getMarker ();
4650+ Out << " }" ;
46574651}
46584652
46594653void AssemblyWriter::printDPLabel (const DPLabel &Label) {
4654+ // There's no formal representation of a DPLabel -- print purely as
4655+ // a debugging aid.
4656+ Out << " DPLabel { " ;
46604657 auto WriterCtx = getContext ();
4661- Out << " #dbg_label(" ;
46624658 WriteAsOperandInternal (Out, Label.getLabel (), WriterCtx, true );
4663- Out << " )" ;
4659+ Out << " marker @" << Label.getMarker ();
4660+ Out << " }" ;
46644661}
46654662
46664663void AssemblyWriter::printMetadataAttachments (
@@ -4808,11 +4805,19 @@ void BasicBlock::print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW,
48084805
48094806void Module::print (raw_ostream &ROS, AssemblyAnnotationWriter *AAW,
48104807 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+
48114813 SlotTracker SlotTable (this );
48124814 formatted_raw_ostream OS (ROS);
48134815 AssemblyWriter W (OS, SlotTable, this , AAW, IsForDebug,
48144816 ShouldPreserveUseListOrder);
48154817 W.printModule (this );
4818+
4819+ if (ConvertAfter)
4820+ const_cast <Module *>(this )->convertToNewDbgValues ();
48164821}
48174822
48184823void NamedMDNode::print (raw_ostream &ROS, bool IsForDebug) const {
@@ -4903,6 +4908,8 @@ void DPValue::print(raw_ostream &ROS, bool IsForDebug) const {
49034908
49044909void DPMarker::print (raw_ostream &ROS, ModuleSlotTracker &MST,
49054910 bool IsForDebug) const {
4911+ // There's no formal representation of a DPMarker -- print purely as a
4912+ // debugging aid.
49064913 formatted_raw_ostream OS (ROS);
49074914 SlotTracker EmptySlotTable (static_cast <const Module *>(nullptr ));
49084915 SlotTracker &SlotTable =
@@ -4924,6 +4931,8 @@ void DPLabel::print(raw_ostream &ROS, bool IsForDebug) const {
49244931
49254932void DPValue::print (raw_ostream &ROS, ModuleSlotTracker &MST,
49264933 bool IsForDebug) const {
4934+ // There's no formal representation of a DPValue -- print purely as a
4935+ // debugging aid.
49274936 formatted_raw_ostream OS (ROS);
49284937 SlotTracker EmptySlotTable (static_cast <const Module *>(nullptr ));
49294938 SlotTracker &SlotTable =
@@ -4941,6 +4950,8 @@ void DPValue::print(raw_ostream &ROS, ModuleSlotTracker &MST,
49414950
49424951void DPLabel::print (raw_ostream &ROS, ModuleSlotTracker &MST,
49434952 bool IsForDebug) const {
4953+ // There's no formal representation of a DbgLabelRecord -- print purely as
4954+ // a debugging aid.
49444955 formatted_raw_ostream OS (ROS);
49454956 SlotTracker EmptySlotTable (static_cast <const Module *>(nullptr ));
49464957 SlotTracker &SlotTable =
0 commit comments