[PATCH] D23296: [ValueTracking] Improve ValueTracking on left shift with nsw flag

Li Huang via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 22 16:06:39 PDT 2016


lihuang added inline comments.

================
Comment at: lib/Analysis/ValueTracking.cpp:798-802
@@ -797,1 +797,7 @@
     KnownOne  = KOF(KnownOne, ShiftAmt);
+    // If there is conflict between KnownZero and KnownOne, this must be an 
+    // overflowing left shift, so the shift result is undefined. We can return
+    // arbitrary values.
+    if ((KnownZero & KnownOne) != 0) 
+      KnownOne &= ~KnownZero;
+    
----------------
lihuang wrote:
> majnemer wrote:
> > This goes against the ethos of ComputeKnownValues.  Conflicts should return "I don't know" so that we can transform stuff into undef.
> Hi David, I'm not familiar with this part but can we transform "i don't know" to undef?  What if we just cannot infer anything from this value? 
Sorry, I think I misunderstood what you meant. I agree that this should return "I don't know" so it won't prevent transforming stuff to undef. 


https://reviews.llvm.org/D23296





More information about the llvm-commits mailing list