From: Chris Lattner Date: Mon, 2 Apr 2007 05:41:38 +0000 (+0000) Subject: Treat xor of signbit like an add. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=2811f2a67069be9a1fab05c1fe152098bd8b5028;p=oota-llvm.git Treat xor of signbit like an add. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35586 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index 051631e80d1..3597b3551c9 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -1427,7 +1427,16 @@ SCEVHandle ScalarEvolutionsImpl::createSCEV(Value *V) { } } break; - + case Instruction::Xor: + // If the RHS of the xor is a signbit, then this is just an add. + // Instcombine turns add of signbit into xor as a strength reduction step. + if (ConstantInt *CI = dyn_cast(I->getOperand(1))) { + if (CI->getValue().isSignBit()) + return SCEVAddExpr::get(getSCEV(I->getOperand(0)), + getSCEV(I->getOperand(1))); + } + break; + case Instruction::Shl: // Turn shift left of a constant amount into a multiply. if (ConstantInt *SA = dyn_cast(I->getOperand(1))) {