以SSA形式获得LLVM-IR

时间:2015-11-21 14:52:58

标签: compiler-construction clang llvm ssa

我目前正在构建一个静态代码分析器,我想使用Clang,llvm。当给出c代码作为输入时,我想要的输出是SSA形式的LLVM-IR(作为文本文件)。我找到了这个页面(How to make clang compile to llvm IR)页面,所以我有一个LLVM-IR,在LLVM参考页面中,它说" LLVM是静态单一分配(SSA)基于......" 的表示。所以我认为它已经是一个SSA形式,但当我查看输出时,它有类似的东西。

; label:3   
  (...)
  %or.cond = or i1 %7, %8
  br i1 %or.cond, label %13, label %9

; label:9
  (...)
  %or.cond1 = and i1 %11, %12
  br i1 %or.cond1, label %16, label %13

表示以下if语句。

if (tx < offset || ty < offset || tx >= (width-offset) || ty >= (width-offset))

但据我所知,如果它有一个SSA形式,它不应该分配两个相同的寄存器..对吗?你认为这不是一个SSA形式吗?或者我错过了什么?

无论如何,假设这不是我正在寻找的SSA形式,我已经搜索过并发现我应该使用mem2reg优化。但是,我认为上面的代码已经是寄存器形式,但无论如何,正如我在下面的两个命令,

clang-3.6 -emit-llvm -o foo.bc -c foo.cl opt -mem2reg -dce foo.bc

第二个命令给我一个分段错误。 所以我有点卡在这里,所以有人告诉我,我做错了什么或如何生成SSA表格IR?

0 个答案:

没有答案