* config/mips/mips.h (enum reg_class): Add FRAME_REGS.
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 5 Sep 2008 15:39:40 +0000 (15:39 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 5 Sep 2008 15:39:40 +0000 (15:39 +0000)
(REG_CLASS_NAMES): Update.
(REG_CLASS_CONTENTS): Update.
* config/mips/mips.c (mips_regno_to_class): Use FRAME_REGS instead
of ALL_REGS for regs 77 and 78.
* function.c (instantiate_virtual_regs_in_insn): Assert that
return value of simplify_gen_subreg is not NULL.

testsuite:
* gcc.c-torture/compile/20080903-1.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@140035 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mips/mips.c
gcc/config/mips/mips.h
gcc/function.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/20080903-1.c [new file with mode: 0644]

index 04cd7f8..1c9daf2 100644 (file)
@@ -1,3 +1,13 @@
+2008-09-05  Joseph Myers  <joseph@codesourcery.com>
+
+       * config/mips/mips.h (enum reg_class): Add FRAME_REGS.
+       (REG_CLASS_NAMES): Update.
+       (REG_CLASS_CONTENTS): Update.
+       * config/mips/mips.c (mips_regno_to_class): Use FRAME_REGS instead
+       of ALL_REGS for regs 77 and 78.
+       * function.c (instantiate_virtual_regs_in_insn): Assert that
+       return value of simplify_gen_subreg is not NULL.
+
 2008-09-05  Paolo Bonzini  <bonzini@gnu.org>
 
        * emit-rtl.c (gen_rtvec): Rewrite not using gen_rtvec_v.
index fd0101b..33f7e87 100644 (file)
@@ -502,7 +502,7 @@ const enum reg_class mips_regno_to_class[FIRST_PSEUDO_REGISTER] = {
   MD0_REG,     MD1_REG,        NO_REGS,        ST_REGS,
   ST_REGS,     ST_REGS,        ST_REGS,        ST_REGS,
   ST_REGS,     ST_REGS,        ST_REGS,        NO_REGS,
-  NO_REGS,     ALL_REGS,       ALL_REGS,       NO_REGS,
+  NO_REGS,     FRAME_REGS,     FRAME_REGS,     NO_REGS,
   COP0_REGS,   COP0_REGS,      COP0_REGS,      COP0_REGS,
   COP0_REGS,   COP0_REGS,      COP0_REGS,      COP0_REGS,
   COP0_REGS,   COP0_REGS,      COP0_REGS,      COP0_REGS,
index 1a9b542..4145699 100644 (file)
@@ -1791,6 +1791,7 @@ enum reg_class
   ST_REGS,                     /* status registers (fp status) */
   DSP_ACC_REGS,                        /* DSP accumulator registers */
   ACC_REGS,                    /* Hi/Lo and DSP accumulator registers */
+  FRAME_REGS,                  /* $arg and $frame */
   ALL_REGS,                    /* all registers */
   LIM_REG_CLASSES              /* max value + 1 */
 };
@@ -1832,6 +1833,7 @@ enum reg_class
   "ST_REGS",                                                           \
   "DSP_ACC_REGS",                                                      \
   "ACC_REGS",                                                          \
+  "FRAME_REGS",                                                                \
   "ALL_REGS"                                                           \
 }
 
@@ -1874,7 +1876,8 @@ enum reg_class
   { 0x00000000, 0x00000000, 0x000007f8, 0x00000000, 0x00000000, 0x00000000 },  /* status registers */  \
   { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003f0000 },  /* dsp accumulator registers */ \
   { 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x003f0000 },  /* hi/lo and dsp accumulator registers */       \
-  { 0xffffffff, 0xffffffff, 0xffff07ff, 0xffffffff, 0xffffffff, 0x0fffffff }   /* all registers */     \
+  { 0x00000000, 0x00000000, 0x00006000, 0x00000000, 0x00000000, 0x00000000 },  /* frame registers */   \
+  { 0xffffffff, 0xffffffff, 0xffff67ff, 0xffffffff, 0xffffffff, 0x0fffffff }   /* all registers */     \
 }
 
 
index da26dc7..8f614b6 100644 (file)
@@ -1515,6 +1515,7 @@ instantiate_virtual_regs_in_insn (rtx insn)
            }
          x = simplify_gen_subreg (recog_data.operand_mode[i], new_rtx,
                                   GET_MODE (new_rtx), SUBREG_BYTE (x));
+         gcc_assert (x);
          break;
 
        default:
index 4c683eb..3278ced 100644 (file)
@@ -1,3 +1,7 @@
+2008-09-05  Joseph Myers  <joseph@codesourcery.com>
+
+       * gcc.c-torture/compile/20080903-1.c: New test.
+
 2008-09-05  Daniel Kraft  <d@domob.eu>
 
        PR fortran/36746
diff --git a/gcc/testsuite/gcc.c-torture/compile/20080903-1.c b/gcc/testsuite/gcc.c-torture/compile/20080903-1.c
new file mode 100644 (file)
index 0000000..180b926
--- /dev/null
@@ -0,0 +1,12 @@
+struct bar { unsigned short length; };
+
+int
+dummy(void)
+{
+  char c[4096];
+  struct bar *a;
+  struct bar *b;
+
+  a->length = ((char *) b - c);
+  return 0;
+}