arc.md (*storeqi_update): Use 'memory_operand' and fix RTL pattern to include the...
authorAndrew Burgess <andrew.burgess@embecosm.com>
Sat, 19 Dec 2015 19:29:12 +0000 (19:29 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Sat, 19 Dec 2015 19:29:12 +0000 (19:29 +0000)
2015-12-19  Andrew Burgess  <andrew.burgess@embecosm.com>

        * config/arc/arc.md (*storeqi_update): Use 'memory_operand' and
        fix RTL pattern to include the plus.
        (*storehi_update): Likewise.
        (*storesi_update): Likewise.
        (*storesf_update): Likewise.
        * config/arc/predicates.md (store_update_operand): Delete.

From-SVN: r231850

gcc/ChangeLog
gcc/config/arc/arc.md
gcc/config/arc/predicates.md

index b0ec3c7f7a9134b1f6bf0c9a1d73831896dfc186..b39dc4c1e73ad03d99b7199edf735fb458f8f381 100644 (file)
@@ -1,3 +1,12 @@
+2015-12-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * config/arc/arc.md (*storeqi_update): Use 'any_mem_operand' and
+       fix RTL pattern to include the plus.
+       (*storehi_update): Likewise.
+       (*storesi_update): Likewise.
+       (*storesf_update): Likewise.
+       * config/arc/predicates.md (store_update_operand): Delete.
+
 2015-12-19  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * config/arc/arc.md (*loadqi_update): Use new 'any_mem_operand'
index 7ca4431f1a419c85bb2bb10ee97732b1a6c98d1f..9e73d02ec12c4229c509df5726dd9458cd2f3292 100644 (file)
    (set_attr "length" "4,8")])
 
 (define_insn "*storeqi_update"
-  [(set (match_operator:QI 4 "store_update_operand"
-        [(match_operand:SI 1 "register_operand" "0")
-         (match_operand:SI 2 "short_immediate_operand" "I")])
+  [(set (match_operator:QI 4 "any_mem_operand"
+        [(plus:SI (match_operand:SI 1 "register_operand" "0")
+                  (match_operand:SI 2 "short_immediate_operand" "I"))])
        (match_operand:QI 3 "register_operand" "c"))
    (set (match_operand:SI 0 "dest_reg_operand" "=w")
        (plus:SI (match_dup 1) (match_dup 2)))]
    (set_attr "length" "4,8")])
 
 (define_insn "*storehi_update"
-  [(set (match_operator:HI 4 "store_update_operand"
-        [(match_operand:SI 1 "register_operand" "0")
-         (match_operand:SI 2 "short_immediate_operand" "I")])
+  [(set (match_operator:HI 4 "any_mem_operand"
+        [(plus:SI (match_operand:SI 1 "register_operand" "0")
+                  (match_operand:SI 2 "short_immediate_operand" "I"))])
        (match_operand:HI 3 "register_operand" "c"))
    (set (match_operand:SI 0 "dest_reg_operand" "=w")
        (plus:SI (match_dup 1) (match_dup 2)))]
    (set_attr "length" "4,8")])
 
 (define_insn "*storesi_update"
-  [(set (match_operator:SI 4 "store_update_operand"
-        [(match_operand:SI 1 "register_operand" "0")
-         (match_operand:SI 2 "short_immediate_operand" "I")])
+  [(set (match_operator:SI 4 "any_mem_operand"
+        [(plus:SI (match_operand:SI 1 "register_operand" "0")
+                  (match_operand:SI 2 "short_immediate_operand" "I"))])
        (match_operand:SI 3 "register_operand" "c"))
    (set (match_operand:SI 0 "dest_reg_operand" "=w")
        (plus:SI (match_dup 1) (match_dup 2)))]
    (set_attr "length" "4,8")])
 
 (define_insn "*storesf_update"
-  [(set (match_operator:SF 4 "store_update_operand"
-        [(match_operand:SI 1 "register_operand" "0")
-         (match_operand:SI 2 "short_immediate_operand" "I")])
+  [(set (match_operator:SF 4 "any_mem_operand"
+        [(plus:SI (match_operand:SI 1 "register_operand" "0")
+                  (match_operand:SI 2 "short_immediate_operand" "I"))])
        (match_operand:SF 3 "register_operand" "c"))
    (set (match_operand:SI 0 "dest_reg_operand" "=w")
        (plus:SI (match_dup 1) (match_dup 2)))]
index 268ff7ee0683a89249f5723ab0ee3ae68a536404..ba11cd1422d9a40daaae0b682319ac13f3ef66a4 100644 (file)
 }
 )
 
-;; Return true if OP is valid store with update operand.
-(define_predicate "store_update_operand"
-  (match_code "mem")
-{
-  if (GET_CODE (op) != MEM
-      || GET_MODE (op) != mode)
-    return 0;
-  op = XEXP (op, 0);
-  if (GET_CODE (op) != PLUS
-      || GET_MODE (op) != Pmode
-      || !register_operand (XEXP (op, 0), Pmode)
-      || !(GET_CODE (XEXP (op, 1)) == CONST_INT
-          && SMALL_INT (INTVAL (XEXP (op, 1)))))
-    return 0;
-  return 1;
-}
-)
-
 ;; Return true if OP is a non-volatile non-immediate operand.
 ;; Volatile memory refs require a special "cache-bypass" instruction
 ;; and only the standard movXX patterns are set up to handle them.