+1997-10-28 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * global.c (global_alloc): Use xmalloc instead of alloca for
+ CONFLICTS, since max_allocno * allocno_row_words alone can be more
+ than 2.5Mb sometimes.
+
Tue Oct 28 15:29:15 1997 Richard Henderson <rth@cygnus.com>
* reload1.c (eliminate_regs [SET]): If [SUBREG] widened the mode of
allocno_row_words = (max_allocno + INT_BITS - 1) / INT_BITS;
- conflicts = (INT_TYPE *) alloca (max_allocno * allocno_row_words
- * sizeof (INT_TYPE));
+ /* We used to use alloca here, but the size of what it would try to
+ allocate would occasionally cause it to exceed the stack limit and
+ cause unpredictable core dumps. Some examples were > 2Mb in size. */
+ conflicts = (INT_TYPE *) xmalloc (max_allocno * allocno_row_words
+ * sizeof (INT_TYPE));
bzero ((char *) conflicts,
max_allocno * allocno_row_words * sizeof (INT_TYPE));
}
}
+ free (conflicts);
+
/* Do the reloads now while the allocno data still exist, so that we can
try to assign new hard regs to any pseudo regs that are spilled. */