首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >设置llvm::ConstantInt的值

设置llvm::ConstantInt的值
EN

Stack Overflow用户
提问于 2012-02-08 15:13:07
回答 1查看 3.8K关注 0票数 7

我在玩LLVM。我考虑在中间代码中更改常量的值。但是,对于类llvm::ConstantInt,我没有看到setvalue函数。你知道如何在IR代码中修改常量的值吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-08 16:27:01

ConstantInt是一家工厂,不是吗?类具有构造新常量的get method

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     /* ... return a ConstantInt for the given value. */
00069   static Constant *get(Type *Ty, uint64_t V, bool isSigned = false);

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

也许您想要这样的东西(请记住,我没有使用LLVM的经验;我几乎可以肯定示例是不正确的)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
}

要单独“修改”一个常量,有一个解决方案(递增和递减are illustrated):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 /// 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的请求中有重要的评论

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9196009

复制
相关文章
[llvm] LLVM 核心类简明示例 : llvm::Value && llvm::Type && llvm::Constant
llvm核心类位于 include/llvm/IR中,用以表示机器无关且表现力极强的LLVM IR。
racaljk
2018/10/10
4.3K0
[llvm] LLVM 核心类简明示例 : llvm::Value && llvm::Type && llvm::Constant
LLVM(1)Fibonacci实例
Fibonacci计算是一个非常经典的案例,下面用Fibonacci的两种写法 对比普通C函数和LLVM IR的编写区别。
mingjie
2023/10/13
2800
LLVM(1)Fibonacci实例
LLVM 工具系列 - Address Sanitizer 实现原理(2)
上篇文章 「Address Sanitizer 基本原理介绍及案例分析」里我们简单地介绍了一下 Address Sanitizer 基础的工作原理,这里我们再继续深挖一下深层次的原理。
JoeyBlue
2023/01/08
7520
llvm
例如:cmake -G “Visual Studio 16 2019” …/llvm
sofu456
2020/05/04
1.2K0
【CSS】CSS 背景设置 ③ ( 背景位置-长度值设置 | 背景位置-长度值方位值同时设置 )
文章目录 一、背景位置-长度值设置 二、背景位置-长度值方位值同时设置 三、完整代码示例 一、背景位置-长度值设置 ---- 长度值设置 效果展示 : 设置背景位置为具体值 10px 50px : 粉色区域是盒子的区域 , 图片背景位于盒子位置 x 轴方向 10 像素 , y 轴方向 50 像素 ; 在水平方向上 , 背景图片距离盒子左边界有 10 像素 , 在垂直距离上 , 背景图片距离盒子上边界有 50 像素 ; /* 设置背景位置 - x 轴方向 10 像素 , y 轴方向 50 像素 */ bac
韩曙亮
2023/03/30
2.8K0
【CSS】CSS 背景设置 ③ ( 背景位置-长度值设置 | 背景位置-长度值方位值同时设置 )
LLVM简介
官方描述如下: The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines. The name "LLVM" itself is not an acronym; it is the full name of the project.
VV木公子
2019/11/04
9.9K0
【html】referrer值的设置小记
当html页面中引入跨域的资源时(image,js,css等),可在html的header中加上
一朵灼灼华
2022/08/05
5.8K0
认识 LLVM
LLVM是一套提供编译器基础设施的开源项目,是用 C++ 编写,包含一系列模块化的编译器组件和工具链,用来开发编译器前端和后端。它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期、链接时期、执行时期以及“闲置时期”的优化。
张凯强
2022/02/26
1.3K0
认识 LLVM
Clang与LLVM的关系
LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。LLVM计划启动于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持开展。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple开发体系中的应用。Apple也是LLVM计划的主要资助者[引自百度百科]。
用户1148523
2019/05/27
1.7K0
jQuery设置select默认选中的值
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说jQuery设置select默认选中的值,希望能够帮助大家进步!!!
Java架构师必看
2022/08/18
6.4K0
ArcMap将栅格0值设置为NoData值的方法
  本文介绍在ArcMap软件中,将栅格图层中的0值或其他指定数值作为NoData值的方法。
疯狂学习GIS
2023/06/26
6220
ArcMap将栅格0值设置为NoData值的方法
js的attr用于设置属性值
$("#collapseExample").attr("display","none"); collapseExample 可能是 Bootstrap 框架中的一个折叠元素(Collapse),当点击某个触发器时,该元素会显示或隐藏。
用户9131103
2023/07/17
6800
LLVM 是什么?
LLVM : 全称是这个Low Level Virtual Machine,底层虚拟机,名字是带有虚拟机,但是现在早已和虚拟机没有任何关系了. 是整个LLVM项目,我目前了解的有5部分.
叉叉敌
2022/05/11
1.4K0
LLVM 是什么?
LLVM编译过程
编译器的作用便是把我们的高级编程语言(Objective-C)通过一系列的操作转化成可被计算机执行的机器语言(MachineCode)。
Helloted
2022/06/08
2K0
LLVM编译过程
llvm 对 copy 属性的优化(1)
文章第一段【属性中的 copy】提到 objc_copyStruct objc_copyCppObjectAtomic 分别对应结构体和对象的拷贝。
酷酷的哀殿
2020/10/26
8180
Apple LLVM 4.0的新特性
最新的LLVM 4.0添加了几个比较有用的特性: @synthesize: 自动为@property添加synthesize 语法: 创建NSArray, NSDictionary, NSNumber的时候, 可以像NSString那样写 (下面例子解释!) 容器下标: 用’[]‘来访问容器(例如NSArray和NSDictionary), 就像你在第一节C语言课上学的”arr[0]“, “arr[1]“那样. 不过这个似乎是允许在’[]‘中填入字符串的(NSDictionary). 下面举例解释下第二条:
EltonZheng
2021/01/26
4390
LLVM intrinsic 介绍
LLVM 支持“intrinsic function”的概念。这些函数具有众所周知的名称和语义,并且需要遵循某些限制。总的来说,这些 intrinsic 代表 LLVM 语言的扩展机制,在添加到语言(或者位码读取器/写入器、解析器等)时不需要更改 LLVM 中的所有转换。
叉叉敌
2022/05/11
1.7K0
SpringBoot的@Value注解设置默认值
在Spring Boot中,如果使用@Value注解对属性进行赋值,但如果在配置文件或启动参数中未指定对应的参数值,则会抛出异常。异常信息往往是对应注入属性的类实例化失败。
程序新视界
2020/02/18
14.9K0
llvm初探——源码编译
源码编译llvm时遇到编译中断问题,查了一下时内存不足,swap分区也不够用的问题,解决方法是手动创建swap分区文件,扩展swap分区。
hunterzju
2021/12/09
9920
LLVM(二)——Clang插件
LLVM的下载 由于国内的网络限制,我们需要借助镜像来下载LLVM的源码: https://mirror.tuna.tsinghua.edu.cn/help/llvm/ 执行如下命令下载LLVM项目
拉维
2021/04/16
1.7K0

相似问题

使用constantInt创建llvm元数据节点

23

无法在llvm中强制转换ConstantInt

10

LLVM:如何将名称传递给ConstantInt

13

在LLVM IR中设置指针值

20

‘`ConstantInt::getTrue (LLVMContext &Context)’和‘`ConstantInt::getTrue (Type *Ty)’之间有什么区别?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文