设置 llvm::ConstantInt 的值

2024-03-24

我正在玩 LLVM。我考虑过改变中间代码中常量的值。然而对于班级llvm::常量Int http://llvm.org/docs/doxygen/html/classllvm_1_1ConstantInt.html,我没有看到设置值函数。知道如何修改 IR 代码中常量的值吗?


ConstantInt 是一个工厂,不是吗?类有获取方法 http://llvm.org/docs/doxygen/html/classllvm_1_1ConstantInt.html#a1c51933b9fb89c364a098fad544cba96构造新常量:

     /* ... return a ConstantInt for the given value. */
00069   static Constant *get(Type *Ty, uint64_t V, bool isSigned = false);

所以,我认为,你不能修改现有的 ConstantInt。如果你想修改 IR,你应该尝试改变指向参数的指针(改变 IR 本身,而不是常量对象)。

也许你想要这样的东西(请记住,我对 LLVM 的经验为零;而且我几乎可以肯定示例是不正确的)。

Instruction *I = /* your argument */;
/* check that instruction is of needed format, e.g: */
if (I->getOpcode() == Instruction::Add) {
   /* read the first operand of instruction */
   Value *oldvalue = I->getOperand(0);

   /* construct new constant; here 0x1234 is used as value */
   Value *newvalue = ConstantInt::get(oldValue->getType(), 0x1234); 

   /* replace operand with new value */
   I->setOperand(0, newvalue);
}

