re PR rtl-optimization/52629 (out-of-bounds access in reload1.c)
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 26 Mar 2012 08:41:02 +0000 (08:41 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 26 Mar 2012 08:41:02 +0000 (08:41 +0000)
PR rtl-optimization/52629
* reload1.c (count_pseudo): Short-circuit common case.
(count_spilled_pseudo): Return early for pseudos without hard regs.
Assert that the pseudo has got a hard reg before manipulating it.

From-SVN: r185787

gcc/ChangeLog
gcc/reload1.c

index 0db91475709d6ae304f2c783b93b785a182d1d29..bc169177ddda7ac14359ccd01c4253bc0cefbd49 100644 (file)
@@ -1,3 +1,10 @@
+2012-03-26  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR rtl-optimization/52629
+       * reload1.c (count_pseudo): Short-circuit common case.
+       (count_spilled_pseudo): Return early for pseudos without hard regs.
+       Assert that the pseudo has got a hard reg before manipulating it.
+
 2012-03-24  Jan Hubicka  <jh@suse.cz>
 
        PR lto/51663
index bbb75c85a1db0fc59474233c2af4fc90f896ed37..71cea8171d4e24ca6b22f053d2768afab60ab072 100644 (file)
@@ -1746,11 +1746,12 @@ count_pseudo (int reg)
   int r = reg_renumber[reg];
   int nregs;
 
+  /* Ignore spilled pseudo-registers which can be here only if IRA is used.  */
+  if (ira_conflicts_p && r < 0)
+    return;
+
   if (REGNO_REG_SET_P (&pseudos_counted, reg)
-      || REGNO_REG_SET_P (&spilled_pseudos, reg)
-      /* Ignore spilled pseudo-registers which can be here only if IRA
-        is used.  */
-      || (ira_conflicts_p && r < 0))
+      || REGNO_REG_SET_P (&spilled_pseudos, reg))
     return;
 
   SET_REGNO_REG_SET (&pseudos_counted, reg);
@@ -1827,12 +1828,17 @@ count_spilled_pseudo (int spilled, int spilled_nregs, int reg)
 {
   int freq = REG_FREQ (reg);
   int r = reg_renumber[reg];
-  int nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (reg)];
+  int nregs;
+
+  /* Ignore spilled pseudo-registers which can be here only if IRA is used.  */
+  if (ira_conflicts_p && r < 0)
+    return;
+
+  gcc_assert (r >= 0);
+
+  nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (reg)];
 
-  /* Ignore spilled pseudo-registers which can be here only if IRA is
-     used.  */
-  if ((ira_conflicts_p && r < 0)
-      || REGNO_REG_SET_P (&spilled_pseudos, reg)
+  if (REGNO_REG_SET_P (&spilled_pseudos, reg)
       || spilled + spilled_nregs <= r || r + nregs <= spilled)
     return;