aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2015-05-18 18:34:23 +0200
committerUros Bizjak <uros@gcc.gnu.org>2015-05-18 18:34:23 +0200
commit6f2ac3606e151edde9980b1ae9735dbd68aa992b (patch)
tree275b86ea1cb8dd21411e026c4d6c3d7898b6b823 /gcc
parent323eb6e3cf61d6810d9aabfcf315047550373e00 (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/config/alpha/constraints.md8
-rw-r--r--gcc/config/alpha/predicates.md8
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,