- 博客(13)
- 资源 (21)
- 收藏
- 关注
原创 为Linux rm命令别名
有时候会不小心使用rm误删文件或者文件夹。找回很困难。可以把transh-put 别名成rm1)安装trash-put$ sudo apt-get install trash-cli2) 进行别名设置在HOME目录的.profile文件中加入一行alias rm=trash-put附: rm和trash-put的参数。可以看出trash-put是完全兼容rm
2014-03-23 10:37:21
2404
转载 Tarjan求有向图的强连通分量
强连通分量的定义在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。Tarjan算法的原理如果u是某个强连通分量的根,那么:1) u不存在路径可以返回到它的祖先2
2014-03-04 14:09:31
931
原创 LLVM 的后序支配树(Post Dominator Tree)使用方法
在头文件llvm/Analysis/PostDominators.h中提供了后序支配树PostDominatorTree。方法与前序支配树DominatorTree类似,可以查看文章在LLVM中如何判断二个基本块(Basic Block)的支配关系。//为函数*F的控制流图构建后支配树(PostDominatorTree)PostDominatorTree* PostDT=n
2014-02-25 22:42:33
6474
原创 在LLVM中如何判断二个基本块(Basic Block)的支配关系
一、支配的定义根据维基百科 支配的概念如下:控制流图(CFG)的一个节点 d 支配节点 n,当且仅当从开始节点(可以理解为源)到节点 n的每一条路径均要经过节点d,写作d dom n (一写作d \gg n)。根据上述定义,容易得到每个节点均控制其自身。英文维基百科中提到的一些概念There are a number of related concepts:A
2014-02-24 16:11:53
5958
原创 LLVM--如何在代码中调用遍(Pass)
本文介绍三种调用遍(Pass)的方法一、直接调用如果要调用的遍没有依赖其他的遍,我们可以直接调用,如可以使用如下方法调用函数遍(FunctionPass) DominatorTree。 DominatorTree*T=new DominatorTree(); T->runOnFunction(*F); T->print(errs());二、使用遍管理器
2014-02-24 15:30:13
3548
原创 LLVM TableGen介绍
1.TableGen间介TableGen是用来帮助程序员开发和维护某一领域想逛的信息记录。它定义了一套描述这些信息记录的数据结构和语法规范。编写代码时,如果使用TableGen描述信息记录,我们可以减少大量的重复工作,这也减少了编码错误出现的几率。在llvm中,我们主要使用TableGen来生成LLVM后端代码生成器(LLVMcodegenerator)。我们编写一些描述目标机器和指令集属
2014-02-19 17:04:45
4477
原创 LLVM Metadata 介绍
1 Meatadata 介绍1.1什么是 Metadata?在 LLVM 中,我们使用 Clang 进行编译的时候,加上“-g”参数可以在 IR 文件中额外可以得到一些源代码级别的信息。例如:clang -emit-llvm -S -g test.c -o test.llLLVM 把这些调试信息称为 Metadata。在 IR 层次上的分析遍或者转换遍可以使用这些信息。
2014-02-19 16:46:47
7026
原创 如何获得的LLVM控制流图(CFG)的强连通分量(SCC)的拓扑排序(topological order)
一、思路使用llvm/ADT/SCCIterator.h中定义的scc_iterator迭代器获得。但是scc_iterator获得是逆拓扑排序的。它的注释如下:// The SCC iterator has the important property that if a node in SCC S1 has an// edge to a node in SCC S2, then
2014-02-19 16:19:31
3444
原创 在llvm3.3上安装poolalloc
Lattner的DSA(数据结构分析)代码位于poolalloc项目。如果需要使用DSA需要安装poolalloc。本文介绍如何使用使用Ninja的方法安装poolalloc。其实需要把llvm重新安装一遍在llvm3.3上安装poolmalloc1下载代码=========llvm所有的项目的代码的svn库都在:http://llvm.org/svn/llvm
2014-02-19 16:06:28
1714
原创 如何使用ninja快速编译LLVM和Clang(以llvm3.3为例子)
在使用Make工具编译LLVM是非常耗时的。往往需要三四个小时。但是使用goolge开源的ninja编译LLVM只需要10到20分钟。本文以llvm3.3为例,演示在linux上编译和安装过程。第一步 安装ninja和cmake1 获取并编译安装 ninja$ git clone git://github.com/martine/ninja.git$ cd ninj
2014-02-19 15:58:42
7146
原创 在LLVM控制流图(CFG)中如何获得某个块(Block)的前继块和后继块
如何遍历LLVM控制流图、块一 、获得block BB所有的前继块#include "llvm/Support/CFG.h"BasicBlock *BB = ...;for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) { BasicBlock *Pred = *PI; /
2014-02-19 15:40:01
4323
Visual C++ MFC Tutorial 英文版
2011-04-24
MFC 编写的最简单的程序 Helloworld
2011-04-24
EXCEL VBA教程 EXCEL VBA教程
2011-04-16
vba教材 vba教材
2010-07-15
Excel用法提高实例整理 Excel用法提高实例整理
2010-07-03
背包问题 背包问题背包问题背包问题背包问题背包问题
2010-07-03
LINGO.ppt LINGO.ppt
2010-07-03
Lingo快速入门 Lingo快速入门.doc
2010-07-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人