diff options
author | Justin Lebar <jlebar@google.com> | 2018-03-07 16:05:43 +0000 |
---|---|---|
committer | Justin Lebar <jlebar@google.com> | 2018-03-07 16:05:43 +0000 |
commit | eeeb0eb049dc34a3c2391d1e67343828c7aec5d5 (patch) | |
tree | 30794361e485784ee778e6a1d40c5cfb1716c5ad /llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp | |
parent | cb4c19f3157b02e6d0169949626767f9051c76b6 (diff) | |
download | bcm5719-llvm-eeeb0eb049dc34a3c2391d1e67343828c7aec5d5.tar.gz bcm5719-llvm-eeeb0eb049dc34a3c2391d1e67343828c7aec5d5.zip |
Revert rL326898: "Teach CorrelatedValuePropagation to reduce the width of udiv/urem instructions."
Breaks bootstrap builds: clang built with this patch asserts while
building MCDwarf.cpp: Assertion `castIsValid(op, S, Ty) && "Invalid
cast!"' failed.
llvm-svn: 326900
Diffstat (limited to 'llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp | 52 |
1 files changed, 0 insertions, 52 deletions
diff --git a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp index 6985632c7a2..db24fe05e86 100644 --- a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp +++ b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp @@ -58,7 +58,6 @@ STATISTIC(NumCmps, "Number of comparisons propagated"); STATISTIC(NumReturns, "Number of return values propagated"); STATISTIC(NumDeadCases, "Number of switch cases removed"); STATISTIC(NumSDivs, "Number of sdiv converted to udiv"); -STATISTIC(NumUDivs, "Number of udivs whose width was decreased"); STATISTIC(NumAShrs, "Number of ashr converted to lshr"); STATISTIC(NumSRems, "Number of srem converted to urem"); STATISTIC(NumOverflows, "Number of overflow checks removed"); @@ -433,46 +432,6 @@ static bool hasPositiveOperands(BinaryOperator *SDI, LazyValueInfo *LVI) { return true; } -/// Try to shrink a udiv/urem's width down to the smallest power of two that's -/// sufficient to contain its operands. -static bool processUDivOrURem(BinaryOperator *Instr, LazyValueInfo *LVI) { - assert(Instr->getOpcode() == Instruction::UDiv || - Instr->getOpcode() == Instruction::URem); - if (Instr->getType()->isVectorTy()) - return false; - - // Find the smallest power of two bitwidth that's sufficient to hold Instr's - // operands. - auto OrigWidth = Instr->getType()->getIntegerBitWidth(); - ConstantRange OperandRange(OrigWidth, /*isFullset=*/false); - for (Value *Operand : Instr->operands()) { - OperandRange = OperandRange.unionWith( - LVI->getConstantRange(Operand, Instr->getParent())); - } - // Don't shrink below 8 bits wide. - unsigned NewWidth = std::max<unsigned>( - PowerOf2Ceil(OperandRange.getUnsignedMax().getActiveBits()), 8); - if (NewWidth == OrigWidth) - return false; - - ++NumUDivs; - auto *TruncTy = Type::getIntNTy(Instr->getContext(), NewWidth); - auto *LHS = CastInst::Create(Instruction::Trunc, Instr->getOperand(0), TruncTy, - Instr->getName() + ".lhs.trunc", Instr); - auto *RHS = CastInst::Create(Instruction::Trunc, Instr->getOperand(1), TruncTy, - Instr->getName() + ".rhs.trunc", Instr); - auto *BO = - BinaryOperator::Create(Instr->getOpcode(), LHS, RHS, Instr->getName(), Instr); - auto *Zext = CastInst::Create(Instruction::ZExt, BO, Instr->getType(), - Instr->getName() + ".zext", Instr); - if (BO->getOpcode() == Instruction::UDiv) - BO->setIsExact(Instr->isExact()); - - Instr->replaceAllUsesWith(Zext); - Instr->eraseFromParent(); - return true; -} - static bool processSRem(BinaryOperator *SDI, LazyValueInfo *LVI) { if (SDI->getType()->isVectorTy() || !hasPositiveOperands(SDI, LVI)) return false; @@ -482,10 +441,6 @@ static bool processSRem(BinaryOperator *SDI, LazyValueInfo *LVI) { SDI->getName(), SDI); SDI->replaceAllUsesWith(BO); SDI->eraseFromParent(); - - // Try to process our new urem. - processUDivOrURem(BO, LVI); - return true; } @@ -505,9 +460,6 @@ static bool processSDiv(BinaryOperator *SDI, LazyValueInfo *LVI) { SDI->replaceAllUsesWith(BO); SDI->eraseFromParent(); - // Try to simplify our new udiv. - processUDivOrURem(BO, LVI); - return true; } @@ -643,10 +595,6 @@ static bool runImpl(Function &F, LazyValueInfo *LVI, const SimplifyQuery &SQ) { case Instruction::SDiv: BBChanged |= processSDiv(cast<BinaryOperator>(II), LVI); break; - case Instruction::UDiv: - case Instruction::URem: - BBChanged |= processUDivOrURem(cast<BinaryOperator>(II), LVI); - break; case Instruction::AShr: BBChanged |= processAShr(cast<BinaryOperator>(II), LVI); break; |