Privatize LLCOptions.  It had no business being visible to the entire
program.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@267 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/CodeGen/InstrSelection.h b/include/llvm/CodeGen/InstrSelection.h
index 7538a15..0873003 100644
--- a/include/llvm/CodeGen/InstrSelection.h
+++ b/include/llvm/CodeGen/InstrSelection.h
@@ -12,29 +12,17 @@
 #ifndef LLVM_CODEGEN_INSTR_SELECTION_H
 #define LLVM_CODEGEN_INSTR_SELECTION_H
 
-//************************** System Include Files **************************/
-
-//*************************** User Include Files ***************************/
-
 #include "llvm/Instruction.h"
-
-//************************* Opaque Declarations ****************************/
-
+#include <vector>
 class CompileContext;
-class Instruction;
 class Method;
 class InstrForest;
-class MachineInstruction;
+class MachineInstr;
+class InstructionNode;
 class TmpInstruction;
+class ConstPoolVal;
 
-
-//************************ Exported Constants ******************************/
-
-const int	DEBUG_INSTR_TREES = 2;
-const int	DEBUG_BURG_TREES  = 5;
-
-
-//****************** External Function Prototypes **************************/
+enum { DEBUG_TREES_NONE = 0, DEBUG_INSTR_TREES = 1, DEBUG_BURG_TREES = 5 };
 
 //---------------------------------------------------------------------------
 // GLOBAL data and an external function that must be implemented
@@ -65,12 +53,12 @@
 //---------------------------------------------------------------------------
 
 bool		SelectInstructionsForMethod	(Method* method,
-						 CompileContext& ccontext);
+						 CompileContext& ccontext,
+						 int DebugLevel);
 
 
 // Debugging function to print the generated instructions
-void		PrintMachineInstructions	(Method* method,
-						 CompileContext& ccontext);
+void		PrintMachineInstructions	(Method* method);
 
 
 //---------------------------------------------------------------------------
diff --git a/include/llvm/LLC/CompileContext.h b/include/llvm/LLC/CompileContext.h
index 91a448b..29e1577 100644
--- a/include/llvm/LLC/CompileContext.h
+++ b/include/llvm/LLC/CompileContext.h
@@ -13,57 +13,23 @@
 #ifndef LLVM_LLC_COMPILECONTEXT_H
 #define LLVM_LLC_COMPILECONTEXT_H
 
-//************************** System Include Files **************************/
-
-#include <string>
-
-//*************************** User Include Files ***************************/
-
-#include "llvm/CodeGen/Sparc.h"
-#include "llvm/LLC/LLCOptions.h"
-
-//************************** Forward Declarations **************************/
-
-class ProgramOptions;
+#include "llvm/Support/Unique.h"
 class TargetMachine;
 
-
 //---------------------------------------------------------------------------
 // class CompileContext
 //---------------------------------------------------------------------------
 
