【发布时间】:2018-01-02 21:34:01
【问题描述】:
使用LLVM pass,我希望遍历if(a==b)形式的所有条件分支并将这些语句更改为if(func(a)==func(b)),从而将原始操作数a和b替换为函数调用的结果@987654327 @ 和 func(b)。只要找到if(a==b) 形式的if 语句,就会出现这种情况。
这里a 是操作数。我可以在我的 LLVM 通行证中访问此操作数,但我无法将其更改为函数的结果。我应该使用什么方法来实现这一点。
可以假设a和b总是同类型,func接受任意类型的参数,返回同类型的参数。为简单起见,还可以假设a 和b 是整数,func 也返回一个整数。
【问题讨论】:
-
在哪里替换它们?您是在问是否可以使用函数作为参数?请澄清。
-
LLVM IR 在SSA form,你需要使用A-normal forms
-
请不要评论您自己的问题,而是编辑您的问题来改进它(它需要很多改进,并且应该是更长)
-
我已经更新了我的问题
-
a和b是什么类型?它们总是一样吗?您是否为每种类型提供func函数?
标签: c++ llvm llvm-clang llvm-ir