forked from OSchip/llvm-project
58 lines
1.5 KiB
C++
58 lines
1.5 KiB
C++
#ifndef LLVM_EXAMPLES_THINLTOJIT_DISCOVERYTHREAD_H
|
|
#define LLVM_EXAMPLES_THINLTOJIT_DISCOVERYTHREAD_H
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/IR/ModuleSummaryIndex.h"
|
|
|
|
#include "ThinLtoJIT.h"
|
|
|
|
#include <atomic>
|
|
#include <vector>
|
|
|
|
namespace llvm {
|
|
namespace orc {
|
|
|
|
class ExecutionSession;
|
|
class ThinLtoModuleIndex;
|
|
class ThinLtoInstrumentationLayer;
|
|
|
|
class ThinLtoDiscoveryThread {
|
|
public:
|
|
ThinLtoDiscoveryThread(std::atomic<bool> &RunningFlag, ExecutionSession &ES,
|
|
JITDylib *MainJD, ThinLtoInstrumentationLayer &L,
|
|
ThinLtoModuleIndex &GlobalIndex,
|
|
ThinLtoJIT::AddModuleFunction AddModule,
|
|
unsigned LookaheadLevels, bool PrintStats)
|
|
: KeepRunning(RunningFlag), ES(ES), Layer(L), GlobalIndex(GlobalIndex),
|
|
AddModule(std::move(AddModule)), LookaheadLevels(LookaheadLevels),
|
|
PrintStats(PrintStats) {}
|
|
|
|
~ThinLtoDiscoveryThread() {
|
|
if (PrintStats)
|
|
dump(errs());
|
|
}
|
|
|
|
void operator()();
|
|
|
|
void dump(raw_ostream &OS) {
|
|
OS << format("Modules submitted asynchronously: %d\n", NumModulesSubmitted);
|
|
}
|
|
|
|
private:
|
|
std::atomic<bool> &KeepRunning;
|
|
ExecutionSession &ES;
|
|
ThinLtoInstrumentationLayer &Layer;
|
|
ThinLtoModuleIndex &GlobalIndex;
|
|
ThinLtoJIT::AddModuleFunction AddModule;
|
|
unsigned LookaheadLevels;
|
|
bool PrintStats;
|
|
unsigned NumModulesSubmitted{0};
|
|
|
|
void spawnLookupForHighRankModules();
|
|
};
|
|
|
|
} // namespace orc
|
|
} // namespace llvm
|
|
|
|
#endif
|