Как достать ярлыки с фотода и соответствующие им базовые блоки в LLVM? - PullRequest
0 голосов
/ 13 марта 2019

Скажем, ИК-код выглядит следующим образом:

define void @_Z1mbb(i1 zeroext %r, i1 zeroext %y) nounwind {
entry:
  %r.addr = alloca i8, align 1
  %y.addr = alloca i8, align 1
  %l = alloca i8, align 1
  %frombool = zext i1 %r to i8
  store i8 %frombool, i8* %r.addr, align 1
  %frombool1 = zext i1 %y to i8
  store i8 %frombool1, i8* %y.addr, align 1
  %0 = load i8* %y.addr, align 1
  %tobool = trunc i8 %0 to i1
  br i1 %tobool, label %lor.end, label %lor.rhs

lor.rhs:                                          ; preds = %entry
  %1 = load i8* %r.addr, align 1
  %tobool2 = trunc i8 %1 to i1
  br label %lor.end

lor.end:                                          ; preds = %lor.rhs, %entry
  %2 = phi i1 [ true, %entry ], [ %tobool2, %lor.rhs ]
  %frombool3 = zext i1 %2 to i8
  store i8 %frombool3, i8* %l, align 1
  ret void
}

у фотода 2 пары [ true, %entry ], [ %tobool2, %lor.rhs ].Как извлечь %entry и %lor.rhs и найти соответствующий базовый блок каждой пары?Любая помощь будет оценена.

1 Ответ

4 голосов
/ 13 марта 2019

PHI->getgetNumIncomingValues(): возвращает количество входящих значений в PHINode

Для вашего phi узла:

 %2 = phi i1 [ true, %entry ], [ %tobool2, %lor.rhs ]

PHI->getIncomingValue(0): дает true

PHI->getIncomingBlock(0): дает %entry

Существуют итераторы для блоков и значений.

http://llvm.org/doxygen/classllvm_1_1PHINode.html

Всегда обращайтесь к документации по doxygen, чтобы увидеть все API, связанные с классом (например, PHINode).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...