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;
     }