diff options
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SROA.cpp | 31 | 
1 files changed, 6 insertions, 25 deletions
diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index 68d5d3f01a0..6277877f4ba 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -541,29 +541,17 @@ private:    void insertUse(Instruction &I, int64_t Offset, uint64_t Size,                   bool IsSplittable = false) { -    // Completely skip uses which have a zero size or don't overlap the -    // allocation. -    if (Size == 0 || -        (Offset >= 0 && (uint64_t)Offset >= AllocSize) || -        (Offset < 0 && (uint64_t)-Offset >= Size)) { +    // Completely skip uses which have a zero size or start either before or +    // past the end of the allocation. +    if (Size == 0 || Offset < 0 || (uint64_t)Offset >= AllocSize) {        DEBUG(dbgs() << "WARNING: Ignoring " << Size << " byte use @" << Offset -                   << " which starts past the end of the " << AllocSize -                   << " byte alloca:\n" +                   << " which has zero size or starts outside of the " +                   << AllocSize << " byte alloca:\n"                     << "    alloca: " << P.AI << "\n"                     << "       use: " << I << "\n");        return;      } -    // Clamp the start to the beginning of the allocation. -    if (Offset < 0) { -      DEBUG(dbgs() << "WARNING: Clamping a " << Size << " byte use @" << Offset -                   << " to start at the beginning of the alloca:\n" -                   << "    alloca: " << P.AI << "\n" -                   << "       use: " << I << "\n"); -      Size -= (uint64_t)-Offset; -      Offset = 0; -    } -      uint64_t BeginOffset = Offset, EndOffset = BeginOffset + Size;      // Clamp the end offset to the end of the allocation. Note that this is @@ -881,16 +869,9 @@ private:    void insertUse(Instruction &User, int64_t Offset, uint64_t Size) {      // If the use has a zero size or extends outside of the allocation, record      // it as a dead use for elimination later. -    if (Size == 0 || (uint64_t)Offset >= AllocSize || -        (Offset < 0 && (uint64_t)-Offset >= Size)) +    if (Size == 0 || Offset < 0 || (uint64_t)Offset >= AllocSize)        return markAsDead(User); -    // Clamp the start to the beginning of the allocation. -    if (Offset < 0) { -      Size -= (uint64_t)-Offset; -      Offset = 0; -    } -      uint64_t BeginOffset = Offset, EndOffset = BeginOffset + Size;      // Clamp the end offset to the end of the allocation. Note that this is  | 

