[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