------- Comment #4 from fxcoudert at gcc dot gnu dot org  2008-03-02 18:05 
-------
Here's the preprocessed source, reduced on ppc-darwin:

void maxloc1_4_r16 ()
{
  int n, result, *dest;
  long double *src, maxval;

  for (n = 0; n < 10; n++, src++)
    if (*src > maxval)
      result++;

  *dest = result;
}

It compiles at -O0 but fails at -O1. The backtrace is:

#0  fancy_abort (file=0x755644
"/var/tmp/gfortran-20080302/ibin/../gcc/gcc/explow.c", line=492,
function=0x856e04 "memory_address") at
/var/tmp/gfortran-20080302/ibin/../gcc/gcc/diagnostic.c:664
#1  0x0025f428 in memory_address (mode=TFmode, x=0x40db2370) at
/var/tmp/gfortran-20080302/ibin/../gcc/gcc/explow.c:492
#2  0x0055410c in get_computation_cost_at (data=<value temporarily unavailable,
due to optimizations>, use=<value temporarily unavailable, due to
optimizations>, cand=<value temporarily unavailable, due to optimizations>,
address_p=<value temporarily unavailable, due to optimizations>,
depends_on=<value temporarily unavailable, due to optimizations>, at=<value
temporarily unavailable, due to optimizations>) at
/var/tmp/gfortran-20080302/ibin/../gcc/gcc/tree-ssa-loop-ivopts.c:3066
#3  0x00554850 in determine_use_iv_cost (data=0xbffff558, use=0x40c10070,
cand=0x40c100d0) at
/var/tmp/gfortran-20080302/ibin/../gcc/gcc/tree-ssa-loop-ivopts.c:3616
#4  0x00554e30 in determine_use_iv_costs (data=0xbffff558) at
/var/tmp/gfortran-20080302/ibin/../gcc/gcc/tree-ssa-loop-ivopts.c:3888
#5  0x00558dac in tree_ssa_iv_optimize_loop (data=0xbffff558, loop=<value
temporarily unavailable, due to optimizations>) at
/var/tmp/gfortran-20080302/ibin/../gcc/gcc/tree-ssa-loop-ivopts.c:5453
#6  0x00559aa4 in tree_ssa_iv_optimize () at
/var/tmp/gfortran-20080302/ibin/../gcc/gcc/tree-ssa-loop-ivopts.c:5501
#7  0x0056a9e8 in tree_ssa_loop_ivopts () at
/var/tmp/gfortran-20080302/ibin/../gcc/gcc/tree-ssa-loop.c:550

and the lines around the failed assert:

(gdb) l 490
485              the register is a valid address.  */
486           else
487             x = force_reg (Pmode, x);
488         }
489
490      done:
491
492       gcc_assert (memory_address_p (mode, x));
493       /* If we didn't change the address, we are done.  Otherwise, mark
494          a reg as a pointer if we have REG or REG + CONST_INT.  */
(gdb) p mode
$4 = TFmode
(gdb) p debug_rtx(x)
(plus:SI (reg:SI 119)
    (reg/f:SI 119))
$5 = void
(gdb) p memory_address_p (mode, x) 
$6 = 0


-- 

fxcoudert at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |fxcoudert at gcc dot gnu dot
                   |                            |org
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2008-03-02 18:05:04
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35373

Reply via email to