https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61810

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Re-running the experiment of disabling init-regs on x86_64 on trunk shows

+FAIL: gcc.dg/lto/pr48622 c_lto_pr48622_0.o-c_lto_pr48622_0.o link, -O -flto
-fi
nline-small-functions -fno-early-inlining
 FAIL: gcc.dg/tree-prof/20050826-2.c scan-tree-dump-not dom2 "Invalid sum"
+FAIL: gcc.target/i386/extract-insert-combining.c scan-assembler-times
(?:vmovd|
movd)[ \\\\t]+[^{\\n]*%xmm[0-9] 3
+FAIL: gcc.target/i386/extract-insert-combining.c scan-assembler-times
(?:vpinsr
d|pinsrd)[ \\\\t]+[^{\\n]*%xmm[0-9] 1

+FAIL: gnat.dg/sso8.adb execution test

with both -m64 and -m32

The gcc.dg/lto/pr48622 failure is a link-fail:

/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld:
/tmp/cc8guozm.ltrans0.ltrans.o: in function `main':^M
<artificial>:(.text+0x18): undefined reference to `ashift_qi_1'^M
collect2: error: ld returned 1 exit status^M
compiler exited with status 1

I think the testcase is broken - with initregs likely the

int
main ()
{
  if (ashift_qi_0 (0xff) != (u8) ((u8) 0xff << 0))
    abort ();

test directly resolved to abort (), leaving the rest of the code dead.

The gcc.target/i386/extract-insert-combining.c looks like a combine
missed optimization when facing uninitialized regs compared to all-zero.
We get

        pinsrd  $0, %esi, %xmm0
        pinsrd  $0, %edi, %xmm1
        movl    %esi, -12(%rsp)
        paddd   %xmm0, %xmm1
        pinsrd  $0, %esi, %xmm0
        paddd   %xmm1, %xmm0
        movd    %xmm0, %eax
        ret

preserving the "uninitialized" state of %xmm0 high, when initregs
explicitely zeros %xmm0 then this is matched to movd.

I cannot assess what goes wrong with gnat.dg/sso8.adb, but it might be
a testsuite bug as well.

Reply via email to