From b65d6744926a7e8b200065f75b1fb0c0359a9949 Mon Sep 17 00:00:00 2001
From: Dave Korn <dave.korn.cygwin@gmail.com>
Date: Thu, 30 Apr 2009 21:52:15 +0000
Subject: [PATCH] Fix from Dave Korn in case a backend does not declare any
 define_register_constraints

From-SVN: r147020
---
 gcc/ChangeLog  | 8 ++++++++
 gcc/genpreds.c | 8 ++++++--
 gcc/ira.c      | 2 +-
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2e6fec8d969..13f45ff7a73 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2009-04-30  Dave Korn  <dave.korn.cygwin@gmail.com>
+
+	* 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.
+
 2009-04-30  Rafael Avila de Espindola  <espindola@google.com>
 
 	* alloc-pool.c (alloc_pool_descriptor): Use an insert_opion value
diff --git a/gcc/genpreds.c b/gcc/genpreds.c
index 86c799aa1a6..5a4e249ceb4 100644
--- a/gcc/genpreds.c
+++ b/gcc/genpreds.c
@@ -1280,9 +1280,13 @@ write_tm_preds_h (void)
 	puts ("extern enum reg_class regclass_for_constraint "
 	      "(enum constraint_num);\n"
 	      "#define REG_CLASS_FROM_CONSTRAINT(c_,s_) \\\n"
-	      "    regclass_for_constraint (lookup_constraint (s_))\n");
+	      "    regclass_for_constraint (lookup_constraint (s_))\n"
+	      "#define REG_CLASS_FOR_CONSTRAINT(x_) \\\n"
+	      "    regclass_for_constraint (x_)\n");
       else
-	puts ("#define REG_CLASS_FROM_CONSTRAINT(c_,s_) NO_REGS");
+	puts ("#define REG_CLASS_FROM_CONSTRAINT(c_,s_) NO_REGS\n"
+	      "#define REG_CLASS_FOR_CONSTRAINT(x_) \\\n"
+	      "    NO_REGS\n");
       if (have_const_int_constraints)
 	puts ("extern bool insn_const_int_ok_for_constraint "
 	      "(HOST_WIDE_INT, enum constraint_num);\n"
diff --git a/gcc/ira.c b/gcc/ira.c
index c105d837f83..a63351441c5 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -756,7 +756,7 @@ setup_cover_and_important_classes (void)
 	    continue;
 #ifdef CONSTRAINT_NUM_DEFINED_P
 	  for (j = 0; j < CONSTRAINT__LIMIT; j++)
-	    if ((int) regclass_for_constraint ((enum constraint_num) j) == i)
+	    if ((int) REG_CLASS_FOR_CONSTRAINT ((enum constraint_num) j) == i)
 	      break;
 	  if (j < CONSTRAINT__LIMIT)
 	    {