[PATCH] Fix bootstrap fail on spu vs. ira.c/genpreds
Vladimir Makarov
vmakarov@redhat.com
Mon Apr 27 15:34:00 GMT 2009
Dave Korn wrote:
> Hello all,
>
>
> As discussed on the main list earlier today[*], there is currently an
> implicit assumption in ira.c that every backend implements at least one
> define_register_constraint; when the backend doesn't, genpreds does not output
> any definition for regclass_for_constraint and then ira.c (which refers to it
> unguarded) fails to link.
>
>
> gcc/ChangeLog
>
> * ira.c (setup_cover_and_important_classes): Use safe macro
> REG_CLASS_FOR_CONSTRAINT instead of calling regclass_for_constraint
> directly.
> * genpreds.c (write_tm_preds_h): Output suitable definition of
> REG_CLASS_FOR_CONSTRAINT.
>
> The attached patch fixes the reported bug according to Revital; I'm putting
> it through a bootstrap right now (all languages except for Ada), on
> i686-pc-cygwin, which is a platform that won't hit the new code paths, so can
> I skip running the testsuites? Ok for trunk?
>
>
The patch posted in
http://gcc.gnu.org/ml/gcc/2009-04/msg00698.html
is done for older version of ira.c. In the change context for ira.c
instead of
#ifdef CONSTRAINT__LIMIT
should be
#ifdef CONSTRAINT_NUM_DEFINED_P
Other than that the patch is ok. Although, personally, I'd prefer the following
patch (because it does not create a new macro which is used only in one place
of the compiler):
2009-04-27 Vladimir Makarov <vmakarov@redhat.com>
* genpreds.c (write_enum_constraint_num): Output
REG_CONSTRAINT_DEFINED_P instead of CONSTRAINT_NUM_DEFINED_P and
only if there are register constraints.
* ira.c (setup_cover_and_important_classes): Use
REG_CONSTRAINT_DEFINED_P instead of CONSTRAINT_NUM_DEFINED_P.
Index: genpreds.c
===================================================================
--- genpreds.c (revision 146793)
+++ genpreds.c (working copy)
@@ -954,7 +954,8 @@ write_enum_constraint_num (void)
{
struct constraint_data *c;
- fputs ("#define CONSTRAINT_NUM_DEFINED_P 1\n", stdout);
+ if (have_register_constraints)
+ fputs ("#define REG_CONSTRAINT_DEFINED_P 1\n", stdout);
fputs ("enum constraint_num\n"
"{\n"
" CONSTRAINT__UNKNOWN = 0", stdout);
Index: ira.c
===================================================================
--- ira.c (revision 146793)
+++ ira.c (working copy)
@@ -754,7 +754,7 @@ setup_cover_and_important_classes (void)
{
if (i == NO_REGS)
continue;
-#ifdef CONSTRAINT_NUM_DEFINED_P
+#ifdef REG_CONSTRAINT_DEFINED_P
for (j = 0; j < CONSTRAINT__LIMIT; j++)
if ((int) regclass_for_constraint ((enum constraint_num) j) == i)
break;
More information about the Gcc-patches
mailing list