From 4468e27d9fff153af9826eaf12e0044e67a701a8 Mon Sep 17 00:00:00 2001
From: Matt Devereau <matthew.devereau@arm.com>
Date: Thu, 26 Jan 2023 12:02:16 +0000
Subject: [PATCH] Revert "[LoopVectorize] Enable integer Mul and Add as select
 reduction patterns"

This reverts commit f90103851f9a381bbf7ed6da250217577afd00d2.
---
 llvm/lib/Analysis/IVDescriptors.cpp           |  10 +-
 .../Transforms/LoopVectorize/if-reduction.ll  | 119 ------------------
 2 files changed, 1 insertion(+), 128 deletions(-)

diff --git a/llvm/lib/Analysis/IVDescriptors.cpp b/llvm/lib/Analysis/IVDescriptors.cpp
index c70d3004a803..950541ace9d7 100644
--- a/llvm/lib/Analysis/IVDescriptors.cpp
+++ b/llvm/lib/Analysis/IVDescriptors.cpp
@@ -754,13 +754,6 @@ RecurrenceDescriptor::isConditionalRdxPattern(RecurKind Kind, Instruction *I) {
   if (m_FMul(m_Value(Op1), m_Value(Op2)).match(I1) && (I1->isFast()))
     return InstDesc(Kind == RecurKind::FMul, SI);
 
-  if ((m_Add(m_Value(Op1), m_Value(Op2)).match(I1) ||
-       m_Sub(m_Value(Op1), m_Value(Op2)).match(I1)))
-    return InstDesc(Kind == RecurKind::Add, SI);
-
-  if (m_Mul(m_Value(Op1), m_Value(Op2)).match(I1))
-    return InstDesc(Kind == RecurKind::Mul, SI);
-
   return InstDesc(false, I);
 }
 
@@ -794,8 +787,7 @@ RecurrenceDescriptor::isRecurrenceInstr(Loop *L, PHINode *OrigPhi,
     return InstDesc(Kind == RecurKind::FAdd, I,
                     I->hasAllowReassoc() ? nullptr : I);
   case Instruction::Select:
-    if (Kind == RecurKind::FAdd || Kind == RecurKind::FMul ||
-        Kind == RecurKind::Add || Kind == RecurKind::Mul)
+    if (Kind == RecurKind::FAdd || Kind == RecurKind::FMul)
       return isConditionalRdxPattern(Kind, I);
     [[fallthrough]];
   case Instruction::FCmp:
diff --git a/llvm/test/Transforms/LoopVectorize/if-reduction.ll b/llvm/test/Transforms/LoopVectorize/if-reduction.ll
index 918b8214ee68..b82c5bb473c5 100644
--- a/llvm/test/Transforms/LoopVectorize/if-reduction.ll
+++ b/llvm/test/Transforms/LoopVectorize/if-reduction.ll
@@ -821,124 +821,5 @@ for.end:                                          ; preds = %for.body, %entry
   ret float %sum.0.lcssa
 }
 
