------- Comment #6 from spop at gcc dot gnu dot org  2010-03-21 17:01 -------
Further reduced testcase:

typedef struct regnode
{
  char flags;
} regnode;
extern const unsigned char A[];

char *foo (regnode *c, char *s, int norun)
{
  int uskip;
  while (s + (uskip = A[*s]))
    {
      if ((c->flags || bar (c)) && norun)
        goto got_it;
      s += uskip;
    }
 got_it:
  return s;
}

Needs an extra patch to trigger the ICE:

diff --git a/gcc/passes.c b/gcc/passes.c
index 1ac8694..620487f 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -894,6 +894,10 @@ init_optimization_passes (void)
          NEXT_PASS (pass_check_data_deps);
          NEXT_PASS (pass_loop_distribution);
          NEXT_PASS (pass_linear_transform);
+             NEXT_PASS (pass_copy_prop);
+             NEXT_PASS (pass_dce_loop);
+             NEXT_PASS (pass_lim);
+
          NEXT_PASS (pass_graphite_transforms);
            {
              struct opt_pass **p = &pass_graphite_transforms.pass.sub;


-- 


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

Reply via email to