[llvm] [LV] Add support for cmp reductions with decreasing IVs. (PR #140451)
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Wed May 28 04:39:07 PDT 2025
================
@@ -259,17 +267,33 @@ class RecurrenceDescriptor {
return Kind == RecurKind::FindLastIV;
}
+ /// Returns true if the recurrence kind is of the form
+ /// select(cmp(),x,y) where one of (x,y) is an increasing or decreasing loop
+ /// induction.
+ static bool isFindIVRecurrenceKind(RecurKind Kind) {
+ return Kind == RecurKind::FindLastIV ||
+ Kind == RecurKind::FindFirstIVUMin ||
+ Kind == RecurKind::FindFirstIVSMin;
+ }
+
/// Returns the type of the recurrence. This type can be narrower than the
/// actual type of the Phi if the recurrence has been type-promoted.
Type *getRecurrenceType() const { return RecurrenceType; }
- /// Returns the sentinel value for FindLastIV recurrences to replace the start
- /// value.
+ /// Returns the sentinel value for FindFirstIV &FindLastIV recurrences to
+ /// replace the start value.
Value *getSentinelValue() const {
- assert(isFindLastIVRecurrenceKind(Kind) && "Unexpected recurrence kind");
Type *Ty = StartValue->getType();
- return ConstantInt::get(Ty,
- APInt::getSignedMinValue(Ty->getIntegerBitWidth()));
+ if (isFindLastIVRecurrenceKind(Kind)) {
+ return ConstantInt::get(
+ Ty, APInt::getSignedMinValue(Ty->getIntegerBitWidth()));
+ } else if (Kind == RecurKind::FindFirstIVSMin) {
+ return ConstantInt::get(
+ Ty, APInt::getSignedMaxValue(Ty->getIntegerBitWidth()));
+ } else {
----------------
alexey-bataev wrote:
Drop else
https://github.com/llvm/llvm-project/pull/140451
More information about the llvm-commits
mailing list