[PATCH] D151208: [KnownBits] Add support for nuw/nsw on shifts

Noah Goldstein via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed May 24 09:54:54 PDT 2023


goldstein.w.n accepted this revision.
goldstein.w.n added a comment.
This revision is now accepted and ready to land.

LGTM.



================
Comment at: llvm/lib/Support/KnownBits.cpp:255
+  // All shift amounts may result in poison.
+  if (Known.hasConflict())
+    Known.setAllZero();
----------------
This should only ever occur if NUW or NSW right? Maybe assert that?


================
Comment at: llvm/lib/Support/KnownBits.cpp:227
   // possible shifts.
   APInt MaxShiftAmount = RHS.getMaxValue();
+  if (!LHS.isUnknown() || (NUW && NSW)) {
----------------
nikic wrote:
> goldstein.w.n wrote:
> > in the NSW/NUW we should be able to further bound MaxShiftAmount with LHS.countLeadingZeros no? (and poison if MinShiftAmunt > LHS.countLeadingZeros)
> Yes, but this is already implicitly handled by the loop below. It stops once it gets the first shift amount that results in poison due to nuw/nsw.
Ah, fair enough.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D151208/new/

https://reviews.llvm.org/D151208



More information about the llvm-commits mailing list