[llvm-commits] [llvm] r85692 - /llvm/trunk/lib/Transforms/Scalar/GVN.cpp

Owen Anderson resistor at mac.com
Sun Nov 1 01:18:48 PST 2009


Erm, nevermind.  I had it backwards in my head.  Sorry for the noise!

--Owen

On Oct 31, 2009, at 11:35 PM, Owen Anderson wrote:

> Chris,
>
> On Oct 31, 2009, at 3:11 PM, Chris Lattner wrote:
>
>> Author: lattner
>> Date: Sat Oct 31 17:11:15 2009
>> New Revision: 85692
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=85692&view=rev
>> Log:
>> Make sure PRE doesn't split crit edges from indirectbr.
>>
>> Modified:
>>    llvm/trunk/lib/Transforms/Scalar/GVN.cpp
>>
>> Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=85692&r1=85691&r2=85692&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Sat Oct 31 17:11:15 2009
>> @@ -1810,7 +1810,7 @@
>>
>> /// performPRE - Perform a purely local form of PRE that looks for  
>> diamond
>> /// control flow patterns and attempts to perform simple PRE at the  
>> join point.
>> -bool GVN::performPRE(Function& F) {
>> +bool GVN::performPRE(Function &F) {
>>   bool Changed = false;
>>   SmallVector<std::pair<TerminatorInst*, unsigned>, 4> toSplit;
>>   DenseMap<BasicBlock*, Value*> predMap;
>> @@ -1875,6 +1875,10 @@
>>       // we would need to insert instructions in more than one pred.
>>       if (NumWithout != 1 || NumWith == 0)
>>         continue;
>> +
>> +      // Don't do PRE across indirect branch.
>> +      if (isa<IndirectBrInst>(PREPred->getTerminator()))
>> +        continue;
>>
>>       // We can't do PRE safely on a critical edge, so instead we  
>> schedule
>>       // the edge to be split and perform the PRE the next time we  
>> iterate
>>
>
> This isn't correct.  PREPred is the block in which the expression is  
> already computed, so it never needs to split that edge.  What you  
> need to check is that none of the other predecessors is via an  
> indirect branch, as PRE would possibly need to split those edges to  
> insert instructions.
>
> --Owen
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20091101/bb557198/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2620 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20091101/bb557198/attachment.bin>


More information about the llvm-commits mailing list