цепочка def-use для инструкции - PullRequest
3 голосов
/ 07 мая 2011

Я новичок в 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

но мой вывод не моя цель, кто-нибудь может мне помочь?

1 Ответ

3 голосов
/ 08 мая 2011

main() в вашем примере кода ничего не делает, кроме изменения значений локальных переменных - он не может иметь никакого внешне видимого эффекта на что-либо, так как не вызывает внешних функций, не изменяет глобальные переменные и не разыменовывает любые указатели.

Так что я подозреваю, что все это оптимизируется до нуля, кроме возврата, до того, как ваш код доступа будет запущен.

...