#ifndef HALIDE_LLVM_HEADERS_H #define HALIDE_LLVM_HEADERS_H #if LLVM_VERSION >= 120 // We're good to go #else #error "Compiling Halide requires LLVM 12.0 or newer" #endif // No msvc warnings from llvm headers please #ifdef _MSC_VER #pragma warning(push, 0) #endif #ifdef __GNUC__ #pragma GCC system_header #endif #ifdef __clang__ #pragma clang system_header #endif // IWYU pragma: begin_exports #if WITH_WABT || WITH_V8 #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef WITH_HEXAGON #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if LLVM_VERSION >= 140 #include #else #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // IWYU pragma: end_exports // No msvc warnings from llvm headers please #ifdef _MSC_VER #pragma warning(pop) #endif // llvm may sometimes define NDEBUG, which is annoying, because we always want asserts #ifdef NDEBUG #undef NDEBUG #include #define NDEBUG #endif namespace Halide { namespace Internal { template auto iterator_to_pointer(T iter) -> decltype(&*std::declval()) { return &*iter; } inline std::string get_llvm_function_name(const llvm::Function *f) { return f->getName().str(); } inline std::string get_llvm_function_name(const llvm::Function &f) { return f.getName().str(); } inline llvm::StructType *get_llvm_struct_type_by_name(llvm::Module *module, const char *name) { return llvm::StructType::getTypeByName(module->getContext(), name); } } // namespace Internal } // namespace Halide #endif