[Bug target/78791] [7 regression] ACATS cxf2001 failure
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Dec 14 15:04:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78791
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2016-12-14
CC| |jakub at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Testcase transformed into something I can grok:
__attribute__((used, noinline, noclone)) unsigned long long
foo (unsigned long long x, unsigned long long y, unsigned long long z)
{
unsigned long long a = x / y;
unsigned long long b = x % y;
a |= z;
b ^= z;
return a + b;
}
int
main ()
{
if (foo (64, 7, 0) != 10
|| foo (28, 3, 2) != 14)
__builtin_abort ();
return 0;
}
Indeed, the
(mem/c:DI (plus:SI (reg/f:SI 20 frame) (const_int -8 [0xfffffffffffffff8])) [0
S8 A64])
stack slot holds one of the two return values during the call (returned by
reference), and the stv2
pass reuses the same slot for storing the other DImode return value (from
%eax:%edx) into the stack, so that it can be loaded into a SSE register, before
the value from the call in the [frame-8] memory slot is loaded.
More information about the Gcc-bugs
mailing list