[llvm] r358647 - [NewPM] Add Option handling for LoopVectorize
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 18 08:24:40 PDT 2019
This needs llvm-lit tests to show basic usage if nothing else.
Philip
On 4/18/19 1:46 AM, Serguei Katkov via llvm-commits wrote:
> Author: skatkov
> Date: Thu Apr 18 01:46:11 2019
> New Revision: 358647
>
> URL: http://llvm.org/viewvc/llvm-project?rev=358647&view=rev
> Log:
> [NewPM] Add Option handling for LoopVectorize
>
> This patch enables passing options to LoopVectorizePass via the passes pipeline.
>
> Reviewers: chandlerc, fedor.sergeev, leonardchan, philip.pfaffe
> Reviewed By: fedor.sergeev
> Subscribers: llvm-commits
> Differential Revision: https://reviews.llvm.org/D60681
>
> Modified:
> llvm/trunk/include/llvm/Transforms/Vectorize/LoopVectorize.h
> llvm/trunk/lib/Passes/PassBuilder.cpp
> llvm/trunk/lib/Passes/PassRegistry.def
>
> Modified: llvm/trunk/include/llvm/Transforms/Vectorize/LoopVectorize.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Vectorize/LoopVectorize.h?rev=358647&r1=358646&r2=358647&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/Vectorize/LoopVectorize.h (original)
> +++ llvm/trunk/include/llvm/Transforms/Vectorize/LoopVectorize.h Thu Apr 18 01:46:11 2019
> @@ -76,15 +76,42 @@ class ScalarEvolution;
> class TargetLibraryInfo;
> class TargetTransformInfo;
>
> +struct LoopVectorizeOptions {
> + /// If false, consider all loops for interleaving.
> + /// If true, only loops that explicitly request interleaving are considered.
> + bool InterleaveOnlyWhenForced;
> +
> + /// If false, consider all loops for vectorization.
> + /// If true, only loops that explicitly request vectorization are considered.
> + bool VectorizeOnlyWhenForced;
> +
> + LoopVectorizeOptions()
> + : InterleaveOnlyWhenForced(false), VectorizeOnlyWhenForced(false) {}
> +
> + LoopVectorizeOptions &setInterleaveOnlyWhenForced(bool Value) {
> + InterleaveOnlyWhenForced = Value;
> + return *this;
> + }
> +
> + LoopVectorizeOptions &setVectorizeOnlyWhenForced(bool Value) {
> + VectorizeOnlyWhenForced = Value;
> + return *this;
> + }
> +};
> +
> /// The LoopVectorize Pass.
> struct LoopVectorizePass : public PassInfoMixin<LoopVectorizePass> {
> /// If false, consider all loops for interleaving.
> /// If true, only loops that explicitly request interleaving are considered.
> - bool InterleaveOnlyWhenForced = false;
> + bool InterleaveOnlyWhenForced;
>
> /// If false, consider all loops for vectorization.
> /// If true, only loops that explicitly request vectorization are considered.
> - bool VectorizeOnlyWhenForced = false;
> + bool VectorizeOnlyWhenForced;
> +
> + LoopVectorizePass(LoopVectorizeOptions Opts = {})
> + : InterleaveOnlyWhenForced(Opts.InterleaveOnlyWhenForced),
> + VectorizeOnlyWhenForced(Opts.VectorizeOnlyWhenForced) {}
>
> ScalarEvolution *SE;
> LoopInfo *LI;
>
> Modified: llvm/trunk/lib/Passes/PassBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassBuilder.cpp?rev=358647&r1=358646&r2=358647&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Passes/PassBuilder.cpp (original)
> +++ llvm/trunk/lib/Passes/PassBuilder.cpp Thu Apr 18 01:46:11 2019
> @@ -1469,6 +1469,27 @@ Expected<SimplifyCFGOptions> parseSimpli
> return Result;
> }
>
> +/// Parser of parameters for LoopVectorize pass.
> +Expected<LoopVectorizeOptions> parseLoopVectorizeOptions(StringRef Params) {
> + LoopVectorizeOptions Opts;
> + while (!Params.empty()) {
> + StringRef ParamName;
> + std::tie(ParamName, Params) = Params.split(';');
> +
> + bool Enable = !ParamName.consume_front("no-");
> + if (ParamName == "interleave-forced-only") {
> + Opts.setInterleaveOnlyWhenForced(Enable);
> + } else if (ParamName == "vectorize-forced-only") {
> + Opts.setVectorizeOnlyWhenForced(Enable);
> + } else {
> + return make_error<StringError>(
> + formatv("invalid LoopVectorize parameter '{0}' ", ParamName).str(),
> + inconvertibleErrorCode());
> + }
> + }
> + return Opts;
> +}
> +
> } // namespace
>
> /// Tests whether a pass name starts with a valid prefix for a default pipeline
>
> Modified: llvm/trunk/lib/Passes/PassRegistry.def
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassRegistry.def?rev=358647&r1=358646&r2=358647&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Passes/PassRegistry.def (original)
> +++ llvm/trunk/lib/Passes/PassRegistry.def Thu Apr 18 01:46:11 2019
> @@ -199,7 +199,6 @@ FUNCTION_PASS("loop-data-prefetch", Loop
> FUNCTION_PASS("loop-load-elim", LoopLoadEliminationPass())
> FUNCTION_PASS("loop-fuse", LoopFusePass())
> FUNCTION_PASS("loop-distribute", LoopDistributePass())
> -FUNCTION_PASS("loop-vectorize", LoopVectorizePass())
> FUNCTION_PASS("pgo-memop-opt", PGOMemOPSizeOpt())
> FUNCTION_PASS("print", PrintFunctionPass(dbgs()))
> FUNCTION_PASS("print<assumptions>", AssumptionPrinterPass(dbgs()))
> @@ -258,6 +257,11 @@ FUNCTION_PASS_WITH_PARAMS("simplify-cfg"
> return SimplifyCFGPass(Opts);
> },
> parseSimplifyCFGOptions)
> +FUNCTION_PASS_WITH_PARAMS("loop-vectorize",
> + [](LoopVectorizeOptions Opts) {
> + return LoopVectorizePass(Opts);
> + },
> + parseLoopVectorizeOptions)
> #undef FUNCTION_PASS_WITH_PARAMS
>
> #ifndef LOOP_ANALYSIS
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list