-; CHECK-LABEL: @fcmp_0_add_select1(
-; CHECK: %[[V1:.*]] = fcmp ogt <4 x float> %[[V0:.*]], zeroinitializer
-; CHECK: %[[V3:.*]] = add <4 x i32> %[[V2:.*]], <i32 2, i32 2, i32 2, i32 2>
-; CHECK: select <4 x i1> %[[V1]], <4 x i32> %[[V3]], <4 x i32> %[[V2]]
-define i32 @fcmp_0_add_select1(ptr noalias %x, i32 %N) nounwind readonly {
-entry:
-  %cmp.1 = icmp sgt i32 %N, 0
-  br i1 %cmp.1, label %for.header, label %for.end
-
-for.header:                                       ; preds = %entry
-  %zext = zext i32 %N to i64
-  br label %for.body
-
-for.body:                                         ; preds = %header, %for.body
-  %indvars.iv = phi i64 [ 0, %for.header ], [ %indvars.iv.next, %for.body ]
-  %sum.1 = phi i32 [ 0, %for.header ], [ %sum.2, %for.body ]
-  %arrayidx = getelementptr inbounds float, ptr %x, i64 %indvars.iv
-  %0 = load float, ptr %arrayidx, align 4
-  %cmp.2 = fcmp ogt float %0, 0.000000e+00
-  %add = add nsw i32 %sum.1, 2
-  %sum.2 = select i1 %cmp.2, i32 %add, i32 %sum.1
-  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
-  %exitcond = icmp eq i64 %indvars.iv.next, %zext
-  br i1 %exitcond, label %for.end, label %for.body
-
-for.end:                                          ; preds = %for.body, %entry
-  %1 = phi i32 [ 0, %entry ], [ %sum.2, %for.body ]
-  ret i32 %1
-}
-
-; CHECK-LABEL: @fcmp_0_add_select2(
-; CHECK: %[[V1:.*]] = fcmp ogt <4 x float> %[[V0:.*]], zeroinitializer
-; CHECK: %[[V3:.*]] = add <4 x i64> %[[V2:.*]], <i64 2, i64 2, i64 2, i64 2>
-; CHECK: select <4 x i1> %[[V1]], <4 x i64> %[[V3]], <4 x i64> %[[V2]]
-define i64 @fcmp_0_add_select2(ptr noalias %x, i64 %N) nounwind readonly {
-entry:
-  %cmp.1 = icmp sgt i64 %N, 0
-  br i1 %cmp.1, label %for.header, label %for.end
-
-for.header:                                       ; preds = %entry
-  br label %for.body
-
-for.body:                                         ; preds = %header, %for.body
-  %indvars.iv = phi i64 [ 0, %for.header ], [ %indvars.iv.next, %for.body ]
-  %sum.1 = phi i64 [ 0, %for.header ], [ %sum.2, %for.body ]
-  %arrayidx = getelementptr inbounds float, ptr %x, i64 %indvars.iv
-  %0 = load float, ptr %arrayidx, align 4
-  %cmp.2 = fcmp ogt float %0, 0.000000e+00
-  %add = add nsw i64 %sum.1, 2
-  %sum.2 = select i1 %cmp.2, i64 %add, i64 %sum.1
-  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
-  %exitcond = icmp eq i64 %indvars.iv.next, %N
-  br i1 %exitcond, label %for.end, label %for.body
-
-for.end:                                          ; preds = %for.body, %entry
-  %1 = phi i64 [ 0, %entry ], [ %sum.2, %for.body ]
-  ret i64 %1
-}
-
-; CHECK-LABEL: @fcmp_0_sub_select1(
-; CHECK: %[[V1:.*]] = fcmp ogt <4 x float> %[[V0:.*]], zeroinitializer
-; CHECK: %[[V3:.*]] = sub <4 x i32> %[[V2:.*]], <i32 2, i32 2, i32 2, i32 2>
-; CHECK: select <4 x i1> %[[V1]], <4 x i32> %[[V3]], <4 x i32> %[[V2]]
-define i32 @fcmp_0_sub_select1(ptr noalias %x, i32 %N) nounwind readonly {
-entry:
-  %cmp.1 = icmp sgt i32 %N, 0
-  br i1 %cmp.1, label %for.header, label %for.end
-
-for.header:                                       ; preds = %entry
-  %zext = zext i32 %N to i64
-  br label %for.body
-
-for.body:                                         ; preds = %header, %for.body
-  %indvars.iv = phi i64 [ 0, %for.header ], [ %indvars.iv.next, %for.body ]
-  %sum.1 = phi i32 [ 0, %for.header ], [ %sum.2, %for.body ]
-  %arrayidx = getelementptr inbounds float, ptr %x, i64 %indvars.iv
-  %0 = load float, ptr %arrayidx, align 4
-  %cmp.2 = fcmp ogt float %0, 0.000000e+00
-  %sub = sub nsw i32 %sum.1, 2
-  %sum.2 = select i1 %cmp.2, i32 %sub, i32 %sum.1
-  %indvars.iv.next = sub nuw nsw i64 %indvars.iv, 1
-  %exitcond = icmp eq i64 %indvars.iv.next, %zext
-  br i1 %exitcond, label %for.end, label %for.body
-
-for.end:                                          ; preds = %for.body, %entry
-  %1 = phi i32 [ 0, %entry ], [ %sum.2, %for.body ]
-  ret i32 %1
-}
-
-; CHECK-LABEL: @fcmp_0_mult_select1(
-; CHECK: %[[V1:.*]] = fcmp ogt <4 x float> %[[V0:.*]], zeroinitializer
-; CHECK: %[[V3:.*]] = mul <4 x i32> %[[V2:.*]], <i32 2, i32 2, i32 2, i32 2>
-; CHECK: select <4 x i1> %[[V1]], <4 x i32> %[[V3]], <4 x i32> %[[V2]]
-define i32 @fcmp_0_mult_select1(ptr noalias %x, i32 %N) nounwind readonly {
-entry:
-  %cmp.1 = icmp sgt i32 %N, 0
-  br i1 %cmp.1, label %for.header, label %for.end
-
-for.header:                                       ; preds = %entry
-  %zext = zext i32 %N to i64
-  br label %for.body
-
-for.body:                                         ; preds = %for.body, %for.header
-  %indvars.iv = phi i64 [ 0, %for.header ], [ %indvars.iv.next, %for.body ]
-  %sum.1 = phi i32 [ 0, %for.header ], [ %sum.2, %for.body ]
-  %arrayidx = getelementptr inbounds float, ptr %x, i64 %indvars.iv
-  %0 = load float, ptr %arrayidx, align 4
-  %cmp.2 = fcmp ogt float %0, 0.000000e+00
-  %mult = mul nsw i32 %sum.1, 2
-  %sum.2 = select i1 %cmp.2, i32 %mult, i32 %sum.1
-  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
-  %exitcond = icmp eq i64 %indvars.iv.next, %zext
-  br i1 %exitcond, label %for.end, label %for.body
-
-for.end:                                          ; preds = %for.body, %entry
-  %1 = phi i32 [ 0, %entry ], [ %sum.2, %for.body ]
-  ret i32 %1
-}
-
 ; Make sure any check-not directives are not triggered by function declarations.
 ; CHECK: declare
-- 
2.34.1

