[polly] r212126 - Introduce reduction types

Johannes Doerfert jdoerfert at codeaurora.org
Tue Jul 1 13:52:52 PDT 2014


Author: jdoerfert
Date: Tue Jul  1 15:52:51 2014
New Revision: 212126

URL: http://llvm.org/viewvc/llvm-project?rev=212126&view=rev
Log:
Introduce reduction types

  This change is particularly useful in the code generation as we need
  to know which binary operator/identity element we need to combine/initialize
  the privatization locations.

  + Print the reduction type for each memory access
  + Adjusted the test cases to comply with the new output format and
    to test for the right reduction type


Modified:
    polly/trunk/include/polly/ScopInfo.h
    polly/trunk/lib/Analysis/ScopInfo.cpp
    polly/trunk/test/ScopInfo/loop_affine_bound_0.ll
    polly/trunk/test/ScopInfo/loop_affine_bound_1.ll
    polly/trunk/test/ScopInfo/loop_affine_bound_2.ll
    polly/trunk/test/ScopInfo/reduction_disabled_multiplicative.ll
    polly/trunk/test/ScopInfo/reduction_escaping_intermediate.ll
    polly/trunk/test/ScopInfo/reduction_escaping_intermediate_2.ll
    polly/trunk/test/ScopInfo/reduction_invalid_different_operators.ll
    polly/trunk/test/ScopInfo/reduction_invalid_overlapping_accesses.ll
    polly/trunk/test/ScopInfo/reduction_multiple_loops_array_sum.ll
    polly/trunk/test/ScopInfo/reduction_multiple_loops_array_sum_1.ll
    polly/trunk/test/ScopInfo/reduction_multiple_simple_binary.ll
    polly/trunk/test/ScopInfo/reduction_non_overlapping_chains.ll
    polly/trunk/test/ScopInfo/reduction_only_reduction_like_access.ll
    polly/trunk/test/ScopInfo/reduction_simple_fp.ll
    polly/trunk/test/ScopInfo/reduction_simple_w_constant.ll
    polly/trunk/test/ScopInfo/reduction_simple_w_iv.ll
    polly/trunk/test/ScopInfo/simple_loop_1.ll

Modified: polly/trunk/include/polly/ScopInfo.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/ScopInfo.h?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/include/polly/ScopInfo.h (original)
+++ polly/trunk/include/polly/ScopInfo.h Tue Jul  1 15:52:51 2014
@@ -84,6 +84,18 @@ public:
   /// remain, if no write happens.
   enum AccessType { READ, MUST_WRITE, MAY_WRITE };
 
+  /// @brief Reduction access type
+  ///
+  /// Commutative and associative binary operations suitable for reductions
+  enum ReductionType {
+    RT_NONE, ///< Indicate no reduction at all
+    RT_ADD,  ///< Addition
+    RT_MUL,  ///< Multiplication
+    RT_BOR,  ///< Bitwise Or
+    RT_BXOR, ///< Bitwise XOr
+    RT_BAND, ///< Bitwise And
+  };
+
 private:
   MemoryAccess(const MemoryAccess &) LLVM_DELETED_FUNCTION;
   const MemoryAccess &operator=(const MemoryAccess &) LLVM_DELETED_FUNCTION;
@@ -97,7 +109,7 @@ private:
   void setBaseName();
   ScopStmt *Statement;
 
-  /// @brief Flag to indicate reduction like accesses
+  /// @brief Reduction type for reduction like accesses, RT_NONE otherwise
   ///
   /// An access is reduction like if it is part of a load-store chain in which
   /// both access the same memory location (use the same LLVM-IR value
@@ -121,7 +133,7 @@ private:
   /// property is only exploited for statement instances that load from and
   /// store to the same data location. Doing so at dependence analysis time
   /// could allow us to handle the above example.
-  bool IsReductionLike = false;
+  ReductionType RedType = RT_NONE;
 
   const Instruction *Inst;
 
@@ -149,7 +161,7 @@ public:
   enum AccessType getType() { return Type; }
 
   /// @brief Is this a reduction like access?
-  bool isReductionLike() const { return IsReductionLike; }
+  bool isReductionLike() const { return RedType != RT_NONE; }
 
   /// @brief Is this a read memory access?
   bool isRead() const { return Type == MemoryAccess::READ; }
@@ -205,11 +217,14 @@ public:
   /// @brief Get the statement that contains this memory access.
   ScopStmt *getStatement() const { return Statement; }
 
