[PATCH] D99069: [ValueTracking] Improve phi handling in isKnownNonEqual()

JinGu Kang via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 22 04:07:27 PDT 2021


jaykang10 created this revision.
jaykang10 added a reviewer: nikic.
Herald added a subscriber: hiraditya.
jaykang10 requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Detect a recurrence that monotonically increases with mul.


https://reviews.llvm.org/D99069

Files:
  llvm/lib/Analysis/ValueTracking.cpp
  llvm/test/Analysis/ValueTracking/monotonic-phi.ll


Index: llvm/test/Analysis/ValueTracking/monotonic-phi.ll
===================================================================
--- llvm/test/Analysis/ValueTracking/monotonic-phi.ll
+++ llvm/test/Analysis/ValueTracking/monotonic-phi.ll
@@ -47,3 +47,19 @@
   ; CHECK: ret i1 false
   ret i1 %cmp
 }
+
+; CHECK-LABEL: @test4
+define i1 @test4(i8 %p, i8* %pq, i8 %n, i8 %r) {
+entry:
+  br label %loop
+loop:
+  %A = phi i8 [ 2, %entry ], [ %next, %loop ]
+  %next = mul nsw i8 %A, 2
+  %cmp1 = icmp eq i8 %A, %n
+  br i1 %cmp1, label %exit, label %loop
+exit:
+  %add = or i8 %A, %r
+  %cmp = icmp eq i8 %add, 0
+  ; CHECK: ret i1 false
+  ret i1 %cmp
+}
Index: llvm/lib/Analysis/ValueTracking.cpp
===================================================================
--- llvm/lib/Analysis/ValueTracking.cpp
+++ llvm/lib/Analysis/ValueTracking.cpp
@@ -2463,6 +2463,13 @@
                match(Induction, m_NUWAdd(m_Specific(PN), m_ConstantInt(X)))) &&
               !X->isNegative())
             return true;
+          else if (!C->isOne() && Q.IIQ.UseInstrInfo &&
+                   (match(Induction,
+                          m_NSWMul(m_Specific(PN), m_ConstantInt(X))) ||
+                    match(Induction,
+                          m_NUWMul(m_Specific(PN), m_ConstantInt(X)))) &&
+                   !X->isNegative() && !X->isZero() && !X->isOne())
+            return true;
         }
       }
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D99069.332242.patch
Type: text/x-patch
Size: 1408 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210322/529c4526/attachment.bin>


More information about the llvm-commits mailing list