https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108862
Bug ID: 108862
Summary: [13 Regression] CryptX miscompilation on power9 since
r13-2107
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: jakub at gcc dot gnu.org
Target Milestone: ---
The following testcase is miscompiled with -O2 -mcpu=power9 since r13-2107 and
is not fixed with r13-5999 fix:
unsigned long long a[2] = { 0x04a13945d898c296ULL, 0x0000100000000fffULL };
unsigned long long b[4] = { 0x04a13945d898c296ULL, 0, 0, 0x0000100000000fffULL
};
__attribute__((noipa)) unsigned __int128
foo (int x, unsigned long long *y, unsigned long long *z)
{
unsigned __int128 w = 0;
for (int i = 0; i < x; i++)
w += (unsigned __int128)*y++ * (unsigned __int128)*z--;
return w;
}
int
main ()
{
unsigned __int128 x = foo (1, &a[0], &a[1]);
unsigned __int128 y = foo (2, &b[0], &b[3]);
if ((unsigned long long) (x >> 64) != 0x0000004a13945dd3ULL
|| (unsigned long long) x != 0x9b1c8443b3909d6aULL
|| x != y)
__builtin_abort ();
return 0;
}