blob: 3dafe11978554566bdd55457253dc6cdcb3de86a [file] [log] [blame] [edit]
#pragma once
#include <map>
#include <memory>
#include <string>
#include <vector>
namespace llvm {
class CallInst;
class ConstantInt;
class Function;
class FunctionType;
class Instruction;
class LLVMContext;
class Module;
class Pass;
} // namespace llvm
std::vector<llvm::CallInst *>
getCallsToFunction(llvm::Function *callee,
const llvm::Function *caller = nullptr);
llvm::Function *getOrCreateFunction(
const std::string &name, llvm::Module *module, llvm::FunctionType *funcType,
std::map<llvm::FunctionType *, llvm::Function *> &typeToFuncMap);
llvm::ConstantInt *makeInt32(int val, llvm::LLVMContext &context);
llvm::Instruction *getInstructionAfter(llvm::Instruction *inst);
std::unique_ptr<llvm::Module>
loadModuleFromAsmFile(llvm::LLVMContext &context, const std::string &filename);
std::unique_ptr<llvm::Module>
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<llvm::Pass *> &passes);