llvm对某些指令没有优化

时间:2019-01-07 10:51:34

标签: llvm

我正在llvm IR中插入一些指令以进行一些Integer Overflow(IO)检查。但是,我很生气地发现我插入的某些指令被优化器优化了。

例如,有

int result = data + 1;

我的通行证会将此操作视为一个潜在的溢出站点,并添加了(当然,IR,我在这里写了C以使我的生活更轻松):

int64_t result_64bit = (int64_t)data + 1
if (result_64bit > 2147483647) { report(); }

但是,该指令已得到优化。

这是我尝试过的:

添加-O0标志。它不会工作。我在每次通过后都丢弃了IR,并且在通过时发生了该错误。删除冗余操作。 (在我看来,不是多余的...)

通过设置EP_OptimizerLast标志将遍历移至优化结束。 嗯,这不是最佳选择,因为某些信息会丢失。例如,我严重依赖nsw / nuw标志来确定符号,优化后这些标志中的一些会被删除。

所以我要问的是LLVM中是否存在某种指令保护措施,以防止指令被优化或删除?

0 个答案:

没有答案