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