[llvm-commits] [llvm] r93339 - /llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp

Devang Patel devang.patel at gmail.com
Wed Jan 13 13:15:52 PST 2010


On Wed, Jan 13, 2010 at 1:07 PM, Victor Hernandez <vhernandez at apple.com> wrote:
>
> On Jan 13, 2010, at 1:05 PM, Devang Patel wrote:
>
>> On Wed, Jan 13, 2010 at 11:37 AM, Victor Hernandez <vhernandez at apple.com> wrote:
>>
>>>
>>> +static void WriteFunctionLocalMetadata(const ValueEnumerator &VE,
>>> +                                       BitstreamWriter &Stream) {
>>> +  bool StartedMetadataBlock = false;
>>> +  SmallVector<uint64_t, 64> Record;
>>> +  ValueEnumerator::ValueList Vals = VE.getMDValues();
>>> +  ValueEnumerator::ValueList::iterator it = Vals.begin();
>>> +  ValueEnumerator::ValueList::iterator end = Vals.end();
>>> +
>>> +  while (it != end) {
>>> +    if (const MDNode *N = dyn_cast<MDNode>((*it).first)) {
>>> +      if (N->isFunctionLocal()) {
>>> +        if (!StartedMetadataBlock) {
>>> +          Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
>>> +          StartedMetadataBlock = true;
>>> +        }
>>> +        WriteMDNode(N, VE, Stream, Record);
>>> +        // Remove function-local MD, since it is used outside of function.
>>
>> how ?
>
> Sorry that is a typo.  Meant to say "is not used".

but why remove from value list ?

>
>>
>>> +        it = Vals.erase(it);
>>> +        end = Vals.end();
>>> +        continue;
>>> +      }
>>> +    }
>>> +    ++it;
>>> +  }
>>> +
>>> +  if (StartedMetadataBlock)
>>> +    Stream.ExitBlock();
>>> +}
>>> +
>>>  static void WriteMetadataAttachment(const Function &F,
>>>                                     const ValueEnumerator &VE,
>>>                                     BitstreamWriter &Stream) {
>>> @@ -1210,6 +1241,7 @@
>>>   // Emit names for all the instructions etc.
>>>   WriteValueSymbolTable(F.getValueSymbolTable(), VE, Stream);
>>>
>>> +  WriteFunctionLocalMetadata(VE, Stream);
>>
>> This does not check function so will it write function local metadata
>> from one function into another function's block ?
>
> That check is done by the Verifier.  Do you think I need to do it here also?

Are you sure that incoming VE will not have function local metadata
for another function at this point?

>
>>
>>>   WriteMetadataAttachment(F, VE, Stream);
>>>   VE.purgeFunction();
>>>   Stream.ExitBlock();
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>
>>
>>
>> -
>> Devang
>
>



-- 
-
Devang




More information about the llvm-commits mailing list