Fix middle-end/102395: reg_class having only NO_REGS and ALL_REGS.

Message ID 1631992566-20048-1-git-send-email-apinski@marvell.com
State Committed
Commit 767c098247a405041a48d6c1663100bfc29e414c
Headers
Series Fix middle-end/102395: reg_class having only NO_REGS and ALL_REGS. |

Commit Message

Li, Pan2 via Gcc-patches Sept. 18, 2021, 7:16 p.m. UTC
  From: Andrew Pinski <apinski@marvell.com>

So this is a simple fix is to just add to the assert that
sclass and dclass are both greater than or equal to NO_REGS.
NO_REGS is documented as the first register class so it should
have the value of 0.

gcc/ChangeLog:

	* lra-constraints.c (check_and_process_move): Assert
	that dclass and sclass are greater than or equal to NO_REGS.
---
 gcc/lra-constraints.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

Jeff Law Sept. 19, 2021, 3:38 a.m. UTC | #1
On 9/18/2021 1:16 PM, apinski--- via Gcc-patches wrote:
> From: Andrew Pinski <apinski@marvell.com>
>
> So this is a simple fix is to just add to the assert that
> sclass and dclass are both greater than or equal to NO_REGS.
> NO_REGS is documented as the first register class so it should
> have the value of 0.
>
> gcc/ChangeLog:
>
> 	* lra-constraints.c (check_and_process_move): Assert
> 	that dclass and sclass are greater than or equal to NO_REGS.
OK
jeff
  

Patch

diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index a56080bee35..4d734548c38 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -1276,7 +1276,7 @@  check_and_process_move (bool *change_p, bool *sec_mem_p ATTRIBUTE_UNUSED)
   sclass = dclass = NO_REGS;
   if (REG_P (dreg))
     dclass = get_reg_class (REGNO (dreg));
-  gcc_assert (dclass < LIM_REG_CLASSES);
+  gcc_assert (dclass < LIM_REG_CLASSES && dclass >= NO_REGS);
   if (dclass == ALL_REGS)
     /* ALL_REGS is used for new pseudos created by transformations
        like reload of SUBREG_REG (see function
@@ -1288,7 +1288,7 @@  check_and_process_move (bool *change_p, bool *sec_mem_p ATTRIBUTE_UNUSED)
     return false;
   if (REG_P (sreg))
     sclass = get_reg_class (REGNO (sreg));
-  gcc_assert (sclass < LIM_REG_CLASSES);
+  gcc_assert (sclass < LIM_REG_CLASSES && sclass >= NO_REGS);
   if (sclass == ALL_REGS)
     /* See comments above.  */
     return false;