避免在某些基本块上进行LLVM IR优化

时间:2017-04-21 11:06:47

标签: llvm llvm-ir

我正在实现一个与安全相关的传递,因此,我正在注入一个自定义基本块作为LLVM IR函数传递的一部分。

有没有办法,标记这个基本块,以便以后的传递不优化这个基本块?

1 个答案:

答案 0 :(得分:0)

我担心我没有一个非常直截了当的建议。但这里有一些事情需要考虑。

在应用了与所需/所需优化级别(例如opt -O3)相关的所有优化后,您是否可以应用基本块注入? (我怀疑不是,因为你要问。)

我也不确定您要避免哪些优化(取决于您在基本块上执行的操作)。例如,您是否介意-simplifycfg的影响?换句话说,将注入的基本块与前置/后继块合并。

如果基本块代码非常通用,您可以考虑将该块保留在单独的函数中,并为其提供任何所需的输入作为参数,并使用__attribute__((noinline))标记以避免inlining

话虽如此,您可以将该基本块中的所有内存访问声明为volatile,这会禁止优化。看看this

修改还有Attribute::OptimizeNone,您可以使用opt来装饰某个功能,并在grep及相关通行证优化期间跳过该功能。您可以在LLVM的来源中关注(又名function onEdit() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets(); var cell = ss.getRange("C6:U39"); cell.setFontSize(12); cell.setHorizontalAlignment("center"); } )该属性。

如果这还不够,而且因为我没有意识到任何一般的黑名单/白名单功能, 我只能想到一个繁重的选择,但我还不敢发布它。