[clang] [llvm] [InstCombine] Infer nsw/nuw for trunc (PR #87910)
    Yingwei Zheng via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Mon Apr  8 23:27:08 PDT 2024
    
    
  
================
@@ -897,7 +897,20 @@ Instruction *InstCombinerImpl::visitTrunc(TruncInst &Trunc) {
     }
   }
 
-  return nullptr;
+  bool Changed = false;
+  if (!Trunc.hasNoSignedWrap() &&
+      ComputeMaxSignificantBits(Src, /*Depth=*/0, &Trunc) <= DestWidth) {
+    Trunc.setHasNoSignedWrap(true);
+    Changed = true;
+  }
+  if (!Trunc.hasNoUnsignedWrap() &&
+      MaskedValueIsZero(Src, APInt::getBitsSetFrom(SrcWidth, DestWidth),
+                        /*Depth=*/0, &Trunc)) {
+    Trunc.setHasNoUnsignedWrap(true);
+    Changed = true;
----------------
dtcxzyw wrote:
We cannot infer nsw flags from KnownBits (e.g., `trunc (ashr i64 X, 32) to i32`). BTW we never set poison-generating flags in `SimplifyDemanded`.
https://github.com/llvm/llvm-project/pull/87910
    
    
More information about the llvm-commits
mailing list