[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