mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 20:23:59 +00:00
objectsize: add support for GEPs with non-constant indexes
add an additional parameter to InstCombiner::EmitGEPOffset() to force it to *not* emit operations with NUW flag git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156585 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -423,7 +423,8 @@ Instruction *InstCombiner::visitFAdd(BinaryOperator &I) {
|
||||
/// EmitGEPOffset - Given a getelementptr instruction/constantexpr, emit the
|
||||
/// code necessary to compute the offset from the base pointer (without adding
|
||||
/// in the base pointer). Return the result as a signed integer of intptr size.
|
||||
Value *InstCombiner::EmitGEPOffset(User *GEP) {
|
||||
/// If NoNUW is true, then the NUW flag is not used.
|
||||
Value *InstCombiner::EmitGEPOffset(User *GEP, bool NoNUW) {
|
||||
TargetData &TD = *getTargetData();
|
||||
gep_type_iterator GTI = gep_type_begin(GEP);
|
||||
Type *IntPtrTy = TD.getIntPtrType(GEP->getContext());
|
||||
@ -431,7 +432,7 @@ Value *InstCombiner::EmitGEPOffset(User *GEP) {
|
||||
|
||||
// If the GEP is inbounds, we know that none of the addressing operations will
|
||||
// overflow in an unsigned sense.
|
||||
bool isInBounds = cast<GEPOperator>(GEP)->isInBounds();
|
||||
bool isInBounds = cast<GEPOperator>(GEP)->isInBounds() && !NoNUW;
|
||||
|
||||
// Build a mask for high order bits.
|
||||
unsigned IntPtrWidth = TD.getPointerSizeInBits();
|
||||
|
Reference in New Issue
Block a user