Remove unused function.
[oota-llvm.git] / tools / bugpoint / ToolRunner.h
index addeda62926c5b9999020a6f0f7cba2cdd1ff8c6..0cc5426b083fa7ad914f4cf355742362a813a884 100644 (file)
@@ -1,9 +1,9 @@
-//===-- llvm/Support/ToolRunner.h -------------------------------*- C++ -*-===//
+//===-- tools/bugpoint/ToolRunner.h -----------------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
 //
@@ -14,8 +14,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_SUPPORT_TOOLRUNNER_H
-#define LLVM_SUPPORT_TOOLRUNNER_H
+#ifndef BUGPOINT_TOOLRUNNER_H
+#define BUGPOINT_TOOLRUNNER_H
 
 #include "llvm/Support/SystemUtils.h"
 #include <exception>
@@ -26,7 +26,6 @@ namespace llvm {
 class CBE;
 class LLC;
 
-
 /// ToolExecutionError - An instance of this class is thrown by the
 /// AbstractInterpreter instances if there is an error running a tool (e.g., LLC
 /// crashes) which prevents execution of the program.
@@ -45,11 +44,13 @@ public:
 //
 class GCC {
   sys::Path GCCPath;          // The path to the gcc executable
-  GCC(const sys::Path &gccPath) : GCCPath(gccPath) { }
+  sys::Path RSHPath;          // The path to the rsh executable
+  GCC(const sys::Path &gccPath, const sys::Path &rshPath)
+    : GCCPath(gccPath), RSHPath(rshPath) { }
 public:
   enum FileType { AsmFile, CFile };
 
-  static GCCcreate(const std::string &ProgramPath, std::string &Message);
+  static GCC *create(const std::string &ProgramPath, std::string &Message);
 
   /// ExecuteProgram - Execute the program specified by "ProgramFile" (which is
   /// either a .s file, or a .c file, specified by FileType), with the specified
@@ -63,20 +64,23 @@ public:
                      FileType fileType,
                      const std::string &InputFile,
                      const std::string &OutputFile,
-                     const std::vector<std::string> &SharedLibs =
-                         std::vector<std::string>(), unsigned Timeout = 0);
+                     const std::vector<std::string> &GCCArgs =
+                         std::vector<std::string>(), 
+                     unsigned Timeout = 0,
+                     unsigned MemoryLimit = 0);
 
   /// MakeSharedObject - This compiles the specified file (which is either a .c
   /// file or a .s file) into a shared object.
   ///
   int MakeSharedObject(const std::string &InputFile, FileType fileType,
-                       std::string &OutputFile);
+                       std::string &OutputFile,
+                       const std::vector<std::string> &ArgsForGCC);
 };
 
 
 //===---------------------------------------------------------------------===//
 /// AbstractInterpreter Class - Subclasses of this class are used to execute
-/// LLVM bytecode in a variety of ways.  This abstract interface hides this
+/// LLVM bitcode in a variety of ways.  This abstract interface hides this
 /// complexity behind a simple interface.
 ///
 class AbstractInterpreter {
@@ -94,25 +98,41 @@ public:
                                         std::string &Message,
                                         const std::vector<std::string> *Args=0);
 
+  static AbstractInterpreter* createCustom(const std::string &ProgramPath,
+                                           std::string &Message,
+                                           const std::string &ExecCommandLine);
+
 
   virtual ~AbstractInterpreter() {}
 
-  /// compileProgram - Compile the specified program from bytecode to executable
+  /// compileProgram - Compile the specified program from bitcode to executable
   /// code.  This does not produce any output, it is only used when debugging
   /// the code generator.  If the code generator fails, an exception should be
   /// thrown, otherwise, this function will just return.
-  virtual void compileProgram(const std::string &Bytecode) {}
-
-  /// ExecuteProgram - Run the specified bytecode file, emitting output to the
+  virtual void compileProgram(const std::string &Bitcode) {}
+
+  /// OutputCode - Compile the specified program from bitcode to code
+  /// understood by the GCC driver (either C or asm).  If the code generator
+  /// fails, an exception should be thrown, otherwise, this function returns the
+  /// type of code emitted.
+  virtual GCC::FileType OutputCode(const std::string &Bitcode,
+                                   sys::Path &OutFile) {
+    throw std::string("OutputCode not supported by this AbstractInterpreter!");
+  }
+  
+  /// ExecuteProgram - Run the specified bitcode file, emitting output to the
   /// specified filename.  This returns the exit code of the program.
   ///
