在源代码上添加一个新属性,该属性会传播到 LLVM 中的 MC 级别?

2024-03-18

我对以下内容的传播方式感兴趣:

void foo(int __attribute__((aligned(16)))* p) { ... }

在这种情况下,指针的“对齐”在 MC 级别可用,但显然没有使用 LLVM-IR 元数据方法来实现这一点。对齐信息对于某些目标非常重要,这些目标将根据此值更改代码生成,我认为我需要的更像是此属性。

添加一个新属性,使其以与“对齐”相同的方式通过编译器传播有多困难?因此,我已经向 LLVM-IR 添加了一个新元素来执行此操作。我还预计,最困难的部分是让 LLVM 的其他部分在不关心这个新元素时忽略它。

遗憾的是,LLVM 没有一种通用的目标独立方式将目标相关信息从解析器传递到后端。

在类似的文章中建议使用“DebugLoc”方法question https://stackoverflow.com/questions/45866848/do-metadata-exist-on-machine-code-level-in-llvm,但我认为这有点麻烦,因为这与调试无关。但如果这种方式的实施难度较小,那么黑客可能是可以接受的。

更新: 在这里可以使用内联汇编而不是使用新属性吗?如果是,有什么优点/缺点?


正如您所演示的,对齐不使用元数据。

  • 对于任何不知道的人:所有相关指令中都提到了对齐(隐式或显式),因此例如问题中的函数将被编译为类似这样的内容(注意对齐):

    
    
    define void @foo(i32*) {
      %2 = alloca i32*, align 16        ; Allocate a 16-aligned pointer
      store i32* %0, i32** %2, align 16 ; An aligned store to place the arg there
      ...
      

现在,如果您想将一些信息附加到现有指令并让编译器的其余大部分忽略它们,那么使用元数据是一个好主意。但是,由于元数据是编译器内部的抽象事物,因此在某些时候您必须实际使用它做一些事情。通常,通过添加您自己的通行证来使用它并执行相应的操作。

As for where放置您的通票并how要实现它,它实际上取决于您尝试传递的实际信息及其预期效果。

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

在源代码上添加一个新属性,该属性会传播到 LLVM 中的 MC 级别? 的相关文章

随机推荐

  • 如何获取ASCII后面的二进制代码(C#)

    我试图找出如何将控制台的输入转换为二进制 如何在 C 中进行这样的转换 先感谢您 string s Console ReadLine byte bytes Encoding ASCII GetBytes s 请注意 控制台使用的编码实际上不
  • pgsql 返回表错误:列引用不明确

    我不断收到此错误 列引用 人 不明确 我需要返回一个表 个人整数 当我使用 SETOF 整数时它工作正常 但在这种情况下它不起作用 我的另一个函数 recurse 完美地返回一组整数 CREATE OR REPLACE FUNCTION t
  • 来自基类的用户定义转换运算符

    介绍 我知道 不允许用户定义的与基类之间的转换 MSDN 给出了对此规则的解释 你不需要这个运算符 我确实了解用户定义的转换to不需要基类 因为这显然是隐式完成的 但是 我确实需要转换from一个基类 在我当前的设计 非托管代码的包装器 中
  • Matplotlib 轴位置和颜色条对齐

    我正在尝试将多个颜色条与使用其中之一生成的子图对齐gridspec or fig add subplots 我想添加颜色条fig add axes在 matplotlib v2 02 中 因为它允许详细的对齐控制 但是 我需要获取图形位置才
  • 熊猫从日期时间列中获取第二个最小值[重复]

    这个问题在这里已经有答案了 我有一个带有日期时间列的数据框 我可以通过使用获得最小值 df Date min 我怎样才能得到第二个 第三个 最小值 Use nlargest or nsmallest 对于第二大的 series nlarge
  • Symfony2 和控制器中的 DRY 方法

    我正在使用 Symfony2 为我的公司开发一个小型 CMS 我真的很喜欢这个框架 我喜欢表单类并重用它们 毕竟这都是关于表单的 但是 是的 有一个 但是 我感觉我在做同样的事情 复制并粘贴到所有控制器中 我们讨厌的代码重复 随着所有业务逻
  • MbUnit:比较双打的最优雅的方式?

    The code Assert AreEqual 9 97320998018748d observerPosition CenterLongitude produces Expected Value Actual Value 9 97320
  • 安全地向 RESTFUL API 提供凭据

    我创建了一个 RESTful 服务器应用程序 它可以在有用的 URL 例如 www site com get someinfo 上处理请求并提供服务 它是在春天建造的 但是 这些访问受密码保护 我现在正在构建一个客户端应用程序 它将连接到这
  • Angular 6 生产版本“无法绑定到‘disabled’,因为它不是‘div’的已知属性”

    我的应用程序在使用 JIT 编译器时似乎可以工作 但是当我尝试使用 AOT 编译器时ng build prod然后它抛出一个错误 ERROR in Can t bind to disabled since it isn t a known
  • 很难理解express.js中的“next/next()”

    这是一个例子 Configuration app configure function app set views dirname views app set view engine jade app use express bodyPar
  • 在asp.net mvc中通过slug进行路由

    我有一个控制器操作 如下所示 public ActionResult Content string slug var content contentRepository GetBySlug slug return View content
  • navigator.webkitPersistentStorage.requestQuota 是否适用于 IndexedDB?

    使用今天最新版本的 Android Chrome 我可以使用以下命令请求持久性 IndexedDB 存储吗 navigator webkitPersistentStorage requestQuota var requestedBytes
  • 使用 Liquid 按字母顺序对帖子进行排序

    有没有办法使用 Jekyll 按字母顺序对多个帖子进行排序 我现在有这样的事情 for post in site categories threat li a href post title a li endfor 它有效 但帖子很混乱 我
  • 为什么在这种情况下重写不改变表达式的类型?

    在 1 中可以阅读下一篇 rewrite prf in expr 如果我们有prf x y 并且 expr 所需的类型是以下属性x the rewrite in语法将搜索x在所需的类型中expr并将其替换为y 现在 我有下一段代码 您可以将
  • Microsoft Botframework:与 Bot 通道直接对话

    我一直在努力从 C 控制台应用程序向托管在 Azure 中的 Skype 机器人发送直接消息 但我不断收到错误 操作返回无效的状态代码 未经授权 但我提供了以下凭据 Web 配置文件
  • 输入密码后启动 Shiny 应用程序(使用 Shinydashboard)

    In this topic https stackoverflow com questions 28987622 starting shiny app after password input rq 1很好地解释了如何在输入密码后启动shi
  • 为什么使用LabVIEW? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在学习使用 LabVIEW 作为
  • 训练时如何获得层权重?

    我有一个模型 我想获取特定层的权重矩阵 以便在定义自定义损失函数时使用它 有没有办法获得模型内部特定层的权重 附 我目前正在使用 TensorFlow 2 和 keras 功能 API 我测试过如何获取 Keras 中图层的权重 https
  • Android APK 文件的内容是什么

    APK 文件的组成部分是什么 它只是一堆可执行文件吗 组件的名称是什么 APK 文件是一个存档 通常包含以下文件夹 META INF目录 MANIFEST MF 清单文件 CERT RSA 应用程序的证书 CERT SF 对应的资源列表和S
  • 在源代码上添加一个新属性,该属性会传播到 LLVM 中的 MC 级别?

    我对以下内容的传播方式感兴趣 void foo int attribute aligned 16 p 在这种情况下 指针的 对齐 在 MC 级别可用 但显然没有使用 LLVM IR 元数据方法来实现这一点 对齐信息对于某些目标非常重要 这些