[llvm-commits] [polly] r144229 - in /polly/trunk: include/polly/Support/AffineSCEVIterator.h lib/Analysis/ScopDetection.cpp lib/Analysis/TempScopInfo.cpp lib/Support/AffSCEVItTester.cpp lib/Support/CMakeLists.txt test/AffineIterator/loop_static_bound.ll test/AffineIterator/no_tagetdata.ll test/AffineIterator/no_tagetdata_loop.ll test/AffineIterator/simple_0.ll test/AffineIterator/simple_1.ll test/AffineIterator/simple_loop.ll test/AffineIterator/simple_nest.ll

Tobias Grosser grosser at fim.uni-passau.de
Wed Nov 9 14:35:01 PST 2011


Author: grosser
Date: Wed Nov  9 16:35:00 2011
New Revision: 144229

URL: http://llvm.org/viewvc/llvm-project?rev=144229&view=rev
Log:
Remove AffineSCEVIterator

We do not use it anymore. It was replaced by SCEVVisitors like the
SCEVValidator.

Removed:
    polly/trunk/include/polly/Support/AffineSCEVIterator.h
    polly/trunk/lib/Support/AffSCEVItTester.cpp
    polly/trunk/test/AffineIterator/loop_static_bound.ll
    polly/trunk/test/AffineIterator/no_tagetdata.ll
    polly/trunk/test/AffineIterator/no_tagetdata_loop.ll
    polly/trunk/test/AffineIterator/simple_0.ll
    polly/trunk/test/AffineIterator/simple_1.ll
    polly/trunk/test/AffineIterator/simple_loop.ll
    polly/trunk/test/AffineIterator/simple_nest.ll
Modified:
    polly/trunk/lib/Analysis/ScopDetection.cpp
    polly/trunk/lib/Analysis/TempScopInfo.cpp
    polly/trunk/lib/Support/CMakeLists.txt

