LoopVectorizer: Use the "optsize" attribute to decide if we are allowed to increase the function size.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170004 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/IPO/PassManagerBuilder.cpp b/lib/Transforms/IPO/PassManagerBuilder.cpp
index 0862786..a9a9f2e 100644
--- a/lib/Transforms/IPO/PassManagerBuilder.cpp
+++ b/lib/Transforms/IPO/PassManagerBuilder.cpp
@@ -189,7 +189,7 @@
   MPM.add(createLoopDeletionPass());          // Delete dead loops
 
   if (LoopVectorize && OptLevel > 1)
-    MPM.add(createLoopVectorizePass(SizeLevel));
+    MPM.add(createLoopVectorizePass());
 
   if (!DisableUnrollLoops)
     MPM.add(createLoopUnrollPass());          // Unroll small loops
diff --git a/lib/Transforms/Vectorize/LoopVectorize.cpp b/lib/Transforms/Vectorize/LoopVectorize.cpp
index da073c5..749b664 100644
--- a/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -53,10 +53,8 @@
 struct LoopVectorize : public LoopPass {
   /// Pass identification, replacement for typeid
   static char ID;
-  /// Optimize for size. Do not generate tail loops.
-  bool OptForSize;
 
-  explicit LoopVectorize(bool OptSz = false) : LoopPass(ID), OptForSize(OptSz) {
+  explicit LoopVectorize() : LoopPass(ID) {
     initializeLoopVectorizePass(*PassRegistry::getPassRegistry());
   }
 
@@ -93,8 +91,15 @@
       VTTI = TTI->getVectorTargetTransformInfo();
     // Use the cost model.
     LoopVectorizationCostModel CM(L, SE, &LVL, VTTI);
+
+    // Check the function attribues to find out if this function should be
+    // optimized for size.
+    Function *F = L->getHeader()->getParent();
+    bool OptForSize =
+    F->getFnAttributes().hasAttribute(Attributes::OptimizeForSize);
+
     unsigned VF = CM.selectVectorizationFactor(OptForSize,
-                                                 VectorizationFactor);
+                                               VectorizationFactor);
 
     if (VF == 1) {
       DEBUG(dbgs() << "LV: Vectorization is possible but not beneficial.\n");
@@ -2159,8 +2164,8 @@
 INITIALIZE_PASS_END(LoopVectorize, LV_NAME, lv_name, false, false)
 
 namespace llvm {
-  Pass *createLoopVectorizePass(bool OptForSize = false) {
-    return new LoopVectorize(OptForSize);
+  Pass *createLoopVectorizePass() {
+    return new LoopVectorize();
   }
 }
 
diff --git a/lib/Transforms/Vectorize/Vectorize.cpp b/lib/Transforms/Vectorize/Vectorize.cpp
index cf7d4ee..19eefd2 100644
--- a/lib/Transforms/Vectorize/Vectorize.cpp
+++ b/lib/Transforms/Vectorize/Vectorize.cpp
@@ -39,5 +39,5 @@
 }
 
 void LLVMAddLoopVectorizePass(LLVMPassManagerRef PM) {
-  unwrap(PM)->add(createLoopVectorizePass(0));
+  unwrap(PM)->add(createLoopVectorizePass());
 }