From 6f2ac3606e151edde9980b1ae9735dbd68aa992b Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Mon, 18 May 2015 18:34:23 +0200 Subject: [PATCH] re PR rtl-optimization/57032 (internal compiler error: Max. number of generated reload insns per insn is achieved (90)) PR target/57032 * config/alpha/constraints.md (Q): Rewrite as define_memory_constraint. Check for a memory location that is not a reference (using an AND) to an unaligned location here. * config/alpha/predicates.md (normal_memory_operand): Remove. Co-Authored-By: Richard Henderson From-SVN: r223298 --- gcc/ChangeLog | 9 +++++++++ gcc/config/alpha/constraints.md | 8 ++++++-- gcc/config/alpha/predicates.md | 8 -------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e82485baa5b..dd2c97fdf25 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-05-18 Uros Bizjak + Richard Henderson + + PR target/57032 + * config/alpha/constraints.md (Q): Rewrite as define_memory_constraint. + Check for a memory location that is not a reference (using an AND) + to an unaligned location here. + * config/alpha/predicates.md (normal_memory_operand): Remove. + 2015-05-18 Alex Velenko * config/arm/arm.md (andsi_not_shiftsi_si_scc): New pattern. diff --git a/gcc/config/alpha/constraints.md b/gcc/config/alpha/constraints.md index ef7068248b0..f1e5333716b 100644 --- a/gcc/config/alpha/constraints.md +++ b/gcc/config/alpha/constraints.md @@ -91,9 +91,13 @@ (match_test "op == CONST0_RTX (mode)"))) ;; "Extra" constraints. -(define_constraint "Q" + +;; A memory location that is not a reference +;; (using an AND) to an unaligned location. +(define_memory_constraint "Q" "@internal A normal_memory_operand" - (match_operand 0 "normal_memory_operand")) + (and (match_code "mem") + (not (match_test "GET_CODE (XEXP (op, 0)) == AND")))) (define_constraint "R" "@internal A direct_call_operand" diff --git a/gcc/config/alpha/predicates.md b/gcc/config/alpha/predicates.md index 2a76710c4fc..51a378e18f2 100644 --- a/gcc/config/alpha/predicates.md +++ b/gcc/config/alpha/predicates.md @@ -525,14 +525,6 @@ return false; }) -;; Return 1 is OP is a memory location that is not a reference -;; (using an AND) to an unaligned location. Take into account -;; what reload will do. -(define_special_predicate "normal_memory_operand" - (ior (match_test "op = resolve_reload_operand (op), 0") - (and (match_code "mem") - (match_test "GET_CODE (XEXP (op, 0)) != AND")))) - ;; Returns 1 if OP is not an eliminable register. ;; ;; This exists to cure a pathological failure in the s8addq (et al) patterns, -- 2.30.2