[llvm] r229018 - AsmWriter/Bitcode: MDNamespace
David Blaikie
dblaikie at gmail.com
Thu Feb 12 18:39:15 PST 2015
On Thu, Feb 12, 2015 at 5:32 PM, Duncan P. N. Exon Smith <
dexonsmith at apple.com> wrote:
> Author: dexonsmith
> Date: Thu Feb 12 19:32:09 2015
> New Revision: 229018
>
> URL: http://llvm.org/viewvc/llvm-project?rev=229018&view=rev
> Log:
> AsmWriter/Bitcode: MDNamespace
>
> Added:
> llvm/trunk/test/Assembler/invalid-mdnamespace-missing-namespace.ll
> llvm/trunk/test/Assembler/mdnamespace.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=229018&r1=229017&r2=229018&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h (original)
> +++ llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h Thu Feb 12 19:32:09 2015
> @@ -158,7 +158,8 @@ namespace bitc {
> METADATA_COMPILE_UNIT = 20, // [distinct, ...]
> METADATA_SUBPROGRAM = 21, // [distinct, ...]
> METADATA_LEXICAL_BLOCK = 22, // [distinct, scope, file, line, column]
> - METADATA_LEXICAL_BLOCK_FILE=23// [distinct, scope, file,
> discriminator]
> + METADATA_LEXICAL_BLOCK_FILE=23,//[distinct, scope, file,
> discriminator]
> + METADATA_NAMESPACE = 24 // [distinct, scope, file, name, line]
>
Did you want to indicate field optionality with '?' in these lists (looks
like file, name, and line are all optional for namespaces)
> };
>
> // 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=229018&r1=229017&r2=229018&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/DebugInfoMetadata.h (original)
> +++ llvm/trunk/include/llvm/IR/DebugInfoMetadata.h Thu Feb 12 19:32:09 2015
> @@ -1104,6 +1104,8 @@ public:
> Metadata *getScope() const { return getOperand(1); }
> StringRef getName() const { return getStringOperand(2); }
>
> + MDString *getRawName() const { return getOperandAs<MDString>(2); }
> +
> static bool classof(const Metadata *MD) {
> return MD->getMetadataID() == MDNamespaceKind;
> }
>
> Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=229018&r1=229017&r2=229018&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
> +++ llvm/trunk/lib/AsmParser/LLParser.cpp Thu Feb 12 19:32:09 2015
> @@ -3497,9 +3497,22 @@ bool LLParser::ParseMDLexicalBlockFile(M
> return false;
> }
>
> +/// ParseMDNamespace:
> +/// ::= !MDNamespace(scope: !0, file: !2, name: "SomeNamespace", line:
> 9)
> bool LLParser::ParseMDNamespace(MDNode *&Result, bool IsDistinct) {
> - return TokError("unimplemented parser");
> +#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED)
> \
> + REQUIRED(scope, MDField, );
> \
> + OPTIONAL(file, MDField, );
> \
> + OPTIONAL(name, MDStringField, );
> \
> + OPTIONAL(line, LineField, );
> + PARSE_MD_FIELDS();
> +#undef VISIT_MD_FIELDS
> +
> + Result = GET_OR_DISTINCT(MDNamespace,
> + (Context, scope.Val, file.Val, name.Val,
> line.Val));
> + return false;
> }
> +
> bool LLParser::ParseMDTemplateTypeParameter(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=229018&r1=229017&r2=229018&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
> +++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Thu Feb 12 19:32:09
> 2015
> @@ -1490,6 +1490,18 @@ std::error_code BitcodeReader::ParseMeta
> NextMDValueNo++);
> break;
> }
> + case bitc::METADATA_NAMESPACE: {
> + if (Record.size() != 5)
> + return Error("Invalid record");
> +
> + MDValueList.AssignValue(
> + GET_OR_DISTINCT(MDNamespace, Record[0],
> + (Context, getMDOrNull(Record[1]),
> + getMDOrNull(Record[2]), getMDString(Record[3]),
> + Record[4])),
> + 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=229018&r1=229017&r2=229018&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
> +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Thu Feb 12 19:32:09
> 2015
> @@ -1007,11 +1007,20 @@ static void WriteMDLexicalBlockFile(cons
> Record.clear();
> }
>
> -static void WriteMDNamespace(const MDNamespace *, const ValueEnumerator &,
> - BitstreamWriter &, SmallVectorImpl<uint64_t>
> &,
> - unsigned) {
> - llvm_unreachable("write not implemented");
> +static void WriteMDNamespace(const MDNamespace *N, const ValueEnumerator
> &VE,
> + BitstreamWriter &Stream,
> + SmallVectorImpl<uint64_t> &Record,
> + unsigned Abbrev) {
> + Record.push_back(N->isDistinct());
> + Record.push_back(VE.getMetadataOrNullID(N->getScope()));
> + Record.push_back(VE.getMetadataOrNullID(N->getFile()));
> + Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
> + Record.push_back(N->getLine());
> +
> + Stream.EmitRecord(bitc::METADATA_NAMESPACE, Record, Abbrev);
> + Record.clear();
> }
> +
> static void WriteMDTemplateTypeParameter(const MDTemplateTypeParameter *,
> const ValueEnumerator &,
> BitstreamWriter &,
>
> Modified: llvm/trunk/lib/IR/AsmWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AsmWriter.cpp?rev=229018&r1=229017&r2=229018&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/AsmWriter.cpp (original)
> +++ llvm/trunk/lib/IR/AsmWriter.cpp Thu Feb 12 19:32:09 2015
> @@ -1660,10 +1660,24 @@ static void writeMDLexicalBlockFile(raw_
> Out << ")";
> }
>
> -static void writeMDNamespace(raw_ostream &, const MDNamespace *,
> TypePrinting *,
> - SlotTracker *, const Module *) {
> - llvm_unreachable("write not implemented");
> +static void writeMDNamespace(raw_ostream &Out, const MDNamespace *N,
> + TypePrinting *TypePrinter, SlotTracker
> *Machine,
> + const Module *Context) {
> + Out << "!MDNamespace(";
> + FieldSeparator FS;
> + Out << FS << "scope: ";
> + writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine,
> Context);
> + if (N->getFile()) {
> + Out << FS << "file: ";
> + writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine,
> Context);
> + }
> + if (!N->getName().empty())
> + Out << FS << "name: \"" << N->getName() << "\"";
> + if (N->getLine())
> + Out << FS << "line: " << N->getLine();
> + Out << ")";
> }
> +
> static void writeMDTemplateTypeParameter(raw_ostream &,
> const MDTemplateTypeParameter *,
> TypePrinting *, SlotTracker *,
>
> Added: llvm/trunk/test/Assembler/invalid-mdnamespace-missing-namespace.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/invalid-mdnamespace-missing-namespace.ll?rev=229018&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Assembler/invalid-mdnamespace-missing-namespace.ll
> (added)
> +++ llvm/trunk/test/Assembler/invalid-mdnamespace-missing-namespace.ll Thu
> Feb 12 19:32:09 2015
> @@ -0,0 +1,4 @@
> +; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s
> +
> +; CHECK: [[@LINE+1]]:36: error: missing required field 'scope'
> +!0 = !MDNamespace(name: "Namespace")
>
> Added: llvm/trunk/test/Assembler/mdnamespace.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/mdnamespace.ll?rev=229018&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Assembler/mdnamespace.ll (added)
> +++ llvm/trunk/test/Assembler/mdnamespace.ll Thu Feb 12 19:32:09 2015
> @@ -0,0 +1,16 @@
> +; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
> +; RUN: verify-uselistorder %s
> +
> +; CHECK: !named = !{!0, !1, !2, !3, !4, !4}
> +!named = !{!0, !1, !2, !3, !4, !5}
> +
> +!0 = distinct !{}
> +!1 = !{!"path/to/file", !"/path/to/dir"}
> +!2 = !MDFile(filename: "path/to/file", directory: "/path/to/dir")
> +
> +; CHECK: !3 = !MDNamespace(scope: !0, file: !2, name: "Namespace", line:
> 7)
> +!3 = !MDNamespace(scope: !0, file: !2, name: "Namespace", line: 7)
> +
> +; CHECK: !4 = !MDNamespace(scope: !0)
> +!4 = !MDNamespace(scope: !0, file: null, name: "", line: 0)
> +!5 = !MDNamespace(scope: !0)
>
>
> _______________________________________________
> 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/a055dec9/attachment.html>
More information about the llvm-commits
mailing list