Как получить программную переменную, которую фи переменные содержат в LLVM-IR - PullRequest
1 голос
/ 07 мая 2019

для ИК типа

%.0 = phi i32* [ @y, %bb2 ], [ @z, %bb3 ]
%.1 = phi i32* [ %.0, %bb4 ], [ %.x, %bb19 ]
store i32* %.1, i32** @x, align 8

Так что, если я выполняю итерацию в своем llvm-pass и сталкиваюсь с использованием 0.1 в третьей инструкции. Я храню его в классе значений (используя Instruction-> getOperand (0)), скажем, с именем v1. Теперь, как я могу перебирать переменные, которые могут содержать 0.1, это y, z и x. Что нужно вызвать на v1.

Я попытался прочитать документацию по llvm и следующую ссылку, но синтаксис для llvm-pass не указан

https://llvm.org/docs/MemorySSA.html Я пытаюсь следующий код

for (auto &I : BB) {//over basic blocks
    Instruction *Inst=&I;
    if(Inst->getOpcode()==31){
        Value *v=Inst->getOperand(0);
        //now use what to get x,y,z as through 0.1
    }
}
...