diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h @@ -86,6 +86,9 @@ /// DWO ID for correlating skeleton and split units. uint64_t DWOId = 0; + const DIFile *LastFile = nullptr; + unsigned LastFileID; + /// Construct a DIE for the given DbgVariable without initializing the /// DbgVariable's DIE reference. DIE *constructVariableDIEImpl(const DbgVariable &DV, bool Abstract); diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -127,9 +127,14 @@ if (!File) return Asm->OutStreamer->emitDwarfFileDirective(0, "", "", None, None, CUID); - return Asm->OutStreamer->emitDwarfFileDirective( - 0, File->getDirectory(), File->getFilename(), DD->getMD5AsBytes(File), - File->getSource(), CUID); + + if (LastFile != File) { + LastFile = File; + LastFileID = Asm->OutStreamer->emitDwarfFileDirective( + 0, File->getDirectory(), File->getFilename(), DD->getMD5AsBytes(File), + File->getSource(), CUID); + } + return LastFileID; } DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(