[llvm] r264869 - [ThinLTO] Serialize the Module SourceFileName to/from LLVM assembly

Teresa Johnson via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 6 12:46:36 PDT 2016


On Wed, Apr 6, 2016 at 11:23 AM, David Majnemer <david.majnemer at gmail.com>
wrote:

> Changes to the textual IR require updating the language reference located
> in docs/LangRef.rst; I started seeing this in my IR and had very little
> idea as to why.
>

Will update. I guess it would be a new bullet under High Level Structure?

>
> Also, couldn't this just be module-level metadata?
>

It could, although it then requires the module-level metadata block to be
parsed when creating the combined index. That step normally doesn't parse
anything much beyond the value symbol table and summary sections and a few
module-level records like this one. Since that is the big serial step (scan
all bitcode files that are being "linked"), I'm concerned about the
overhead of parsing all the metadata records looking for this one.

Thanks,
Teresa


> On Wed, Mar 30, 2016 at 7:00 AM, Teresa Johnson via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: tejohnson
>> Date: Wed Mar 30 09:00:02 2016
>> New Revision: 264869
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=264869&view=rev
>> Log:
>> [ThinLTO] Serialize the Module SourceFileName to/from LLVM assembly
>>
>> Summary:
>> This change serializes out and in the SourceFileName to LLVM assembly
>> so that it is preserved through "llvm-dis | llvm-as". This is
>> necessary to ensure that the global identifiers created for local values
>> in the module summary index are the same even if the bitcode is
>> streamed out and read back from LLVM assembly.
>>
>> Serializing the summary itself to LLVM assembly is in progress.
>>
>> Reviewers: joker.eph
>>
>> Subscribers: llvm-commits, joker.eph
>>
>> Differential Revision: http://reviews.llvm.org/D18588
>>
>> Added:
>>     llvm/trunk/test/Assembler/source-filename.ll
>> Modified:
>>     llvm/trunk/lib/AsmParser/LLLexer.cpp
>>     llvm/trunk/lib/AsmParser/LLParser.cpp
>>     llvm/trunk/lib/AsmParser/LLParser.h
>>     llvm/trunk/lib/AsmParser/LLToken.h
>>     llvm/trunk/lib/IR/AsmWriter.cpp
>>
>> Modified: llvm/trunk/lib/AsmParser/LLLexer.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLLexer.cpp?rev=264869&r1=264868&r2=264869&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/AsmParser/LLLexer.cpp (original)
>> +++ llvm/trunk/lib/AsmParser/LLLexer.cpp Wed Mar 30 09:00:02 2016
>> @@ -533,6 +533,7 @@ lltok::Kind LLLexer::LexIdentifier() {
>>    KEYWORD(notail);
>>    KEYWORD(target);
>>    KEYWORD(triple);
>> +  KEYWORD(source_filename);
>>    KEYWORD(unwind);
>>    KEYWORD(deplibs);             // FIXME: Remove in 4.0.
>>    KEYWORD(datalayout);
>>
>> Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=264869&r1=264868&r2=264869&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
>> +++ llvm/trunk/lib/AsmParser/LLParser.cpp Wed Mar 30 09:00:02 2016
>> @@ -239,6 +239,10 @@ bool LLParser::ParseTopLevelEntities() {
>>      case lltok::kw_define:  if (ParseDefine()) return true; break;
>>      case lltok::kw_module:  if (ParseModuleAsm()) return true; break;
>>      case lltok::kw_target:  if (ParseTargetDefinition()) return true;
>> break;
>> +    case lltok::kw_source_filename:
>> +      if (ParseSourceFileName())
>> +        return true;
>> +      break;
>>      case lltok::kw_deplibs: if (ParseDepLibs()) return true; break;
>>      case lltok::LocalVarID: if (ParseUnnamedType()) return true; break;
>>      case lltok::LocalVar:   if (ParseNamedType()) return true; break;
>> @@ -336,6 +340,19 @@ bool LLParser::ParseTargetDefinition() {
>>  }
>>
>>  /// toplevelentity
>> +///   ::= 'source_filename' '=' STRINGCONSTANT
>> +bool LLParser::ParseSourceFileName() {
>> +  assert(Lex.getKind() == lltok::kw_source_filename);
>> +  std::string Str;
>> +  Lex.Lex();
>> +  if (ParseToken(lltok::equal, "expected '=' after source_filename") ||
>> +      ParseStringConstant(Str))
>> +    return true;
>> +  M->setSourceFileName(Str);
>> +  return false;
>> +}
>> +
>> +/// toplevelentity
>>  ///   ::= 'deplibs' '=' '[' ']'
>>  ///   ::= 'deplibs' '=' '[' STRINGCONSTANT (',' STRINGCONSTANT)* ']'
>>  /// FIXME: Remove in 4.0. Currently parse, but ignore.
>>
>> Modified: llvm/trunk/lib/AsmParser/LLParser.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.h?rev=264869&r1=264868&r2=264869&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/AsmParser/LLParser.h (original)
>> +++ llvm/trunk/lib/AsmParser/LLParser.h Wed Mar 30 09:00:02 2016
>> @@ -261,6 +261,7 @@ namespace llvm {
>>      bool ValidateEndOfModule();
>>      bool ParseTargetDefinition();
>>      bool ParseModuleAsm();
>> +    bool ParseSourceFileName();
>>      bool ParseDepLibs();        // FIXME: Remove in 4.0.
>>      bool ParseUnnamedType();
>>      bool ParseNamedType();
>>
>> Modified: llvm/trunk/lib/AsmParser/LLToken.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLToken.h?rev=264869&r1=264868&r2=264869&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/AsmParser/LLToken.h (original)
>> +++ llvm/trunk/lib/AsmParser/LLToken.h Wed Mar 30 09:00:02 2016
>> @@ -59,6 +59,7 @@ namespace lltok {
>>      kw_notail,
>>      kw_target,
>>      kw_triple,
>> +    kw_source_filename,
>>      kw_unwind,
>>      kw_deplibs,                 // FIXME: Remove in 4.0
>>      kw_datalayout,
>>
>> Modified: llvm/trunk/lib/IR/AsmWriter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AsmWriter.cpp?rev=264869&r1=264868&r2=264869&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/IR/AsmWriter.cpp (original)
>> +++ llvm/trunk/lib/IR/AsmWriter.cpp Wed Mar 30 09:00:02 2016
>> @@ -2215,6 +2215,9 @@ void AssemblyWriter::printModule(const M
>>        M->getModuleIdentifier().find('\n') == std::string::npos)
>>      Out << "; ModuleID = '" << M->getModuleIdentifier() << "'\n";
>>
>> +  if (!M->getSourceFileName().empty())
>> +    Out << "source_filename = \"" << M->getSourceFileName() << "\"\n";
>> +
>>    const std::string &DL = M->getDataLayoutStr();
>>    if (!DL.empty())
>>      Out << "target datalayout = \"" << DL << "\"\n";
>>
>> Added: llvm/trunk/test/Assembler/source-filename.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/source-filename.ll?rev=264869&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/test/Assembler/source-filename.ll (added)
>> +++ llvm/trunk/test/Assembler/source-filename.ll Wed Mar 30 09:00:02 2016
>> @@ -0,0 +1,8 @@
>> +
>> +; Make sure that llvm-as/llvm-dis properly assemble/disassemble the
>> +; source_filename.
>> +
>> +; RUN: llvm-as < %s | llvm-dis | FileCheck %s
>> +
>> +; CHECK: source_filename = "test.cc"
>> +source_filename = "test.cc"
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>


-- 
Teresa Johnson |  Software Engineer |  tejohnson at google.com |  408-460-2413
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160406/2acfbda4/attachment.html>


More information about the llvm-commits mailing list