Skip to content

Commit e78240d

Browse files
committed
[flang] [clang] Move -fvectorize and -fslp-vectorize into CommonArgs
flang - Expand tests for -fslp-vectorize Signed-off-by: Kajetan Puchalski <[email protected]>
1 parent d9b2a86 commit e78240d

File tree

6 files changed

+37
-37
lines changed

6 files changed

+37
-37
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4030,9 +4030,7 @@ def fvectorize : Flag<["-"], "fvectorize">, Group<f_Group>,
40304030
def fno_vectorize : Flag<["-"], "fno-vectorize">, Group<f_Group>;
40314031
def : Flag<["-"], "ftree-vectorize">, Alias<fvectorize>;
40324032
def : Flag<["-"], "fno-tree-vectorize">, Alias<fno_vectorize>;
4033-
}
40344033

4035-
let Visibility = [ClangOption, FlangOption] in {
40364034
def fslp_vectorize : Flag<["-"], "fslp-vectorize">, Group<f_Group>,
40374035
HelpText<"Enable the superword-level parallelism vectorization passes">;
40384036
def fno_slp_vectorize : Flag<["-"], "fno-slp-vectorize">, Group<f_Group>;

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7597,24 +7597,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
75977597
Args.addOptOutFlag(CmdArgs, options::OPT_fgnu_inline_asm,
75987598
options::OPT_fno_gnu_inline_asm);
75997599

7600-
// Enable vectorization per default according to the optimization level
7601-
// selected. For optimization levels that want vectorization we use the alias
7602-
// option to simplify the hasFlag logic.
7603-
bool EnableVec = shouldEnableVectorizerAtOLevel(Args, false);
7604-
OptSpecifier VectorizeAliasOption =
7605-
EnableVec ? options::OPT_O_Group : options::OPT_fvectorize;
7606-
if (Args.hasFlag(options::OPT_fvectorize, VectorizeAliasOption,
7607-
options::OPT_fno_vectorize, EnableVec))
7608-
CmdArgs.push_back("-vectorize-loops");
7609-
7610-
// -fslp-vectorize is enabled based on the optimization level selected.
7611-
bool EnableSLPVec = shouldEnableVectorizerAtOLevel(Args, true);
7612-
OptSpecifier SLPVectAliasOption =
7613-
EnableSLPVec ? options::OPT_O_Group : options::OPT_fslp_vectorize;
7614-
if (Args.hasFlag(options::OPT_fslp_vectorize, SLPVectAliasOption,
7615-
options::OPT_fno_slp_vectorize, EnableSLPVec))
7616-
CmdArgs.push_back("-vectorize-slp");
7617-
7600+
handleVectorizeLoopsArgs(Args, CmdArgs);
7601+
handleVectorizeSLPArgs(Args, CmdArgs);
76187602
ParseMPreferVectorWidth(D, Args, CmdArgs);
76197603

76207604
Args.AddLastArg(CmdArgs, options::OPT_fshow_overloads_EQ);

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3177,3 +3177,25 @@ bool tools::shouldEnableVectorizerAtOLevel(const ArgList &Args, bool isSlpVec) {
31773177

31783178
return false;
31793179
}
3180+
3181+
/// Enable -fvectorize based on the optimization level selected.
3182+
void tools::handleVectorizeLoopsArgs(const ArgList &Args,
3183+
ArgStringList &CmdArgs) {
3184+
bool enableVec = shouldEnableVectorizerAtOLevel(Args, false);
3185+
OptSpecifier vectorizeAliasOption =
3186+
enableVec ? options::OPT_O_Group : options::OPT_fvectorize;
3187+
if (Args.hasFlag(options::OPT_fvectorize, vectorizeAliasOption,
3188+
options::OPT_fno_vectorize, enableVec))
3189+
CmdArgs.push_back("-vectorize-loops");
3190+
}
3191+
3192+
/// Enable -fslp-vectorize based on the optimization level selected.
3193+
void tools::handleVectorizeSLPArgs(const ArgList &Args,
3194+
ArgStringList &CmdArgs) {
3195+
bool EnableSLPVec = shouldEnableVectorizerAtOLevel(Args, true);
3196+
OptSpecifier SLPVectAliasOption =
3197+
EnableSLPVec ? options::OPT_O_Group : options::OPT_fslp_vectorize;
3198+
if (Args.hasFlag(options::OPT_fslp_vectorize, SLPVectAliasOption,
3199+
options::OPT_fno_slp_vectorize, EnableSLPVec))
3200+
CmdArgs.push_back("-vectorize-slp");
3201+
}

clang/lib/Driver/ToolChains/CommonArgs.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,12 @@ void renderCommonIntegerOverflowOptions(const llvm::opt::ArgList &Args,
267267

268268
bool shouldEnableVectorizerAtOLevel(const llvm::opt::ArgList &Args,
269269
bool isSlpVec);
270+
271+
void handleVectorizeLoopsArgs(const llvm::opt::ArgList &Args,
272+
llvm::opt::ArgStringList &CmdArgs);
273+
274+
void handleVectorizeSLPArgs(const llvm::opt::ArgList &Args,
275+
llvm::opt::ArgStringList &CmdArgs);
270276
} // end namespace tools
271277
} // end namespace driver
272278
} // end namespace clang

