#pragma once #include #include #include #include namespace llvm { class CallInst; class ConstantInt; class Function; class FunctionType; class Instruction; class LLVMContext; class Module; class Pass; } std::vector getCallsToFunction(llvm::Function* callee, const llvm::Function* caller = nullptr); llvm::Function* getOrCreateFunction(const std::string& name, llvm::Module* module, llvm::FunctionType* funcType, std::map& typeToFuncMap); llvm::ConstantInt* makeInt32(int val, llvm::LLVMContext& context); llvm::Instruction* getInstructionAfter(llvm::Instruction* inst); std::unique_ptr loadModuleFromAsmFile(llvm::LLVMContext& context, const std::string& filename); std::unique_ptr loadModuleFromAsmString(llvm::LLVMContext& context, const std::string& str); void saveModuleToAsmFile(const llvm::Module* module, const std::string& filename); void dumpCFG(const llvm::Function* F, const std::string& suffix); void runPasses(llvm::Function*, const std::vector& passes);