[llvm-commits] [llvm] r93338 - in /llvm/trunk/lib/Bitcode/Writer: ValueEnumerator.cpp ValueEnumerator.h
Devang Patel
devang.patel at gmail.com
Thu Jan 14 12:57:17 PST 2010
On Thu, Jan 14, 2010 at 11:54 AM, Victor Hernandez <vhernandez at apple.com> wrote:
>
> On Jan 13, 2010, at 2:01 PM, Devang Patel wrote:
>
>> On Wed, Jan 13, 2010 at 1:23 PM, Victor Hernandez <vhernandez at apple.com> wrote:
>>>
>>> On Jan 13, 2010, at 1:00 PM, Devang Patel wrote:
>>>
>>>> On Wed, Jan 13, 2010 at 11:36 AM, Victor Hernandez <vhernandez at apple.com> wrote:
>>>>
>>>>> -void ValueEnumerator::EnumerateMetadata(const MetadataBase *MD) {
>>>>> +void ValueEnumerator::EnumerateMetadata(const MetadataBase *MD, bool isGlobal) {
>>>>> // Check to see if it's already in!
>>>>> unsigned &MDValueID = MDValueMap[MD];
>>>>> if (MDValueID) {
>>>>> @@ -237,14 +237,18 @@
>>>>> EnumerateType(MD->getType());
>>>>>
>>>>> if (const MDNode *N = dyn_cast<MDNode>(MD)) {
>>>>> - MDValues.push_back(std::make_pair(MD, 1U));
>>>>> - MDValueMap[MD] = MDValues.size();
>>>>> - MDValueID = MDValues.size();
>>>>> - for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
>>>>> - if (Value *V = N->getOperand(i))
>>>>> - EnumerateValue(V);
>>>>> - else
>>>>> - EnumerateType(Type::getVoidTy(MD->getContext()));
>>>>> + if ((isGlobal && !N->isFunctionLocal()) ||
>>>>> + (!isGlobal && N->isFunctionLocal())) {
>>>>
>>>> What are the cases where isGlobal does not match N->isFunctionLocal() ?
>>>
>>> Prehaps isGlobal is not the best name, it means not-during-function-incorporation. I think I should improve that variable name.
>>>
>>> The case I have encountered is:
>>> 1. During ValueEnumerator creation (isGlobal = true), all metadata is iterated over, including those inside of functions, and the isFunctionLocal() metadata needs to be ignored until lazy function incorporation is done.
>>>
>>> The other case should be when incorporateFunction (isGlobal = false) comes across a non-function-local metadata. But in that case the lookup of it in MDValueMap should have succeeded and we will not reach here.
>>>
>>
>> This looks like a very complex approach! I do not like adding extra
>> parameter to EnumerateOperandType() just for this purpose. Is there a
>> alternative ?
>>
>>
>> What if you
>> - ignore function local metadata while processing function args in
>> ValueEnumerator construction
>> - ignore non function local metadata while processing function args
>> in ValueEnumerator::incorporateFunction()
>> ?
>>
>> This way you do not need to modify any interface.
>>
>> ?
>
> Fixed in r93446.
>
Thanks!
--
-
Devang
More information about the llvm-commits
mailing list