[llvm-commits] [llvm] r84033 - in /llvm/trunk/lib/Transforms/Scalar: InstructionCombining.cpp LICM.cpp LoopUnswitch.cpp

Chris Lattner clattner at apple.com
Tue Oct 13 15:33:02 PDT 2009


On Oct 13, 2009, at 3:23 PM, Devang Patel wrote:

>
> On Oct 13, 2009, at 2:50 PM, Chris Lattner wrote:
>
>>
>> On Oct 13, 2009, at 2:41 PM, Devang Patel wrote:
>>
>>> Author: dpatel
>>> Date: Tue Oct 13 16:41:20 2009
>>> New Revision: 84033
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=84033&view=rev
>>> Log:
>>> Do not check use_empty() before replaceAllUsesWith(). This gives  
>>> ValueHandles a chance to get properly updated.
>>
>> Ok, but two requests:
>>
>> 1. please add a comment that this is updating the uses and the  
>> metadata.
>
> This is not metadata specific. use_empty() by passes ValueIsRAUWd  
> call back for VHs.
>
> 309   // Notify all ValueHandles (if present) that this value is  
> going away.
> 310   if (HasValueHandle)
> 311     ValueHandleBase::ValueIsRAUWd(this, New);
>
> It is somewhat redundant if the value is deleted eventually, but  
> that is not the case many times.

I don't understand what you mean.

-Chris

> -
> Devang
>
>> 2. The code may need to check to see that the call doesn't return  
>> void.  UndefValue::get(void) is not valid.
>>
>> -Chris
>>
>>>
>>>
>>> Modified:
>>>  llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
>>>  llvm/trunk/lib/Transforms/Scalar/LICM.cpp
>>>  llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp
>>>
>>> Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=84033&r1=84032&r2=84033&view=diff
>>>
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp  
>>> (original)
>>> +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Tue  
>>> Oct 13 16:41:20 2009
>>> @@ -9979,8 +9979,7 @@
>>>     new StoreInst(ConstantInt::getTrue(*Context),
>>>               UndefValue::get(Type::getInt1PtrTy(*Context)),
>>>                                 OldCall);
>>> -      if (!OldCall->use_empty())
>>> -        OldCall->replaceAllUsesWith(UndefValue::get(OldCall- 
>>> >getType()));
>>> +      OldCall->replaceAllUsesWith(UndefValue::get(OldCall- 
>>> >getType()));
>>>     if (isa<CallInst>(OldCall))   // Not worth removing an invoke  
>>> here.
>>>       return EraseInstFromFunction(*OldCall);
>>>     return 0;
>>> @@ -9994,9 +9993,8 @@
>>>              UndefValue::get(Type::getInt1PtrTy(*Context)),
>>>                 CS.getInstruction());
>>>
>>> -    if (!CS.getInstruction()->use_empty())
>>> -      CS.getInstruction()->
>>> -        replaceAllUsesWith(UndefValue::get(CS.getInstruction()- 
>>> >getType()));
>>> +    CS.getInstruction()->
>>> +      replaceAllUsesWith(UndefValue::get(CS.getInstruction()- 
>>> >getType()));
>>>
>>>   if (InvokeInst *II = dyn_cast<InvokeInst>(CS.getInstruction())) {
>>>     // Don't break the CFG, insert a dummy cond branch.
>>> @@ -10251,7 +10249,7 @@
>>>   }
>>> }
>>>
>>> -
>>> +
>>> if (!Caller->use_empty())
>>>   Caller->replaceAllUsesWith(NV);
>>>
>>> @@ -10398,7 +10396,7 @@
>>>         setCallingConv(cast<CallInst>(Caller)->getCallingConv());
>>>       cast<CallInst>(NewCaller)->setAttributes(NewPAL);
>>>     }
>>> -      if (Caller->getType() != Type::getVoidTy(*Context) && ! 
>>> Caller->use_empty())
>>> +      if (Caller->getType() != Type::getVoidTy(*Context))
>>>       Caller->replaceAllUsesWith(NewCaller);
>>>     Caller->eraseFromParent();
>>>     Worklist.Remove(Caller);
>>> @@ -12781,8 +12779,7 @@
>>>           ++NumDeadInst;
>>>           MadeIRChange = true;
>>>         }
>>> -          if (!I->use_empty())
>>> -            I->replaceAllUsesWith(UndefValue::get(I->getType()));
>>> +          I->replaceAllUsesWith(UndefValue::get(I->getType()));
>>>         I->eraseFromParent();
>>>       }
>>>     }
>>>
>>> Modified: llvm/trunk/lib/Transforms/Scalar/LICM.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LICM.cpp?rev=84033&r1=84032&r2=84033&view=diff
>>>
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Transforms/Scalar/LICM.cpp (original)
>>> +++ llvm/trunk/lib/Transforms/Scalar/LICM.cpp Tue Oct 13 16:41:20  
>>> 2009
>>> @@ -486,8 +486,8 @@
>>>   if (!isExitBlockDominatedByBlockInLoop(ExitBlocks[0],  
>>> I.getParent())) {
>>>     // Instruction is not used, just delete it.
>>>     CurAST->deleteValue(&I);
>>> -      if (!I.use_empty())  // If I has users in unreachable  
>>> blocks, eliminate.
>>> -        I.replaceAllUsesWith(UndefValue::get(I.getType()));
>>> +      // If I has users in unreachable blocks, eliminate.
>>> +      I.replaceAllUsesWith(UndefValue::get(I.getType()));
>>>     I.eraseFromParent();
>>>   } else {
>>>     // Move the instruction to the start of the exit block, after  
>>> any PHI
>>> @@ -499,8 +499,8 @@
>>> } else if (ExitBlocks.empty()) {
>>>   // The instruction is actually dead if there ARE NO exit blocks.
>>>   CurAST->deleteValue(&I);
>>> -    if (!I.use_empty())  // If I has users in unreachable blocks,  
>>> eliminate.
>>> -      I.replaceAllUsesWith(UndefValue::get(I.getType()));
>>> +    // If I has users in unreachable blocks, eliminate.
>>> +    I.replaceAllUsesWith(UndefValue::get(I.getType()));
>>>   I.eraseFromParent();
>>> } else {
>>>   // Otherwise, if we have multiple exits, use the PromoteMem2Reg  
>>> function to
>>>
>>> Modified: llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp?rev=84033&r1=84032&r2=84033&view=diff
>>>
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> ====================================================================
>>> --- llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp (original)
>>> +++ llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp Tue Oct 13  
>>> 16:41:20 2009
>>> @@ -781,8 +781,7 @@
>>>
>>>   // Anything that uses the instructions in this basic block  
>>> should have their
>>>   // uses replaced with undefs.
>>> -    if (!I->use_empty())
>>> -      I->replaceAllUsesWith(UndefValue::get(I->getType()));
>>> +    I->replaceAllUsesWith(UndefValue::get(I->getType()));
>>> }
>>>
>>> // If this is the edge to the header block for a loop, remove the  
>>> loop and
>>>
>>>
>>> _______________________________________________
>>> 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