Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit b09e1d3

Browse files
committed
[ConstantFold] NFC cleanup after previous change.
Merge two conditions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270827 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 8a41a5d commit b09e1d3

File tree

1 file changed

+39
-40
lines changed

1 file changed

+39
-40
lines changed

lib/IR/ConstantFold.cpp

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2193,46 +2193,45 @@ static Constant *ConstantFoldGetElementPtrImpl(Type *PointeeTy, Constant *C,
21932193
for (unsigned i = 1, e = Idxs.size(); i != e;
21942194
Prev = Ty, Ty = cast<CompositeType>(Ty)->getTypeAtIndex(Idxs[i]), ++i) {
21952195
if (ConstantInt *CI = dyn_cast<ConstantInt>(Idxs[i])) {
2196-
if (isa<ArrayType>(Ty))
2197-
if (CI->getSExtValue() > 0 &&
2198-
!isIndexInRangeOfSequentialType(cast<SequentialType>(Ty), CI)) {
2199-
if (isa<SequentialType>(Prev)) {
2200-
// It's out of range, but we can factor it into the prior
2201-
// dimension.
2202-
NewIdxs.resize(Idxs.size());
2203-
uint64_t NumElements = 0;
2204-
if (auto *ATy = dyn_cast<ArrayType>(Ty))
2205-
NumElements = ATy->getNumElements();
2206-
else
2207-
NumElements = cast<VectorType>(Ty)->getNumElements();
2208-
2209-
ConstantInt *Factor = ConstantInt::get(CI->getType(), NumElements);
2210-
NewIdxs[i] = ConstantExpr::getSRem(CI, Factor);
2211-
2212-
Constant *PrevIdx = cast<Constant>(Idxs[i-1]);
2213-
Constant *Div = ConstantExpr::getSDiv(CI, Factor);
2214-
2215-
unsigned CommonExtendedWidth =
2216-
std::max(PrevIdx->getType()->getIntegerBitWidth(),
2217-
Div->getType()->getIntegerBitWidth());
2218-
CommonExtendedWidth = std::max(CommonExtendedWidth, 64U);
2219-
2220-
// Before adding, extend both operands to i64 to avoid
2221-
// overflow trouble.
2222-
if (!PrevIdx->getType()->isIntegerTy(CommonExtendedWidth))
2223-
PrevIdx = ConstantExpr::getSExt(
2224-
PrevIdx,
2225-
Type::getIntNTy(Div->getContext(), CommonExtendedWidth));
2226-
if (!Div->getType()->isIntegerTy(CommonExtendedWidth))
2227-
Div = ConstantExpr::getSExt(
2228-
Div, Type::getIntNTy(Div->getContext(), CommonExtendedWidth));
2229-
2230-
NewIdxs[i-1] = ConstantExpr::getAdd(PrevIdx, Div);
2231-
} else {
2232-
// It's out of range, but the prior dimension is a struct
2233-
// so we can't do anything about it.
2234-
Unknown = true;
2235-
}
2196+
if (isa<ArrayType>(Ty) && CI->getSExtValue() > 0 &&
2197+
!isIndexInRangeOfSequentialType(cast<ArrayType>(Ty), CI)) {
2198+
if (isa<SequentialType>(Prev)) {
2199+
// It's out of range, but we can factor it into the prior
2200+
// dimension.
2201+
NewIdxs.resize(Idxs.size());
2202+
uint64_t NumElements = 0;
2203+
if (auto *ATy = dyn_cast<ArrayType>(Ty))
2204+
NumElements = ATy->getNumElements();
2205+
else
2206+
NumElements = cast<VectorType>(Ty)->getNumElements();
2207+
2208+
ConstantInt *Factor = ConstantInt::get(CI->getType(), NumElements);
2209+
NewIdxs[i] = ConstantExpr::getSRem(CI, Factor);
2210+
2211+
Constant *PrevIdx = cast<Constant>(Idxs[i - 1]);
2212+
Constant *Div = ConstantExpr::getSDiv(CI, Factor);
2213+
2214+
unsigned CommonExtendedWidth =
2215+
std::max(PrevIdx->getType()->getIntegerBitWidth(),
2216+
Div->getType()->getIntegerBitWidth());
2217+
CommonExtendedWidth = std::max(CommonExtendedWidth, 64U);
2218+
2219+
// Before adding, extend both operands to i64 to avoid
2220+
// overflow trouble.
2221+
if (!PrevIdx->getType()->isIntegerTy(CommonExtendedWidth))
2222+
PrevIdx = ConstantExpr::getSExt(
2223+
PrevIdx,
2224+
Type::getIntNTy(Div->getContext(), CommonExtendedWidth));
2225+
if (!Div->getType()->isIntegerTy(CommonExtendedWidth))
2226+
Div = ConstantExpr::getSExt(
2227+
Div, Type::getIntNTy(Div->getContext(), CommonExtendedWidth));
2228+
2229+
NewIdxs[i - 1] = ConstantExpr::getAdd(PrevIdx, Div);
2230+
} else {
2231+
// It's out of range, but the prior dimension is a struct
2232+
// so we can't do anything about it.
2233+
Unknown = true;
2234+
}
22362235
}
22372236
} else {
22382237
// We don't know if it's in range or not.

0 commit comments

Comments
 (0)