我正在实现一个与安全相关的传递,因此,我正在注入一个自定义基本块作为LLVM IR函数传递的一部分。
有没有办法,标记这个基本块,以便以后的传递不优化这个基本块?
答案 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");
}
)该属性。
如果这还不够,而且因为我没有意识到任何一般的黑名单/白名单功能, 我只能想到一个繁重的选择,但我还不敢发布它。