Skip to content

Commit d9b2a86

Browse files
committed
[flang] Add -f[no-]slp-vectorize flags
Add -f[no-]slp-vectorize to the flang driver. Add corresponding -fvectorize-slp to the flang frontend. Signed-off-by: Kajetan Puchalski <[email protected]>
1 parent 70c325b commit d9b2a86

File tree

6 files changed

+29
-3
lines changed

6 files changed

+29
-3
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4032,11 +4032,14 @@ def : Flag<["-"], "ftree-vectorize">, Alias<fvectorize>;
40324032
def : Flag<["-"], "fno-tree-vectorize">, Alias<fno_vectorize>;
40334033
}
40344034

4035+
let Visibility = [ClangOption, FlangOption] in {
40354036
def fslp_vectorize : Flag<["-"], "fslp-vectorize">, Group<f_Group>,
40364037
HelpText<"Enable the superword-level parallelism vectorization passes">;
40374038
def fno_slp_vectorize : Flag<["-"], "fno-slp-vectorize">, Group<f_Group>;
40384039
def : Flag<["-"], "ftree-slp-vectorize">, Alias<fslp_vectorize>;
40394040
def : Flag<["-"], "fno-tree-slp-vectorize">, Alias<fno_slp_vectorize>;
4041+
}
4042+
40404043
def Wlarge_by_value_copy_def : Flag<["-"], "Wlarge-by-value-copy">,
40414044
HelpText<"Warn if a function definition returns or accepts an object larger "
40424045
"in bytes than a given value">, Flags<[HelpHidden]>;
@@ -7384,6 +7387,9 @@ def mlink_bitcode_file
73847387
def vectorize_loops : Flag<["-"], "vectorize-loops">,
73857388
HelpText<"Run the Loop vectorization passes">,
73867389
MarshallingInfoFlag<CodeGenOpts<"VectorizeLoop">>;
7390+
def vectorize_slp : Flag<["-"], "vectorize-slp">,
7391+
HelpText<"Run the SLP vectorization passes">,
7392+
MarshallingInfoFlag<CodeGenOpts<"VectorizeSLP">>;
73877393
} // let Visibility = [CC1Option, FC1Option]
73887394

73897395
let Visibility = [CC1Option] in {
@@ -7499,9 +7505,6 @@ defm link_builtin_bitcode_postopt: BoolMOption<"link-builtin-bitcode-postopt",
74997505
PosFlag<SetTrue, [], [ClangOption], "Link builtin bitcodes after the "
75007506
"optimization pipeline">,
75017507
NegFlag<SetFalse, [], [ClangOption]>>;
7502-
def vectorize_slp : Flag<["-"], "vectorize-slp">,
7503-
HelpText<"Run the SLP vectorization passes">,
7504-
MarshallingInfoFlag<CodeGenOpts<"VectorizeSLP">>;
75057508
def linker_option : Joined<["--"], "linker-option=">,
75067509
HelpText<"Add linker option">,
75077510
MarshallingInfoStringVector<CodeGenOpts<"LinkerOptions">>;

clang/lib/Driver/ToolChains/Flang.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,14 @@ void Flang::addCodegenOptions(const ArgList &Args,
161161
options::OPT_fno_vectorize, enableVec))
162162
CmdArgs.push_back("-vectorize-loops");
163163

164+
// -fslp-vectorize is enabled based on the optimization level selected.
165+
bool EnableSLPVec = shouldEnableVectorizerAtOLevel(Args, true);
166+
OptSpecifier SLPVectAliasOption =
167+
EnableSLPVec ? options::OPT_O_Group : options::OPT_fslp_vectorize;
168+
if (Args.hasFlag(options::OPT_fslp_vectorize, SLPVectAliasOption,
169+
options::OPT_fno_slp_vectorize, EnableSLPVec))
170+
CmdArgs.push_back("-vectorize-slp");
171+
164172
if (shouldLoopVersion(Args))
165173
CmdArgs.push_back("-fversion-loops-for-stride");
166174

flang/include/flang/Frontend/CodeGenOptions.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ CODEGENOPT(PrepareForThinLTO , 1, 0) ///< Set when -flto=thin is enabled on the
3232
///< compile step.
3333
CODEGENOPT(StackArrays, 1, 0) ///< -fstack-arrays (enable the stack-arrays pass)
3434
CODEGENOPT(VectorizeLoop, 1, 0) ///< Enable loop vectorization.
35+
CODEGENOPT(VectorizeSLP, 1, 0) ///< Enable SLP vectorization.
3536
CODEGENOPT(LoopVersioning, 1, 0) ///< Enable loop versioning.
3637
CODEGENOPT(UnrollLoops, 1, 0) ///< Enable loop unrolling
3738
CODEGENOPT(AliasAnalysis, 1, 0) ///< Enable alias analysis pass

flang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,9 @@ static void parseCodeGenArgs(Fortran::frontend::CodeGenOptions &opts,
246246
if (args.getLastArg(clang::driver::options::OPT_vectorize_loops))
247247
opts.VectorizeLoop = 1;
248248

249+
if (args.getLastArg(clang::driver::options::OPT_vectorize_slp))
250+
opts.VectorizeSLP = 1;
251+
249252
if (args.hasFlag(clang::driver::options::OPT_floop_versioning,
250253
clang::driver::options::OPT_fno_loop_versioning, false))
251254
opts.LoopVersioning = 1;

flang/lib/Frontend/FrontendActions.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -933,6 +933,7 @@ void CodeGenAction::runOptimizationPipeline(llvm::raw_pwrite_stream &os) {
933933
pto.LoopUnrolling = opts.UnrollLoops;
934934
pto.LoopInterleaving = opts.UnrollLoops;
935935
pto.LoopVectorization = opts.VectorizeLoop;
936+
pto.SLPVectorization = opts.VectorizeSLP;
936937

937938
llvm::PassBuilder pb(targetMachine, pto, pgoOpt, &pic);
938939

flang/test/Driver/slp-vectorize.f90

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
! RUN: %flang -### -S -fslp-vectorize %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
2+
! RUN: %flang -### -S -fno-slp-vectorize %s 2>&1 | FileCheck -check-prefix=CHECK-NO-SLP-VECTORIZE %s
3+
! RUN: %flang -### -S -O1 %s 2>&1 | FileCheck -check-prefix=CHECK-NO-SLP-VECTORIZE %s
4+
! RUN: %flang -### -S -O2 %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
5+
! RUN: %flang -### -S -O3 %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
6+
! CHECK-SLP-VECTORIZE: "-vectorize-slp"
7+
! CHECK-NO-SLP-VECTORIZE-NOT: "-no-vectorize-slp"
8+
9+
program test
10+
end program

0 commit comments

Comments
 (0)