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