summaryrefslogtreecommitdiff
path: root/tools/lto/LTOCodeGenerator.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lto/LTOCodeGenerator.h')
-rw-r--r--tools/lto/LTOCodeGenerator.h39
1 files changed, 38 insertions, 1 deletions
diff --git a/tools/lto/LTOCodeGenerator.h b/tools/lto/LTOCodeGenerator.h
index 8f37cf0e1d..5dda5d9c3e 100644
--- a/tools/lto/LTOCodeGenerator.h
+++ b/tools/lto/LTOCodeGenerator.h
@@ -41,6 +41,7 @@
#include "llvm/Linker.h"
#include <string>
#include <vector>
+#include "LTOPartition.h"
namespace llvm {
class LLVMContext;
@@ -102,16 +103,34 @@ struct LTOCodeGenerator {
//
const void *compile(size_t *length, std::string &errMsg);
+ // Return the paths of the intermediate files that linker needs to delete
+ // before it exits. The paths are delimited by a single '\0', and the last
+ // path is ended by double '\0's. The file could be a directory. In that
+ // case, the entire directory should be erased recusively. This function
+ // must be called after the compilexxx() is successfuly called, because
+ // only after that moment, compiler is aware which files need to be removed.
+ // If calling compilexxx() is not successful, it is up to compiler to clean
+ // up all the intermediate files generated during the compilation process.
+ //
+ const char *getFilesNeedToRemove();
+
private:
void initializeLTOPasses();
+ bool determineTarget(std::string &errMsg);
+ void parseOptions();
+ bool prepareBeforeCompile(std::string &ErrMsg);
+ void performIPO(bool PerformPartition, std::string &ErrMsg);
+ bool performPostIPO(std::string &ErrMsg, bool MergeObjs = false,
+ const char **MergObjPath = 0);
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;
@@ -127,6 +146,24 @@ private:
std::vector<char*> _codegenOptions;
std::string _mCpu;
std::string _nativeObjectPath;
+
+ // To manage the partitions. If partition is not enabled, the whole merged
+ // module is considered as a single degenerated partition, and the "manager"
+ // is still active.
+ lto::IPOPartMgr PartitionMgr;
+
+ // To manage the intermediate files during the compilations.
+ lto::IPOFileMgr FileMgr;
+
+ // Sometimes we need to return a vector of strings in a "C" way (to work with
+ // the C-APIs). We encode such C-thinking string vector by concatenating all
+ // strings tegother with a single '\0' as the delimitor, the last string ended
+ // by double '\0's.
+ SmallVector<char, 4> ConcatStrings;
+
+ // Make sure command line is parsed only once. It would otherwise complain
+ // and quite prematurely.
+ bool OptionsParsed;
};
#endif // LTO_CODE_GENERATOR_H