The commit r17-3780-ga5da203dd959 introduced a regression that results
in the following kind of ICE when DF mode value 0 is loaded into AR
registers:

gcc/libgcc/libgcc2.c:2746:1: error: unrecognizable insn:
(insn 1401 775 1402 79 (set (reg:SF 12 a12)
        (const_int 0 [0])) "gcc/libgcc/libgcc2.c":2719:8 -1
     (nil))
during RTL pass: split2

This happens because the condition in the `move_fp_operand` that allows
matching 0 as a constant for auto litpool has been changed from
`CONSTANT_P` to `CONST_DOUBLE_P`, but the code that splits DF mode
constant 0 produces const_int.

gcc/
        * config/xtensa/predicates.md (move_fp_operand): Use CONSTANT_P
        instead of CONST_DOUBLE_P.
---
 gcc/config/xtensa/predicates.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/config/xtensa/predicates.md b/gcc/config/xtensa/predicates.md
index b04a34f263c1..ff678b92c5d1 100644
--- a/gcc/config/xtensa/predicates.md
+++ b/gcc/config/xtensa/predicates.md
@@ -154,7 +154,7 @@
        (match_test "satisfies_constraint_Gz (op)
                    || satisfies_constraint_Gc (op)
                    || ((TARGET_CONST16 || TARGET_AUTO_LITPOOLS)
-                       && CONST_DOUBLE_P (op))")))
+                       && CONSTANT_P (op))")))
 
 (define_predicate "fix_scaling_operand"
   (match_code "const_double")
-- 
2.47.3

Reply via email to