-class CompileContext: public Unique
-{
+class CompileContext: public Unique {
 private:
-  LLCOptions*		options;
   TargetMachine*	targetMachine;
   
 public:
-  /*ctor*/		CompileContext	(int argc, const char **argv, const char** envp);
-  /*dtor*/ virtual	~CompileContext	();
-  
-  const LLCOptions&	getOptions	() const { return *options; }
+  CompileContext(TargetMachine *Target) : targetMachine(Target) {}
+  ~CompileContext();
   
   const TargetMachine&	getTarget	() const { return *targetMachine; }
   TargetMachine&	getTarget	()	 { return *targetMachine; }
 };
 
-
-inline
-CompileContext::CompileContext(int argc, const char **argv, const char** envp)
-{
-  options = new LLCOptions(argc, argv, envp);
-  targetMachine = new UltraSparc;
-}
-
-
-inline
-CompileContext::~CompileContext()
-{
-  delete options;
-  delete targetMachine;
-}
-
-//**************************************************************************/
-
 #endif
diff --git a/lib/CodeGen/InstrSelection/InstrSelection.cpp b/lib/CodeGen/InstrSelection/InstrSelection.cpp
index aac5757..4843a70 100644
--- a/lib/CodeGen/InstrSelection/InstrSelection.cpp
+++ b/lib/CodeGen/InstrSelection/InstrSelection.cpp
@@ -12,22 +12,20 @@
 
 //*************************** User Include Files ***************************/
 
+#include "llvm/CodeGen/InstrSelection.h"
 #include "llvm/Method.h"
 #include "llvm/BasicBlock.h"
 #include "llvm/Type.h"
 #include "llvm/iMemory.h"
 #include "llvm/Instruction.h"
 #include "llvm/LLC/CompileContext.h"
-#include "llvm/CodeGen/InstrForest.h"
 #include "llvm/CodeGen/MachineInstr.h"
-#include "llvm/CodeGen/InstrSelection.h"
 
 
 //************************* Forward Declarations ***************************/
 
-static bool SelectInstructionsForTree	(BasicTreeNode* treeRoot,
-					 int goalnt,
-					 CompileContext& ccontext);
+static bool SelectInstructionsForTree(BasicTreeNode* treeRoot, int goalnt,
+				      CompileContext& ccontext);
 
 
 //******************* Externally Visible Functions *************************/
@@ -38,10 +36,8 @@
 // Returns true if instruction selection failed, false otherwise.
 //---------------------------------------------------------------------------
 
-bool
-SelectInstructionsForMethod(Method* method,
-			    CompileContext& ccontext)
-{
+bool SelectInstructionsForMethod(Method* method, CompileContext& ccontext,
+				 int DebugLevel) {
   bool failed = false;
   
   InstrForest instrForest;
@@ -63,8 +59,7 @@
       // Invoke BURM to label each tree node with a state
       (void) burm_label(basicNode);
       
-      if (ccontext.getOptions().IntOptionValue(DEBUG_INSTR_SELECT_OPT)
-	  >= DEBUG_BURG_TREES)
+      if (DebugLevel >= DEBUG_BURG_TREES)
 	{
 	  printcover(basicNode, 1, 0);
 	  cerr << "\nCover cost == " << treecost(basicNode, 1, 0) << "\n\n";
@@ -81,8 +76,7 @@
   
   if (!failed)
     {
-      if ( ccontext.getOptions().IntOptionValue(DEBUG_INSTR_SELECT_OPT)
-	   >= DEBUG_INSTR_TREES)
+      if (DebugLevel >= DEBUG_INSTR_TREES)
 	{
 	  cout << "\n\n*** Instruction trees for method "
 	       << (method->hasName()? method->getName() : "")
@@ -90,8 +84,8 @@
 	  instrForest.dump();
 	}
       
-      if (ccontext.getOptions().IntOptionValue(DEBUG_INSTR_SELECT_OPT) > 0)
-	PrintMachineInstructions(method, ccontext);	
+      if (DebugLevel >= DEBUG_TREES_NONE)
+	PrintMachineInstructions(method);
     }
   
   return false;
@@ -139,10 +133,7 @@
 }
 
 
-void
-PrintMachineInstructions(Method* method,
-			 CompileContext& ccontext)
-{
+void PrintMachineInstructions(Method* method) {
   cout << "\n" << method->getReturnType()
        << " \"" << method->getName() << "\"" << endl;
   
diff --git a/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp b/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp
index aac5757..4843a70 100644
--- a/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp
+++ b/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp
@@ -12,22 +12,20 @@
 
 //*************************** User Include Files ***************************/
 
+#include "llvm/CodeGen/InstrSelection.h"
 #include "llvm/Method.h"
 #include "llvm/BasicBlock.h"
 #include "llvm/Type.h"
 #include "llvm/iMemory.h"
 #include "llvm/Instruction.h"
 #include "llvm/LLC/CompileContext.h"
-#include "llvm/CodeGen/InstrForest.h"
 #include "llvm/CodeGen/MachineInstr.h"
-#include "llvm/CodeGen/InstrSelection.h"
 
 
 //************************* Forward Declarations ***************************/
 
-static bool SelectInstructionsForTree	(BasicTreeNode* treeRoot,
-					 int goalnt,
-					 CompileContext& ccontext);
+static bool SelectInstructionsForTree(BasicTreeNode* treeRoot, int goalnt,
+				      CompileContext& ccontext);
 
 
 //******************* Externally Visible Functions *************************/
@@ -38,10 +36,8 @@
 // Returns true if instruction selection failed, false otherwise.
 //---------------------------------------------------------------------------
 
-bool
-SelectInstructionsForMethod(Method* method,
-			    CompileContext& ccontext)
-{
+bool SelectInstructionsForMethod(Method* method, CompileContext& ccontext,
+				 int DebugLevel) {
   bool failed = false;
   
   InstrForest instrForest;
@@ -63,8 +59,7 @@
       // Invoke BURM to label each tree node with a state
       (void) burm_label(basicNode);
       
-      if (ccontext.getOptions().IntOptionValue(DEBUG_INSTR_SELECT_OPT)
-	  >= DEBUG_BURG_TREES)
+      if (DebugLevel >= DEBUG_BURG_TREES)
 	{
 	  printcover(basicNode, 1, 0);
 	  cerr << "\nCover cost == " << treecost(basicNode, 1, 0) << "\n\n";
@@ -81,8 +76,7 @@
   
   if (!failed)
     {
-      if ( ccontext.getOptions().IntOptionValue(DEBUG_INSTR_SELECT_OPT)
-	   >= DEBUG_INSTR_TREES)
+      if (DebugLevel >= DEBUG_INSTR_TREES)
 	{
 	  cout << "\n\n*** Instruction trees for method "
 	       << (method->hasName()? method->getName() : "")
@@ -90,8 +84,8 @@
 	  instrForest.dump();
 	}
       
-      if (ccontext.getOptions().IntOptionValue(DEBUG_INSTR_SELECT_OPT) > 0)
-	PrintMachineInstructions(method, ccontext);	
+      if (DebugLevel >= DEBUG_TREES_NONE)
+	PrintMachineInstructions(method);
     }
   
   return false;
@@ -139,10 +133,7 @@
 }
 
 
-void
-PrintMachineInstructions(Method* method,
-			 CompileContext& ccontext)
-{
+void PrintMachineInstructions(Method* method) {
   cout << "\n" << method->getReturnType()
        << " \"" << method->getName() << "\"" << endl;
   
diff --git a/tools/llc/LLCOptions.cpp b/tools/llc/LLCOptions.cpp
index 6ba1427..1f367a2 100644
--- a/tools/llc/LLCOptions.cpp
+++ b/tools/llc/LLCOptions.cpp
@@ -21,7 +21,7 @@
 
 #include "llvm/Support/ProgramOptions.h"
 #include "llvm/Support/ProgramOption.h"
-#include "llvm/LLC/LLCOptions.h"
+#include "LLCOptions.h"
 
 
 //---------------------------------------------------------------------------
diff --git a/tools/llc/LLCOptions.h b/tools/llc/LLCOptions.h
new file mode 100644
index 0000000..cad1d4f
--- /dev/null
+++ b/tools/llc/LLCOptions.h
@@ -0,0 +1,74 @@
+// $Id$ -*-c++-*-
+//**************************************************************************/
+// File:
+//	LLCOptions.h
+// 
+// Purpose:
+//	Options for the llc compiler.
+// 
+// History:
+//	7/15/01	 -  Vikram Adve  -  Created
+// 
+//**************************************************************************/
+
+#ifndef LLVM_LLC_LLCOPTIONS_H
+#define LLVM_LLC_LLCOPTIONS_H
+
+#include "llvm/Support/ProgramOptions.h"
+#include "llvm/Support/ProgramOption.h"
+
+const char* const HELP_OPT		= "help";
+const char* const DEBUG_OPT		= "d";
+const char* const QUIET_OPT		= "q";
+const char* const DEBUG_INSTR_SELECT_OPT= "debug_select";
+const char* const OUTFILENAME_OPT	= "o";
+
+
+//---------------------------------------------------------------------------
+// class LLCOptions
+//---------------------------------------------------------------------------
+
+class LLCOptions : public ProgramOptions {
+public:
+  /*ctor*/		LLCOptions	(int _argc,
+					 const char* _argv[],
+					 const char* _envp[]); 
+  /*dtor*/ virtual	~LLCOptions	();
+
+  const string&		getInputFileName() const  { return inputFileName; }
+  
+  const string&		getOutputFileName() const { return outputFileName; }
+  
+protected:
+
+  //--------------------------------------------------------------------
+  // Initialize for all our compiler options (called by constructors).
+  //--------------------------------------------------------------------
+  void InitializeOptions();
+  
+  //--------------------------------------------------------------------
+  // Make sure the parse went ok.
+  //--------------------------------------------------------------------
+  void CheckParse();
+
+  //--------------------------------------------------------------------
+  // Parse arguments after all options are consumed.
+  // This is called after a successful ParseArgs.
+  //--------------------------------------------------------------------
+  virtual void ParseExtraArgs(); 
+  
+  //--------------------------------------------------------------------
+  // Print message describing which arguments and options are 
+  // required, optional, mutually exclusive, ...
+  // called in ProgramOptions::Usage() method
+  //--------------------------------------------------------------------
+  virtual void PrintUsage(ostream& stream) const;
+
+private:
+  string	  inputFileName;
+  string	  outputFileName;
+};
+
+//**************************************************************************/
+
+#endif
diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp
index 6ac3175f..4bf26d5 100644
--- a/tools/llc/llc.cpp
+++ b/tools/llc/llc.cpp
@@ -11,29 +11,39 @@
 // 
 //**************************************************************************/
 
-//************************** System Include Files **************************/
-
-//*************************** User Include Files ***************************/
-
 #include "llvm/Module.h"
 #include "llvm/Method.h"
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Bytecode/Writer.h"
-#include "llvm/CodeGen/InstrForest.h"
 #include "llvm/CodeGen/InstrSelection.h"
-#include "llvm/LLC/LLCOptions.h"
 #include "llvm/LLC/CompileContext.h"
+#include "llvm/CodeGen/Sparc.h"
+#include "LLCOptions.h"
 
-//************************** Forward Declarations **************************/
+CompileContext::~CompileContext() { delete targetMachine; }
 
-class Module;
-class CompileContext;
-
-
-static bool	CompileModule	(Module *module,
-				 CompileContext& compileContext);
-
-int DebugInstrSelectLevel = DEBUG_INSTR_TREES;
+static bool CompileModule(Module *module, CompileContext& ccontext,
+			  LLCOptions &Options) {
+  bool failed = false;
+  
+  for (Module::MethodListType::const_iterator
+	 methodIter = module->getMethodList().begin();
+       methodIter != module->getMethodList().end();
+       ++methodIter)
+    {
+      Method* method = *methodIter;
+      
+      if (SelectInstructionsForMethod(method, ccontext, 
+			   Options.IntOptionValue(DEBUG_INSTR_SELECT_OPT)))
+	{
+	  failed = true;
+	  cerr << "Instruction selection failed for method "
+	       << method->getName() << "\n\n";
+	}
+    }
+  
+  return failed;
+}
 
 
 //---------------------------------------------------------------------------
@@ -42,26 +52,21 @@
 // Entry point for the driver.
 //---------------------------------------------------------------------------
 
-
-int
-main(int argc, const char** argv, const char** envp)
-{
-  CompileContext compileContext(argc, argv, envp);
+int main(int argc, const char** argv, const char** envp) {
+  LLCOptions Options(argc, argv, envp);
+  CompileContext compileContext(new UltraSparc());
   
-  Module *module =
-    ParseBytecodeFile(compileContext.getOptions().getInputFileName());
-  
+  Module *module = ParseBytecodeFile(Options.getInputFileName());
   if (module == 0) {
     cerr << "bytecode didn't read correctly.\n";
     return 1;
   }
   
-  bool failure = CompileModule(module, compileContext);
+  bool failure = CompileModule(module, compileContext, Options);
   
-  if (failure)
-    {
+  if (failure) {
       cerr << "Error compiling "
-	   << compileContext.getOptions().getInputFileName() << "!\n";
+	   << Options.getInputFileName() << "!\n";
       delete module;
       return 1;
     }
@@ -74,30 +79,3 @@
   delete module;
   return 0;
 }
-
-
-static bool
-CompileModule(Module *module,
-	      CompileContext& ccontext)
-{
-  bool failed = false;
-  
-  for (Module::MethodListType::const_iterator
-	 methodIter = module->getMethodList().begin();
-       methodIter != module->getMethodList().end();
-       ++methodIter)
-    {
-      Method* method = *methodIter;
-      
-      if (SelectInstructionsForMethod(method, ccontext))
-	{
-	  failed = true;
-	  cerr << "Instruction selection failed for method "
-	       << (method->hasName()? method->getName() : "")
-	       << endl << endl;
-	}
-    }
-  
-  return failed;
-}
-