clang - 如何在 LLVM 传递中插入存储变量地址的指令?
问题描述
如果 x 是一个整数变量,即 int x;-> %x=alloca i32
我想通过传递将指令 %add = &(%x) 插入到我的 IR 代码中。
这可以通过 GEP 指令或任何其他方式实现吗?我的意思是,%add = gep(x)。
我最初的 IR,
%i = alloca i32, align 4
store volatile i32 50, i32* %i, align 4
对于 C 代码
i=50;
我想写一个通行证,从中得到修改后的 IR,如下所示,
修改后的红外,
%i = alloca i32, align 4
store volatile i32 50, i32* %i, align 4
%i_addr = (Get address of i)
感谢并感谢您的帮助:)
解决方案
%i
已经是变量的地址i
——你可以看到它的类型是i32*
,它是一个指针。要获得i
(在您的示例中为 50)的值,您需要一条load
指令。
推荐阅读
- pegjs - 如何用 pegjs 解析没有任何环绕的字符串?
- xml - 更换
元素值转换为空元素 - c++ - 对使用条件变量进行并发编程有点困惑
- python - Stylerframe 到 Plotly 图中的 html
- angular - 类型“对象”上不存在属性“味精”.ts(7053)
- reactjs - 从 api 响应 React 更改值
- javascript - 向不同端口上的 Nodejs/Expressjs 服务器发出 Axios 请求
- java - OffsetDateTime 对象不应转换为 json 对象
- android - 要采取的 Salesforce Android SDK 登录页面错误详细信息
- python - 如何在列表理解中获取列表的长度