mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
When lowering an inbounds gep, the intermediate adds can have
unsigned overflow (e.g. due to a negative array index), but the scales on array size multiplications are known to not sign wrap. llvm-svn: 125409
This commit is contained in:
parent
1ba77f9624
commit
6c0014cd4a
@ -420,8 +420,7 @@ Value *InstCombiner::EmitGEPOffset(User *GEP) {
|
||||
|
||||
if (Size)
|
||||
Result = Builder->CreateAdd(Result, ConstantInt::get(IntPtrTy, Size),
|
||||
GEP->getName()+".offs",
|
||||
isInBounds /*NUW*/);
|
||||
GEP->getName()+".offs");
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -430,8 +429,7 @@ Value *InstCombiner::EmitGEPOffset(User *GEP) {
|
||||
ConstantExpr::getIntegerCast(OpC, IntPtrTy, true /*SExt*/);
|
||||
Scale = ConstantExpr::getMul(OC, Scale, isInBounds/*NUW*/);
|
||||
// Emit an add instruction.
|
||||
Result = Builder->CreateAdd(Result, Scale, GEP->getName()+".offs",
|
||||
isInBounds /*NUW*/);
|
||||
Result = Builder->CreateAdd(Result, Scale, GEP->getName()+".offs");
|
||||
continue;
|
||||
}
|
||||
// Convert to correct type.
|
||||
@ -444,8 +442,7 @@ Value *InstCombiner::EmitGEPOffset(User *GEP) {
|
||||
}
|
||||
|
||||
// Emit an add instruction.
|
||||
Result = Builder->CreateAdd(Op, Result, GEP->getName()+".offs",
|
||||
isInBounds /*NUW*/);
|
||||
Result = Builder->CreateAdd(Op, Result, GEP->getName()+".offs");
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user