//===------ OrcTestCommon.h - Utilities for Orc Unit Tests ------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // Common utilities for the Orc unit tests. // //===----------------------------------------------------------------------===// #ifndef LLVM_UNITTESTS_EXECUTIONENGINE_ORC_ORCTESTCOMMON_H #define LLVM_UNITTESTS_EXECUTIONENGINE_ORC_ORCTESTCOMMON_H #include "llvm/IR/Function.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/IR/TypeBuilder.h" #include namespace llvm { class ModuleBuilder { public: ModuleBuilder(LLVMContext &Context, StringRef Triple, StringRef Name); template Function* createFunctionDecl(Module *M, StringRef Name) { return Function::Create( TypeBuilder::get(M->getContext()), GlobalValue::ExternalLinkage, Name, M); } Module* getModule() { return M.get(); } const Module* getModule() const { return M.get(); } std::unique_ptr takeModule() { return std::move(M); } private: std::unique_ptr M; IRBuilder<> Builder; }; // Dummy struct type. struct DummyStruct { int X[256]; }; // TypeBuilder specialization for DummyStruct. template class TypeBuilder { public: static StructType *get(LLVMContext &Context) { return StructType::get( TypeBuilder[256], XCompile>::get(Context), nullptr); } }; } // namespace llvm #endif