clang/lib/Driver/ToolChains/Flang.cpp

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -151,23 +151,8 @@ void Flang::addCodegenOptions(const ArgList &Args,
151151
!stackArrays->getOption().matches(options::OPT_fno_stack_arrays))
152152
CmdArgs.push_back("-fstack-arrays");
153153

154-
// Enable vectorization per default according to the optimization level
155-
// selected. For optimization levels that want vectorization we use the alias
156-
// option to simplify the hasFlag logic.
157-
bool enableVec = shouldEnableVectorizerAtOLevel(Args, false);
158-
OptSpecifier vectorizeAliasOption =
159-
enableVec ? options::OPT_O_Group : options::OPT_fvectorize;
160-
if (Args.hasFlag(options::OPT_fvectorize, vectorizeAliasOption,
161-
options::OPT_fno_vectorize, enableVec))
162-
CmdArgs.push_back("-vectorize-loops");
163-
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");
154+
handleVectorizeLoopsArgs(Args, CmdArgs);
155+
handleVectorizeSLPArgs(Args, CmdArgs);
171156

172157
if (shouldLoopVersion(Args))
173158
CmdArgs.push_back("-fversion-loops-for-stride");

flang/test/Driver/slp-vectorize.f90

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
! RUN: %flang -### -S -fslp-vectorize %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
22
! RUN: %flang -### -S -fno-slp-vectorize %s 2>&1 | FileCheck -check-prefix=CHECK-NO-SLP-VECTORIZE %s
3+
! RUN: %flang -### -S -O0 %s 2>&1 | FileCheck -check-prefix=CHECK-NO-SLP-VECTORIZE %s
34
! RUN: %flang -### -S -O1 %s 2>&1 | FileCheck -check-prefix=CHECK-NO-SLP-VECTORIZE %s
45
! RUN: %flang -### -S -O2 %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
56
! RUN: %flang -### -S -O3 %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
7+
! RUN: %flang -### -S -Os %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
8+
! RUN: %flang -### -S -Oz %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
9+
! RUN: %flang_fc1 -emit-llvm -O2 -vectorize-slp -mllvm -print-pipeline-passes %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZER %s
610
! CHECK-SLP-VECTORIZE: "-vectorize-slp"
711
! CHECK-NO-SLP-VECTORIZE-NOT: "-no-vectorize-slp"
12+
! CHECK-SLP-VECTORIZER: slp-vectorizer
813

914
program test
1015
end program

0 commit comments

Comments
 (0)