[PATCH] D15146: [InstCombine] Look through PHIs, GEPs, IntToPtrs and PtrToInts to expose more constants when comparing GEPs
silviu.baranga@arm.com via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 11 09:09:38 PST 2015
sbaranga added inline comments.
================
Comment at: lib/Transforms/InstCombine/InstCombineCompares.cpp:905
@@ +904,3 @@
+ // OFFSET1 cmp OFFSET2
+ Value *NewRHS = RewriteGEPAsOffset(RHS, PtrBase, DL, Nodes);
+ return new ICmpInst(ICmpInst::getSignedPredicate(Cond), Index, NewRHS);
----------------
hfinkel wrote:
> sbaranga wrote:
> > hfinkel wrote:
> > > Still don't find this clear. It seems to me that:
> > >
> > > std::tie(PtrBase, Index) = GetAsConstantIndexedAddress(GEPLHS, DL);
> > >
> > > returns PtrBase and Index such that GEP(PtrBase, Index) == GEPLHS. And then:
> > >
> > > RewriteGEPAsOffset(RHS, PtrBase)
> > >
> > > returns GEP(PtrBase, Something) == RHS. And then we compare:
> > >
> > > Index icmp GEP(PtrBase, Something)
> > >
> > > which must be wrong. What am I missing?
> > >
> > RewriteGEPAsOffset returns the offset, not the GEP.
> Ah, I understand now. The GEP it builds is not returned, but is for use by other users of the original GEP being replaced.
Yes, that is correct. Would there be any better way to express this?
http://reviews.llvm.org/D15146
More information about the llvm-commits
mailing list