#include "../include/KaleidoscopeJIT.h" // 为本教程编译了一个简单的JIT,后续Building a JIT in LLVM会涉及到
#include "llvm/ADT/APFloat.h" // arbitrary precision float
#include "llvm/ADT/STLExtras.h" // 标准库拓展
#include "llvm/IR/BasicBlock.h" // Basic Block
#include "llvm/IR/Constants.h" // 常量
#include "llvm/IR/DerivedTypes.h" // derived types的实现
// arrays of x" or "structure of x, y, z" or "function returning x taking (y,z) as parameters"
#include "llvm/IR/Function.h" // 函数
#include "llvm/IR/IRBuilder.h" // IRBuilder
#include "llvm/IR/LLVMContext.h" // LLVMContext负责global类型的管理
#include "llvm/IR/LegacyPassManager.h" // 保存,维护,优化 Pass的执行
#include "llvm/IR/Module.h" // Module
#include "llvm/IR/Type.h" // 类型的声明
#include "llvm/IR/Verifier.h" // 函数验证
#include "llvm/Support/TargetSelect.h" // 用以确保特定类的目标被链接到主应用的执行程序,并正确初始化
#include "llvm/Target/TargetMachine.h" // TargetMachine LLVMTargetMachine
#include "llvm/Transforms/InstCombine/InstCombine.h" // instcombine pass
#include "llvm/Transforms/Scalar.h" // expose pass
#include "llvm/Transforms/Scalar/GVN.h" // Global Value Numbering pass
#include <algorithm>
#include <cassert>
#include <cctype>
#include <cstdint>
#include <cstdio>
using namespace llvm::orc; // On Request Compilation