If we detect that the instruction we are simplifying is unreachable, arrange for
authorDuncan Sands <baldrick@free.fr>
Wed, 15 Dec 2010 11:02:22 +0000 (11:02 +0000)
committerDuncan Sands <baldrick@free.fr>
Wed, 15 Dec 2010 11:02:22 +0000 (11:02 +0000)
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

index 87125191ad0e77f429e177add08af6e2148b9ce6..75734e8770100c432ceaaff3cad3fdfa38cdcaad 100644 (file)
@@ -441,7 +441,7 @@ static Value *SimplifyXorInst(Value *Op0, Value *Op1, const TargetData *TD,
 
   // A ^ undef -> undef
   if (isa<UndefValue>(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