[Bug c++/93013] New: PPC: optimization leads around modulo leads to incorrect result
jens.seifert at de dot ibm.com
gcc-bugzilla@gcc.gnu.org
Thu Dec 19 15:49:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93013
Bug ID: 93013
Summary: PPC: optimization leads around modulo leads to
incorrect result
Product: gcc
Version: 8.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jens.seifert at de dot ibm.com
Target Milestone: ---
Input:
int mod(int x, int y, int &z)
{
z = x % y;
if (y == 0)
{
// division by zero
return 1;
}
else if (y == -1)
{
// gcc removes this branch, which leads to wrong results for
-2^31 % -1
z=0;
}
return 0;
}
gcc -maix64 -O2 modulo.C -save-temps
Output:
._Z3modiiRi:
LFB..0:
divw 9,3,4
mr 10,3
cntlzw 3,4
srwi 3,3,5
mullw 9,9,4
subf 9,9,10
stw 9,0(5)
blr
For input x=-2^31 y=-1, the result is expected to be 0.
As modulo is emulated using x-(x/y)*y and x/y for x=-2^31 y=-1 is undefined on
PowerPC, the result is incorrect if the branch gets optimized away.
More information about the Gcc-bugs
mailing list