EngineBuilder: support for custom TargetOptions. Fixes the

ExceptionDemo example.

llvm-svn: 146108
This commit is contained in:
Peter Collingbourne 2011-12-07 23:58:57 +00:00
parent 42ee1522b6
commit dff247868a
4 changed files with 19 additions and 3 deletions

View File

@ -2005,7 +2005,8 @@ int main(int argc, char *argv[]) {
}
// If not set, exception handling will not be turned on
llvm::JITExceptionHandling = true;
llvm::TargetOptions Opts;
Opts.JITExceptionHandling = true;
llvm::InitializeNativeTarget();
llvm::LLVMContext &context = llvm::getGlobalContext();
@ -2018,6 +2019,7 @@ int main(int argc, char *argv[]) {
llvm::EngineBuilder factory(module);
factory.setEngineKind(llvm::EngineKind::JIT);
factory.setAllocateGVsWithCode(false);
factory.setTargetOptions(Opts);
llvm::ExecutionEngine *executionEngine = factory.create();
{

View File

@ -26,6 +26,7 @@
#include "llvm/Support/ValueHandle.h"
#include "llvm/Support/Mutex.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetOptions.h"
namespace llvm {
@ -462,6 +463,7 @@ private:
CodeGenOpt::Level OptLevel;
JITMemoryManager *JMM;
bool AllocateGVsWithCode;
TargetOptions Options;
Reloc::Model RelocModel;
CodeModel::Model CMModel;
std::string MArch;
@ -475,6 +477,7 @@ private:
ErrorStr = NULL;
OptLevel = CodeGenOpt::Default;
JMM = NULL;
Options = TargetOptions();
AllocateGVsWithCode = false;
RelocModel = Reloc::Default;
CMModel = CodeModel::JITDefault;
@ -518,6 +521,13 @@ public:
return *this;
}
/// setTargetOptions - Set the target options that the ExecutionEngine
/// target is using. Defaults to TargetOptions().
EngineBuilder &setTargetOptions(const TargetOptions &Opts) {
Options = Opts;
return *this;
}
/// setRelocationModel - Set the relocation model that the ExecutionEngine
/// target is using. Defaults to target specific default "Reloc::Default".
EngineBuilder &setRelocationModel(Reloc::Model RM) {
@ -578,6 +588,7 @@ public:
StringRef MArch,
StringRef MCPU,
const SmallVectorImpl<std::string>& MAttrs,
const TargetOptions &Options,
Reloc::Model RM,
CodeModel::Model CM,
CodeGenOpt::Level OL,

View File

@ -436,8 +436,10 @@ ExecutionEngine *ExecutionEngine::createJIT(Module *M,
StringRef MCPU = "";
SmallVector<std::string, 1> MAttrs;
// TODO: permit custom TargetOptions here
TargetMachine *TM =
EngineBuilder::selectTarget(M, MArch, MCPU, MAttrs, RM, CMM, OL, ErrorStr);
EngineBuilder::selectTarget(M, MArch, MCPU, MAttrs, TargetOptions(), RM,
CMM, OL, ErrorStr);
if (!TM || (ErrorStr && ErrorStr->length() > 0)) return 0;
return ExecutionEngine::JITCtor(M, ErrorStr, JMM, OL, GVsWithCode, TM);
@ -466,6 +468,7 @@ ExecutionEngine *EngineBuilder::create() {
// try making a JIT.
if (WhichEngine & EngineKind::JIT) {
if (TargetMachine *TM = EngineBuilder::selectTarget(M, MArch, MCPU, MAttrs,
Options,
RelocModel, CMModel,
OptLevel, ErrorStr)) {
if (UseMCJIT && ExecutionEngine::MCJITCtor) {

View File

@ -30,6 +30,7 @@ TargetMachine *EngineBuilder::selectTarget(Module *Mod,
StringRef MArch,
StringRef MCPU,
const SmallVectorImpl<std::string>& MAttrs,
const TargetOptions &Options,
Reloc::Model RM,
CodeModel::Model CM,
CodeGenOpt::Level OL,
@ -86,7 +87,6 @@ TargetMachine *EngineBuilder::selectTarget(Module *Mod,
}
// Allocate a target...
TargetOptions Options;
TargetMachine *Target = TheTarget->createTargetMachine(TheTriple.getTriple(),
MCPU, FeaturesStr,
Options,