而且从命名来看也比较好理解,Module对应.c文件内的整个源码,Function就是函数,Basic Block是基本块,每个基本块以一个终止指令(例如 ret、br 等)结尾,或者以一个无条件分支(如 br 指令)指向其他基本块,Instruction就是指令了,看一个ll文件内容: define dso...
| |-ImplicitCastExpr 0x7f8b691aedc0 'int (*)(const char *, ...)' <FunctionToPointerDecay> | | `-DeclRefExpr 0x7f8b691aecc8 'int (const char *, ...)' Function 0x7f8b69034a38 'printf' 'int (const char *, ...)' | |-ImplicitCastExpr 0x7f8b691aee20 'const char *' ...
最后一行代码,用于让外部可以创建使用这个pass。 namespace{classHello :publicFunctionPass {public://Print out the names of functions in the LLVM IR being optimized.virtualboolrunOnFunction(Function &F) { cerr<<"Hello:"<< F.getName() <<"\n";returnfalse; } }; } FunctionPass*createHelloPass(...
对于这个项目,将使用其功能的非常有限的子集,为了方便使用,定义了一个生成LLVM代码的简单接口,可以在示例代码的LLVM目录中找到它。有关LLVM汇编语言的详细信息,请参阅《LLVM语言参考》,网址为llvm.org/docs/LangRef.h。虽然不需要阅读很长的整个文档,但如果在理解某些LLVM指令如何工作时遇到困难,它是一个很好的参考...
module->getFunction(StringRef(function->functionName)); functionPassManager->run(*llvmFun); } Function *llvmMainFun = module->getFunction(StringRef("main")); functionPassManager->run(*llvmMainFun); 具体而言,看一下 Bolt 编译器之前和之后的 LLVM IR 输出。可以在 repo 中找到它们:factorial ...
// Look this variable up in the function. Value *v = g_named_values[name_]; if (!v) LogErrorV("Unknown variable name"); return v; } 目前g_named_values 中仅保存函数参数,在生成的函数的 IR 时,会生成参数的 IR,并存放到 g_named_values 中,所以这里仅仅是获取。后面 g_named_values 中...
FunctionPass 构造函数需要一个 char,用于在 LLVM 内部使用。LLVM 使用 char 的地址,因此您可以使用任何内容对它进行初始化。 您需要通过某种方式让 LLVM 系统理解您所创建的类是一个新阶段。这正是 RegisterPass LLVM 模板发挥作用的地方。您在 PassSupport.h 头文件中声明了 RegisterPas...
FunctionType::get 的第一个参数是返回类型;第二个参数是一个 LLVM::ArrayRef 结构,并且最后的 false 指明了后面未跟可变数量的参数。ArrayRef 结构与矢量相似,只是它不包含任何基础数据,并且主要用于包装诸如阵列和矢量等数据块。由于这个改变,输出显示...
LLVM是架构编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。 LLVM计划启动与2000年,最初由美国UIUC大学的Chris Lattner博士主持开展。2006年Chris Lattner加盟...
#include"llvm/Pass.h"#include"llvm/IR/Function.h"#include"llvm/Support/raw_ostream.h"#include"llvm/IR/LegacyPassManager.h"#include"llvm/Transforms/IPO/PassManagerBuilder.h"usingnamespacellvm;namespace{structHello:publicFunctionPass{staticcharID;Hello():FunctionPass(ID){}virtualboolrunOnFunction(Fu...