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

Devang Patel dpatel at apple.com
Tue Oct 13 15:23:26 PDT 2009


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.
-
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