2

我使用Spec 2006基准测试来衡量一些私人通行证和生成的代码的性能。到目前为止,我所有的工作都是基于LLVM 3.1的。

上周我想继续使用 LLVM,并且我将所有通行证重新设置为LLVM 3.4。这只需要调整几#include行。然而,在那次改变之后,我测量了一个巨大的性能回归。接下来,我禁用了所有自定义通行证,但性能仍然下降。以下是使用 LLVM 3.1 和 3.4 编译的一些 Spec 基准测试的数量

            LLVM 3.1  LLVM 3.4
            --------  --------
401.bzip2       7.50     17.5
429.mcf         4.72      8.10
456.hmmer       4.18     10.1
458.sjeng       4.85      8.86
433.milc       13.4      26.0
470.lbm        13.4      12.6

我还注意到 eg 调用的函数数量456.hmmer从 6 变为 45009;大多数其他基准测试显示类似的数字。内联失败?

我用

CC=clang -g -std=c89 -D_GNU_SOURCE -c -emit-llvm

然后打电话opt

opt -simplifycfg -mem2reg -break-constgeps <my-passes> benchmark.bc -o benchmark.schnufte.bc

一旦opt完成,位码就会被降低llc并链接到一个可执行文件中。

性能回归非常明显,我怀疑 3.4 是否会以如此明显的回归发布。所以我的问题是:我错过了什么吗?现在是否更明确地调用了优化?我在通过后添加-std-compile-opts到我的 opt 调用中,但这根本没有帮助。

编辑正如建议的那样,我向LLVMdev 邮件列表提出了这个问题,但该线程很少受到关注。

4

0 回答 0