2017-04-21 71 views
1

我正在实施一个安全相关的传递,因此,我将注入一个自定义基本块作为LLVM IR函数传递的一部分。避免某些基本块上的LLVM红外优化

有没有办法,标记这个基本块,以便以后通过不优化这个基本块?

回答

0

恐怕我没有一个非常直接的建议。但是这里有几件事要考虑。

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

我也不知道你想避免哪些优化(取决于你在你的基本块做什么)。例如,你是否介意-simplifycfg的影响?换句话说,让注入的基本块与前导/后继块合并。

如果基本块代码是很普通的,也许你可以考虑保持在一个单独的功能概述了块,并为其提供所需的任何输入的参数和__attribute__((noinline))标记,以避免inlining。尽管如此,您可以将该基本块中的所有内存访问声明为volatile,这会禁止优化。看看this

编辑:也有Attribute::OptimizeNone与您可以装饰的功能,并将它被opt及相关通行证优化过程中跳过。您可以关注012xx的来源中的属性(又名grep)。

如果这是不够的,因为我在的地方我不知道任何一般黑名单/白名单功能, 我只能想到一个繁重的另类,但我不敢张贴呢。