X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=unittests%2FExecutionEngine%2FOrc%2FOrcTestCommon.h;h=18e3874acaf8e6a11dd67c3f389cbe86aeb2416c;hp=4be2e1967072382806606dd69b762faf12780dba;hb=5fc6406e3924021b53e0b5f246a5cb604c1c3624;hpb=727f95c8fc22e8356fcfa1582c30bc4679f9a33d diff --git a/unittests/ExecutionEngine/Orc/OrcTestCommon.h b/unittests/ExecutionEngine/Orc/OrcTestCommon.h index 4be2e196707..18e3874acaf 100644 --- a/unittests/ExecutionEngine/Orc/OrcTestCommon.h +++ b/unittests/ExecutionEngine/Orc/OrcTestCommon.h @@ -20,21 +20,52 @@ #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/IR/TypeBuilder.h" +#include "llvm/ExecutionEngine/ExecutionEngine.h" #include "llvm/ExecutionEngine/Orc/JITSymbol.h" +#include "llvm/Support/TargetSelect.h" #include namespace llvm { +// Base class for Orc tests that will execute code. +class OrcExecutionTest { +public: + + OrcExecutionTest() { + if (!NativeTargetInitialized) { + InitializeNativeTarget(); + InitializeNativeTargetAsmParser(); + InitializeNativeTargetAsmPrinter(); + NativeTargetInitialized = true; + } + }; + + // Get a target machine for the host if it supports JIT execution. + std::unique_ptr getHostTargetMachineIfSupported() { + std::unique_ptr TM(EngineBuilder().selectTarget()); + + const Triple& TT = TM->getTargetTriple(); + + if (TT.getArch() == Triple::x86_64) + return std::move(TM); + + return nullptr; + } + +private: + static bool NativeTargetInitialized; +}; + class ModuleBuilder { public: ModuleBuilder(LLVMContext &Context, StringRef Triple, StringRef Name); template - Function* createFunctionDecl(Module *M, StringRef Name) { + Function* createFunctionDecl(StringRef Name) { return Function::Create( TypeBuilder::get(M->getContext()), - GlobalValue::ExternalLinkage, Name, M); + GlobalValue::ExternalLinkage, Name, M.get()); } Module* getModule() { return M.get(); }