如何为 LLVM IR 生成元数据?

2024-03-03

我正在尝试为我生成的 LLVM IR 生成元数据。我想生成以下形式的元数据:

!nvvm.annotations = !{!0}
!0 = metadata !{void ()* @foo, metadata !"kernel", i32 1}

其中 foo 是我的 LLVM IR 中的一个函数。现在我只能生成以下形式的元数据:

!nvvm.annotations = !{!0}

!0 = !{!"kernel"}

我使用以下代码来生成上述元数据。

char metaDataArgument[512];
sprintf(metaDataArgument, "%s", pipelineKernelName);
llvm::NamedMDNode *nvvmMetadataNode =  LLVMModule->getOrInsertNamedMetadata("nvvm.annotations");
llvm::MDNode *MDNOdeNVVM = llvm::MDNode::get(*context, llvm::MDString::get(*context, "kernel"));
nvvmMetadataNode->addOperand(MDNOdeNVVM);

有人可以告诉我如何修改上面的代码来生成所需形式的元数据


您的元数据将是一个包含 3 个元素的元组。

  • 第一个是全局值,在元数据层次结构中插入时将其包装为“ValueAsMetadata”(我们可以使用 Constant 子类,因为 GlobalValues 是常量)。
  • 第二个是 MDString,您得到了这个。
  • 最后一个被包装为ConstantAsMetadata.

这应该看起来大约如下所示:

SmallVector<Metadata *, 32> Ops; // Tuple operands
GlobalValue *Foo = Mod.getNamedValue("foo");
if (!Foo) report_fatal_error("Expected foo..");

Ops.push_back(llvm::ValueAsMetadata::getConstant(Foo));
Ops.push_back(llvm::MDString::get(*context, "kernel"));

// get constant i32 1
Type *I32Ty = Type::getInt32Ty(*context);
Contant *One = ConstantInt::get(I32Ty, 1);
Ops.push_back(llvm::ValueAsMetadata::getConstant(One));

auto *Node =  MDTuple::get(Context, Ops);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 LLVM IR 生成元数据? 的相关文章

