The following testcase works on PPC with gcc-3.4, but fails with >=4.0.

__extension__ typedef unsigned long long guint64;
typedef int gint;
typedef gint gboolean;

typedef struct
{ 
  guint64 rte;
} mainwindow;
mainwindow *mainw;

static int bg_gen_to_start;

gboolean weed_playback_gen_start (void)
{ 
  bg_gen_to_start = -1;
  if (mainw->rte & (((guint64) 1) << bg_gen_to_start))
    mainw->rte ^= (((guint64) 1) << bg_gen_to_start);
}

The error with mainline (only reproducible with atleast -O):

test.c: In function 'weed_playback_gen_start':
test.c:18: error: unrecognizable insn:
(insn 37 36 39 2 (set (subreg:SI (reg:DI 119 [ D.1305 ]) 4)
        (ashift:SI (const_int 1 [0x1])
            (const_int -1 [0xffffffffffffffff]))) -1 (nil)
    (nil))
test.c:18: internal compiler error: in extract_insn, at recog.c:2084


-- 
           Summary: [4.0/4.1/4.2 Regression] Unrecognizable insn with -O on
                    PPC
           Product: gcc
           Version: 4.0.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: halcy0n at gentoo dot org
 GCC build triplet: powerpc-unknown-linux-gnu
  GCC host triplet: powerpc-unknown-linux-gnu
GCC target triplet: powerpc-unknown-linux-gnu


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


Reply via email to