debugging internal compiler errors ...
kevin diggs
diggskevin38@gmail.com
Sun Apr 17 16:20:00 GMT 2011
Hi,
The code from libgcc2.c(_fixunsxfdi):
#if defined(L_fixunsxfdi) && LIBGCC2_HAS_XF_MODE
UDWtype
__fixunsxfDI (XFtype a)
{
if (a < 0)
return 0;
/* Compute high word of result, as a flonum. */
const XFtype b = (a / Wtype_MAXp1_F);
/* Convert that to fixed (but not to DWtype!),
and shift it into the high word. */
UDWtype v = (UWtype) b;
v <<= W_TYPE_SIZE;
/* Remove high part from the XFtype, leaving the low part as flonum. */
a -= (XFtype)v;
/* Convert that to fixed (but not to DWtype!) and add it in.
Sometimes A comes out negative. This is significant, since
A has more bits than a long int does. */
if (a < 0)
v -= (UWtype) (- a);
else
v += (UWtype) a;
return v;
}
Based on this:
#12 0x0813c8b9 in expand_expr_real_1 (exp=0xb73c76ac, target=0x0,
tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0)
at ../../gcc-4.3.5/gcc/expr.c:9158
9158 expand_assignment (lhs, rhs, MOVE_NONTEMPORAL (exp));
(gdb) call debug_rtx(lhs)
(const/j (nil))
(gdb) call debug_rtx(rhs)
(lshiftrt (nil)
(nil))
It looks like it could be getting stuck on the left shift?
#15 0x08420bc9 in expand_gimple_basic_block (bb=0xb7496708)
at ../../gcc-4.3.5/gcc/cfgexpand.c:1610
1610 expand_expr_stmt (stmt);
(gdb) l
1605 }
1606 }
1607 else
1608 {
1609 last = get_last_insn ();
1610 expand_expr_stmt (stmt);
1611 maybe_dump_rtl_for_tree_stmt (stmt, last);
1612 }
1613 }
1614 }
(gdb) whatis last
type = rtx
(gdb) call debug_rtx(last)
(insn 44 43 0 ../../../gcc-4.3.5/libgcc/../gcc/libgcc2.c:1234 (set
(reg/v:DI 31 [ v.6 ])
(ashift:DI (reg/v:DI 32 [ v.5 ])
(const_int 32 [0x20]))) -1 (nil))
Here is the debug_tree(exp) from the tree argument of
expand_expr_stmnt() (#14 in the stack frame):
(gdb) call debug_tree(exp)
<gimple_modify_stmt 0xb73c76ac side-effects asm_written
arg 0 <var_decl 0xb73cb1b8 a.7
type <real_type 0xb73b9f70 XFtype sizes-gimplified XF
size <integer_cst 0xb749cb0c constant invariant 96>
unit size <integer_cst 0xb749cb28 constant invariant 12>
align 32 symtab -1220816636 alias set -1 canonical type
0xb74b04e0 precision 80>
used XF file ../../../gcc-4.3.5/libgcc/../gcc/libgcc2.c line
1225 col 1 size <integer_cst 0xb749cb0c 96> unit size <integer_cst
0xb749cb28 12>
align 32 context <function_decl 0xb73c25b0 __fixunsxfdi>
(reg/v:XF 30 [ a.7 ])>
arg 1 <minus_expr 0xb75075a0
type <real_type 0xb74b04e0 long double sizes-gimplified XF
size <integer_cst 0xb749cb0c 96> unit size <integer_cst 0xb749cb28 12>
align 32 symtab -1220816532 alias set -1 canonical type
0xb74b04e0 precision 80
pointer_to_this <pointer_type 0xb74b0618>>
arg 0 <parm_decl 0xb73c5500 a type <real_type 0xb73b9f70 XFtype>
used XF file ../../../gcc-4.3.5/libgcc/../gcc/libgcc2.c
line 1224 col 22 size <integer_cst 0xb749cb0c 96> unit size
<integer_cst 0xb749cb28 12>
align 32 context <function_decl 0xb73c25b0 __fixunsxfdi>
initial <real_type 0xb73b9f70 XFtype>
(reg/v:XF 35 [ a ]) arg-type <real_type 0xb73b9f70 XFtype>
incoming-rtl (mem/c/i:XF (reg/f:SI 25
virtual-incoming-args) [0 a+0 S12 A32])>
arg 1 <float_expr 0xb752a680 type <real_type 0xb74b04e0 long double>
arg 0 <var_decl 0xb73cb160 v.6>>>
../../../gcc-4.3.5/libgcc/../gcc/libgcc2.c:1236:3>
kevin
P.S.: Is there a way to turnoff the -quiet option to cc1 from the driver?
More information about the Gcc-help
mailing list