Removed: polly/trunk/include/polly/Support/AffineSCEVIterator.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/Support/AffineSCEVIterator.h?rev=144228&view=auto
==============================================================================
--- polly/trunk/include/polly/Support/AffineSCEVIterator.h (original)
+++ polly/trunk/include/polly/Support/AffineSCEVIterator.h (removed)
@@ -1,292 +0,0 @@
-//===-- AffineSCEVIterator.h - Iterate the SCEV in an affine way -*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// The iterator can be used to iterate over the affine component of the SCEV
-// expression.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef AFFINE_SCEV_ITERATOR_H
-#define AFFINE_SCEV_ITERATOR_H
-
-#include "llvm/Analysis/LoopInfo.h"
-#include "llvm/Analysis/ScalarEvolution.h"
-#include "llvm/Analysis/ScalarEvolutionExpressions.h"
-
-#include <map>
-
-#include "llvm/ADT/SmallVector.h"
-
-using namespace llvm;
-
-namespace polly {
-
-/// @brief The itertor transform the scalar expressions to the form of sum of
-/// (constant * variable)s, and return the variable/constant pairs one by one
-/// on the fly.
-///
-/// For example, we can write SCEV:
-///      {{%x,+,sizeof(i32)}<%bb2.preheader>,+,(4 * sizeof(i32))}<%bb1>
-/// in affine form:
-///      (4 * sizeof(i32)) * %indvar + sizeof(i32) * %0 + 1 * %x + 0 * 1
-/// so we can get the follow pair from the iterator:
-///      {%indvar, (4 * sizeof(i32))}, {%0, sizeof(i32)}, {%x, 1} and {1, 0}
-/// where %indvar is the induction variable of loop %bb1 and %0 is the induction
-/// variable of loop %bb2.preheader.
-///
-/// In the returned pair,
-/// The "first" field is the variable part, the "second" field constant part.
-/// And the translation part of the expression will always return last.
-///
-class AffineSCEVIterator : public std::iterator<std::forward_iterator_tag,
-                            std::pair<const SCEV*, const SCEV*>, ptrdiff_t>,
-                            SCEVVisitor<AffineSCEVIterator,
-                                        std::pair<const SCEV*, const SCEV*> >
-                            {
-  typedef std::iterator<std::forward_iterator_tag,
-                       std::pair<const SCEV*, const SCEV*>, ptrdiff_t> super;
-
-  friend struct llvm::SCEVVisitor<AffineSCEVIterator,
-                            std::pair<const SCEV*, const SCEV*> >;
-
-  ScalarEvolution *SE;
-public:
-  typedef super::value_type value_type;
-  typedef super::pointer    ptr_type;
-  typedef AffineSCEVIterator Self;
-private:
-  typedef SCEVNAryExpr::op_iterator scev_op_it;
-
-  // The stack help us remember the SCEVs that not visit yet.
-  SmallVector<const SCEV*, 8> visitStack;
-
-  // The current value of this iterator.
-  value_type val;
-
-  const SCEVConstant* getSCEVOne(const SCEV* S) const {
-    return cast<SCEVConstant>(SE->getConstant(S->getType(), 1));
-  }
-
-  //===-------------------------------------------------------------------===//
-  /// Functions for SCEVVisitor.
-  ///
-  /// These function compute the constant part and variable part of the SCEV,
-  /// and return them in a std::pair, where the first field is the variable,
-  /// and the second field is the constant.
-  ///
-  value_type visitConstant(const SCEVConstant *S) {
-    return std::make_pair(getSCEVOne(S), S);
-  }
-
-  value_type visitUnknown(const SCEVUnknown* S) {
-    Type *AllocTy;
-    Constant *FieldNo;
-    // We treat these as constant.
-    if (S->isSizeOf  (AllocTy) ||
-        S->isAlignOf (AllocTy) ||
-        S->isOffsetOf(AllocTy, FieldNo))
-      return std::make_pair(getSCEVOne(S), S);
-
-    return std::make_pair(S, getSCEVOne(S));
-  }
-
-  value_type visitMulExpr(const SCEVMulExpr* S) {
-    SmallVector<const SCEV*, 4> Coeffs, Variables;
-
-    // Do not worry about the Constant * Variable * (Variable + Variable)
-    // MulExpr, we will never get a affine expression from it, so we just
-    // leave it there.
-    for (scev_op_it I = S->op_begin(), E = S->op_end(); I != E; ++I) {
-      // Get the constant part and the variable part of each operand.
-      value_type res = visit(*I);
-
-      Coeffs.push_back(res.second);
-      Variables.push_back(res.first);
-    }
-
-    // Get the constant part and variable part of this MulExpr by
-    // multiply them together.
-    const SCEV *Coeff = SE->getMulExpr(Coeffs);
-    // There maybe "sizeof" and others.
-    // TODO: Assert the allowed coeff type.
-    // assert(Coeff && "Expect Coeff to be a const!");
-
-    const SCEV *Var = SE->getMulExpr(Variables);
-
-    return std::make_pair(Var, Coeff);
-  }
-
-  value_type visitCastExpr(const SCEVCastExpr *S) {
-    return std::make_pair(S, getSCEVOne(S));
-  }
-
-  value_type visitTruncateExpr(const SCEVTruncateExpr *S) {
-    return visitCastExpr(S);
-  }
-
-  value_type visitZeroExtendExpr(const SCEVZeroExtendExpr *S) {
-    return visitCastExpr(S);
-  }
-
-  value_type visitSignExtendExpr(const SCEVSignExtendExpr *S) {
-    return visitCastExpr(S);
-  }
-
-  value_type visitAddExpr(const SCEVAddExpr *S) {
-    // AddExpr will handled out in visit Next;
-    return std::make_pair(S, getSCEVOne(S));
-  }
-
-  value_type visitAddRecExpr(const SCEVAddRecExpr *S) {
-    // AddRecExpr will handled out in visit Next;
-    return std::make_pair(S, getSCEVOne(S));
-  }
-
-  value_type visitUDivExpr(const SCEVUDivExpr *S) {
-    return std::make_pair(S, getSCEVOne(S));
-  }
-
-  value_type visitSMaxExpr(const SCEVSMaxExpr *S) {
-    return std::make_pair(S, getSCEVOne(S));
-  }
-
-  value_type visitUMaxExpr(const SCEVUMaxExpr *S) {
-    return std::make_pair(S, getSCEVOne(S));
-  }
-
-  /// Get the next {variable, constant} pair of the SCEV.
-  value_type visitNext() {
-    value_type ret(0, 0);
-
-    if (visitStack.empty())
-      return ret;
-    const SCEV* nextS = visitStack.back();
-
-    if (const SCEVAddRecExpr *ARec = dyn_cast<SCEVAddRecExpr>(nextS)){
-      // Visiting the AddRec, check if its Affine;
-      PHINode *IV = ARec->getLoop()->getCanonicalInductionVariable();
-      // Only decompose the AddRec, if the loop has a canonical induction
-      // variable.
-      if (ARec->isAffine() && IV != 0) {
-        ret = visit(ARec->getStepRecurrence(*SE));
-        if (isa<SCEVConstant>(ret.first)) { // If the step is constant.
-          const SCEV *Start = ARec->getStart();
-          visitStack.back() = Start;
-
-          // The AddRec is expect to be decomposed to
-          //
-          // | start + step * {1, +, 1}<loop>
-          //
-          // Now we get the {1, +, 1}<loop> part.
-          ret.first = SE->getSCEV(IV);
-
-          // Push CouldNotCompute to take the place.
-          visitStack.push_back(SE->getCouldNotCompute());
-
-          return ret;
-        }
-        // The step is not a constant. Then this AddRec is not Affine or
-        // no canonical induction variable found.
-        // Fall through.
-      }
-    }
-
-    // Get the constant part and variable part of the SCEV.
-    ret = visit(nextS);
-
-    // If the reach the last constant
-    if (isa<SCEVConstant>(ret.first) && (visitStack.size() != 1)) {
-      // Else, merge all constant component, we will output it at last.
-      visitStack.front() = SE->getAddExpr(visitStack.front(), ret.second);
-      //assert(isa<SCEVConstant>(visitStack.front().first));
-      // Pop the top constant, because it already merged into the bottom of the Stack
-      // and output it last.
-      visitStack.pop_back();
-      // Try again.
-      return visitNext();
-    }
-    // Not a constant or Stack not empty
-    // If ret is in (xxx) * AddExpr form, we will decompose the AddExpr
-    else if (const SCEVAddExpr *AddExpr = dyn_cast<SCEVAddExpr>(ret.first)) {
-      // Pop the current SCEV, we will decompose it.
-      visitStack.pop_back();
-      assert(AddExpr->getNumOperands() && "AddExpr without operand?");
-      for (scev_op_it I = AddExpr->op_begin(), E = AddExpr->op_end(); I != E; ++I){
-        visitStack.push_back(SE->getMulExpr(ret.second, *I));
-      }
-      // Try again with the new SCEV.
-      return visitNext();
-    }
-
-    return ret;
-  }
-
-public:
-
-  /// @brief Create the iterator from a SCEV and the ScalarEvolution analysis.
-  AffineSCEVIterator(const SCEV* S, ScalarEvolution *se ) : SE(se) {
-    // Dont iterate CouldNotCompute.
-    if (isa<SCEVCouldNotCompute>(S))
-      return;
-
-    Type *Ty = S->getType();
-
-    // Init the constant component.
-    visitStack.push_back(SE->getConstant(Ty, 0));
-
-    // Get the first affine component.
-    visitStack.push_back(S);
-    val = visitNext();
-  }
-
-  /// @brief Create an end iterator.
-  inline AffineSCEVIterator() {}
-
-  inline bool operator==(const Self& x) const {
-    return visitStack == x.visitStack;
-  }
-  inline bool operator!=(const Self& x) const { return !operator==(x); }
-
-  /// @brief Return the current (constant * variable) component of the SCEV.
-  ///
-  /// @return The "first" field of the pair is the variable part,
-  ///         the "second" field of the pair is the constant part.
-  inline value_type operator*() const {
-    assert(val.first && val.second && "Cant dereference iterator!");
-    return val;
-  }
-
-  inline const value_type* operator->() const {
-    assert(val.first && val.second && "Cant dereference iterator!");
-    return &val;
-  }
-
-  inline Self& operator++() {   // Preincrement
-    assert(!visitStack.empty() && "Cant ++ iterator!");
-    // Pop the last SCEV.
-    visitStack.pop_back();
-    val = visitNext();
-    return *this;
-  }
-
-  inline Self operator++(int) { // Postincrement
-    Self tmp = *this; ++*this; return tmp;
-  }
-};
-
-inline static AffineSCEVIterator affine_begin(const SCEV* S, ScalarEvolution *SE) {
-  return AffineSCEVIterator(S, SE);
-}
-
-inline static AffineSCEVIterator affine_end() {
-  return AffineSCEVIterator();
-}
-
-} // end namespace polly
-#endif

