Skip to content

Commit 27e434a

Browse files
committed
updated types
1 parent bde2923 commit 27e434a

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

llvm/lib/Analysis/DemandedBits.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@ void DemandedBits::determineLiveOperandBits(
7676
computeKnownBits(V2, Known2, DL, &AC, UserI, &DT);
7777
}
7878
};
79-
auto GetShiftedRange = [&](unsigned Min, unsigned Max, bool ShiftLeft) {
80-
auto ShiftF = [&](const APInt &Mask, unsigned ShiftAmnt) {
79+
auto GetShiftedRange = [&](uint64_t Min, uint64_t Max, bool ShiftLeft) {
80+
auto ShiftF = [ShiftLeft](const APInt &Mask, unsigned ShiftAmnt) {
8181
return ShiftLeft ? Mask.shl(ShiftAmnt) : Mask.lshr(ShiftAmnt);
8282
};
8383
AB = APInt::getZero(BitWidth);
84-
unsigned LoopRange = Max - Min;
85-
auto Mask = AOut;
84+
uint64_t LoopRange = Max - Min;
85+
APInt Mask = AOut;
8686
for (unsigned ShiftAmnt = 1; ShiftAmnt <= LoopRange; ShiftAmnt <<= 1) {
8787
APInt Shifted = ShiftF(Mask, ShiftAmnt);
8888
Mask |= Shifted;
@@ -198,8 +198,8 @@ void DemandedBits::determineLiveOperandBits(
198198
AB |= APInt::getHighBitsSet(BitWidth, ShiftAmt);
199199
} else {
200200
ComputeKnownBits(BitWidth, UserI->getOperand(1), nullptr);
201-
unsigned Min = Known.getMinValue().getLimitedValue(BitWidth - 1);
202-
unsigned Max = Known.getMaxValue().getLimitedValue(BitWidth - 1);
201+
uint64_t Min = Known.getMinValue().getLimitedValue(BitWidth - 1);
202+
uint64_t Max = Known.getMaxValue().getLimitedValue(BitWidth - 1);
203203
// similar to Lshr case
204204
GetShiftedRange(Min, Max, /*ShiftLeft=*/false);
205205
const auto *S = cast<ShlOperator>(UserI);
@@ -223,8 +223,8 @@ void DemandedBits::determineLiveOperandBits(
223223
AB |= APInt::getLowBitsSet(BitWidth, ShiftAmt);
224224
} else {
225225
ComputeKnownBits(BitWidth, UserI->getOperand(1), nullptr);
226-
unsigned Min = Known.getMinValue().getLimitedValue(BitWidth - 1);
227-
unsigned Max = Known.getMaxValue().getLimitedValue(BitWidth - 1);
226+
uint64_t Min = Known.getMinValue().getLimitedValue(BitWidth - 1);
227+
uint64_t Max = Known.getMaxValue().getLimitedValue(BitWidth - 1);
228228
// Suppose AOut == 0b0000 0001
229229
// [min, max] = [1, 3]
230230
// iteration 1 shift by 1 mask is 0b0000 0011
@@ -261,19 +261,19 @@ void DemandedBits::determineLiveOperandBits(
261261
AB |= APInt::getLowBitsSet(BitWidth, ShiftAmt);
262262
} else {
263263
ComputeKnownBits(BitWidth, UserI->getOperand(1), nullptr);
264-
unsigned Min = Known.getMinValue().getLimitedValue(BitWidth - 1);
265-
unsigned Max = Known.getMaxValue().getLimitedValue(BitWidth - 1);
264+
uint64_t Min = Known.getMinValue().getLimitedValue(BitWidth - 1);
265+
uint64_t Max = Known.getMaxValue().getLimitedValue(BitWidth - 1);
266266
GetShiftedRange(Min, Max, /*ShiftLeft=*/true);
267-
if (Max) {
267+
if (Max &&
268+
(AOut & APInt::getHighBitsSet(BitWidth, Max)).getBoolValue()) {
268269
// Suppose AOut = 0011 1100
269270
// [min, max] = [1, 3]
270271
// ShiftAmount = 1 : Mask is 1000 0000
271272
// ShiftAmount = 2 : Mask is 1100 0000
272273
// ShiftAmount = 3 : Mask is 1110 0000
273274
// The Mask with Max covers every case in [min, max],
274275
// so we are done
275-
if ((AOut & APInt::getHighBitsSet(BitWidth, Max)).getBoolValue())
276-
AB.setSignBit();
276+
AB.setSignBit();
277277
}
278278
// If the shift is exact, then the low bits are not dead
279279
// (they must be zero).

0 commit comments

Comments
 (0)