[llvm] r229013 - AsmWriter/Bitcode: MDCompileUnit
David Blaikie
dblaikie at gmail.com
Thu Feb 12 18:38:04 PST 2015
On Thu, Feb 12, 2015 at 5:25 PM, Duncan P. N. Exon Smith <
dexonsmith at apple.com> wrote:
> Author: dexonsmith
> Date: Thu Feb 12 19:25:10 2015
> New Revision: 229013
>
> URL: http://llvm.org/viewvc/llvm-project?rev=229013&view=rev
> Log:
> AsmWriter/Bitcode: MDCompileUnit
>
> Added:
> llvm/trunk/test/Assembler/invalid-mdcompileunit-language-bad.ll
> llvm/trunk/test/Assembler/invalid-mdcompileunit-language-overflow.ll
> llvm/trunk/test/Assembler/invalid-mdcompileunit-missing-language.ll
> llvm/trunk/test/Assembler/mdcompileunit.ll
> Modified:
> llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h
> llvm/trunk/include/llvm/IR/DebugInfoMetadata.h
> llvm/trunk/lib/AsmParser/LLParser.cpp
> llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
> llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
> llvm/trunk/lib/IR/AsmWriter.cpp
>
> Modified: llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h?rev=229013&r1=229012&r2=229013&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h (original)
> +++ llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h Thu Feb 12 19:25:10 2015
> @@ -154,7 +154,8 @@ namespace bitc {
> METADATA_FILE = 16, // [distinct, filename, directory]
> METADATA_DERIVED_TYPE = 17, // [distinct, ...]
> METADATA_COMPOSITE_TYPE= 18, // [distinct, ...]
> - METADATA_SUBROUTINE_TYPE= 19 // [distinct, flags, types]
> + METADATA_SUBROUTINE_TYPE=19, // [distinct, flags, types]
> + METADATA_COMPILE_UNIT = 20 // [distinct, ...]
>
Also missing the schema.
> };
>
> // The constants block (CONSTANTS_BLOCK_ID) describes emission for each
>
> Modified: llvm/trunk/include/llvm/IR/DebugInfoMetadata.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfoMetadata.h?rev=229013&r1=229012&r2=229013&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/DebugInfoMetadata.h (original)
> +++ llvm/trunk/include/llvm/IR/DebugInfoMetadata.h Thu Feb 12 19:25:10 2015
> @@ -844,6 +844,12 @@ public:
> Metadata *getGlobalVariables() const { return getOperand(7); }
> Metadata *getImportedEntities() const { return getOperand(8); }
>
> + MDString *getRawProducer() const { return getOperandAs<MDString>(1); }
> + MDString *getRawFlags() const { return getOperandAs<MDString>(2); }
> + MDString *getRawSplitDebugFilename() const {
> + return getOperandAs<MDString>(3);
> + }
> +
> static bool classof(const Metadata *MD) {
> return MD->getMetadataID() == MDCompileUnitKind;
> }
>
> Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=229013&r1=229012&r2=229013&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
> +++ llvm/trunk/lib/AsmParser/LLParser.cpp Thu Feb 12 19:25:10 2015
> @@ -3352,9 +3352,39 @@ bool LLParser::ParseMDFile(MDNode *&Resu
> return false;
> }
>
> +/// ParseMDCompileUnit:
> +/// ::= !MDCompileUnit(language: DW_LANG_C99, file: !0, producer:
> "clang",
> +/// isOptimized: true, flags: "-O2", runtimeVersion:
> 1,
> +/// splitDebugFilename: "abc.debug", emissionKind: 1,
> +/// enums: !1, retainedTypes: !2, subprograms: !3,
> +/// globals: !4, imports: !5)
> bool LLParser::ParseMDCompileUnit(MDNode *&Result, bool IsDistinct) {
> - return TokError("unimplemented parser");
> +#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED)
> \
> + REQUIRED(language, DwarfLangField, );
> \
> + REQUIRED(file, MDField, );
> \
> + OPTIONAL(producer, MDStringField, );
> \
> + OPTIONAL(isOptimized, MDBoolField, );
> \
> + OPTIONAL(flags, MDStringField, );
> \
> + OPTIONAL(runtimeVersion, MDUnsignedField, (0, UINT32_MAX));
> \
> + OPTIONAL(splitDebugFilename, MDStringField, );
> \
> + OPTIONAL(emissionKind, MDUnsignedField, (0, UINT32_MAX));
> \
> + OPTIONAL(enums, MDField, );
> \
> + OPTIONAL(retainedTypes, MDField, );
> \
> + OPTIONAL(subprograms, MDField, );
> \
> + OPTIONAL(globals, MDField, );
> \
> + OPTIONAL(imports, MDField, );
> + PARSE_MD_FIELDS();
> +#undef VISIT_MD_FIELDS
> +
> + Result = GET_OR_DISTINCT(MDCompileUnit,
> + (Context, language.Val, file.Val, producer.Val,
> + isOptimized.Val, flags.Val,
> runtimeVersion.Val,
> + splitDebugFilename.Val, emissionKind.Val,
> enums.Val,
> + retainedTypes.Val, subprograms.Val,
> globals.Val,
> + imports.Val));
> + return false;
> }
> +
> bool LLParser::ParseMDSubprogram(MDNode *&Result, bool IsDistinct) {
> return TokError("unimplemented parser");
> }
>
> Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=229013&r1=229012&r2=229013&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
> +++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Thu Feb 12 19:25:10
> 2015
> @@ -1437,6 +1437,21 @@ std::error_code BitcodeReader::ParseMeta
> NextMDValueNo++);
> break;
> }
> + case bitc::METADATA_COMPILE_UNIT: {
> + if (Record.size() != 14)
> + return Error("Invalid record");
> +
> + MDValueList.AssignValue(
> + GET_OR_DISTINCT(
> + MDCompileUnit, Record[0],
> + (Context, Record[1], getMD(Record[2]),
> getMDString(Record[3]),
> + Record[4], getMDString(Record[5]), Record[6],
> + getMDString(Record[7]), Record[8], getMDOrNull(Record[9]),
> + getMDOrNull(Record[10]), getMDOrNull(Record[11]),
> + getMDOrNull(Record[12]), getMDOrNull(Record[13]))),
> + NextMDValueNo++);
> + break;
> + }
> case bitc::METADATA_STRING: {
> std::string String(Record.begin(), Record.end());
> llvm::UpgradeMDStringConstant(String);
>
> Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=229013&r1=229012&r2=229013&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
> +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Thu Feb 12 19:25:10
> 2015
> @@ -925,11 +925,30 @@ static void WriteMDFile(const MDFile *N,
> Record.clear();
> }
>
> -static void WriteMDCompileUnit(const MDCompileUnit *, const
> ValueEnumerator &,
> - BitstreamWriter &,
> SmallVectorImpl<uint64_t> &,
> - unsigned) {
> - llvm_unreachable("write not implemented");
> +static void WriteMDCompileUnit(const MDCompileUnit *N,
> + const ValueEnumerator &VE,
> + BitstreamWriter &Stream,
> + SmallVectorImpl<uint64_t> &Record,
> + unsigned Abbrev) {
> + Record.push_back(N->isDistinct());
> + Record.push_back(N->getSourceLanguage());
> + Record.push_back(VE.getMetadataID(N->getFile()));
> + Record.push_back(VE.getMetadataOrNullID(N->getRawProducer()));
> + Record.push_back(N->isOptimized());
> + Record.push_back(VE.getMetadataOrNullID(N->getRawFlags()));
> + Record.push_back(N->getRuntimeVersion());
> + Record.push_back(VE.getMetadataOrNullID(N->getRawSplitDebugFilename()));
> + Record.push_back(N->getEmissionKind());
> + Record.push_back(VE.getMetadataOrNullID(N->getEnumTypes()));
> + Record.push_back(VE.getMetadataOrNullID(N->getRetainedTypes()));
> + Record.push_back(VE.getMetadataOrNullID(N->getSubprograms()));
> + Record.push_back(VE.getMetadataOrNullID(N->getGlobalVariables()));
> + Record.push_back(VE.getMetadataOrNullID(N->getImportedEntities()));
> +
> + Stream.EmitRecord(bitc::METADATA_COMPILE_UNIT, Record, Abbrev);
> + Record.clear();
> }
> +
> static void WriteMDSubprogram(const MDSubprogram *, const ValueEnumerator
> &,
> BitstreamWriter &,
> SmallVectorImpl<uint64_t> &,
> unsigned) {
>
> Modified: llvm/trunk/lib/IR/AsmWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AsmWriter.cpp?rev=229013&r1=229012&r2=229013&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/AsmWriter.cpp (original)
> +++ llvm/trunk/lib/IR/AsmWriter.cpp Thu Feb 12 19:25:10 2015
> @@ -1505,10 +1505,58 @@ static void writeMDFile(raw_ostream &Out
> Out << ")";
> }
>
> -static void writeMDCompileUnit(raw_ostream &, const MDCompileUnit *,
> - TypePrinting *, SlotTracker *, const
> Module *) {
> - llvm_unreachable("write not implemented");
> +static void writeMDCompileUnit(raw_ostream &Out, const MDCompileUnit *N,
> + TypePrinting *TypePrinter, SlotTracker
> *Machine,
> + const Module *Context) {
> + Out << "!MDCompileUnit(";
> + FieldSeparator FS;
> + Out << FS << "language: ";
> + if (const char *Lang = dwarf::LanguageString(N->getSourceLanguage()))
> + Out << Lang;
> + else
> + Out << N->getSourceLanguage();
> + if (N->getFile()) {
> + Out << FS << "file: ";
> + writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine,
> + Context);
> + }
> + if (!N->getProducer().empty())
> + Out << FS << "producer: \"" << N->getProducer() << "\"";
> + Out << FS << "isOptimized: " << (N->isOptimized() ? "true" : "false");
> + if (!N->getFlags().empty())
> + Out << FS << "flags: \"" << N->getFlags() << "\"";
> + Out << FS << "runtimeVersion: " << N->getRuntimeVersion();
> + if (!N->getSplitDebugFilename().empty())
> + Out << FS << "splitDebugFilename: \"" << N->getSplitDebugFilename()
> << "\"";
> + Out << FS << "emissionKind: " << N->getEmissionKind();
> + if (N->getEnumTypes()) {
> + Out << FS << "enums: ";
> + writeMetadataAsOperand(Out, N->getEnumTypes(), TypePrinter, Machine,
> + Context);
> + }
> + if (N->getRetainedTypes()) {
> + Out << FS << "retainedTypes: ";
> + writeMetadataAsOperand(Out, N->getRetainedTypes(), TypePrinter,
> Machine,
> + Context);
> + }
> + if (N->getSubprograms()) {
> + Out << FS << "subprograms: ";
> + writeMetadataAsOperand(Out, N->getSubprograms(), TypePrinter, Machine,
> + Context);
> + }
> + if (N->getGlobalVariables()) {
> + Out << FS << "globals: ";
> + writeMetadataAsOperand(Out, N->getGlobalVariables(), TypePrinter,
> Machine,
> + Context);
> + }
> + if (N->getImportedEntities()) {
> + Out << FS << "imports: ";
> + writeMetadataAsOperand(Out, N->getImportedEntities(), TypePrinter,
> Machine,
> + Context);
> + }
> + Out << ")";
> }
> +
> static void writeMDSubprogram(raw_ostream &, const MDSubprogram *,
> TypePrinting *, SlotTracker *, const Module
> *) {
> llvm_unreachable("write not implemented");
>
> Added: llvm/trunk/test/Assembler/invalid-mdcompileunit-language-bad.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/invalid-mdcompileunit-language-bad.ll?rev=229013&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Assembler/invalid-mdcompileunit-language-bad.ll (added)
> +++ llvm/trunk/test/Assembler/invalid-mdcompileunit-language-bad.ll Thu
> Feb 12 19:25:10 2015
> @@ -0,0 +1,5 @@
> +; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s
> +
> +; CHECK: <stdin>:[[@LINE+1]]:31: error: invalid DWARF language
> 'DW_LANG_NoSuchLanguage'
> +!0 = !MDCompileUnit(language: DW_LANG_NoSuchLanguage,
> + file: !MDFile(filename: "a", directory: "b"))
>
> Added: llvm/trunk/test/Assembler/invalid-mdcompileunit-language-overflow.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/invalid-mdcompileunit-language-overflow.ll?rev=229013&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Assembler/invalid-mdcompileunit-language-overflow.ll
> (added)
> +++ llvm/trunk/test/Assembler/invalid-mdcompileunit-language-overflow.ll
> Thu Feb 12 19:25:10 2015
> @@ -0,0 +1,9 @@
> +; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s
> +
> +; CHECK-NOT: error
> +!0 = !MDCompileUnit(language: 65535,
> + file: !MDFile(filename: "a", directory: "b"))
> +
> +; CHECK: <stdin>:[[@LINE+1]]:31: error: value for 'language' too large,
> limit is 65535
> +!1 = !MDCompileUnit(language: 65536,
> + file: !MDFile(filename: "a", directory: "b"))
>
> Added: llvm/trunk/test/Assembler/invalid-mdcompileunit-missing-language.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/invalid-mdcompileunit-missing-language.ll?rev=229013&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Assembler/invalid-mdcompileunit-missing-language.ll
> (added)
> +++ llvm/trunk/test/Assembler/invalid-mdcompileunit-missing-language.ll
> Thu Feb 12 19:25:10 2015
> @@ -0,0 +1,4 @@
> +; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s
> +
> +; CHECK: <stdin>:[[@LINE+1]]:65: error: missing required field 'language'
> +!0 = !MDCompileUnit(file: !MDFile(filename: "a", directory: "b"))
>
> Added: llvm/trunk/test/Assembler/mdcompileunit.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/mdcompileunit.ll?rev=229013&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Assembler/mdcompileunit.ll (added)
> +++ llvm/trunk/test/Assembler/mdcompileunit.ll Thu Feb 12 19:25:10 2015
> @@ -0,0 +1,31 @@
> +; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
> +; RUN: verify-uselistorder %s
> +
> +; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !7, !8, !8}
> +!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10}
> +
> +!0 = !{!"path/to/file", !"/path/to/dir"}
> +!1 = !MDFile(filename: "path/to/file", directory: "/path/to/dir")
> +!2 = distinct !{}
> +!3 = distinct !{}
> +!4 = distinct !{}
> +!5 = distinct !{}
> +!6 = distinct !{}
> +
> +; CHECK: !7 = !MDCompileUnit(language: DW_LANG_C99, file: !1, producer:
> "clang", isOptimized: true, flags: "-O2", runtimeVersion: 2,
> splitDebugFilename: "abc.debug", emissionKind: 3, enums: !2, retainedTypes:
> !3, subprograms: !4, globals: !5, imports: !6)
> +!7 = !MDCompileUnit(language: DW_LANG_C99, file: !1, producer: "clang",
> + isOptimized: true, flags: "-O2", runtimeVersion: 2,
> + splitDebugFilename: "abc.debug", emissionKind: 3,
> + enums: !2, retainedTypes: !3, subprograms: !4,
> + globals: !5, imports: !6)
> +!8 = !MDCompileUnit(language: 12, file: !1, producer: "clang",
> + isOptimized: true, flags: "-O2", runtimeVersion: 2,
> + splitDebugFilename: "abc.debug", emissionKind: 3,
> + enums: !2, retainedTypes: !3, subprograms: !4,
> + globals: !5, imports: !6)
> +
> +; CHECK: !8 = !MDCompileUnit(language: DW_LANG_C99, file: !1,
> isOptimized: false, runtimeVersion: 0, emissionKind: 0)
> +!9 = !MDCompileUnit(language: 12, file: !1, producer: "",
> + isOptimized: false, flags: "", runtimeVersion: 0,
> + splitDebugFilename: "", emissionKind: 0)
> +!10 = !MDCompileUnit(language: 12, file: !1)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150212/25ea1e24/attachment.html>
More information about the llvm-commits
mailing list