gccgo: cmplxdivide.go的编译时间大幅增加,导致在ppc64le上的测试超时,

bttbmeg0  于 5个月前  发布在  Go
关注(0)|答案(4)|浏览(54)

最近,测试文件complexdivide.go的编译时间显著增加,导致测试超时:

Executing on host: /home/boger/gccgo.git/bld/gcc/testsuite/go/../../gccgo -B/home/boger/gccgo.git/bld/gcc/testsuite/go/../../ /home/boger/gccgo.git/gcc/gcc/testsuite/go.test/test/cmplxdivide.go /home/boger/gccgo.git/gcc/gcc/testsuite/go.test/test/cmplxdivide1.go   -fdiagnostics-plain-output  -I/home/boger/gccgo.git/bld/powerpc64le-linux/./libgo   -pedantic-errors  -L/home/boger/gccgo.git/bld/powerpc64le-linux/./libgo -L/home/boger/gccgo.git/bld/powerpc64le-linux/./libgo/.libs  -lm  -o ./cmplxdivide.o    (timeout = 300)
spawn -ignore SIGHUP /home/boger/gccgo.git/bld/gcc/testsuite/go/../../gccgo -B/home/boger/gccgo.git/bld/gcc/testsuite/go/../../ /home/boger/gccgo.git/gcc/gcc/testsuite/go.test/test/cmplxdivide.go /home/boger/gccgo.git/gcc/gcc/testsuite/go.test/test/cmplxdivide1.go -fdiagnostics-plain-output -I/home/boger/gccgo.git/bld/powerpc64le-linux/./libgo -pedantic-errors -L/home/boger/gccgo.git/bld/powerpc64le-linux/./libgo -L/home/boger/gccgo.git/bld/powerpc64le-linux/./libgo/.libs -lm -o ./cmplxdivide.o^M
WARNING: program timed out
compiler exited with status 1
exit status is 1
FAIL: go.test/test/cmplxdivide.go

这种情况发生在这次更改之后:

commit cd34d5f2c40f3c65407f4b0bee0b49fc84e4a4ab
Author: Ian Lance Taylor <iant@golang.org>
Date:   Tue Dec 1 18:59:18 2020 -0800

    compiler: defer to middle-end for complex division
    
    Go used to use slightly different semantics than C99 for complex division,
    so we used runtime routines to handle the different.  The gc compiler
    has changes its behavior to match C99, so changes ours as well.
    
    For golang/go#14644
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/274213

现在编译需要超过5分钟。在提交之前,大约需要12秒。

ibps3vxo

ibps3vxo1#

在我的x86笔记本电脑上构建测试大约需要30秒。使用GCC 10编译器时,测试大约需要4秒。

我认为这里的关键变化不是对编译器的改变,而是对测试的改变。测试过去有很多对常量0的引用。现在它们引用了变量zero。这似乎使事情变慢了很多。

不幸的是,我没有看到一个快速的解决方法。

wswtfjt7

wswtfjt72#

我做了个配置,现在显示这个,看起来像是在寄存器分配中。

31.42%  go1       go1                        [.] bitmap_clear_bit                                              ◆
  27.88%  go1       go1                        [.] assign_by_spills                                              ▒
  25.15%  go1       go1                        [.] bitmap_set_bit                                                ▒
   8.21%  go1       go1                        [.] insert_in_live_range_start_chain                              ▒

我没有意识到测试已经改变了。如果增加是预期的,有没有办法可以增加超时时间?

jm2pwxwz

jm2pwxwz3#

如果测试在PPC上真的需要5分钟才能编译完成,我们可能暂时想跳过它。
万一这有帮助的话,你能用-ftime-report编译测试并告诉我们耗时最长的通过情况吗?谢谢。

odopli94

odopli944#

解:跳过这题没有问题。我会询问gcc团队关于这个问题。这是报告。

$x^{1}a_{0}b_{1}x$

相关问题