------- 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