随机推荐

  • 使用 JavaScript 和 Google Gears 处理文件上传,有更好的解决方案吗?

    所以 我已经使用这种文件上传方法一段时间了 但 Google Gears 对实现 HTML5 规范的较新浏览器的支持似乎很差 我听说过这个词已弃用 https stackoverflow com questions 2292160浮动在几个
  • 使用 Pyspark 从关系数据集构建层次结构

    我是 Python 新手 一直致力于从关系数据集构建层次结构 如果有人知道如何进行此操作 那将有巨大的帮助 我有一个关系数据集 其中包含如下数据 currentnode childnode root child1 child1 leaf2
  • Symfony2 表单中实体字段类型的附加属性

    在Symfony2中 有没有一种方法可以将更多字段从实体映射到从基于实体的表单生成的选择下拉列表的选项标签 我目前有类似的东西 builder gt add creditcard entity array label gt Credit C
  • 如何正确地将 C 程序拆分为文件并包含?

    我组织了我的程序 将每个实体拆分在自己的文件中 是这样的 main c include student h include subject h include classroom h define PI 3 14 int sum int a
  • 将音频从 Android 设备流式传输到另一设备

    我如何通过互联网将音频从一台设备流式传输到另一台设备 我知道使用 Java 套接字发送基本数据 但想知道如何 在文件中途开始流式传输 例如 在歌曲的中间 发送的数据需要什么格式 MediaPlayer可以将url作为数据源 那么音频从服务器
  • 将光标移动到输入字段的开头?

    当您在 Stackoverflow 中点击 提问 时 您会看到一条文字 您的编程问题是什么 请描述一下 我想要同样的事情 我所需要做的就是将光标移动到文本字段的开头 我如何用 jquery 做到这一点 这可能有点过分了 但这些函数对于选择输
  • 从多个因子列生成虚拟矩阵

    我已经在网上搜索过 但没有找到答案 我有一个包含多列的大 data frame 每列都是一个因子变量 我想转换 data frame 使得因子变量的每个可能值都是一个变量 如果该变量存在于因子列中 则该变量包含 1 否则包含 0 这是我的意
  • Random 类线程安全吗?

    共享一个实例是否有效Random多线程之间的类 并打电话nextInt int 特别是来自多个线程 它是线程安全的 因为当多个线程使用时它仍然会生成随机数 Sun Oracle JVM 实现使用synchronized 和AtomicLon
  • 如何使用 Flask 获取页面访问者的 Windows 用户名?

    我到处搜索过 但没有找到任何结果 所以很抱歉 如果这篇文章是骗人的 我找不到任何东西 我为我的公司编写了这个相当广泛的网络应用程序 唯一剩下的就是添加某种审核 我不知道如何捕获当前访问我的页面的人的用户名 由于托管的盒子是以管理员身份登录的
  • 使用 PDFMake 嵌套/子表

    如何在 PDFmake 中使用嵌套 子表 我尝试过简单地放入多个表格 但这不会自动重复顶级表格的标题以进行分页符 此代码是使用子表的简化示例 它改编自 pdfmake Playground 的表格部分 通过 Google 搜索不容易找到 将
  • Djangocms 中的自定义视图?

    我还没有找到令人满意的方法 我有一个运行良好的 djangocms 设置 但我需要将 CMS 外部表格中的内容添加到我的主页 并在模板上呈现该内容 我可以做到这一点 但在 CMS 中编辑 urls py 以使用我的视图 如下所示 url r
  • 我可以使用 conda 安装 Python 的 alpha 或 beta 版本吗?

    在撰写本文时 alpha 版本3 8 0a4python 可用 我想在正式发布之前在 conda 环境中进行一些测试 出于教育目的并满足一些好奇心 当尝试 conda install 3 8 时 我得到了PackagesNotFoundEr
  • 为什么 stylelint vscode 扩展在我的计算机上不起作用?

    我遵循guide https marketplace visualstudio com items itemName stylelint vscode stylelint安装stylelintvscode 扩展 但它在我的电脑上不起作用 我
  • 在R中查找另一个字符串中的一个字符串

    我想在R中的另一个字符串中查找一个字符串 字符串如下 我希望能够将字符串 a 与字符串 b 匹配 输出应该是a b返回 TRUE a lt 6250 7250 6251 b lt 7250 a b FALSE 您可以使用regmatches
  • D3:在多条线的折线图中跳过空值

    我有一个动态数组来显示包含多条线的折线图 例子 var data x 2005 y 100 x 2007 y 96 5 x 2009 y 100 3 x 2011 y 102 3 x 2005 y 100 x 2007 y 105 x 20
  • 通过 PHP 从目录中的文件生成 XML

    我有两个文件夹图像和带照片的大图像 我想生成一个具有两个属性的 XML 文件 如下所示
  • MYSQL 中的字符串连接

    我怎样才能在mysql中连接这个字符串 desc desc desct 我想要的是每次我从 PHP 插入一个变量时 该字符串都会添加到已经在 db 中并用分隔符分隔的字符串中 字段描述应该是这样的 desc 10 30 90 710 假设我
  • 是否会使应用程序不可见?

    我使用了隐式意图 以便在有人单击其他应用程序中的 URL 时打开我的应用程序 我无法看到已部署的应用程序的图标 部署我的应用程序后 如果我返回并尝试找到我的应用程序 我将无法找到它 但它在最近的应用程序中 这是android清单中的代码
  • 为 php 5.6 添加 mongodb 扩展(XAMPP)

    我在这里读过一些关于解决我的问题的帖子 但都不适用于 php 5 6 我下载了php mongo 1 6 8 zip and php mongo 1 6 7 zip并尝试了所有 dll 扩展名 所有扩展名都给出了一个或另一个错误 错误信息
  • 如何为 LLVM IR 生成元数据?

    我正在尝试为我生成的 LLVM IR 生成元数据 我想生成以下形式的元数据 nvvm annotations 0 0 metadata void foo metadata kernel i32 1 其中 foo 是我的 LLVM IR 中的