[llvm-commits] [llvm] r94433 - in /llvm/trunk: include/llvm/Value.h lib/Transforms/Scalar/ScalarReplAggregates.cpp lib/VMCore/Value.cpp

Nick Lewycky nicholas at mxc.ca
Mon Jan 25 21:56:47 PST 2010


Bob Wilson wrote:
>
> On Jan 25, 2010, at 10:33 AM, Duncan Sands wrote:
>
>> Hi Bob,
>>
>>> Change Value::getUnderlyingObject to have the MaxLookup value specified as a
>>> parameter with a default value, instead of just hardcoding it in the
>>> implementation.  The limit of MaxLookup = 6 was introduced in r69151 to fix
>>> a performance problem with O(n^2) behavior in instcombine, but the scalarrepl
>>> pass is relying on getUnderlyingObject to go all the way back to an AllocaInst.
>>> Making the limit part of the method signature makes it clear that by default
>>> the result is limited and should help avoid similar problems in the future.
>>> This fixes pr6126.
>>
>> if sroa has to go back through a gazillion GEPS and bitcasts to get to the
>> alloca, maybe it should just give up instead?
>
> This is happening at a point where SROA has already decided to do the transformation.  It is just using getUnderlyingObject as a convenience.  Changing SROA to have a limit like that is possible, but it would involve more extensive changes.  We could also avoid using getUnderlyingObject by passing the alloca along as a parameter as the function recurses.  I'm not sure that's worth doing.

If that's a 1-minute change to make then please do it. It will save 
someone grief when trying to figure out why SROA is slow on their input 
testcase some day.

> Regardless, I think it is good to have the MaxLookup value exposed as part of the getUnderlyingObject interface.  The header file documentation did not even say anything about there being a limit.

Sure.

Nick



More information about the llvm-commits mailing list