This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/27826] [4.0/4.1 Regression] ICE in copy_to_mode_reg
- From: "rguenth at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 5 Jan 2007 13:01:18 -0000
- Subject: [Bug c++/27826] [4.0/4.1 Regression] ICE in copy_to_mode_reg
- References: <bug-27826-12759@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #16 from rguenth at gcc dot gnu dot org 2007-01-05 13:01 -------
Reconfirmed. The problem still exists.
#1 0x0844d296 in copy_to_mode_reg (mode=SImode, x=0xb7c8b1a0)
at /home/richard/src/gcc-4_1-branch/gcc/explow.c:577
577 gcc_assert (GET_MODE (x) == mode || GET_MODE (x) == VOIDmode);
(gdb) call debug_rtx (x)
(reg:HI 59 [ test$type ])
#1 0x0844d296 in copy_to_mode_reg (mode=SImode, x=0xb7c8b1a0)
at /home/richard/src/gcc-4_1-branch/gcc/explow.c:577
#2 0x086464b7 in prepare_operand (icode=928, x=0xb7c8b1a0, opnum=1,
mode=SImode, wider_mode=SImode, unsignedp=0)
at /home/richard/src/gcc-4_1-branch/gcc/optabs.c:3576
#3 0x0864672d in emit_cmp_and_jump_insn_1 (x=0xb7c8b190, y=0xb7c8b1a0,
mode=SImode, comparison=EQ, unsignedp=0, label=0x0)
at /home/richard/src/gcc-4_1-branch/gcc/optabs.c:3632
#4 0x086468a6 in emit_cmp_and_jump_insns (x=0xb7c8b190, y=0xb7c8b1a0,
comparison=EQ, size=0x0, mode=SImode, unsignedp=0, label=0x0)
at /home/richard/src/gcc-4_1-branch/gcc/optabs.c:3696
#5 0x086468ea in emit_cmp_insn (x=0xb7c8b190, y=0xb7c8b1a0, comparison=EQ,
size=0x0, mode=SImode, unsignedp=0)
at /home/richard/src/gcc-4_1-branch/gcc/optabs.c:3705
#6 0x08413b00 in compare_from_rtx (op0=0xb7c8b190, op1=0xb7c8b1a0, code=EQ,
unsignedp=0, mode=SImode, size=0x0)
at /home/richard/src/gcc-4_1-branch/gcc/dojump.c:824
#7 0x0846185b in emit_store_flag (target=0xb7c8b210, code=EQ, op0=0xb7c8b190,
op1=0xb7c8b1a0, mode=SImode, unsignedp=0, normalizep=1)
at /home/richard/src/gcc-4_1-branch/gcc/expmed.c:5302
#8 0x08490ceb in do_store_flag (exp=0xb7be2168, target=0xb7c8b210,
mode=SImode, only_cheap=0)
at /home/richard/src/gcc-4_1-branch/gcc/expr.c:8943
#9 0x0848a2da in expand_expr_real_1 (exp=0xb7be2168, target=0xb7c8b210,
tmode=SImode, modifier=EXPAND_NORMAL, alt_rtl=0x0)
at /home/richard/src/gcc-4_1-branch/gcc/expr.c:8227
(gdb) call debug_tree (exp)
<eq_expr 0xb7be2168
type <integer_type 0xb7bec284 int sizes-gimplified public SI
size <integer_cst 0xb7bda3f0 constant invariant 32>
unit size <integer_cst 0xb7bda180 constant invariant 4>
align 32 symtab 0 alias set -1 precision 32 min <integer_cst 0xb7bda3a8
-2147483648> max <integer_cst 0xb7bda3c0 2147483647>
pointer_to_this <pointer_type 0xb7becc38>>
arg 0 <var_decl 0xb7c8a5d8 SR.40 type <integer_type 0xb7bec284 int>
used ignored SI file t.i line 9 size <integer_cst 0xb7bda3f0 32> unit
size <integer_cst 0xb7bda180 4>
align 32 context <function_decl 0xb7c7ee80 f>
(reg:SI 58 [ SR.40 ])>
arg 1 <var_decl 0xb7c8a528 test$type
type <integer_type 0xb7bec1cc short int HI
size <integer_cst 0xb7bda300 constant invariant 16>
unit size <integer_cst 0xb7bda318 constant invariant 2>
align 16 symtab 0 alias set -1 precision 16 min <integer_cst
0xb7bda2a0 -32768> max <integer_cst 0xb7bda2d0 32767>>
used HI file t.i line 8 size <integer_cst 0xb7bda300 16> unit size
<integer_cst 0xb7bda318 2>
align 16 context <function_decl 0xb7c7ee80 f>
(reg:HI 59 [ test$type ])>>
so we have wrong types on the tree we expand
(gdb) call debug_generic_expr (exp)
SR.40D.1791 == test$typeD.1789
out-of-ssa / TER introduce this mismatch. After .t92.uncprop we have
int f() ()
{
intD.2 SR.40D.1798;
short intD.12 SR.39D.1797;
short intD.12 test$typeD.1796;
struct GeometryD.1732 testD.1740;
short intD.12 D.1745;
short intD.12 D.1744;
struct GeometryD.1732 D.1743;
struct GeometryD.1732 D.1741;
intD.2 D.1742;
<bb 0>:
D.1744_10 = SR.40D.1798_9;
D.1742_7 = D.1744_10 == test$typeD.1796_11;
return D.1742_7;
}
while .t93.optimized contains
Analyzing Edge Insertions.
int f() ()
{
intD.2 SR.40D.1798;
short intD.12 SR.39D.1797;
short intD.12 test$typeD.1796;
struct GeometryD.1732 testD.1740;
short intD.12 D.1745;
short intD.12 D.1744;
struct GeometryD.1732 D.1743;
struct GeometryD.1732 D.1741;
intD.2 D.1742;
<bb 0>:
return SR.40D.1798 == test$typeD.1796;
}
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |amacleod at redhat dot com
Last reconfirmed|2006-10-21 21:32:50 |2007-01-05 13:01:17
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27826