Skip to content

Commit 21f627e

Browse files
tclin914kcloudy0717
authored andcommitted
[Clang] Reuse the function getOptimizationLevel in tools::addLTOOptions. (llvm#169762)
1 parent 2199dec commit 21f627e

File tree

3 files changed

+12
-24
lines changed

3 files changed

+12
-24
lines changed

clang/include/clang/Frontend/CompilerInvocation.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ bool ParseDiagnosticArgs(DiagnosticOptions &Opts, llvm::opt::ArgList &Args,
6767
DiagnosticsEngine *Diags = nullptr,
6868
bool DefaultDiagColor = true);
6969

70-
unsigned getOptimizationLevel(llvm::opt::ArgList &Args, InputKind IK,
70+
unsigned getOptimizationLevel(const llvm::opt::ArgList &Args, InputKind IK,
7171
DiagnosticsEngine &Diags);
7272

73-
unsigned getOptimizationLevelSize(llvm::opt::ArgList &Args);
73+
unsigned getOptimizationLevelSize(const llvm::opt::ArgList &Args);
7474

7575
/// The base class of CompilerInvocation. It keeps individual option objects
7676
/// behind reference-counted pointers, which is useful for clients that want to

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "clang/Driver/ToolChain.h"
3636
#include "clang/Driver/Util.h"
3737
#include "clang/Driver/XRayArgs.h"
38+
#include "clang/Frontend/CompilerInvocation.h"
3839
#include "clang/Options/Options.h"
3940
#include "llvm/ADT/STLExtras.h"
4041
#include "llvm/ADT/SmallSet.h"
@@ -1095,27 +1096,14 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args,
10951096
CmdArgs.push_back(
10961097
Args.MakeArgString(Twine(PluginOptPrefix) + ExtraDash + "mcpu=" + CPU));
10971098

1098-
if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
1099-
// The optimization level matches
1100-
// CompilerInvocation.cpp:getOptimizationLevel().
1101-
StringRef OOpt;
1102-
if (A->getOption().matches(options::OPT_O4) ||
1103-
A->getOption().matches(options::OPT_Ofast))
1104-
OOpt = "3";
1105-
else if (A->getOption().matches(options::OPT_O)) {
1106-
OOpt = A->getValue();
1107-
if (OOpt == "g")
1108-
OOpt = "1";
1109-
else if (OOpt == "s" || OOpt == "z")
1110-
OOpt = "2";
1111-
} else if (A->getOption().matches(options::OPT_O0))
1112-
OOpt = "0";
1113-
if (!OOpt.empty()) {
1099+
if (Args.getLastArg(options::OPT_O_Group)) {
1100+
unsigned OptimizationLevel =
1101+
getOptimizationLevel(Args, InputKind(), D.getDiags());
1102+
CmdArgs.push_back(Args.MakeArgString(Twine(PluginOptPrefix) + ExtraDash +
1103+
"O" + Twine(OptimizationLevel)));
1104+
if (IsAMDGCN)
11141105
CmdArgs.push_back(
1115-
Args.MakeArgString(Twine(PluginOptPrefix) + ExtraDash + "O" + OOpt));
1116-
if (IsAMDGCN)
1117-
CmdArgs.push_back(Args.MakeArgString(Twine("--lto-CGO") + OOpt));
1118-
}
1106+
Args.MakeArgString(Twine("--lto-CGO") + Twine(OptimizationLevel)));
11191107
}
11201108

11211109
if (Args.hasArg(options::OPT_gsplit_dwarf)) {

clang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2669,7 +2669,7 @@ bool clang::ParseDiagnosticArgs(DiagnosticOptions &Opts, ArgList &Args,
26692669
return Diags->getNumErrors() == NumErrorsBefore;
26702670
}
26712671

2672-
unsigned clang::getOptimizationLevel(ArgList &Args, InputKind IK,
2672+
unsigned clang::getOptimizationLevel(const ArgList &Args, InputKind IK,
26732673
DiagnosticsEngine &Diags) {
26742674
unsigned DefaultOpt = 0;
26752675
if ((IK.getLanguage() == Language::OpenCL ||
@@ -2708,7 +2708,7 @@ unsigned clang::getOptimizationLevel(ArgList &Args, InputKind IK,
27082708
return DefaultOpt;
27092709
}
27102710

2711-
unsigned clang::getOptimizationLevelSize(ArgList &Args) {
2711+
unsigned clang::getOptimizationLevelSize(const ArgList &Args) {
27122712
if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
27132713
if (A->getOption().matches(options::OPT_O)) {
27142714
switch (A->getValue()[0]) {

0 commit comments

Comments
 (0)