19 #include <llvm/IR/Constants.h>
20 #include <llvm/IR/LLVMContext.h>
21 #include <llvm/IR/Module.h>
22 #include <llvm/IR/Type.h>
23 #include <llvm/Support/raw_os_ostream.h>
27 #if LLVM_VERSION_MAJOR >= 10
28 #define LLVM_ALIGN(alignment) llvm::Align(alignment)
29 #define LLVM_MAYBE_ALIGN(alignment) llvm::MaybeAlign(alignment)
31 #define LLVM_ALIGN(alignment) alignment
32 #define LLVM_MAYBE_ALIGN(alignment) alignment
37 llvm::LLVMContext& context) {
40 return llvm::ArrayType::get(llvm::Type::getInt64Ty(context), count);
42 return llvm::ArrayType::get(llvm::Type::getInt32Ty(context), count);
45 return llvm::ArrayType::get(llvm::Type::getInt16Ty(context), count);
48 return llvm::ArrayType::get(llvm::Type::getInt8Ty(context), count);
51 return llvm::ArrayType::get(llvm::Type::getInt1Ty(context), count);
61 llvm::LLVMContext& context) {
64 return llvm::VectorType::get(llvm::Type::getInt64Ty(context), count,
false);
66 return llvm::VectorType::get(llvm::Type::getInt32Ty(context), count,
false);
69 return llvm::VectorType::get(llvm::Type::getInt16Ty(context), count,
false);
72 return llvm::VectorType::get(llvm::Type::getInt8Ty(context), count,
false);
75 return llvm::VectorType::get(llvm::Type::getInt1Ty(context), count,
false);
86 return llvm::Type::getInt64Ty(context);
88 return llvm::Type::getInt32Ty(context);
91 return llvm::Type::getInt16Ty(context);
94 return llvm::Type::getInt8Ty(context);
97 return llvm::Type::getInt1Ty(context);
109 return llvm::Type::getDoubleTy(context);
111 return llvm::Type::getFloatTy(context);
122 return llvm::Type::getDoublePtrTy(context);
124 return llvm::Type::getFloatPtrTy(context);
133 return llvm::Type::getInt64PtrTy(context);
135 return llvm::Type::getInt32PtrTy(context);
137 return llvm::Type::getInt16PtrTy(context);
139 return llvm::Type::getInt8PtrTy(context);
141 return llvm::Type::getInt1PtrTy(context);
148 inline llvm::ConstantInt*
ll_int(
const T v, llvm::LLVMContext& context) {
149 return static_cast<llvm::ConstantInt*
>(
150 llvm::ConstantInt::get(
get_int_type(
sizeof(v) * 8, context), v));
153 inline llvm::ConstantInt*
ll_bool(
const bool v, llvm::LLVMContext& context) {
154 return static_cast<llvm::ConstantInt*
>(
161 llvm::raw_string_ostream os(str);
llvm::Type * get_fp_ptr_type(const int width, llvm::LLVMContext &context)
llvm::ConstantInt * ll_int(const T v, llvm::LLVMContext &context)
llvm::Type * get_fp_type(const int width, llvm::LLVMContext &context)
llvm::Type * get_int_type(const int width, llvm::LLVMContext &context)
void verify_function_ir(const llvm::Function *func)
llvm::VectorType * get_int_vector_type(int const width, int count, llvm::LLVMContext &context)
std::string serialize_llvm_object(const T *llvm_obj)
llvm::ConstantInt * ll_bool(const bool v, llvm::LLVMContext &context)
llvm::ArrayType * get_int_array_type(int const width, int count, llvm::LLVMContext &context)
llvm::Type * get_int_ptr_type(const int width, llvm::LLVMContext &context)