aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/IPO/PassManagerBuilder.cpp2
-rw-r--r--lib/Transforms/Vectorize/LoopVectorize.cpp17
-rw-r--r--lib/Transforms/Vectorize/Vectorize.cpp2
3 files changed, 13 insertions, 8 deletions
diff --git a/lib/Transforms/IPO/PassManagerBuilder.cpp b/lib/Transforms/IPO/PassManagerBuilder.cpp
index 0862786127..a9a9f2eece 100644
--- a/lib/Transforms/IPO/PassManagerBuilder.cpp
+++ b/lib/Transforms/IPO/PassManagerBuilder.cpp
@@ -189,7 +189,7 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
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 da073c5e59..749b664f53 100644
--- a/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -53,10 +53,8 @@ namespace {
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 @@ struct LoopVectorize : public LoopPass {
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_DEPENDENCY(LoopSimplify)
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 cf7d4ee8b2..19eefd2f87 100644
--- a/lib/Transforms/Vectorize/Vectorize.cpp
+++ b/lib/Transforms/Vectorize/Vectorize.cpp
@@ -39,5 +39,5 @@ void LLVMAddBBVectorizePass(LLVMPassManagerRef PM) {
}
void LLVMAddLoopVectorizePass(LLVMPassManagerRef PM) {
- unwrap(PM)->add(createLoopVectorizePass(0));
+ unwrap(PM)->add(createLoopVectorizePass());
}