Instead of passing in an unsigned value for the optimization level, use an enum,
which better identifies what the optimization is doing. And is more flexible for
future uses.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70440 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp
index eff3227..cf58384 100644
--- a/tools/llc/llc.cpp
+++ b/tools/llc/llc.cpp
@@ -56,12 +56,12 @@
static cl::opt<bool> Force("f", cl::desc("Overwrite output files"));
// Determine optimization level. Level -O0 is equivalent to "fast" code gen.
-static cl::opt<unsigned>
+static cl::opt<char>
OptLevel("O",
- cl::desc("Optimization level. Similar to llvm-gcc -O. (default: -O3)"),
+ cl::desc("Optimization level. Similar to llvm-gcc -O."),
cl::Prefix,
cl::ZeroOrMore,
- cl::init(3));
+ cl::init(' '));
static cl::opt<std::string>
TargetTriple("mtriple", cl::desc("Override target triple for module"));
@@ -253,6 +253,19 @@
raw_ostream *Out = GetOutputStream(argv[0]);
if (Out == 0) return 1;
+ CodeGenOpt::Level OLvl = CodeGenOpt::Aggressive;
+
+ switch (OptLevel) {
+ default:
+ case ' ': break;
+ case '0': OLvl = CodeGenOpt::None; break;
+ case '1': OLvl = CodeGenOpt::One; break;
+ case '2': OLvl = CodeGenOpt::Two; break;
+ case 's': OLvl = CodeGenOpt::Size; break;
+ case '3': OLvl = CodeGenOpt::Aggressive; break;
+ case '4': OLvl = CodeGenOpt::LTO; break;
+ }
+
// If this target requires addPassesToEmitWholeFile, do it now. This is
// used by strange things like the C backend.
if (Target.WantsWholeFile()) {
@@ -262,7 +275,7 @@
PM.add(createVerifierPass());
// Ask the target to add backend passes as necessary.
- if (Target.addPassesToEmitWholeFile(PM, *Out, FileType, OptLevel)) {
+ if (Target.addPassesToEmitWholeFile(PM, *Out, FileType, OLvl)) {
std::cerr << argv[0] << ": target does not support generation of this"
<< " file type!\n";
if (Out != &outs()) delete Out;
@@ -288,7 +301,7 @@
// Override default to generate verbose assembly.
Target.setAsmVerbosityDefault(true);
- switch (Target.addPassesToEmitFile(Passes, *Out, FileType, OptLevel)) {
+ switch (Target.addPassesToEmitFile(Passes, *Out, FileType, OLvl)) {
default:
assert(0 && "Invalid file model!");
return 1;
@@ -309,7 +322,7 @@
break;
}
- if (Target.addPassesToEmitFileFinish(Passes, MCE, OptLevel)) {
+ if (Target.addPassesToEmitFileFinish(Passes, MCE, OLvl)) {
std::cerr << argv[0] << ": target does not support generation of this"
<< " file type!\n";
if (Out != &outs()) delete Out;
diff --git a/tools/lli/lli.cpp b/tools/lli/lli.cpp
index d62d332..812e52c 100644
--- a/tools/lli/lli.cpp
+++ b/tools/lli/lli.cpp
@@ -122,7 +122,9 @@
if (!TargetTriple.empty())
Mod->setTargetTriple(TargetTriple);
- EE = ExecutionEngine::create(MP, ForceInterpreter, &ErrorMsg, Fast);
+ EE = ExecutionEngine::create(MP, ForceInterpreter, &ErrorMsg,
+ Fast ?
+ CodeGenOpt::None : CodeGenOpt::Aggressive);
if (!EE && !ErrorMsg.empty()) {
std::cerr << argv[0] << ":error creating EE: " << ErrorMsg << "\n";
exit(1);
diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp
index af8ad96..66b56b1 100644
--- a/tools/lto/LTOCodeGenerator.cpp
+++ b/tools/lto/LTOCodeGenerator.cpp
@@ -442,7 +442,8 @@
MachineCodeEmitter* mce = NULL;
switch (_target->addPassesToEmitFile(*codeGenPasses, out,
- TargetMachine::AssemblyFile, 3)) {
+ TargetMachine::AssemblyFile,
+ CodeGenOpt::Default)) {
case FileModel::MachOFile:
mce = AddMachOWriter(*codeGenPasses, out, *_target);
break;
@@ -457,7 +458,8 @@
return true;
}
- if (_target->addPassesToEmitFileFinish(*codeGenPasses, mce, 3)) {
+ if (_target->addPassesToEmitFileFinish(*codeGenPasses, mce,
+ CodeGenOpt::Default)) {
errMsg = "target does not support generation of this file type";
return true;
}