Как добавить строку метаданных в модуль LLVM с помощью API C ++? - PullRequest
5 голосов
/ 07 августа 2011

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

#include <llvm/LLVMContext.h>
#include <llvm/Module.h>
#include <llvm/Metadata.h>

using namespace llvm;

int main() {
    Module* module = new Module("test", getGlobalContext());
    MDString::get(module->getContext(), "test");
    module->dump();
}

Я могу скомпилировать и запустить его:

Desktop% g++ llvm.cc -o llvm `llvm-config --cppflags --ldflags --libs all`
Desktop% ./llvm 
; ModuleID = 'test'

Но, как видно, метаданные не отображаются.

Можно ли как-нибудь добавить строку в модуль?Сам модуль , по-видимому, предоставляет доступ только к именованным метаданным.Теперь я не знаю, где еще я мог бы посмотреть.Любые предложения?

Дополнение: У меня сложилось впечатление, что вы не можете просто иметь строку метаданных, "плавающую вокруг" в вашем модуле, похоже, вам нужно добавить ее в именованный узел метаданных.Это правильно?

1 Ответ

4 голосов
/ 08 августа 2011

Попробуйте это:

#include <llvm/LLVMContext.h>
#include <llvm/Module.h>
#include <llvm/Metadata.h>

using namespace llvm;

int main() {
  Module* module = new Module("test", getGlobalContext());

  Value *Elts[] = {
    MDString::get(module->getContext(), "test1")
  };
  MDNode *Node = MDNode::get(getGlobalContext(), Elts);

  NamedMDNode *NMD = module->getOrInsertNamedMetadata("test2");
  NMD->addOperand(Node);

  module->dump();
}

Я не уверен, что вы можете использовать метаданные, как вы говорите. Если он не привязан к какой-либо части вашей программы, тогда что хорошего в этом? В последнее время я немного изучал MD ... Я нашел похожий код в lib / Analysis / DIBuilder.cpp . Удачи.

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