re PR rtl-optimization/57032 (internal compiler error: Max. number of generated reloa...
authorUros Bizjak <ubizjak@gmail.com>
Mon, 18 May 2015 16:34:23 +0000 (18:34 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 18 May 2015 16:34:23 +0000 (18:34 +0200)
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

gcc/ChangeLog
gcc/config/alpha/constraints.md
gcc/config/alpha/predicates.md

index e82485baa5bf964f52bc971d51ddd864ea324c7b..dd2c97fdf257a235bfd504f15dbdf7531ea8c613 100644 (file)
@@ -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.
index ef7068248b08270b7cdad36bde209191cda3874b..f1e5333716b118c2e8f9418633d2783b7f4bcdc4 100644 (file)
        (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"
index 2a76710c4fc876f5fa3135473b8519c40c7988ff..51a378e18f23e1590720e273beab7d212e6725a7 100644 (file)
   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,