Modified: polly/trunk/lib/Analysis/ScopDetection.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopDetection.cpp?rev=144229&r1=144228&r2=144229&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopDetection.cpp (original)
+++ polly/trunk/lib/Analysis/ScopDetection.cpp Wed Nov  9 16:35:00 2011
@@ -49,12 +49,13 @@
 #include "polly/LinkAllPasses.h"
 #include "polly/Support/ScopHelper.h"
 #include "polly/Support/SCEVValidator.h"
-#include "polly/Support/AffineSCEVIterator.h"
 
 #include "llvm/LLVMContext.h"
 #include "llvm/ADT/Statistic.h"
 #include "llvm/Analysis/AliasAnalysis.h"
+#include "llvm/Analysis/LoopInfo.h"
 #include "llvm/Analysis/RegionIterator.h"
+#include "llvm/Analysis/ScalarEvolution.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Assembly/Writer.h"
 

Modified: polly/trunk/lib/Analysis/TempScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/TempScopInfo.cpp?rev=144229&r1=144228&r2=144229&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/TempScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/TempScopInfo.cpp Wed Nov  9 16:35:00 2011
@@ -16,7 +16,6 @@
 #include "polly/TempScopInfo.h"
 
 #include "polly/LinkAllPasses.h"
-#include "polly/Support/AffineSCEVIterator.h"
 #include "polly/Support/GICHelper.h"
 #include "polly/Support/ScopHelper.h"
 #include "polly/Support/SCEVValidator.h"
