[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