forked from OSchip/llvm-project
67 lines
1.8 KiB
C++
67 lines
1.8 KiB
C++
//===------ 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 <memory>
|
|
|
|
namespace llvm {
|
|
|
|
class ModuleBuilder {
|
|
public:
|
|
ModuleBuilder(LLVMContext &Context, StringRef Triple,
|
|
StringRef Name);
|
|
|
|
template <typename FuncType>
|
|
Function* createFunctionDecl(Module *M, StringRef Name) {
|
|
return Function::Create(
|
|
TypeBuilder<FuncType, false>::get(M->getContext()),
|
|
GlobalValue::ExternalLinkage, Name, M);
|
|
}
|
|
|
|
Module* getModule() { return M.get(); }
|
|
const Module* getModule() const { return M.get(); }
|
|
std::unique_ptr<Module> takeModule() { return std::move(M); }
|
|
|
|
private:
|
|
std::unique_ptr<Module> M;
|
|
IRBuilder<> Builder;
|
|
};
|
|
|
|
// Dummy struct type.
|
|
struct DummyStruct {
|
|
int X[256];
|
|
};
|
|
|
|
// TypeBuilder specialization for DummyStruct.
|
|
template <bool XCompile>
|
|
class TypeBuilder<DummyStruct, XCompile> {
|
|
public:
|
|
static StructType *get(LLVMContext &Context) {
|
|
return StructType::get(
|
|
TypeBuilder<types::i<32>[256], XCompile>::get(Context), nullptr);
|
|
}
|
|
};
|
|
|
|
|
|
} // namespace llvm
|
|
|
|
#endif
|