Error at division by constant zero

Unruh, Erwin Erwin.Unruh@fujitsu-siemens.com
Fri Aug 23 00:47:00 GMT 2002


Hello,

When dividing an integer by constant zero, the GCC does emit a library call to
the corresponding routine. On Sparc this is .rem or .div, on Linux this might be
__modsi3 or __divsi3.

I think this is an error in expand_divmod. EXACT_POWER_OF_2_OR_ZERO_P gives
true. So we think we could use a shift optab. optab2 is a shift optab.

In case of zero we bypass the special code for dividing by a constant. We then
call sign_expand_binop.

But the decision whether to use OPTAB_DIRECT or OPTAB_WIDEN is based on the
existence of a shift insn, which is a mistake.

        Erwin

Erwin Unruh, Fujitsu Siemens Computers, C/C++ compiler group



More information about the Gcc mailing list