[llvm-commits] [llvm] r171620 - in /llvm/trunk/lib/Transforms/Vectorize: LoopVectorize.cpp LoopVectorize.h

Chandler Carruth chandlerc at gmail.com
Sat Jan 5 02:16:02 PST 2013


Author: chandlerc
Date: Sat Jan  5 04:16:02 2013
New Revision: 171620

URL: http://llvm.org/viewvc/llvm-project?rev=171620&view=rev
Log:
Switch the loop vectorizer from VTTI to just use TTI directly.

Modified:
    llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
    llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.h

Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=171620&r1=171619&r2=171620&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)
+++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Sat Jan  5 04:16:02 2013
@@ -90,12 +90,8 @@
       return false;
     }
 
-    // Select the preffered vectorization factor.
-    const VectorTargetTransformInfo *VTTI = 0;
-    if (TTI)
-      VTTI = TTI->getVectorTargetTransformInfo();
     // Use the cost model.
-    LoopVectorizationCostModel CM(L, SE, LI, &LVL, VTTI);
+    LoopVectorizationCostModel CM(L, SE, LI, &LVL, TTI);
 
     // Check the function attribues to find out if this function should be
     // optimized for size.
@@ -2134,7 +2130,7 @@
     return UserVF;
   }
 
-  if (!VTTI) {
+  if (!TTI) {
     DEBUG(dbgs() << "LV: No vector target information. Not vectorizing. \n");
     return 1;
   }
@@ -2170,7 +2166,7 @@
   if (OptForSize)
     return 1;
 
-  unsigned TargetVectorRegisters = VTTI->getNumberOfRegisters(true);
+  unsigned TargetVectorRegisters = TTI->getNumberOfRegisters(true);
   DEBUG(dbgs() << "LV: The target has " << TargetVectorRegisters <<
         " vector registers\n");
 
@@ -2345,7 +2341,7 @@
 
 unsigned
 LoopVectorizationCostModel::getInstructionCost(Instruction *I, unsigned VF) {
-  assert(VTTI && "Invalid vector target transformation info");
+  assert(TTI && "Invalid vector target transformation info");
 
   // If we know that this instruction will remain uniform, check the cost of
   // the scalar version.
@@ -2363,7 +2359,7 @@
     // generate vector geps.
     return 0;
   case Instruction::Br: {
-    return VTTI->getCFInstrCost(I->getOpcode());
+    return TTI->getCFInstrCost(I->getOpcode());
   }
   case Instruction::PHI:
     //TODO: IF-converted IFs become selects.
@@ -2386,7 +2382,7 @@
   case Instruction::And:
   case Instruction::Or:
   case Instruction::Xor:
-    return VTTI->getArithmeticInstrCost(I->getOpcode(), VectorTy);
+    return TTI->getArithmeticInstrCost(I->getOpcode(), VectorTy);
   case Instruction::Select: {
     SelectInst *SI = cast<SelectInst>(I);
     const SCEV *CondSCEV = SE->getSCEV(SI->getCondition());
@@ -2395,13 +2391,13 @@
     if (ScalarCond)
       CondTy = VectorType::get(CondTy, VF);
 
-    return VTTI->getCmpSelInstrCost(I->getOpcode(), VectorTy, CondTy);
+    return TTI->getCmpSelInstrCost(I->getOpcode(), VectorTy, CondTy);
   }
   case Instruction::ICmp:
   case Instruction::FCmp: {
     Type *ValTy = I->getOperand(0)->getType();
     VectorTy = ToVectorTy(ValTy, VF);
-    return VTTI->getCmpSelInstrCost(I->getOpcode(), VectorTy);
+    return TTI->getCmpSelInstrCost(I->getOpcode(), VectorTy);
   }
   case Instruction::Store: {
     StoreInst *SI = cast<StoreInst>(I);
@@ -2409,7 +2405,7 @@
     VectorTy = ToVectorTy(ValTy, VF);
 
     if (VF == 1)
-      return VTTI->getMemoryOpCost(I->getOpcode(), VectorTy,
+      return TTI->getMemoryOpCost(I->getOpcode(), VectorTy,
                                    SI->getAlignment(),
                                    SI->getPointerAddressSpace());
 
@@ -2422,36 +2418,36 @@
       // The cost of extracting from the value vector and pointer vector.
       Type *PtrTy = ToVectorTy(I->getOperand(0)->getType(), VF);
       for (unsigned i = 0; i < VF; ++i) {
-        Cost += VTTI->getVectorInstrCost(Instruction::ExtractElement,
-                                         VectorTy, i);
-        Cost += VTTI->getVectorInstrCost(Instruction::ExtractElement,
-                                         PtrTy, i);
+        Cost += TTI->getVectorInstrCost(Instruction::ExtractElement,
+                                        VectorTy, i);
+        Cost += TTI->getVectorInstrCost(Instruction::ExtractElement,
+                                        PtrTy, i);
       }
 
       // The cost of the scalar stores.
-      Cost += VF * VTTI->getMemoryOpCost(I->getOpcode(),
-                                         ValTy->getScalarType(),
+      Cost += VF * TTI->getMemoryOpCost(I->getOpcode(),
+                                        ValTy->getScalarType(),
                                          SI->getAlignment(),
                                          SI->getPointerAddressSpace());
       return Cost;
     }
 
     // Wide stores.
-    unsigned Cost = VTTI->getMemoryOpCost(I->getOpcode(), VectorTy,
-                                          SI->getAlignment(),
-                                          SI->getPointerAddressSpace());
+    unsigned Cost = TTI->getMemoryOpCost(I->getOpcode(), VectorTy,
+                                         SI->getAlignment(),
+                                         SI->getPointerAddressSpace());
     if (Reverse)
-      Cost += VTTI->getShuffleCost(VectorTargetTransformInfo::Reverse,
-                                   VectorTy, 0);
+      Cost += TTI->getShuffleCost(TargetTransformInfo::Reverse,
+                                  VectorTy, 0);
     return Cost;
   }
   case Instruction::Load: {
     LoadInst *LI = cast<LoadInst>(I);
 
     if (VF == 1)
-      return VTTI->getMemoryOpCost(I->getOpcode(), VectorTy,
-                                   LI->getAlignment(),
-                                   LI->getPointerAddressSpace());
+      return TTI->getMemoryOpCost(I->getOpcode(), VectorTy,
+                                  LI->getAlignment(),
+                                  LI->getPointerAddressSpace());
 
     // Scalarized loads.
     int Stride = Legal->isConsecutivePtr(LI->getPointerOperand());
@@ -2462,29 +2458,29 @@
 
       // The cost of extracting from the pointer vector.
       for (unsigned i = 0; i < VF; ++i)
-        Cost += VTTI->getVectorInstrCost(Instruction::ExtractElement,
-                                         PtrTy, i);
+        Cost += TTI->getVectorInstrCost(Instruction::ExtractElement,
+                                        PtrTy, i);
 
       // The cost of inserting data to the result vector.
       for (unsigned i = 0; i < VF; ++i)
-        Cost += VTTI->getVectorInstrCost(Instruction::InsertElement,
-                                         VectorTy, i);
+        Cost += TTI->getVectorInstrCost(Instruction::InsertElement,
+                                        VectorTy, i);
 
       // The cost of the scalar stores.
-      Cost += VF * VTTI->getMemoryOpCost(I->getOpcode(),
-                                         RetTy->getScalarType(),
-                                         LI->getAlignment(),
-                                         LI->getPointerAddressSpace());
+      Cost += VF * TTI->getMemoryOpCost(I->getOpcode(),
+                                        RetTy->getScalarType(),
+                                        LI->getAlignment(),
+                                        LI->getPointerAddressSpace());
       return Cost;
     }
 
     // Wide loads.
-    unsigned Cost = VTTI->getMemoryOpCost(I->getOpcode(), VectorTy,
-                                          LI->getAlignment(),
-                                          LI->getPointerAddressSpace());
+    unsigned Cost = TTI->getMemoryOpCost(I->getOpcode(), VectorTy,
+                                         LI->getAlignment(),
+                                         LI->getPointerAddressSpace());
     if (Reverse)
-      Cost += VTTI->getShuffleCost(VectorTargetTransformInfo::Reverse,
-                                   VectorTy, 0);
+      Cost += TTI->getShuffleCost(TargetTransformInfo::Reverse,
+                                  VectorTy, 0);
     return Cost;
   }
   case Instruction::ZExt:
@@ -2503,11 +2499,11 @@
     // The cost of these is the same as the scalar operation.
     if (I->getOpcode() == Instruction::Trunc &&
         Legal->isInductionVariable(I->getOperand(0)))
-         return VTTI->getCastInstrCost(I->getOpcode(), I->getType(),
-                                       I->getOperand(0)->getType());
+         return TTI->getCastInstrCost(I->getOpcode(), I->getType(),
+                                      I->getOperand(0)->getType());
 
     Type *SrcVecTy = ToVectorTy(I->getOperand(0)->getType(), VF);
-    return VTTI->getCastInstrCost(I->getOpcode(), VectorTy, SrcVecTy);
+    return TTI->getCastInstrCost(I->getOpcode(), VectorTy, SrcVecTy);
   }
   case Instruction::Call: {
     assert(isTriviallyVectorizableIntrinsic(I));
@@ -2516,7 +2512,7 @@
     SmallVector<Type*, 4> Tys;
     for (unsigned i = 0, ie = II->getNumArgOperands(); i != ie; ++i)
       Tys.push_back(ToVectorTy(II->getArgOperand(i)->getType(), VF));
-    return VTTI->getIntrinsicInstrCost(II->getIntrinsicID(), RetTy, Tys);
+    return TTI->getIntrinsicInstrCost(II->getIntrinsicID(), RetTy, Tys);
   }
   default: {
     // We are scalarizing the instruction. Return the cost of the scalar
@@ -2525,10 +2521,10 @@
     unsigned Cost = 0;
 
     if (!RetTy->isVoidTy() && VF != 1) {
-      unsigned InsCost = VTTI->getVectorInstrCost(Instruction::InsertElement,
-                                                  VectorTy);
-      unsigned ExtCost = VTTI->getVectorInstrCost(Instruction::ExtractElement,
-                                                  VectorTy);
+      unsigned InsCost = TTI->getVectorInstrCost(Instruction::InsertElement,
+                                                 VectorTy);
+      unsigned ExtCost = TTI->getVectorInstrCost(Instruction::ExtractElement,
+                                                 VectorTy);
 
       // The cost of inserting the results plus extracting each one of the
       // operands.
@@ -2537,7 +2533,7 @@
 
     // The cost of executing VF copies of the scalar instruction. This opcode
     // is unknown. Assume that it is the same as 'mul'.
-    Cost += VF * VTTI->getArithmeticInstrCost(Instruction::Mul, VectorTy);
+    Cost += VF * TTI->getArithmeticInstrCost(Instruction::Mul, VectorTy);
     return Cost;
   }
   }// end of switch.

Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.h?rev=171620&r1=171619&r2=171620&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.h (original)
+++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.h Sat Jan  5 04:16:02 2013
@@ -76,7 +76,7 @@
 // Forward declarations.
 class LoopVectorizationLegality;
 class LoopVectorizationCostModel;
-class VectorTargetTransformInfo;
+class TargetTransformInfo;
 
 /// InnerLoopVectorizer vectorizes loops which contain only one basic
 /// block to a specified vectorization factor (VF).
@@ -468,18 +468,18 @@
 
 /// LoopVectorizationCostModel - estimates the expected speedups due to
 /// vectorization.
-/// In many cases vectorization is not profitable. This can happen because
-/// of a number of reasons. In this class we mainly attempt to predict
-/// the expected speedup/slowdowns due to the supported instruction set.
-/// We use the VectorTargetTransformInfo to query the different backends
-/// for the cost of different operations.
+/// In many cases vectorization is not profitable. This can happen because of
+/// a number of reasons. In this class we mainly attempt to predict the
+/// expected speedup/slowdowns due to the supported instruction set. We use the
+/// TargetTransformInfo to query the different backends for the cost of
+/// different operations.
 class LoopVectorizationCostModel {
 public:
   /// C'tor.
   LoopVectorizationCostModel(Loop *Lp, ScalarEvolution *Se, LoopInfo *Li,
                              LoopVectorizationLegality *Leg,
-                             const VectorTargetTransformInfo *Vtti):
-  TheLoop(Lp), SE(Se), LI(Li), Legal(Leg), VTTI(Vtti) { }
+                             const TargetTransformInfo *Tti):
+  TheLoop(Lp), SE(Se), LI(Li), Legal(Leg), TTI(Tti) { }
 
   /// \return The most profitable vectorization factor.
   /// This method checks every power of two up to VF. If UserVF is not ZERO
@@ -532,7 +532,7 @@
   /// Vectorization legality.
   LoopVectorizationLegality *Legal;
   /// Vector target information.
-  const VectorTargetTransformInfo *VTTI;
+  const TargetTransformInfo *TTI;
 };
 
 }// namespace llvm





More information about the llvm-commits mailing list