LLVMUtils.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. #pragma once
  2. #include <map>
  3. #include <memory>
  4. #include <string>
  5. #include <vector>
  6. namespace llvm
  7. {
  8. class CallInst;
  9. class ConstantInt;
  10. class Function;
  11. class FunctionType;
  12. class Instruction;
  13. class LLVMContext;
  14. class Module;
  15. class Pass;
  16. }
  17. std::vector<llvm::CallInst*> getCallsToFunction(llvm::Function* callee, const llvm::Function* caller = nullptr);
  18. llvm::Function* getOrCreateFunction(const std::string& name, llvm::Module* module, llvm::FunctionType* funcType, std::map<llvm::FunctionType*, llvm::Function*>& typeToFuncMap);
  19. llvm::ConstantInt* makeInt32(int val, llvm::LLVMContext& context);
  20. llvm::Instruction* getInstructionAfter(llvm::Instruction* inst);
  21. std::unique_ptr<llvm::Module> loadModuleFromAsmFile(llvm::LLVMContext& context, const std::string& filename);
  22. std::unique_ptr<llvm::Module> loadModuleFromAsmString(llvm::LLVMContext& context, const std::string& str);
  23. void saveModuleToAsmFile(const llvm::Module* module, const std::string& filename);
  24. void dumpCFG(const llvm::Function* F, const std::string& suffix);
  25. void runPasses(llvm::Function*, const std::vector<llvm::Pass*>& passes);