[llvm-commits] embedded metadata preview

Nick Lewycky nicholas at mxc.ca
Wed Mar 25 20:12:08 PDT 2009


Ping!

Chris, you asked to review this before I committed it, since it is a 
large blob of new code. I know you're busy, but I'd appreciate being 
able to get it out of my tree :)

See attachment here:
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20090316/075433.html
no need to fill everyone's inboxes with it again.

Nick

Nick Lewycky wrote:
> Dan Gohman wrote:
>> On Mar 16, 2009, at 10:29 PM, Nick Lewycky wrote:
>>
>>> Dan Gohman wrote:
>>>> Hi Nick,
>>>>
>>>> Here are a few review comments.
>>>>
>>>>> Index: lib/Bitcode/Writer/BitcodeWriter.cpp
>>>>> ===================================================================
>>>>> --- lib/Bitcode/Writer/BitcodeWriter.cpp        (revision 66999)
>>>>> +++ lib/Bitcode/Writer/BitcodeWriter.cpp        (working copy)
>>>>> @@ -677,6 +677,17 @@
>>>>>         Record.push_back(CE->getPredicate());
>>>>>         break;
>>>>>       }
>>>>> +    } else if (const MDString *S = dyn_cast<MDString>(C)) {
>>>>> +      Code = bitc::CST_CODE_MDSTRING;
>>>>> +      Record.push_back(S->length());
>>>>> +      for (unsigned i = 0, e = S->length(); i != e; ++i)
>>>>> +        Record.push_back(S->begin()[i]);
>>>> It seems pretty inefficient to put each char in a uint64_t.
>>>> Forgive me for prematurely optimizing :-).
>>> No that's fine, I just copied this out of the handling for strings in
>>> inline-asm under the assumption that it must be fine.
>>>
>>> I tried adding "AbbrevToUse = String8Abbrev;" here but that causes a
>>> crash ("Invalid abbrev for record"). I'm not really familiar with this
>>> code, do you know how it's supposed to work? (If not I'm sure I can
>>> figure it out...)
>>
>> I'm not familiar with this code either.
>>
>>>>> Index: docs/LangRef.html
>>>>> ===================================================================
>>>>> --- docs/LangRef.html   (revision 66999)
>>>>> +++ docs/LangRef.html   (working copy)
>>>>> @@ -1847,6 +1848,14 @@
>>>>>   large arrays) and is always exactly equivalent to using explicit
>>>> zero
>>>>>   initializers.
>>>>>   </dd>
>>>>> +
>>>>> +  <dt><b>Metadata node</b></dt>
>>>>> +
>>>>> +  <dd>A metadata node is a structure-like constant with the type
>>>> of an empty
>>>>> +  struct.  For example: "<tt>{ } !{ i32 0, { } !"test" }</tt>".
>>>> Unlike other
>>>>> +  constants that are meant to be interpreted as part of the
>>>> instruction stream,
>>>>> +  metadata is a place to attach additional information such as
>>>> debug info.
>>>>
>>>> It would be helpful to mention that this is also expected to be  
>>>> used for
>>>> encoding information that will be used by optimizations.
>>> I'm actually thinking of removing any mention of them here and only
>>> talking about them under the "Embedded Metadata" section. Thoughts?
>>>
>>> I added this as the last paragraph in that section:
>>>   "Optimizations may rely on metadata to provide additional  information
>>> about the program that isn't available in the instructions, or that
>>> isn't easily computable. Similarly, the code generator may expect a
>>> certain metadata format to be used to express debugging information."
>>>
>>> Close enough? :)
>>
>> Sounds reasonable.
>>
>>>> Why do MDString and MDNode inherit from Constant instead of, say,
>>>> User? I
>>>> see that ConstantLastVal is moved to include MDStringVal and  
>>>> MDNodeVal,
>>>> presumably for the same reason.
>>> I tried that initially, where MDNode was a User and MDString was a
>>> Value. In practise, they seem to have semantics much closer to that of
>>> Constants; they're uniqued / pointer comparable and they're global.  The
>>> point where it really made a difference was in the .ll parser,  
>>> switching
>>> them over to being Constant made the parser changes much simpler.
>>
>> The parser parts are not present in the patch.  That may be a reason
>> why it wasn't clear why Constant is used.
> 
> That was accidental. They don't turn up in 'svn diff' unless I 
> explicitly ask for 'svn diff lib/AsmParser'.
> 
> Here, I've attached a newer version of the patch which ought to include 
> everything.
> 
> Thanks for the review!
> 
> Nick
> 
>> Thanks,
>>
>> Dan




More information about the llvm-commits mailing list