From f8b1a5ea9602bb65a5cf59d3d34f2851a08cdc3e Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Wed, 15 Dec 2010 11:02:22 +0000 Subject: [PATCH] If we detect that the instruction we are simplifying is unreachable, arrange for it to be replaced by undef rather than not replaced at all, the idea being that this may reduce the amount of work done by whoever called InstructionSimplify. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121860 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/InstructionSimplify.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Analysis/InstructionSimplify.cpp b/lib/Analysis/InstructionSimplify.cpp index 87125191ad0..75734e87701 100644 --- a/lib/Analysis/InstructionSimplify.cpp +++ b/lib/Analysis/InstructionSimplify.cpp @@ -441,7 +441,7 @@ static Value *SimplifyXorInst(Value *Op0, Value *Op1, const TargetData *TD, // A ^ undef -> undef if (isa(Op1)) - return UndefValue::get(Op0->getType()); + return Op1; // A ^ 0 = A if (match(Op1, m_Zero())) @@ -868,8 +868,8 @@ Value *llvm::SimplifyInstruction(Instruction *I, const TargetData *TD, /// If called on unreachable code, the above logic may report that the /// instruction simplified to itself. Make life easier for users by - /// detecting that case here, returning null if it occurs. - return Result == I ? 0 : Result; + /// detecting that case here, returning a safe value instead. + return Result == I ? UndefValue::get(I->getType()) : Result; } /// ReplaceAndSimplifyAllUses - Perform From->replaceAllUsesWith(To) and then