[llvm] r233116 - Remove an InstCombine that seems to have become redundant.

David Blaikie dblaikie at gmail.com
Tue Mar 24 16:21:03 PDT 2015


On Tue, Mar 24, 2015 at 4:16 PM, Rafael EspĂ­ndola <
rafael.espindola at gmail.com> wrote:

> Looks like this was
>
> https://llvm.org/bugs/show_bug.cgi?id=23010


As in this commit caused that failure as well as the sanitizer one? Hmm.
Thanks for the pointer - I'll have to have a look at that...


>
>
> On 24 March 2015 at 17:53, David Blaikie <dblaikie at gmail.com> wrote:
> > Fires in compiler-rt, according to the bots, so I've reverted in r233121
> >
> > On Tue, Mar 24, 2015 at 2:31 PM, David Blaikie <dblaikie at gmail.com>
> wrote:
> >>
> >> Author: dblaikie
> >> Date: Tue Mar 24 16:31:31 2015
> >> New Revision: 233116
> >>
> >> URL: http://llvm.org/viewvc/llvm-project?rev=233116&view=rev
> >> Log:
> >> Remove an InstCombine that seems to have become redundant.
> >>
> >> Assert that this doesn't fire - I'll remove all of this later, but just
> >> leaving it in for a while in case this is firing & we just don't have
> >> test coverage.
> >>
> >> Modified:
> >>     llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp
> >>     llvm/trunk/test/Transforms/InstCombine/2007-05-14-Crash.ll
> >>
> >> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp?rev=233116&r1=233115&r2=233116&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp
> (original)
> >> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp Tue Mar
> 24
> >> 16:31:31 2015
> >> @@ -1455,35 +1455,20 @@ Instruction *InstCombiner::commonPointer
> >>      // GEP computes a constant offset, see if we can convert these
> three
> >>      // instructions into fewer.  This typically happens with unions and
> >> other
> >>      // non-type-safe code.
> >> -    unsigned AS = GEP->getPointerAddressSpace();
> >> -    unsigned OffsetBits = DL.getPointerSizeInBits(AS);
> >> -    APInt Offset(OffsetBits, 0);
> >> +    // Looks like this never actually fires due to bitcast+gep folding
> >> happening
> >> +    // in InstCombiner::visitGetElementPtrInst where the bitcast
> operand
> >> to a
> >> +    // gep is folded into the gep if possible, before we consider
> whether
> >> that
> >> +    // gep is used in a bitcast as well.
> >> +    // Let's assert that this wouldn't fire just to be sure.
> >> +#ifndef NDEBUG
> >> +    APInt
> Offset(DL.getPointerSizeInBits(GEP->getPointerAddressSpace()),
> >> 0);
> >>      BitCastInst *BCI = dyn_cast<BitCastInst>(GEP->getOperand(0));
> >> -    if (GEP->hasOneUse() && BCI && GEP->accumulateConstantOffset(DL,
> >> Offset)) {
> >> -      // FIXME: This is insufficiently tested - just a no-crash test
> >> -      // (test/Transforms/InstCombine/2007-05-14-Crash.ll)
> >> -      //
> >> -      // Get the base pointer input of the bitcast, and the type it
> >> points to.
> >> -      Value *OrigBase = BCI->getOperand(0);
> >> -      SmallVector<Value*, 8> NewIndices;
> >> -      if (FindElementAtOffset(OrigBase->getType(),
> Offset.getSExtValue(),
> >> -                              NewIndices)) {
> >> -        // FIXME: This codepath is completely untested - could be
> >> unreachable
> >> -        // for all I know.
> >> -        // If we were able to index down into an element, create the
> GEP
> >> -        // and bitcast the result.  This eliminates one bitcast,
> >> potentially
> >> -        // two.
> >> -        Value *NGEP = cast<GEPOperator>(GEP)->isInBounds() ?
> >> -          Builder->CreateInBoundsGEP(OrigBase, NewIndices) :
> >> -          Builder->CreateGEP(OrigBase, NewIndices);
> >> -        NGEP->takeName(GEP);
> >> -
> >> -        if (isa<BitCastInst>(CI))
> >> -          return new BitCastInst(NGEP, CI.getType());
> >> -        assert(isa<PtrToIntInst>(CI));
> >> -        return new PtrToIntInst(NGEP, CI.getType());
> >> -      }
> >> -    }
> >> +    SmallVector<Value *, 8> NewIndices;
> >> +    assert(!BCI || !GEP->hasOneUse() ||
> >> +           !GEP->accumulateConstantOffset(DL, Offset) ||
> >> +           !FindElementAtOffset(BCI->getOperand(0)->getType(),
> >> +                                Offset.getSExtValue(), NewIndices));
> >> +#endif
> >>    }
> >>
> >>    return commonCastTransforms(CI);
> >>
> >> Modified: llvm/trunk/test/Transforms/InstCombine/2007-05-14-Crash.ll
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/2007-05-14-Crash.ll?rev=233116&r1=233115&r2=233116&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/test/Transforms/InstCombine/2007-05-14-Crash.ll
> (original)
> >> +++ llvm/trunk/test/Transforms/InstCombine/2007-05-14-Crash.ll Tue Mar
> 24
> >> 16:31:31 2015
> >> @@ -15,4 +15,10 @@ entry:
> >>          ret i8* %tmp35
> >>  }
> >>
> >> -
> >> +define i32* @bar(%struct.abc* %abc) {
> >> +entry:
> >> +        %tmp1 = bitcast %struct.abc* %abc to %struct.def*
> >> +        %tmp3 = getelementptr %struct.def, %struct.def* %tmp1, i32 0,
> i32
> >> 1
> >> +        %tmp35 = bitcast %struct.abc* %tmp3 to i32*
> >> +        ret i32* %tmp35
> >> +}
> >>
> >>
> >> _______________________________________________
> >> llvm-commits mailing list
> >> llvm-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150324/8f9e3824/attachment.html>


More information about the llvm-commits mailing list