-  virtual int ExecuteProgram(const std::string &Bytecode,
+  virtual int ExecuteProgram(const std::string &Bitcode,
                              const std::vector<std::string> &Args,
                              const std::string &InputFile,
                              const std::string &OutputFile,
+                             const std::vector<std::string> &GCCArgs =
+                               std::vector<std::string>(),
                              const std::vector<std::string> &SharedLibs =
                                std::vector<std::string>(),
-                             unsigned Timeout = 0) = 0;
+                             unsigned Timeout = 0,
+                             unsigned MemoryLimit = 0) = 0;
 };
 
 //===---------------------------------------------------------------------===//
@@ -130,25 +150,29 @@ public:
   }
   ~CBE() { delete gcc; }
 
-  /// compileProgram - Compile the specified program from bytecode to executable
+  /// compileProgram - Compile the specified program from bitcode to executable
   /// code.  This does not produce any output, it is only used when debugging
   /// the code generator.  If the code generator fails, an exception should be
   /// thrown, otherwise, this function will just return.
-  virtual void compileProgram(const std::string &Bytecode);
+  virtual void compileProgram(const std::string &Bitcode);
 
-  virtual int ExecuteProgram(const std::string &Bytecode,
+  virtual int ExecuteProgram(const std::string &Bitcode,
                              const std::vector<std::string> &Args,
                              const std::string &InputFile,
                              const std::string &OutputFile,
+                             const std::vector<std::string> &GCCArgs =
+                               std::vector<std::string>(),
                              const std::vector<std::string> &SharedLibs =
                                std::vector<std::string>(),
-                             unsigned Timeout = 0);
-
-  // Sometimes we just want to go half-way and only generate the .c file, not
-  // necessarily compile it with GCC and run the program.  This throws an
-  // exception if LLC crashes.
-  //
-  virtual void OutputC(const std::string &Bytecode, sys::Path& OutputCFile);
+                             unsigned Timeout = 0,
+                             unsigned MemoryLimit = 0);
+
+  /// OutputCode - Compile the specified program from bitcode to code
+  /// understood by the GCC driver (either C or asm).  If the code generator
+  /// fails, an exception should be thrown, otherwise, this function returns the
+  /// type of code emitted.
+  virtual GCC::FileType OutputCode(const std::string &Bitcode,
+                                   sys::Path &OutFile);
 };
 
 
@@ -167,25 +191,26 @@ public:
   }
   ~LLC() { delete gcc; }
 
-  /// compileProgram - Compile the specified program from bytecode to executable
+  /// compileProgram - Compile the specified program from bitcode to executable
   /// code.  This does not produce any output, it is only used when debugging
   /// the code generator.  If the code generator fails, an exception should be
   /// thrown, otherwise, this function will just return.
-  virtual void compileProgram(const std::string &Bytecode);
+  virtual void compileProgram(const std::string &Bitcode);
 
-  virtual int ExecuteProgram(const std::string &Bytecode,
+  virtual int ExecuteProgram(const std::string &Bitcode,
                              const std::vector<std::string> &Args,
                              const std::string &InputFile,
                              const std::string &OutputFile,
+                             const std::vector<std::string> &GCCArgs =
+                               std::vector<std::string>(),
                              const std::vector<std::string> &SharedLibs =
                                 std::vector<std::string>(),
-                             unsigned Timeout = 0);
+                             unsigned Timeout = 0,
+                             unsigned MemoryLimit = 0);
 
-  // Sometimes we just want to go half-way and only generate the .s file,
-  // not necessarily compile it all the way and run the program.  This throws
-  // an exception if execution of LLC fails.
-  //
-  void OutputAsm(const std::string &Bytecode, sys::Path &OutputAsmFile);
+  virtual GCC::FileType OutputCode(const std::string &Bitcode,
+                                   sys::Path &OutFile);
+  
 };
 
 } // End llvm namespace