LLVM получает операнд и lvalue имя инструкции

Для инструкций LLVM IR, таких как %cmp7 = icmp eq i32 %6 %7 Я хочу получить все три имени регистра / символа (т.е. %cmp %6 and %7)

Теперь я могу получить строку %cmp по команде pi->getName() где пи - указатель инструкции. Но когда я пытаюсь получить имена опрандов, я получаю пустую строку, набрав pi->getOperand(0)->getName(),

Я старался isa<Instruction>(pi->getOperand(0)) чтобы проверить, является ли это инструкция, и она вернула истину, но pi->getOperand(0)->hasName() вернулся ложный. Вещи заставляют меня чувствовать себя странно, поэтому оба pi а также pi->getOperand(0) инструкции, но только pi имеет имя?

Есть ли мысли, я могу получить имя операнда (строка %6 а также %7 здесь) с помощью API?

Я использую версию LLVM 3.4.2

1 ответ

Решение

Имена являются необязательными для инструкций LLVM, и действительно два операнда вашего icmp Инструкция в этом случае не имеет имени, следовательно, пустая строка.

Когда вы печатаете модуль LLVM в файл.ll, тогда писатель выделяет %<num> имя для каждой инструкции, чтобы сделать ее удобочитаемой, но это только то, что писатель делает во время печати, эта строка не существует в реальном модуле.

Другие вопросы по тегам