@@ -25,6 +24,8 @@
 #include "llvm/Analysis/RegionIterator.h"
 #include "llvm/Target/TargetData.h"
 #include "llvm/Assembly/Writer.h"
+#include "llvm/Analysis/LoopInfo.h"
+#include "llvm/Analysis/ScalarEvolution.h"
 #include "llvm/ADT/STLExtras.h"
 
 #define DEBUG_TYPE "polly-analyze-ir"

Removed: polly/trunk/lib/Support/AffSCEVItTester.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Support/AffSCEVItTester.cpp?rev=144228&view=auto
==============================================================================
--- polly/trunk/lib/Support/AffSCEVItTester.cpp (original)
+++ polly/trunk/lib/Support/AffSCEVItTester.cpp (removed)
@@ -1,121 +0,0 @@
-//===- AffSCEVItTester.cpp - Test the affine scev itertor. ----------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Test the affine scev itertor.
-//
-//===----------------------------------------------------------------------===//
-
-
-#include "polly/Support/AffineSCEVIterator.h"
-
-#include "llvm/Analysis/LoopInfo.h"
-#include "llvm/Analysis/Passes.h"
-#include "llvm/Assembly/Writer.h"
-#include "llvm/Support/InstIterator.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include <map>
-
-using namespace llvm;
-using namespace polly;
-
-static void printSCEVAffine(raw_ostream &OS, const SCEV* S,
-                            ScalarEvolution *SE) {
-
-  for (AffineSCEVIterator I = affine_begin(S, SE), E = affine_end();
-    I != E; ++I) {
-      OS << *I->second << " * " << *I->first;
-
-      // The constant part of the SCEV will always be the last one.
-      if (!isa<SCEVConstant>(S))
-        OS << " + ";
-  }
-}
-
-namespace {
-struct AffSCEVItTester : public FunctionPass {
-  static char ID;
-
-  ScalarEvolution *SE;
-  LoopInfo *LI;
-  Function *F;
-
-  explicit AffSCEVItTester() : FunctionPass(ID), SE(0), LI(0), F(0) {}
-
-  virtual bool runOnFunction(Function &F) {
-    SE = &getAnalysis<ScalarEvolution>();
-    LI = &getAnalysis<LoopInfo>();
-    this->F = &F;
-    return false;
-  }
-
-  virtual void print(raw_ostream &OS, const Module *M) const {
-    for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I)
-      if (SE->isSCEVable(I->getType())) {
-        OS << *I << '\n';
-        OS << "  -->  ";
-        const SCEV *SV = SE->getSCEV(&*I);
-
-        if (Loop *L = LI->getLoopFor(I->getParent()))
-          SV = SE->getSCEVAtScope(SV, L);
-        SV->print(OS);
-        OS << "\n";
-        OS << "affine function  -->  ";
-        printSCEVAffine(OS, SV, SE);
-        OS << "\n";
-      }
-
-      for (LoopInfo::iterator I = LI->begin(), E = LI->end(); I != E; ++I)
-        PrintLoopInfo(OS, *I);
-  }
-
-  void PrintLoopInfo(raw_ostream &OS, const Loop *L) const{
-    // Print all inner loops first
-    for (Loop::iterator I = L->begin(), E = L->end(); I != E; ++I)
-      PrintLoopInfo(OS, *I);
-
-    OS << "Loop ";
-    WriteAsOperand(OS, L->getHeader(), /*PrintType=*/false);
-    OS << ": ";
-
-    if (SE->hasLoopInvariantBackedgeTakenCount(L)) {
-      const SCEV *SV = SE->getBackedgeTakenCount(L);
-      OS << "backedge-taken count is ";
-      printSCEVAffine(OS, SV, SE);
-
-      OS << "\nloop count in scev ";
-      SV->print(OS);
-      OS << "\n";
-    }
-    else {
-      OS << "Unpredictable\n";
-    }
-  }
-
-  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-    AU.addRequired<ScalarEvolution>();
-    AU.addRequired<LoopInfo>();
-    AU.setPreservesAll();
-  }
-};
-} // end namespace
-
-
-char AffSCEVItTester::ID = 0;
-
-RegisterPass<AffSCEVItTester> B("print-scev-affine",
-                                "Print the SCEV expressions in affine form.",
-                                true,
-                                true);
-
-namespace polly {
-Pass *createAffSCEVItTesterPass() {
-  return new AffSCEVItTester();
-}
-}