要单独“修改”常量,有一个解决方案(递增和递减有插图 http://llvm.org/doxygen/InstCombineAddSub_8cpp_source.html#l00023):

 /// AddOne - Add one to a ConstantInt.
 static Constant *AddOne(Constant *C) {
   return ConstantExpr::getAdd(C, ConstantInt::get(C->getType(), 1));
 }

 /// SubOne - Subtract one from a ConstantInt.
 static Constant *SubOne(ConstantInt *C) {
   return ConstantInt::get(C->getContext(), C->getValue()-1);
 }

PS,Constant.h 在请求创建和不删除常量时有重要注释http://llvm.org/docs/doxygen/html/Constant_8h_source.html http://llvm.org/docs/doxygen/html/Constant_8h_source.html

00035 /// Note that Constants are immutable (once created they never change) 
00036 /// and are fully shared by structural equivalence.  This means that two 
00037 /// structurally equivalent constants will always have the same address.  
00038 /// Constants are created on demand as needed and never deleted: thus clients 
00039 /// don't have to worry about the lifetime of the objects.
00040 /// @brief LLVM Constant Representation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置 llvm::ConstantInt 的值 的相关文章

随机推荐

  • java.lang.AbstractMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;

    我正在尝试设置一个将在自定义 JSP 标记中引用的变量 因此我的 JSP 中有如下内容
  • registerTaskProvider 的 ProvideTasks 方法如何工作

    我正在尝试获得新的registerTaskProviderVSCode Task API 中的方法在我的扩展中工作 但到目前为止我还无法完成这项工作 我使用了 npm 扩展作为基础 以下是我遵循的步骤 使用 yo 创建一个新的扩展 更新了
  • python设置浮点精度的函数

    我想做一个功能 def accuracy number index 例如 accuracy 2 5e 10 5 将返回 0 accuracy 49 2 将返回 0 accuracy 50 2 将返回 100 所以基本上它会四舍五入到最接近的
  • Android studio gradle 构建因更新失败

    我最近将 android studio 更新到了 3 2 版本 当我尝试运行旧项目时 我在运行等级构建时收到了旧项目的以下消息 The Android Gradle plugin supports only Kotlin Gradle pl
  • 为使用 mat-autocomplete 的组件编写单元测试

    我是 Angular 的新手 我正在尝试使用 Angular 5 构建一个具有自动完成功能的文本字段 我在中找到了这个例子角度材质文档 https material angular io components autocomplete ex
  • mysql查询两张表

    我需要像这样查询两个表 表一顾客 id companyname phone 1 microsoft 888 888 8888 2 yahoo 588 555 8874 3 google 225 558 4421 etc 表二联系人 id c
  • Double.NaN 在 Windows 11 中导致 System.StackOverflowException (22621.525)

    Note 该代码适用于 Windows 11 22000 1098 及更早版本 但会在 Windows 11 22621 525 上导致堆栈溢出异常 我有一个错误 导致我负责的 C 程序出现大量问题 它在早期的 Windows 版本 包括早
  • 如何将日期插入 Open XML 工作表?

    我正在使用 Microsoft Open XML SDK 2 但在将日期插入单元格时遇到了很大的困难 我可以通过设置毫无问题地插入数字Cell DataType CellValues Number 但是当我对日期做同样的事情时 Cell D
  • 如何从 OpenSSL 中的 perl 脚本生成程序集文件

    在 OpenSSL 版本 1 1 0e 的开源代码中 我看到一些函数定义是由文件夹中存在的 perl 文件生成的 在加密货币内每个文件夹中的 build info 文件中 他们编写了一些行以从相应的 pl 生成 s 例如 为了生成aes p
  • Android 上的可写和可执行位置

    我已经使用 Android NDK 工具链编译了一个二进制文件 并尝试将其部署到设备上 然后 使用 JNI 使用 NDK 构建的应用程序将通过本机代码执行此二进制文件 我希望避免对设备进行root 该二进制文件将由多个应用程序使用 因此我想
  • 如何访问 docker 容器内的 mac os x 麦克风?

    我正在运行一个带有 python 代码的 docker 容器 该容器使用主机 MacBook Pro 内置麦克风录制几秒钟的声音 我面临的部分挑战是确定如何在 Docker 容器内提供访问 共享 Macbook Pro 麦克风 大多数关于堆
  • 数据库在更新时应用所有以前的迁移,而不仅仅是新的迁移

    我正在开发一个网站 截至目前 该网站既有生产数据库又有测试数据库 生产数据库托管在外部 而测试数据库托管在本地 每当我对数据库进行更改时 我都会通过迁移应用更改 添加新的迁移后 我运行更新数据库对我的生产和测试数据库执行命令以保持它们同步
  • 如何在 Spring data r2dbc 中替换 @PrePersist

    我在用spring boot starter data r2dbc 版本 1 1 3 Spring Webflux 应用程序中的模块 我想将实体生命周期回调添加到我的持久层 使用 Spring Data JPA 可以使用注释 例如 PreP
  • 如何在 EF7 或 EF core 中的运行时更改数据库架构

    我的数据库有不同的架构 具体取决于运行时的用户选择 我的代码如下 public partial class FashionContext DbContext private string schema public FashionConte
  • CSS 中的双冒号 (::) 是什么意思?

    双冒号 在 CSS 中意味着什么 例如 input type text ms clear display none 它的意思是伪元素选择器 这意味着element右边在普通 DOM 中不存在 但可以选择 伪元素由两个冒号 后跟伪元素的名称组
  • MigraDoc:设置文档字体

    我想在 MigraDoc 中使用不同的字体 但我很难让它坚持下来 目前 我正在使用以下代码 我将其作为类范围变量 String tPdfFont MonospaceTyperwriter 然后是 MigraDoc 代码本身 Document
  • 对...()感到困惑?

    In 另一个问题 https stackoverflow com a 12417320 636656 sapply substitute as character 在函数内部使用来获取传递给函数的名称 这as character部分听起来不
  • 使用php将单词数组转换为字符串

    我有一系列关键字 数组 gt 房子 桌子 马 树 我需要从中创建一个字符串 如下所示 房子 桌子 马 树 我怎样才能用 PHP 做到这一点 Use implode https www php net manual en function i
  • Xamarin Shell:将多个参数传递到另一个页面

    我的 Xamarin Forms Shell 应用程序中有两个页面 一个是列表页面 另一个是详细信息页面 当我选择列表页面中的项目时 将显示详细信息页面 我能够将一个参数传递到第二页 我知道如何传递第二个值 但是我应该如何接收第一个属性本身
  • 设置 llvm::ConstantInt 的值

    我正在玩 LLVM 我考虑过改变中间代码中常量的值 然而对于班级llvm 常量Int http llvm org docs doxygen html classllvm 1 1ConstantInt html 我没有看到设置值函数 知道如何