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>
имя для каждой инструкции, чтобы сделать ее удобочитаемой, но это только то, что писатель делает во время печати, эта строка не существует в реальном модуле.