+  /// @brief Get the reduction type of this access
+  ReductionType getReductionType() const { return RedType; }
+
   /// @brief Set the updated access relation read from JSCOP file.
   void setNewAccessRelation(isl_map *newAccessRelation);
 
   /// @brief Mark this a reduction like access
-  void markReductionLike() { IsReductionLike = true; }
+  void markAsReductionLike(ReductionType RT) { RedType = RT; }
 
   /// @brief Align the parameters in the access relation to the scop context
   void realignParams();
@@ -223,6 +238,9 @@ public:
   void dump() const;
 };
 
+llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
+                              MemoryAccess::ReductionType RT);
+
 //===----------------------------------------------------------------------===//
 /// @brief Statement of the Scop
 ///

Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Tue Jul  1 15:52:51 2014
@@ -273,6 +273,36 @@ int SCEVAffinator::getLoopDepth(const Lo
   return L->getLoopDepth() - outerLoop->getLoopDepth();
 }
 
+/// @brief Return the reduction type for a given binary operator
+static MemoryAccess::ReductionType getReductionType(const BinaryOperator *BinOp,
+                                                    const Instruction *Load) {
+  if (!BinOp)
+    return MemoryAccess::RT_NONE;
+  switch (BinOp->getOpcode()) {
+  case Instruction::FAdd:
+    if (!BinOp->hasUnsafeAlgebra())
+      return MemoryAccess::RT_NONE;
+  // Fall through
+  case Instruction::Add:
+    return MemoryAccess::RT_ADD;
+  case Instruction::Or:
+    return MemoryAccess::RT_BOR;
+  case Instruction::Xor:
+    return MemoryAccess::RT_BXOR;
+  case Instruction::And:
+    return MemoryAccess::RT_BAND;
+  case Instruction::FMul:
+    if (!BinOp->hasUnsafeAlgebra())
+      return MemoryAccess::RT_NONE;
+  // Fall through
+  case Instruction::Mul:
+    if (DisableMultiplicativeReductions)
+      return MemoryAccess::RT_NONE;
+    return MemoryAccess::RT_MUL;
+  default:
+    return MemoryAccess::RT_NONE;
+  }
+}
 //===----------------------------------------------------------------------===//
 
 MemoryAccess::~MemoryAccess() {
@@ -396,6 +426,31 @@ MemoryAccess::MemoryAccess(const Value *
   AccessRelation = isl_map_align_params(AccessRelation, ParamSpace);
 }
 
+raw_ostream &polly::operator<<(raw_ostream &OS,
+                               MemoryAccess::ReductionType RT) {
+  switch (RT) {
+  case MemoryAccess::RT_NONE:
+    OS << "NONE";
+    break;
+  case MemoryAccess::RT_ADD:
+    OS << "ADD";
+    break;
+  case MemoryAccess::RT_MUL:
+    OS << "MUL";
+    break;
+  case MemoryAccess::RT_BOR:
+    OS << "BOR";
+    break;
+  case MemoryAccess::RT_BXOR:
+    OS << "BXOR";
+    break;
+  case MemoryAccess::RT_BAND:
+    OS << "BAND";
+    break;
+  }
+  return OS;
+}
+
 void MemoryAccess::print(raw_ostream &OS) const {
   switch (Type) {
   case READ:
@@ -408,7 +463,7 @@ void MemoryAccess::print(raw_ostream &OS
     OS.indent(12) << "MayWriteAccess :=\t";
     break;
   }
-  OS << "[Reduction like: " << isReductionLike() << "]\n";
+  OS << "[Reduction Type: " << getReductionType() << "]\n";
   OS.indent(16) << getAccessRelationStr() << ";\n";
 }
 
@@ -820,10 +875,15 @@ void ScopStmt::checkForReductions() {
     if (!Valid)
       continue;
 
+    const LoadInst *Load =
+        dyn_cast<const LoadInst>(CandidatePair.first->getAccessInstruction());
+    MemoryAccess::ReductionType RT =
+        getReductionType(dyn_cast<BinaryOperator>(Load->user_back()), Load);
+
     // If no overlapping access was found we mark the load and store as
     // reduction like.
-    CandidatePair.first->markReductionLike();
-    CandidatePair.second->markReductionLike();
+    CandidatePair.first->markAsReductionLike(RT);
+    CandidatePair.second->markAsReductionLike(RT);
   }
 }
 

Modified: polly/trunk/test/ScopInfo/loop_affine_bound_0.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/loop_affine_bound_0.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/loop_affine_bound_0.ll (original)
+++ polly/trunk/test/ScopInfo/loop_affine_bound_0.ll Tue Jul  1 15:52:51 2014
@@ -59,6 +59,6 @@ return:
 ; CHECK:              [N, M] -> { Stmt_bb1[i0, i1] : i0 >= 0 and i0 <= 2 + 4N + 7M and i1 >= 0 and i1 <= 1 + 5N and N >= 0 };
 ; CHECK:          Scattering :=
 ; CHECK:              [N, M] -> { Stmt_bb1[i0, i1] -> scattering[0, i0, 0, i1, 0] };
-; CHECK:          MustWriteAccess := [Reduction like: 0]
+; CHECK:          MustWriteAccess := [Reduction Type: NONE]
 ; CHECK:              [N, M] -> { Stmt_bb1[i0, i1] -> MemRef_a[i0 + 128i1] };
 ; CHECK:  }

