[PATCH] D90648: [SCEV] Fix nsw flags for GEP expressions
    Max Kazantsev via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Sun Nov  8 20:06:04 PST 2020
    
    
  
mkazantsev accepted this revision.
mkazantsev added a comment.
This revision is now accepted and ready to land.
Looks good, thanks!
================
Comment at: llvm/lib/Analysis/ScalarEvolution.cpp:3488
+  SCEV::NoWrapFlags BaseWrap = GEP->isInBounds() && isKnownNonNegative(Offset)
+      ? SCEV::FlagNUW : SCEV::FlagAnyWrap;
+  return getAddExpr(BaseExpr, Offset, BaseWrap);
----------------
nikic wrote:
> mkazantsev wrote:
> > Isn't inbounds gep always `nuw`? Do we really need the non-negative check?
> As the offset is interpreted as a signed number, no. For a negative offset, `sub %base, -1 * %offset` would be nuw, but we don't have a way to express that.
Ah, got it. It's nasty. Thanks for explaining!
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90648/new/
https://reviews.llvm.org/D90648
    
    
More information about the llvm-commits
mailing list