On Mon, 2007-09-17 at 23:41 +0200, Andreas Schwab wrote:
> Janis Johnson <[EMAIL PROTECTED]> writes:
> 
> > Bootstrap of powerpc64-linux fails building libgfortran with:
> >
> > /home/janis/gcc_trunk_anonsvn/gcc/libgfortran/io/read.c: In function 
> > 'set_integer':
> > /home/janis/gcc_trunk_anonsvn/gcc/libgfortran/io/read.c:81: internal 
> > compiler error: in set_variable_part, at var-tracking.c:2381
> > Please submit a full bug report, with preprocessed source if appropriate.
> > See <http://gcc.gnu.org/bugs.html> for instructions.
> >
> > My last successful build was revision 128522; earliest known break
> > was 128536, still breaks with 128551.
> 
> Bisection has identified this change:
> 
> 2007-09-16  Richard Sandiford  <[EMAIL PROTECTED]>
> 
>       * dse.c (find_shift_sequence): Allow word as well as subword shifts.
>       Do the tentative shift expansion with the DF_NO_INSN_RESCAN flag set.
>       Fix the call to insn_rtx_cost.  Skip access sizes that require a
>       real truncation of the store register.  Use convert_move instead
>       of gen_lowpart when narrowing the result.
>       (replace_read): Use convert_move instead of gen_lowpart when
>       narrowing the store rhs.

My hunt just found the same patch  Here's a small test that fails
with cc1 for powerpc64-linux with "-O2 -g -m64 -mstrict-align":
-------------
extern void *memcpy (void *, const void *, signed long);

void
set_integer (void *dest, __int128_t value, int length)
{
  switch (length)
    {
    case 16:
      {
         __int128_t tmp = value;
         memcpy (dest, (void *) &tmp, length);
      }
      break;
    case 1:
      {
        signed char tmp = value;
        memcpy (dest, (void *) &tmp, length);
      }
      break;
    }
}
-----------
Janis


Reply via email to