【问题标题】:def-use chain for Instruction指令的def-use链
【发布时间】:2011-05-08 08:45:40
【问题描述】:

我是 LLVM 新手,想要获取示例代码的所有指令的 use-def 链,为此我使用以下代码。

示例代码:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define ARRAY_SIZE 5

int main() {
 int x, y, holder;
 int k,z,f,i;
  z=0;
  f=0;
  k=0;

  for(x = 0; x < ARRAY_SIZE; x++)
    for(y = 0; y < ARRAY_SIZE-1; y++)
      if(x+y>10) {
        holder = x+y;
        k=z+1;
    f=k+x;
    if (i>k)
        i=i+1;
      }
// return 1;

}

密码:

virtual bool runOnFunction(Function &F) {
    std::vector<Instruction*> worklist;

    for(inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I){
        worklist.push_back(&*I);
    }

    for(std::vector<Instruction*>::iterator iter = worklist.begin(); 
        iter != worklist.end(); ++iter){

        Instruction* instr = *iter;
        errs() << "def: " <<*instr << "\n";

        for(Value::use_iterator i = instr->use_begin(), ie = instr->use_end(); 
            i!=ie; ++i){

            Value *v = *i;
            Instruction *vi = dyn_cast<Instruction>(*i);
            errs() << "\t\t" << *vi << "\n";
        }
    }

    return false;
}

输出:def: ret void

但我的输出不是我的目标,谁能帮帮我?

谢谢

【问题讨论】:

  • 您输入的位码是什么样的?只有 C 源代码没有任何意义

标签: compiler-construction llvm


【解决方案1】:

您的示例代码中的main() 除了更改局部变量的值之外什么都不做 - 它不可能对任何东西产生任何外部可见的影响,因为它不调用任何外部函数、更改任何全局变量或取消引用任何指针。

所以我怀疑在运行您的密码之前,所有这些都被优化为除了返回之外什么都没有。

【讨论】:

  • @neda,根据这个提示,尝试建立一些依赖关系,例如在程序参数上。您可以做的另一件事是关闭所有优化标志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 2016-12-23
相关资源
最近更新 更多