分享

LLVM每日谈之八 PASS例子分析

 笑看云霄飘一羽 2013-11-27

LLVM每日谈之八 PASS例子分析

之前已经 简单的介绍过怎么样去运行PASS(地址:http://blog.csdn.net/snsn1984/article/details/8160696),并且以hello PASS为例进行了运行,可以输出hello 和函数的名字。下面咱们继续进一步的分析一下这个PASS的具体内容:

http:///docs/doxygen/html/Hello_8cpp_source.html
www.
这里就是之前运行过的pass的源码,可以看出来,输入的主要是在下面的代码中实现的

00032       errs() << "Hello: ";
00033       errs().write_escaped(F.getName()) << '\n';

这里的首先输出了:Hello,然后通过LLVM::Function类的getName()的成员函数取得了函数的名字进行输出。这两行代码是在

 virtual bool runOnFunction(Function &F)

这个函数里面的,而这个函数是结构体Hello的成员函数。并且我们也可以通过

struct Hello : public FunctionPass

可以知道,Hello是继承了类FunctionPass.

 virtual bool runOnFunction(Function &F)

其实就是FunctionPass的一个虚函数,这里对它进行了实现。一个FunctionPass的子类要想做一些实际的工作,就必须对这个虚函数进行实现。

00040 static RegisterPass<Hello> X("hello", "Hello World Pass");

这个语句的主要意思是对hello PASS进行注册,只有PASS进行了注册之后,才可以进行使用。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多