Modified: polly/trunk/test/ScopInfo/loop_affine_bound_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/loop_affine_bound_1.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/loop_affine_bound_1.ll (original)
+++ polly/trunk/test/ScopInfo/loop_affine_bound_1.ll Tue Jul  1 15:52:51 2014
@@ -58,6 +58,6 @@ return:
 ; CHECK:             [N, M] -> { Stmt_bb1[i0, i1] : i0 >= 0 and i0 <= 2 + 4N + 7M and i1 >= 0 and i1 <= 1 + 5N - i0 and i0 <= 1 + 5N };
 ; CHECK:         Scattering :=
 ; CHECK:             [N, M] -> { Stmt_bb1[i0, i1] -> scattering[0, i0, 0, i1, 0] };
-; CHECK:         MustWriteAccess := [Reduction like: 0]
+; CHECK:         MustWriteAccess := [Reduction Type: NONE]
 ; CHECK:             [N, M] -> { Stmt_bb1[i0, i1] -> MemRef_a[129i0 + 128i1] };
 ; CHECK: }

Modified: polly/trunk/test/ScopInfo/loop_affine_bound_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/loop_affine_bound_2.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/loop_affine_bound_2.ll (original)
+++ polly/trunk/test/ScopInfo/loop_affine_bound_2.ll Tue Jul  1 15:52:51 2014
@@ -69,6 +69,6 @@ return:
 ; CHECK:             [N, M] -> { Stmt_bb1[i0, i1] : i0 >= 0 and i0 <= 2 + 4N + 7M and i1 >= 0 and i1 <= 10 + 5N - 6M - 4i0 and 4i0 <= 10 + 5N - 6M };
 ; CHECK:         Scattering :=
 ; CHECK:             [N, M] -> { Stmt_bb1[i0, i1] -> scattering[0, i0, 0, i1, 0] };
-; CHECK:         MustWriteAccess := [Reduction like: 0]
+; CHECK:         MustWriteAccess := [Reduction Type: NONE]
 ; CHECK:             [N, M] -> { Stmt_bb1[i0, i1] -> MemRef_a[-1152 + 768M + 897i0 + 128i1] };
 ; CHECK: }

Modified: polly/trunk/test/ScopInfo/reduction_disabled_multiplicative.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_disabled_multiplicative.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_disabled_multiplicative.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_disabled_multiplicative.ll Tue Jul  1 15:52:51 2014
@@ -1,12 +1,12 @@
 ; RUN: opt -basicaa %loadPolly -polly-scops -analyze -polly-disable-multiplicative-reductions < %s | FileCheck %s
 ;
-; CHECK: ReadAccess :=       [Reduction like: 1]
+; CHECK: ReadAccess :=       [Reduction Type: ADD
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_sum[0] };
-; CHECK: MustWriteAccess :=  [Reduction like: 1]
+; CHECK: MustWriteAccess :=  [Reduction Type: ADD
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_sum[0] };
-; CHECK: ReadAccess :=       [Reduction like: 0]
+; CHECK: ReadAccess :=       [Reduction Type: NONE
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_prod[0] };
-; CHECK: MustWriteAccess :=  [Reduction like: 0]
+; CHECK: MustWriteAccess :=  [Reduction Type: NONE
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_prod[0] };
 ;
 ; int sum, prod;

Modified: polly/trunk/test/ScopInfo/reduction_escaping_intermediate.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_escaping_intermediate.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_escaping_intermediate.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_escaping_intermediate.ll Tue Jul  1 15:52:51 2014
@@ -10,11 +10,11 @@
 ;   }
 ; }
 ;
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: sums
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: sums
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: escape
 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
 

Modified: polly/trunk/test/ScopInfo/reduction_escaping_intermediate_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_escaping_intermediate_2.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_escaping_intermediate_2.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_escaping_intermediate_2.ll Tue Jul  1 15:52:51 2014
@@ -10,15 +10,15 @@
 ;   }
 ; }
 ;
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: sums
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: sums
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: escape
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: sums
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: escape
 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
 

