[NFC] Detect IV increment expressed as uadd_with_overflow and usub_with_overflow
authorMax Kazantsev <mkazantsev@azul.com>
Mon, 1 Mar 2021 06:22:42 +0000 (13:22 +0700)
committerMax Kazantsev <mkazantsev@azul.com>
Mon, 1 Mar 2021 06:24:01 +0000 (13:24 +0700)
Current callers do not call it with such argument, so this is NFC.
But for further changes, it can be very useful to detect such cases.

llvm/lib/CodeGen/CodeGenPrepare.cpp

index 2c2f667..d87d500 100644 (file)
@@ -1293,6 +1293,12 @@ getIVIncrement(const PHINode *PN, const LoopInfo *LI) {
     return std::make_pair(IVInc, ConstantExpr::getNeg(Step));
   if (match(IVInc, m_Add(m_Specific(PN), m_Constant(Step))))
     return std::make_pair(IVInc, Step);
+  if (match(IVInc, m_ExtractValue<0>(m_Intrinsic<Intrinsic::usub_with_overflow>(
+                       m_Specific(PN), m_Constant(Step)))))
+    return std::make_pair(IVInc, ConstantExpr::getNeg(Step));
+  if (match(IVInc, m_ExtractValue<0>(m_Intrinsic<Intrinsic::uadd_with_overflow>(
+                       m_Specific(PN), m_Constant(Step)))))
+    return std::make_pair(IVInc, Step);
   return None;
 }