[llvm] [DAGCombiner] infer wrap flags for trunc, use to fold itofp (PR #148729)
    Craig Topper via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Mon Jul 14 14:51:37 PDT 2025
    
    
  
================
@@ -16310,6 +16310,22 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
     break;
   }
 
+  // Use known bits to apply the nsw/nuw flags to the truncate.
+  const unsigned DestWidth = VT.getScalarSizeInBits();
+  const unsigned SrcWidth = N0.getScalarValueSizeInBits();
+  SDNodeFlags Flags = N->getFlags();
+  if (!N->getFlags().hasNoSignedWrap() &&
+      DAG.ComputeMaxSignificantBits(N0) <= DestWidth)
+    Flags.setNoSignedWrap(true);
+  if (!N->getFlags().hasNoUnsignedWrap() &&
+      DAG.MaskedValueIsZero(N0, APInt::getBitsSetFrom(SrcWidth, DestWidth)))
+    Flags.setNoUnsignedWrap(true);
+
+  if (!(Flags == N->getFlags())) {
+    N->setFlags(Flags);
+    return SDValue(N, 0);
----------------
topperc wrote:
Do we need to add users of N to the worklist?
https://github.com/llvm/llvm-project/pull/148729
    
    
More information about the llvm-commits
mailing list