[llvm-commits] [llvm] r93338 - in /llvm/trunk/lib/Bitcode/Writer: ValueEnumerator.cpp ValueEnumerator.h

Devang Patel devang.patel at gmail.com
Wed Jan 13 14:01:30 PST 2010


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.

?
-
Devang




More information about the llvm-commits mailing list