diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Scalar/InstructionCombining.cpp | 26 |
1 files changed, 3 insertions, 23 deletions
diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp index 80ae224f5d9..dad78ac81c6 100644 --- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp @@ -1906,29 +1906,9 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) { // PHINode simplification // Instruction *InstCombiner::visitPHINode(PHINode &PN) { - // If the PHI node only has one incoming value, eliminate the PHI node... - if (PN.getNumIncomingValues() == 1) - return ReplaceInstUsesWith(PN, PN.getIncomingValue(0)); - - // Otherwise if all of the incoming values are the same for the PHI, replace - // the PHI node with the incoming value. - // - Value *InVal = 0; - for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) - if (PN.getIncomingValue(i) != &PN) // Not the PHI node itself... - if (InVal && PN.getIncomingValue(i) != InVal) - return 0; // Not the same, bail out. - else - InVal = PN.getIncomingValue(i); - - // The only case that could cause InVal to be null is if we have a PHI node - // that only has entries for itself. In this case, there is no entry into the - // loop, so kill the PHI. - // - if (InVal == 0) InVal = Constant::getNullValue(PN.getType()); - - // All of the incoming values are the same, replace the PHI node now. - return ReplaceInstUsesWith(PN, InVal); + if (Value *V = hasConstantValue(&PN)) + return ReplaceInstUsesWith(PN, V); + return 0; } |