The register class checks in the multiply-source predicates was
incorrectly using the register number instead of the register
class for comparison.
This has slipped through all regression tests because the mulsi3 pattern
was expanded with pseudo registers. So the faulty predicate comparison
was not executed. The corresponding constraints are correct, though,
which ensured that the generated code is correct.
gcc/ChangeLog:
* config/pru/predicates.md (pru_mulsrc0_operand): Use register
class instead of register number for the check.
(pru_mulsrc1_operand): Ditto.
Signed-off-by: Dimitar Dimitrov <[email protected]>
---
gcc/config/pru/predicates.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/gcc/config/pru/predicates.md b/gcc/config/pru/predicates.md
index 77b3316b98e..55635599609 100644
--- a/gcc/config/pru/predicates.md
+++ b/gcc/config/pru/predicates.md
@@ -103,7 +103,7 @@ (define_predicate "pru_mulsrc0_operand"
else
return 0;
- return REGNO_REG_CLASS (regno) == MULSRC0_REGNUM
+ return REGNO_REG_CLASS (regno) == MULSRC0_REGS
|| regno >= FIRST_PSEUDO_REGISTER;
}
return 0;
@@ -123,7 +123,7 @@ (define_predicate "pru_mulsrc1_operand"
else
return 0;
- return REGNO_REG_CLASS (regno) == MULSRC1_REGNUM
+ return REGNO_REG_CLASS (regno) == MULSRC1_REGS
|| regno >= FIRST_PSEUDO_REGISTER;
}
return 0;
--
2.45.0