[PATCH] D90610: [Inline] Fix in handling of ptrtoint in InlineCost
Bjorn Pettersson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 3 05:34:07 PST 2020
bjope added inline comments.
================
Comment at: llvm/lib/Analysis/InlineCost.cpp:1124
+ else {
+ APInt OffsetWithCorrectSize = BaseAndOffset.second.sext(IntegerSize);
+ std::pair<Value *, APInt> BaseAndOffsetWithCorrectSize =
----------------
uabelho wrote:
> spatel wrote:
> > bjope wrote:
> > > spatel wrote:
> > > > uabelho wrote:
> > > > > I don't know if sext is what we want to do here, of it that may lead to problems?
> > > > Signed math is what I would expect based on:
> > > > http://llvm.org/docs/LangRef.html#getelementptr-instruction
> > > > "These integers are treated as signed values where relevant."
> > > > ...and we do similar in GEPOperator::accumulateConstantOffset() for example.
> > > >
> > > Not sure exactly how these ConstantOffsetPtrs are used, but doesn't it matter that ptrtoint is defined as doing a zext if the integer size is greater than the size of the pointer (base+offset)?
> > Hmm...yes, I think you're right:
> > http://llvm.org/docs/LangRef.html#ptrtoint-to-instruction
> > So disregard my GEP comment. It would be great to manufacture an example of this behavior, but I'm not sure how to do that.
> Ok, so I changed to use zext.
>
> I tried fiddling with testcases to try to find cases where I could see a difference between using sext and zext but I've failed.
Just to clarify, I'm not sure zext is any better (or more correct). My point was that if you have `%x = ptrtoint %y` an `%y` is `%base + %offset`, then `zext(%base+%offset)` isn't neccessarily the same as `zext(%base) + zext(%offset)` (neither the same as `sext(%base) + sext(%offset)`). Unless maybe if these base&offset pairs are guaranteed to be inbound or non-wrapping/non-overflowing or something? Maybe that is implied?
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D90610/new/
https://reviews.llvm.org/D90610
More information about the llvm-commits
mailing list