假设我们有以下表达式:
%rem = srem i32 %i.0, 10
%mul = mul nsw i32 %rem, 2
问题是:在编译期间有没有办法获得%mul的值?我正在写一个llvm Pass,我需要评估一些使用%i.0的表达式。我正在搜索函数,类或其他我将给%i.0赋值的函数,它将评估表达式并返回结果。
答案 0 :(得分:2)
您可以克隆代码(包含函数或整个模块,具体取决于您需要多少上下文),然后用常量值替换%i.0
,在代码上运行常量传播传递,最后检查是否将%mul
分配给常量值,如果是,则将其解压缩。
它并不优雅,但我认为它会起作用。请注意:
%mul
未被删除 - 例如,将其从函数中返回,或将其值存储到内存或其他内容。