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());
}