diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2015-05-18 18:34:23 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2015-05-18 18:34:23 +0200 |
commit | 6f2ac3606e151edde9980b1ae9735dbd68aa992b (patch) | |
tree | 275b86ea1cb8dd21411e026c4d6c3d7898b6b823 /gcc | |
parent | 323eb6e3cf61d6810d9aabfcf315047550373e00 (diff) | |
download | gcc-6f2ac3606e151edde9980b1ae9735dbd68aa992b.zip gcc-6f2ac3606e151edde9980b1ae9735dbd68aa992b.tar.gz gcc-6f2ac3606e151edde9980b1ae9735dbd68aa992b.tar.bz2 |
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 <rth@redhat.com>
From-SVN: r223298
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/alpha/constraints.md | 8 | ||||
-rw-r--r-- | gcc/config/alpha/predicates.md | 8 |
3 files changed, 15 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e82485b..dd2c97f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-05-18 Uros Bizjak <ubizjak@gmail.com> + Richard Henderson <rth@redhat.com> + + 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 <Alex.Velenko@arm.com> * 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 ef70682..f1e5333 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 2a76710..51a378e 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, |