[Bug other/53923] ICE: RTL check: expected code 'reg', have 'debug_expr' in rhs_regno, at rtl.h:1091

2012-07-31 Thread gjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53923

Georg-Johann Lay gjl at gcc dot gnu.org changed:

   What|Removed |Added

 CC||richard.sandiford at linaro
   ||dot org

--- Comment #3 from Georg-Johann Lay gjl at gcc dot gnu.org 2012-07-31 
17:48:08 UTC ---
Also CCing Richard as one of the last editors of df-problems.c


[Bug other/53923] ICE: RTL check: expected code 'reg', have 'debug_expr' in rhs_regno, at rtl.h:1091

2012-07-11 Thread gjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53923

--- Comment #1 from Georg-Johann Lay gjl at gcc dot gnu.org 2012-07-11 
09:27:26 UTC ---
Created attachment 27773
  -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=27773
libgcc2-mulsc3.c: preprocessed bit of libgcc2.c

compile with 

avr-gcc libgcc2-mulsc3.c -c -mmcu=avr25 -Os -g -mcall-prologues


[Bug other/53923] ICE: RTL check: expected code 'reg', have 'debug_expr' in rhs_regno, at rtl.h:1091

2012-07-11 Thread gjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53923

Georg-Johann Lay gjl at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2012-07-11
 CC||eric.weddington at atmel
   ||dot com
 Ever Confirmed|0   |1


[Bug other/53923] ICE: RTL check: expected code 'reg', have 'debug_expr' in rhs_regno, at rtl.h:1091

2012-07-11 Thread gjl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53923

--- Comment #2 from Georg-Johann Lay gjl at gcc dot gnu.org 2012-07-11 
10:03:49 UTC ---
avr.c already contains code to work around problems from DCE, instead of DCE
working out proper solutions to cover AVR, see PR50063

Something goes wrong in

df-problems.c:dead_debug_insert_temp

(insn 328 886 866 37 (set (reg:SF 16 r16)
(unspec:SF [
(reg:SF 16 r16)
(reg/v:SF 4 r4 [orig:162 b ] [162])
] UNSPEC_COPYSIGN)) libgcc2-mulsc3.c:1307 322 {copysignsf3}
 (expr_list:REG_DEAD (reg/v:SF 4 r4 [orig:162 b ] [162])
(expr_list:REG_DEAD (reg/v:SF 4 r4 [orig:162 b ] [162])
(expr_list:REG_EQUAL (unspec:SF [
(const_double:SF 0 [0] 0.0 [0x0.0p+0])
(reg/v:SF 4 r4 [orig:162 b ] [162])
] UNSPEC_COPYSIGN)
(nil)


There is this code that sets reg from NULL to garbage (debug_expr:SF D#2)

  /* Move all uses of uregno from debug-head to uses, setting mode to
 the widest referenced mode.  */
  while ((cur = *tailp))
{
  if (DF_REF_REGNO (cur-use) == uregno)
{
  *usesp = cur;
  usesp = cur-next;
  *tailp = cur-next;
  cur-next = NULL;
  if (!reg
  || (GET_MODE_BITSIZE (GET_MODE (reg))
   GET_MODE_BITSIZE (GET_MODE (*DF_REF_REAL_LOC (cur-use)
reg = *DF_REF_REAL_LOC (cur-use);