Modified: polly/trunk/lib/Support/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Support/CMakeLists.txt?rev=144229&r1=144228&r2=144229&view=diff
==============================================================================
--- polly/trunk/lib/Support/CMakeLists.txt (original)
+++ polly/trunk/lib/Support/CMakeLists.txt Wed Nov  9 16:35:00 2011
@@ -1,5 +1,4 @@
 add_polly_library(PollySupport
-  AffSCEVItTester.cpp
   GICHelper.cpp
   SCEVValidator.cpp
   ScopHelper.cpp

Removed: polly/trunk/test/AffineIterator/loop_static_bound.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/AffineIterator/loop_static_bound.ll?rev=144228&view=auto
==============================================================================
--- polly/trunk/test/AffineIterator/loop_static_bound.ll (original)
+++ polly/trunk/test/AffineIterator/loop_static_bound.ll (removed)
@@ -1,24 +0,0 @@
-; RUN: opt %loadPolly %defaultOpts -print-scev-affine  -analyze  < %s | FileCheck %s
-
-define void @f(i32* nocapture %a) nounwind {
-entry:
-  %0 = tail call i32 (...)* @rnd() nounwind       ; <i32> [#uses=2]
-; CHECK: 1 * %0 + 0 * 1
-  %1 = icmp sgt i32 %0, 0                         ; <i1> [#uses=1]
-  br i1 %1, label %bb, label %return
-
-bb:                                               ; preds = %bb, %entry
-  %i.03 = phi i32 [ 0, %entry ], [ %3, %bb ]      ; <i32> [#uses=1]
-; CHECK: 1 * {0,+,1}<nuw><nsw><%bb> + 0 * 1
-  %2 = tail call i32 (...)* @rnd() nounwind       ; <i32> [#uses=0]
-; CHECK: 1 * %2 + 0 * 1
-  %3 = add nsw i32 %i.03, 1                       ; <i32> [#uses=2]
-; CHECK: 1 * {0,+,1}<nuw><nsw><%bb> + 1 * 1
-  %exitcond = icmp eq i32 %3, %0                  ; <i1> [#uses=1]
-  br i1 %exitcond, label %return, label %bb
-
-return:                                           ; preds = %bb, %entry
-  ret void
-}
-
-declare i32 @rnd(...)

Removed: polly/trunk/test/AffineIterator/no_tagetdata.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/AffineIterator/no_tagetdata.ll?rev=144228&view=auto
==============================================================================
--- polly/trunk/test/AffineIterator/no_tagetdata.ll (original)
+++ polly/trunk/test/AffineIterator/no_tagetdata.ll (removed)
@@ -1,20 +0,0 @@
-; RUN: opt %loadPolly %defaultOpts -print-scev-affine  -analyze  < %s | FileCheck %s
-
-define i32 @f(i64 %a, i64 %b, i64 %c, [8 x i32]* nocapture %x) nounwind readonly {
-entry:
-  %0 = shl i64 %a, 1                              ; <i64> [#uses=1]
-  %1 = add nsw i64 %0, %b                         ; <i64> [#uses=1]
-; CHECK: 1 * %b + 2 * %a + 0 * 1
-  %2 = shl i64 %1, 1                              ; <i64> [#uses=1]
-; CHECK: 2 * %b + 4 * %a + 0 * 1
-  %3 = add i64 %2, 2                              ; <i64> [#uses=1]
-  %4 = mul i64 %a, 3                              ; <i64> [#uses=1]
-  %5 = shl i64 %b, 2                              ; <i64> [#uses=1]
-  %6 = add nsw i64 %4, 2                          ; <i64> [#uses=1]
-  %7 = add nsw i64 %6, %c                         ; <i64> [#uses=1]
-  %8 = add nsw i64 %7, %5                         ; <i64> [#uses=1]
-  %9 = getelementptr inbounds [8 x i32]* %x, i64 %3, i64 %8 ; <i32*> [#uses=1]
-; CHECK: 1 * %x + sizeof(i32) * %c + (35 * sizeof(i32)) * %a + (20 * sizeof(i32)) * %b + (18 * sizeof(i32)) * 1
-  %10 = load i32* %9, align 4                     ; <i32> [#uses=1]
-  ret i32 %10
-}

Removed: polly/trunk/test/AffineIterator/no_tagetdata_loop.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/AffineIterator/no_tagetdata_loop.ll?rev=144228&view=auto
==============================================================================
--- polly/trunk/test/AffineIterator/no_tagetdata_loop.ll (original)
+++ polly/trunk/test/AffineIterator/no_tagetdata_loop.ll (removed)
@@ -1,44 +0,0 @@
-; RUN: opt %loadPolly %defaultOpts -print-scev-affine  -analyze  < %s | FileCheck %s
-
-define void @f([8 x i32]* nocapture %x) nounwind {
-entry:
-  br label %bb5.preheader
-
-bb2:                                              ; preds = %bb3.preheader, %bb2
-  %k.09 = phi i64 [ 0, %bb3.preheader ], [ %1, %bb2 ] ; <i64> [#uses=2]
-  %tmp19 = add i64 %k.09, %tmp18                  ; <i64> [#uses=1]
-  %scevgep = getelementptr [8 x i32]* %x, i64 2, i64 %tmp19 ; <i32*> [#uses=1]
-; CHECK: sizeof(i32) * {0,+,1}<nuw><nsw><%bb2> + (20 * sizeof(i32)) * {0,+,1}<%bb3.preheader> + (35 * sizeof(i32)) * {0,+,1}<%bb5.preheader> + 1 * %x + (18 * sizeof(i32)) * 1
-  %0 = tail call i32 (...)* @rnd() nounwind       ; <i32> [#uses=1]
-  store i32 %0, i32* %scevgep, align 4
-  %1 = add nsw i64 %k.09, 1                       ; <i64> [#uses=2]
-  %exitcond = icmp eq i64 %1, 64                  ; <i1> [#uses=1]
-  br i1 %exitcond, label %bb4, label %bb2
-
-bb4:                                              ; preds = %bb2
-  %2 = add i64 %j.010, 1                          ; <i64> [#uses=2]
-  %exitcond20 = icmp eq i64 %2, 64                ; <i1> [#uses=1]
-  br i1 %exitcond20, label %bb6, label %bb3.preheader
-
-bb3.preheader:                                    ; preds = %bb5.preheader, %bb4
-  %j.010 = phi i64 [ 0, %bb5.preheader ], [ %2, %bb4 ] ; <i64> [#uses=2]
-  %tmp21 = mul i64 %j.010, 20                     ; <i64> [#uses=1]
-  %tmp18 = add i64 %tmp21, %tmp23                 ; <i64> [#uses=1]
-  br label %bb2
-
-bb6:                                              ; preds = %bb4
-  %3 = add i64 %i.012, 1                          ; <i64> [#uses=2]
-  %exitcond25 = icmp eq i64 %3, 64                ; <i1> [#uses=1]
-  br i1 %exitcond25, label %return, label %bb5.preheader
-
-bb5.preheader:                                    ; preds = %bb6, %entry
-  %i.012 = phi i64 [ 0, %entry ], [ %3, %bb6 ]    ; <i64> [#uses=2]
-  %tmp = mul i64 %i.012, 35                       ; <i64> [#uses=1]
-  %tmp23 = add i64 %tmp, 2                        ; <i64> [#uses=1]
-  br label %bb3.preheader
-
-return:                                           ; preds = %bb6
-  ret void
-}
-
-declare i32 @rnd(...)

Removed: polly/trunk/test/AffineIterator/simple_0.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/AffineIterator/simple_0.ll?rev=144228&view=auto
==============================================================================
--- polly/trunk/test/AffineIterator/simple_0.ll (original)
+++ polly/trunk/test/AffineIterator/simple_0.ll (removed)
@@ -1,20 +0,0 @@
-; RUN: opt %loadPolly %defaultOpts -print-scev-affine  -analyze  < %s | FileCheck %s
-
-define i32 @f(i32 %a, i32 %b, i32 %c, i32 %d, i32* nocapture %x) nounwind readnone {
-entry:
-  %0 = shl i32 %a, 1                              ; <i32> [#uses=1]
-; CHECK: 2 * %a + 0 * 1
-  %1 = mul i32 %b, 3                              ; <i32> [#uses=1]
-; CHECK: 3 * %b + 0 * 1
-  %2 = shl i32 %d, 2                              ; <i32> [#uses=1]
-; CHECK: 4 * %d + 0 * 1
-  %3 = add nsw i32 %0, 5                          ; <i32> [#uses=1]
-; CHECK: 2 * %a + 5 * 1
-  %4 = add nsw i32 %3, %c                         ; <i32> [#uses=1]
-; CHECK:  1 * %c + 2 * %a + 5 * 1
-  %5 = add nsw i32 %4, %1                         ; <i32> [#uses=1]
-; CHECK: 1 * %c + 3 * %b + 2 * %a + 5 * 1
-  %6 = add nsw i32 %5, %2                         ; <i32> [#uses=1]
-; CHECK: 1 * %c + 4 * %d + 3 * %b + 2 * %a + 5 * 1
-  ret i32 %6
-}

Removed: polly/trunk/test/AffineIterator/simple_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/AffineIterator/simple_1.ll?rev=144228&view=auto
==============================================================================
--- polly/trunk/test/AffineIterator/simple_1.ll (original)
+++ polly/trunk/test/AffineIterator/simple_1.ll (removed)
@@ -1,24 +0,0 @@
-; RUN: opt %loadPolly %defaultOpts -print-scev-affine  -analyze  < %s | FileCheck %s
-
-target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
-target triple = "x86_64-unknown-linux-gnu"
-
-define i32 @f(i32 %a, i32 %b, i32 %c, i64 %d, i8 signext %e, i32 %f, i32 %g, i32 %h) nounwind readnone {
-entry:
-  %0 = mul i32 %a, 3                              ; <i32> [#uses=1]
-  %1 = mul i32 %b, 5                              ; <i32> [#uses=1]
-  %2 = mul i32 %1, %c                             ; <i32> [#uses=1]
-; CHECK: 5 * (%b * %c) + 0 * 1
-  %3 = mul i32 %2, %f                             ; <i32> [#uses=1]
-; CHECK: 5 * (%b * %c * %f) + 0 * 1
-  %4 = sext i8 %e to i32                          ; <i32> [#uses=1]
-  %5 = shl i32 %4, 2                              ; <i32> [#uses=1]
-  %6 = trunc i64 %d to i32                        ; <i32> [#uses=1]
-  %7 = mul i32 %6, %h                             ; <i32> [#uses=1]
-  %8 = add nsw i32 %0, %g                         ; <i32> [#uses=1]
-  %9 = add nsw i32 %8, %5                         ; <i32> [#uses=1]
-  %10 = add nsw i32 %9, %3                        ; <i32> [#uses=1]
-  %11 = add nsw i32 %10, %7                       ; <i32> [#uses=1]
-; CHECK: 1 * %g + 1 * ((trunc i64 %d to i32) * %h) + 5 * (%b * %c * %f) + 4 * (sext i8 %e to i32) + 3 * %a + 0 * 1
-  ret i32 %11
-}

Removed: polly/trunk/test/AffineIterator/simple_loop.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/AffineIterator/simple_loop.ll?rev=144228&view=auto
==============================================================================
--- polly/trunk/test/AffineIterator/simple_loop.ll (original)
+++ polly/trunk/test/AffineIterator/simple_loop.ll (removed)
@@ -1,25 +0,0 @@
-; RUN: opt %loadPolly %defaultOpts -print-scev-affine  -analyze  < %s | FileCheck %s
-
-target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
-target triple = "x86_64-unknown-linux-gnu"
-
-define i32 @f(i32 %a, i32 %b, i32 %c, i32 %d, i32* nocapture %x) nounwind {
-entry:
-  br label %bb
-
-bb:                                               ; preds = %bb, %entry
-  %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %bb ] ; <i64> [#uses=3]
-; CHECK: 1 * {0,+,1}<%bb> + 0 * 1
-  %scevgep = getelementptr i32* %x, i64 %indvar   ; <i32*> [#uses=1]
-; CHECK: 4 *  {0,+,1}<%bb> + 1 * %x + 0 * 1
-  %i.04 = trunc i64 %indvar to i32                ; <i32> [#uses=1]
-; CHECK: 1 *  {0,+,1}<%bb> + 0 * 1
-  store i32 %i.04, i32* %scevgep, align 4
-  %indvar.next = add i64 %indvar, 1               ; <i64> [#uses=2]
-; CHECK: 1 *  {0,+,1}<%bb> + 1 * 1
-  %exitcond = icmp eq i64 %indvar.next, 64        ; <i1> [#uses=1]
-  br i1 %exitcond, label %bb2, label %bb
-
-bb2:                                              ; preds = %bb
-  ret i32 %a
-}

Removed: polly/trunk/test/AffineIterator/simple_nest.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/AffineIterator/simple_nest.ll?rev=144228&view=auto
==============================================================================
--- polly/trunk/test/AffineIterator/simple_nest.ll (original)
+++ polly/trunk/test/AffineIterator/simple_nest.ll (removed)
@@ -1,38 +0,0 @@
-; RUN: opt %loadPolly %defaultOpts -print-scev-affine  -analyze  < %s | FileCheck %s
-
-target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
-target triple = "x86_64-unknown-linux-gnu"
-
-define i32 @f(i32 %a, i32 %b, i32 %c, i32 %d, [4 x i32]* nocapture %x) nounwind {
-entry:
-  br label %bb2.preheader
-
-bb1:                                              ; preds = %bb2.preheader, %bb1
-  %indvar = phi i64 [ 0, %bb2.preheader ], [ %indvar.next, %bb1 ] ; <i64> [#uses=3]
-; CHECK: 1 * {0,+,1}<%bb1> + 0 * 1
-  %scevgep = getelementptr [4 x i32]* %x, i64 %indvar, i64 %0 ; <i32*> [#uses=1]
-; CHECK: 16 * {0,+,1}<%bb1> + 4 * {0,+,1}<%bb2.preheader> + 1 * %x + 0 * 1
-  %tmp = mul i64 %indvar, %0                      ; <i64> [#uses=1]
-; CHECK: 1 * {0,+,{0,+,1}<%bb2.preheader>}<%bb1> + 0 * 1
-  %tmp13 = trunc i64 %tmp to i32                  ; <i32> [#uses=1]
-; CHECK: 1 * {0,+,{0,+,1}<%bb2.preheader>}<%bb1> + 0 * 1
-  store i32 %tmp13, i32* %scevgep, align 4
-  %indvar.next = add i64 %indvar, 1               ; <i64> [#uses=2]
-; CHECK: 1 * {0,+,1}<%bb1> + 1 * 1
-  %exitcond = icmp eq i64 %indvar.next, 64        ; <i1> [#uses=1]
-  br i1 %exitcond, label %bb3, label %bb1
-
-bb3:                                              ; preds = %bb1
-  %indvar.next12 = add i64 %0, 1                  ; <i64> [#uses=2]
-; CHECK: 1 * {0,+,1}<%bb2.preheader> + 1 * 1
-  %exitcond14 = icmp eq i64 %indvar.next12, 64    ; <i1> [#uses=1]
-  br i1 %exitcond14, label %bb5, label %bb2.preheader
-
-bb2.preheader:                                    ; preds = %bb3, %entry
-  %0 = phi i64 [ 0, %entry ], [ %indvar.next12, %bb3 ] ; <i64> [#uses=3]
-; CHECK: 1 * {0,+,1}<%bb2.preheader> + 0 * 1
-  br label %bb1
-
-bb5:                                              ; preds = %bb3
-  ret i32 %a
-}





More information about the llvm-commits mailing list