[llvm-commits] [llvm] r168525 - /llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp

Benjamin Kramer benny.kra at gmail.com
Sun Nov 25 11:57:07 PST 2012


On 25.11.2012, at 20:32, Evan Cheng <evan.cheng at apple.com> wrote:

> Should this be merged into 3.2?

It didn't manifest in a real crash so far but should be safe for 3.2. Who's the code owner for CodeGenPrepare? Chris?

- Ben

> 
> On Nov 23, 2012, at 11:17 AM, Benjamin Kramer <benny.kra at googlemail.com> wrote:
> 
>> Author: d0k
>> Date: Fri Nov 23 13:17:06 2012
>> New Revision: 168525
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=168525&view=rev
>> Log:
>> CodeGenPrepare: Move ret duplication out of the instruction iteration loop.
>> 
>> It can delete the block, and the loop continues on free'd memory.
>> No change in output. Found by valgrind.
>> 
>> Modified:
>>   llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp
>> 
>> Modified: llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp?rev=168525&r1=168524&r2=168525&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp Fri Nov 23 13:17:06 2012
>> @@ -125,7 +125,7 @@
>>    bool MoveExtToFormExtLoad(Instruction *I);
>>    bool OptimizeExtUses(Instruction *I);
>>    bool OptimizeSelectInst(SelectInst *SI);
>> -    bool DupRetToEnableTailCallOpts(ReturnInst *RI);
>> +    bool DupRetToEnableTailCallOpts(BasicBlock *BB);
>>    bool PlaceDbgValues(Function &F);
>>  };
>> }
>> @@ -689,10 +689,14 @@
>> ///   %tmp2 = tail call i32 @f2()
>> ///   ret i32 %tmp2
>> /// @endcode
>> -bool CodeGenPrepare::DupRetToEnableTailCallOpts(ReturnInst *RI) {
>> +bool CodeGenPrepare::DupRetToEnableTailCallOpts(BasicBlock *BB) {
>>  if (!TLI)
>>    return false;
>> 
>> +  ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator());
>> +  if (!RI)
>> +    return false;
>> +
>>  PHINode *PN = 0;
>>  BitCastInst *BCI = 0;
>>  Value *V = RI->getReturnValue();
>> @@ -706,7 +710,6 @@
>>      return false;
>>  }
>> 
>> -  BasicBlock *BB = RI->getParent();
>>  if (PN && PN->getParent() != BB)
>>    return false;
>> 
>> @@ -1319,9 +1322,6 @@
>>  if (CallInst *CI = dyn_cast<CallInst>(I))
>>    return OptimizeCallInst(CI);
>> 
>> -  if (ReturnInst *RI = dyn_cast<ReturnInst>(I))
>> -    return DupRetToEnableTailCallOpts(RI);
>> -
>>  if (SelectInst *SI = dyn_cast<SelectInst>(I))
>>    return OptimizeSelectInst(SI);
>> 
>> @@ -1339,6 +1339,8 @@
>>  while (CurInstIterator != BB.end())
>>    MadeChange |= OptimizeInst(CurInstIterator++);
>> 
>> +  MadeChange |= DupRetToEnableTailCallOpts(&BB);
>> +
>>  return MadeChange;
>> }
>> 
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 





More information about the llvm-commits mailing list