[llvm] [DAGCombiner] Add basic support for `trunc nsw/nuw` (PR #113808)

via llvm-commits llvm-commits at lists.llvm.org
Sun Oct 27 07:56:02 PDT 2024


================
@@ -14083,24 +14084,23 @@ SDValue DAGCombiner::visitZERO_EXTEND(SDNode *N) {
       unsigned OpBits = SrcVT.getScalarSizeInBits();
       unsigned MidBits = MinVT.getScalarSizeInBits();
       unsigned DestBits = VT.getScalarSizeInBits();
-      unsigned NumSignBits = DAG.ComputeNumSignBits(Op);
 
-      if (OpBits == DestBits) {
-        // Op is i32, Mid is i8, and Dest is i32.  If Op has more than 24 sign
-        // bits, it is already ready.
-        if (NumSignBits > DestBits - MidBits)
+      if (N0->getFlags().hasNoSignedWrap() ||
+          DAG.ComputeNumSignBits(Op) > OpBits - MidBits) {
----------------
goldsteinn wrote:

Should probably just set `nsw` if `visitTrunc` if `computeNumSignBits >= OldSize - NewSize`
Likewise `nuw` if high bits are zero.

https://github.com/llvm/llvm-project/pull/113808


More information about the llvm-commits mailing list