Modified: polly/trunk/test/ScopInfo/reduction_invalid_different_operators.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_invalid_different_operators.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_invalid_different_operators.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_invalid_different_operators.ll Tue Jul  1 15:52:51 2014
@@ -10,7 +10,8 @@
 ;   return sum + sth;
 ; }
 ;
-; CHECK-NOT: Reduction like: 1
+; CHECK-NOT: Reduction Type: ADD
+; CHECK-NOT: Reduction Type: MUL
 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
 
 define i32 @f() {

Modified: polly/trunk/test/ScopInfo/reduction_invalid_overlapping_accesses.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_invalid_overlapping_accesses.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_invalid_overlapping_accesses.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_invalid_overlapping_accesses.ll Tue Jul  1 15:52:51 2014
@@ -10,7 +10,8 @@
 ;   }
 ; }
 ;
-; CHECK-NOT: Reduction like: 1
+; CHECK-NOT: Reduction Type: ADD
+; CHECK-NOT: Reduction Type: MUL
 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
 
 define void @f(i32* %sums) {

Modified: polly/trunk/test/ScopInfo/reduction_multiple_loops_array_sum.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_multiple_loops_array_sum.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_multiple_loops_array_sum.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_multiple_loops_array_sum.ll Tue Jul  1 15:52:51 2014
@@ -1,21 +1,21 @@
 ; RUN: opt -basicaa %loadPolly -polly-scops -analyze < %s | FileCheck %s
 ;
 ; CHECK: Stmt_for_body
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: MUL
 ; CHECK: MemRef_sum
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: MUL
 ; CHECK: MemRef_sum
 ; CHECK: Stmt_for_body3
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: MemRef_A
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: ADD
 ; CHECK: MemRef_sum
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: ADD
 ; CHECK: MemRef_sum
 ; CHECK: Stmt_for_end
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: MUL
 ; CHECK: MemRef_sum
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: MUL
 ; CHECK: MemRef_sum
 ;
 ; void f(int *restrict A, int *restrict sum) {

Modified: polly/trunk/test/ScopInfo/reduction_multiple_loops_array_sum_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_multiple_loops_array_sum_1.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_multiple_loops_array_sum_1.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_multiple_loops_array_sum_1.ll Tue Jul  1 15:52:51 2014
@@ -1,21 +1,21 @@
 ; RUN: opt -basicaa %loadPolly -polly-scops -analyze < %s | FileCheck %s
 ;
 ; CHECK: Stmt_for_body
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: MemRef_sum_04
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: MemRef_sum_12
 ; CHECK: Stmt_for_inc
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: ADD
 ; CHECK: MemRef_sum_12
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: MemRef_A
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: ADD
 ; CHECK: MemRef_sum_12
 ; CHECK: Stmt_for_inc5
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: MemRef_sum_12
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: MemRef_sum_04
 ;
 ; int f(int * __restrict__ A) {

Modified: polly/trunk/test/ScopInfo/reduction_multiple_simple_binary.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_multiple_simple_binary.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_multiple_simple_binary.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_multiple_simple_binary.ll Tue Jul  1 15:52:51 2014
@@ -1,30 +1,30 @@
 ; RUN: opt -basicaa %loadPolly -polly-scops -analyze < %s | FileCheck %s
 ;
-; CHECK: ReadAccess :=       [Reduction like: 0]
+; CHECK: ReadAccess :=       [Reduction Type: NONE
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_A[1 + i0] };
-; CHECK: ReadAccess :=       [Reduction like: 0]
+; CHECK: ReadAccess :=       [Reduction Type: NONE
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_A[i0] };
-; CHECK: MustWriteAccess :=  [Reduction like: 0]
+; CHECK: MustWriteAccess :=  [Reduction Type: NONE
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_first[0] };
-; CHECK: ReadAccess :=       [Reduction like: 1]
+; CHECK: ReadAccess :=       [Reduction Type: ADD
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_sum[0] };
-; CHECK: MustWriteAccess :=  [Reduction like: 1]
+; CHECK: MustWriteAccess :=  [Reduction Type: ADD
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_sum[0] };
-; CHECK: ReadAccess :=       [Reduction like: 0]
+; CHECK: ReadAccess :=       [Reduction Type: NONE
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_A[-1 + i0] };
-; CHECK: ReadAccess :=       [Reduction like: 0]
+; CHECK: ReadAccess :=       [Reduction Type: NONE
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_A[i0] };
-; CHECK: MustWriteAccess :=  [Reduction like: 0]
+; CHECK: MustWriteAccess :=  [Reduction Type: NONE
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_middle[0] };
-; CHECK: ReadAccess :=       [Reduction like: 1]
+; CHECK: ReadAccess :=       [Reduction Type: MUL
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_prod[0] };
-; CHECK: MustWriteAccess :=  [Reduction like: 1]
+; CHECK: MustWriteAccess :=  [Reduction Type: MUL
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_prod[0] };
-; CHECK: ReadAccess :=       [Reduction like: 0]
+; CHECK: ReadAccess :=       [Reduction Type: NONE
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_A[-1 + i0] };
-; CHECK: ReadAccess :=       [Reduction like: 0]
+; CHECK: ReadAccess :=       [Reduction Type: NONE
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_A[1 + i0] };
-; CHECK: MustWriteAccess :=  [Reduction like: 0]
+; CHECK: MustWriteAccess :=  [Reduction Type: NONE
 ; CHECK:     { Stmt_for_body[i0] -> MemRef_last[0] };
 ;
 ; int first, sum, middle, prod, last;

Modified: polly/trunk/test/ScopInfo/reduction_non_overlapping_chains.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_non_overlapping_chains.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_non_overlapping_chains.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_non_overlapping_chains.ll Tue Jul  1 15:52:51 2014
@@ -1,9 +1,9 @@
 ; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
 ;
-; CHECK: Reduction like: 1
-; CHECK: Reduction like: 1
-; CHECK: Reduction like: 1
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: ADD
+; CHECK: Reduction Type: ADD
+; CHECK: Reduction Type: MUL
+; CHECK: Reduction Type: MUL
 ;
 ; void f(int *sums) {
 ;   for (int i = 0; i < 1024; i++) {

Modified: polly/trunk/test/ScopInfo/reduction_only_reduction_like_access.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_only_reduction_like_access.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_only_reduction_like_access.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_only_reduction_like_access.ll Tue Jul  1 15:52:51 2014
@@ -1,6 +1,6 @@
 ; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
 ;
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: ADD
 ;
 ; void f(int *sum) {
 ;   for (int i = 0; i < 100; i++)

Modified: polly/trunk/test/ScopInfo/reduction_simple_fp.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_simple_fp.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_simple_fp.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_simple_fp.ll Tue Jul  1 15:52:51 2014
@@ -1,9 +1,9 @@
 ; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
 ;
 ; CHECK: Function: f_no_fast_math
-; CHECK: Reduction like: 0
+; CHECK: Reduction Type: NONE
 ; CHECK: Function: f_fast_math
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: ADD
 ;
 ; void f(float *sum) {
 ;   for (int i = 0; i < 100; i++)

Modified: polly/trunk/test/ScopInfo/reduction_simple_w_constant.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_simple_w_constant.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_simple_w_constant.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_simple_w_constant.ll Tue Jul  1 15:52:51 2014
@@ -1,6 +1,6 @@
 ; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
 ;
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: ADD
 ;
 ; void f(int *sum) {
 ;   for (int i = 0; i <= 100; i++)

Modified: polly/trunk/test/ScopInfo/reduction_simple_w_iv.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/reduction_simple_w_iv.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/reduction_simple_w_iv.ll (original)
+++ polly/trunk/test/ScopInfo/reduction_simple_w_iv.ll Tue Jul  1 15:52:51 2014
@@ -1,6 +1,6 @@
 ; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
 ;
-; CHECK: Reduction like: 1
+; CHECK: Reduction Type: ADD
 ;
 ; void f(int* sum) {
 ;   for (int i = 0; i <= 100; i++)

Modified: polly/trunk/test/ScopInfo/simple_loop_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/simple_loop_1.ll?rev=212126&r1=212125&r2=212126&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/simple_loop_1.ll (original)
+++ polly/trunk/test/ScopInfo/simple_loop_1.ll Tue Jul  1 15:52:51 2014
@@ -30,5 +30,5 @@ return:
 ; CHECK:            [N] -> { Stmt_bb[i0] : i0 >= 0 and i0 <= -1 + N };
 ; CHECK:        Scattering :=
 ; CHECK:            [N] -> { Stmt_bb[i0] -> scattering[0, i0, 0] };
-; CHECK:        MustWriteAccess := [Reduction like: 0]
+; CHECK:        MustWriteAccess := [Reduction Type: NONE]
 ; CHECK:            [N] -> { Stmt_bb[i0] -> MemRef_a[i0] };





More information about the llvm-commits mailing list