Add a -time-compilations=<N> option to llc.
[oota-llvm.git] / tools / lto / LTOCodeGenerator.h
index d3a2b6b2948eba6a81771d6de41296f3cf00ad28..3081b7dad1d18c7e819a9984c7e0be17962cf384 100644 (file)
@@ -4,61 +4,79 @@
 //
 // This file is distributed under the University of Illinois Open Source
 // License. See LICENSE.TXT for details.
-// 
+//
 //===----------------------------------------------------------------------===//
 //
-// This file declares the LTOCodeGenerator class. 
+// This file declares the LTOCodeGenerator class.
 //
 //===----------------------------------------------------------------------===//
 
-
 #ifndef LTO_CODE_GENERATOR_H
 #define LTO_CODE_GENERATOR_H
 
 #include "llvm/Linker.h"
 #include "llvm/ADT/StringMap.h"
-#include "llvm/ADT/SmallVector.h"
-
+#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm-c/lto.h"
 #include <string>
 
+namespace llvm {
+  class LLVMContext;
+  class GlobalValue;
+  class Mangler;
+  class MemoryBuffer;
+  class TargetMachine;
+  class raw_ostream;
+}
+
+//===----------------------------------------------------------------------===//
+/// LTOCodeGenerator - C++ class which implements the opaque lto_code_gen_t
+/// type.
+///
+struct LTOCodeGenerator {
+  static const char *getVersionString();
+
+  LTOCodeGenerator();
+  ~LTOCodeGenerator();
+
+  bool addModule(struct LTOModule*, std::string &errMsg);
+  bool setDebugInfo(lto_debug_model, std::string &errMsg);
+  bool setCodePICModel(lto_codegen_model, std::string &errMsg);
+
+  void setCpu(const char* mCpu) { _mCpu = mCpu; }
+
+  void addMustPreserveSymbol(const char* sym) {
+    _mustPreserveSymbols[sym] = 1;
+  }
+
+  bool writeMergedModules(const char *path, std::string &errMsg);
+  bool compile_to_file(const char **name, std::string &errMsg);
+  const void *compile(size_t *length, std::string &errMsg);
+  void setCodeGenDebugOptions(const char *opts);
 
-//
-// C++ class which implements the opaque lto_code_gen_t
-//
-class LTOCodeGenerator {
-public:
-    static const char*        getVersionString();
-    
-                            LTOCodeGenerator();
-                            ~LTOCodeGenerator();
-                            
-    bool                addModule(class LTOModule*, std::string& errMsg);
-    bool                setDebugInfo(lto_debug_model, std::string& errMsg);
-    bool                setCodePICModel(lto_codegen_model, std::string& errMsg);
-    void                addMustPreserveSymbol(const char* sym);
-    bool                writeMergedModules(const char* path, 
-                                                           std::string& errMsg);
-    const void*         compile(size_t* length, std::string& errMsg);
-    void                setCodeGenDebugOptions(const char *opts); 
 private:
-    bool                generateAssemblyCode(std::ostream& out, 
-                                                        std::string& errMsg);
-    bool                assemble(const std::string& asmPath, 
-                            const std::string& objPath, std::string& errMsg);
-    void                applyScopeRestrictions();
-    bool                determineTarget(std::string& errMsg);
-    
-    typedef llvm::StringMap<uint8_t> StringSet;
+  bool generateObjectFile(llvm::raw_ostream &out, std::string &errMsg);
+  void applyScopeRestrictions();
+  void applyRestriction(llvm::GlobalValue &GV,
+                        std::vector<const char*> &mustPreserveList,
+                        llvm::SmallPtrSet<llvm::GlobalValue*, 8> &asmUsed,
+                        llvm::Mangler &mangler);
+  bool determineTarget(std::string &errMsg);
+
+  typedef llvm::StringMap<uint8_t> StringSet;
 
-    llvm::Linker                _linker;
-    llvm::TargetMachine*        _target;
-    bool                        _emitDwarfDebugInfo;
-    bool                        _scopeRestrictionsDone;
-    lto_codegen_model           _codeModel;
-    StringSet                   _mustPreserveSymbols;
-    llvm::MemoryBuffer*         _nativeObjectFile;
-    std::vector<const char*>    _codegenOptions;
+  llvm::LLVMContext&          _context;
+  llvm::Linker                _linker;
+  llvm::TargetMachine*        _target;
+  bool                        _emitDwarfDebugInfo;
+  bool                        _scopeRestrictionsDone;
+  lto_codegen_model           _codeModel;
+  StringSet                   _mustPreserveSymbols;
+  StringSet                   _asmUndefinedRefs;
+  llvm::MemoryBuffer*         _nativeObjectFile;
+  std::vector<char*>          _codegenOptions;
+  std::string                 _mCpu;
+  std::string                 _nativeObjectPath;
 };
 
 #endif // LTO_CODE_GENERATOR_H
-