[llvm-commits] [polly] r156254 - in /polly/trunk: include/polly/CodeGen/CodeGeneration.h lib/CodeGen/BlockGenerators.cpp lib/CodeGen/CodeGeneration.cpp lib/Pocc.cpp lib/RegisterPasses.cpp lib/ScheduleOptimizer.cpp
Hal Finkel
hfinkel at anl.gov
Sun May 6 07:33:24 PDT 2012
Ether,
Great!
We should also work on refactoring the vectorization code
so that poly can call the instruction fusion code directly. Am I
correct in thinking that when polly decides to vectorize a loop it
already knows what should be vectorized?
-Hal
On Sun, 06 May 2012 10:22:19 -0000
Hongbin Zheng <etherzhhb at gmail.com> wrote:
> Author: ether
> Date: Sun May 6 05:22:19 2012
> New Revision: 156254
>
> URL: http://llvm.org/viewvc/llvm-project?rev=156254&view=rev
> Log:
> Allow polly ask bb-vectorizer to vectorize the loop body.
>
> Modified:
> polly/trunk/include/polly/CodeGen/CodeGeneration.h
> polly/trunk/lib/CodeGen/BlockGenerators.cpp
> polly/trunk/lib/CodeGen/CodeGeneration.cpp
> polly/trunk/lib/Pocc.cpp
> polly/trunk/lib/RegisterPasses.cpp
> polly/trunk/lib/ScheduleOptimizer.cpp
>
> Modified: polly/trunk/include/polly/CodeGen/CodeGeneration.h
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/CodeGen/CodeGeneration.h?rev=156254&r1=156253&r2=156254&view=diff
> ==============================================================================
> --- polly/trunk/include/polly/CodeGen/CodeGeneration.h (original) +++
> polly/trunk/include/polly/CodeGen/CodeGeneration.h Sun May 6
> 05:22:19 2012 @@ -16,7 +16,14 @@ #ifdef CLOOG_FOUND
>
> namespace polly {
> - extern bool EnablePollyVector;
> + enum VectorizerChoice {
> + VECTORIZER_NONE,
> + VECTORIZER_POLLY,
> + VECTORIZER_UNROLL_ONLY,
> + VECTORIZER_FIRST_NEED_GROUPED_UNROLL = VECTORIZER_UNROLL_ONLY,
> + VECTORIZER_BB
> + };
> + extern VectorizerChoice PollyVectorizerChoice;
> }
>
> #endif // CLOOG_FOUND
>
> Modified: polly/trunk/lib/CodeGen/BlockGenerators.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/lib/CodeGen/BlockGenerators.cpp?rev=156254&r1=156253&r2=156254&view=diff
> ==============================================================================
> --- polly/trunk/lib/CodeGen/BlockGenerators.cpp (original) +++
> polly/trunk/lib/CodeGen/BlockGenerators.cpp Sun May 6 05:22:19 2012
> @@ -14,6 +14,7
> @@ //===----------------------------------------------------------------------===//
> #include "polly/ScopInfo.h"
> +#include "polly/CodeGen/CodeGeneration.h"
> #include "polly/CodeGen/BlockGenerators.h"
> #include "polly/Support/GICHelper.h"
>
> @@ -36,12 +37,6 @@
> cl::init(false), cl::ZeroOrMore);
>
> static cl::opt<bool>
> -GroupedUnrolling("enable-polly-grouped-unroll",
> - cl::desc("Perform grouped unrolling, but don't
> generate SIMD "
> - "instuctions"), cl::Hidden,
> cl::init(false),
> - cl::ZeroOrMore);
> -
> -static cl::opt<bool>
> SCEVCodegen("polly-codegen-scev",
> cl::desc("Use SCEV based code generation."), cl::Hidden,
> cl::init(false), cl::ZeroOrMore);
> @@ -244,7 +239,6 @@
> ValueMapT &BBMap;
> };
>
> -
> // Helper class to generate memory location.
> namespace {
> class IslGenerator {
> @@ -670,7 +664,8 @@
> void VectorBlockGenerator::generateLoad(const LoadInst *Load,
> ValueMapT &VectorMap,
> VectorValueMapT &ScalarMaps)
> {
> - if (GroupedUnrolling
> || !VectorType::isValidElementType(Load->getType())) {
> + if (PollyVectorizerChoice >= VECTORIZER_FIRST_NEED_GROUPED_UNROLL
> ||
> + !VectorType::isValidElementType(Load->getType())) {
> for (int i = 0; i < getVectorWidth(); i++)
> ScalarMaps[i][Load] = generateScalarLoad(Load, ScalarMaps[i],
> GlobalMaps[i]);
>
> Modified: polly/trunk/lib/CodeGen/CodeGeneration.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/lib/CodeGen/CodeGeneration.cpp?rev=156254&r1=156253&r2=156254&view=diff
> ==============================================================================
> --- polly/trunk/lib/CodeGen/CodeGeneration.cpp (original) +++
> polly/trunk/lib/CodeGen/CodeGeneration.cpp Sun May 6 05:22:19 2012
> @@ -57,14 +57,6 @@ struct isl_set;
>
> namespace polly {
> -
> -bool EnablePollyVector;
> -
> -static cl::opt<bool, true>
> -Vector("enable-polly-vector",
> - cl::desc("Enable polly vector code generation"), cl::Hidden,
> - cl::location(EnablePollyVector), cl::init(false),
> cl::ZeroOrMore); -
> static cl::opt<bool>
> OpenMP("enable-polly-openmp",
> cl::desc("Generate OpenMP parallel code"), cl::Hidden,
> @@ -616,6 +608,7 @@
> }
>
> void ClastStmtCodeGen::codegen(const clast_for *f) {
> + bool Vector = PollyVectorizerChoice != VECTORIZER_NONE;
> if ((Vector || OpenMP) &&
> P->getAnalysis<Dependences>().isParallelFor(f)) { if (Vector &&
> isInnermostLoop(f) && (-1 != getNumberOfIterations(f)) &&
> (getNumberOfIterations(f) <= 16)) {
>
> Modified: polly/trunk/lib/Pocc.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Pocc.cpp?rev=156254&r1=156253&r2=156254&view=diff
> ==============================================================================
> --- polly/trunk/lib/Pocc.cpp (original) +++ polly/trunk/lib/Pocc.cpp
> Sun May 6 05:22:19 2012 @@ -118,7 +118,7 @@
> if (!DisablePollyTiling)
> arguments.push_back("--pluto-tile");
>
> - if (EnablePollyVector)
> + if (PollyVectorizerChoice != VECTORIZER_NONE)
> arguments.push_back("--pluto-prevector");
>
> arguments.push_back(0);
>
> Modified: polly/trunk/lib/RegisterPasses.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/lib/RegisterPasses.cpp?rev=156254&r1=156253&r2=156254&view=diff
> ==============================================================================
> --- polly/trunk/lib/RegisterPasses.cpp (original) +++
> polly/trunk/lib/RegisterPasses.cpp Sun May 6 05:22:19 2012 @@ -18,6
> +18,7 @@ #include "polly/ScopDetection.h"
> #include "polly/ScopInfo.h"
> #include "polly/TempScopInfo.h"
> +#include "polly/CodeGen/CodeGeneration.h"
>
> #include "llvm/Analysis/Passes.h"
> #include "llvm/Analysis/CFGPrinter.h"
> @@ -25,6 +26,7 @@
> #include "llvm/PassManager.h"
> #include "llvm/PassRegistry.h"
> #include "llvm/Transforms/Scalar.h"
> +#include "llvm/Transforms/Vectorize.h"
> #include "llvm/Transforms/IPO/PassManagerBuilder.h"
> #include "llvm/Support/CommandLine.h"
>
> @@ -61,6 +63,21 @@
> clEnumValEnd),
> cl::Hidden, cl::init(OPTIMIZER_ISL), cl::ZeroOrMore);
>
> +static cl::opt<polly::VectorizerChoice, true>
> +Vectorizer("polly-vectorizer",
> + cl::desc("Select the scheduling optimizer"),
> + cl::values(
> + clEnumValN(polly::VECTORIZER_NONE, "none", "No
> Vectorization"),
> + clEnumValN(polly::VECTORIZER_POLLY, "polly",
> + "Polly internal vectorizer"),
> + clEnumValN(polly::VECTORIZER_UNROLL_ONLY, "unroll-only",
> + "Only grouped unroll the vectorize candidate
> loops"),
> + clEnumValN(polly::VECTORIZER_BB, "bb",
> + "The Basic Block vectorizer driven by Polly"),
> + clEnumValEnd),
> + cl::Hidden, cl::location(PollyVectorizerChoice),
> + cl::init(polly::VECTORIZER_NONE), cl::ZeroOrMore);
> +
> static cl::opt<bool>
> ImportJScop("polly-import",
> cl::desc("Export the polyhedral description of the
> detected Scops"), @@ -174,6 +191,8 @@
> PM.add(polly::createRegionSimplifyPass());
> }
>
> +VectorizerChoice polly::PollyVectorizerChoice;
> +
> void polly::registerPollyPasses(llvm::PassManagerBase &PM, bool
> DisableCodegen) { bool RunCodegen = !DisableCodegen;
>
> @@ -215,8 +234,15 @@
> PM.add(polly::createJSONExporterPass());
>
> #ifdef CLOOG_FOUND
> - if (RunCodegen)
> + if (RunCodegen) {
> PM.add(polly::createCodeGenerationPass());
> +
> + if (PollyVectorizerChoice == VECTORIZER_BB) {
> + VectorizeConfig C;
> + C.FastDep = true;
> + PM.add(createBBVectorizePass(C));
> + }
> + }
> #endif
>
> if (CFGPrinter)
>
> Modified: polly/trunk/lib/ScheduleOptimizer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/lib/ScheduleOptimizer.cpp?rev=156254&r1=156253&r2=156254&view=diff
> ==============================================================================
> --- polly/trunk/lib/ScheduleOptimizer.cpp (original) +++
> polly/trunk/lib/ScheduleOptimizer.cpp Sun May 6 05:22:19 2012 @@
> -412,7 +412,7 @@ PartialSchedule =
> isl_union_map_flat_range_product(PartialSchedule, SuffixSchedule);
> isl_band_list_free(Children);
> - } else if (EnablePollyVector) {
> + } else if (PollyVectorizerChoice != VECTORIZER_NONE) {
> for (int j = 0; j < isl_band_n_member(Band); j++) {
> if (isl_band_member_is_zero_distance(Band, j)) {
> isl_map *TileMap;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
--
Hal Finkel
Postdoctoral Appointee
Leadership Computing Facility
Argonne National Laboratory
More information about the llvm-commits
mailing list