mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-22 04:22:57 +02:00
[InstCombine] Corrections in comments for division transformation (NFC)
The actual code seems to be correct, but the comments were misleading. Patch by Aaron Puchert! Differential Revision: https://reviews.llvm.org/D49276 llvm-svn: 337131
This commit is contained in:
parent
b6a12c439f
commit
ea7295ae5a
@ -628,7 +628,7 @@ static bool multiplyOverflows(const APInt &C1, const APInt &C2, APInt &Product,
|
|||||||
return Overflow;
|
return Overflow;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// True if C2 is a multiple of C1. Quotient contains C2/C1.
|
/// True if C1 is a multiple of C2. Quotient contains C1/C2.
|
||||||
static bool isMultiple(const APInt &C1, const APInt &C2, APInt &Quotient,
|
static bool isMultiple(const APInt &C1, const APInt &C2, APInt &Quotient,
|
||||||
bool IsSigned) {
|
bool IsSigned) {
|
||||||
assert(C1.getBitWidth() == C2.getBitWidth() && "Constant widths not equal");
|
assert(C1.getBitWidth() == C2.getBitWidth() && "Constant widths not equal");
|
||||||
@ -714,7 +714,7 @@ Instruction *InstCombiner::commonIDivTransforms(BinaryOperator &I) {
|
|||||||
APInt C1Shifted = APInt::getOneBitSet(
|
APInt C1Shifted = APInt::getOneBitSet(
|
||||||
C1->getBitWidth(), static_cast<unsigned>(C1->getLimitedValue()));
|
C1->getBitWidth(), static_cast<unsigned>(C1->getLimitedValue()));
|
||||||
|
|
||||||
// (X << C1) / C2 -> X / (C2 >> C1) if C2 is a multiple of C1.
|
// (X << C1) / C2 -> X / (C2 >> C1) if C2 is a multiple of 1 << C1.
|
||||||
if (isMultiple(*C2, C1Shifted, Quotient, IsSigned)) {
|
if (isMultiple(*C2, C1Shifted, Quotient, IsSigned)) {
|
||||||
auto *BO = BinaryOperator::Create(I.getOpcode(), X,
|
auto *BO = BinaryOperator::Create(I.getOpcode(), X,
|
||||||
ConstantInt::get(Ty, Quotient));
|
ConstantInt::get(Ty, Quotient));
|
||||||
@ -722,7 +722,7 @@ Instruction *InstCombiner::commonIDivTransforms(BinaryOperator &I) {
|
|||||||
return BO;
|
return BO;
|
||||||
}
|
}
|
||||||
|
|
||||||
// (X << C1) / C2 -> X * (C2 >> C1) if C1 is a multiple of C2.
|
// (X << C1) / C2 -> X * ((1 << C1) / C2) if 1 << C1 is a multiple of C2.
|
||||||
if (isMultiple(C1Shifted, *C2, Quotient, IsSigned)) {
|
if (isMultiple(C1Shifted, *C2, Quotient, IsSigned)) {
|
||||||
auto *Mul = BinaryOperator::Create(Instruction::Mul, X,
|
auto *Mul = BinaryOperator::Create(Instruction::Mul, X,
|
||||||
ConstantInt::get(Ty, Quotient));
|
ConstantInt::get(Ty, Quotient));
|
||||||
|
Loading…
Reference in New Issue
Block a user