This removes the Y constraint from the tabort pattern definition.  In
this case it is easier without using substitutions.

gcc/ChangeLog:

2016-01-14  Andreas Krebbel  <kreb...@linux.vnet.ibm.com>

        * config/s390/s390.md ("*tabort_1"): Change predicate to
        addrreg_or_constint_operand.  Add a second alternative to cover
        register as well as const int operands.
        ("*tabort_1_plus"): New pattern definition.
---
 gcc/config/s390/s390.md | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index f91c92d..389b523 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -10697,10 +10697,20 @@
 })
 
 (define_insn "*tabort_1"
-  [(unspec_volatile [(match_operand:SI 0 "shift_count_or_setmem_operand" "Y")]
+  [(unspec_volatile [(match_operand:SI 0 "addrreg_or_constint_operand" "a,n")]
                    UNSPECV_TABORT)]
   "TARGET_HTM && operands != NULL"
-  "tabort\t%Y0"
+  "@
+   tabort\t0(%0)
+   tabort\t%0"
+  [(set_attr "op_type" "S")])
+
+(define_insn "*tabort_1_plus"
+  [(unspec_volatile [(plus:SI (match_operand:SI 0 "register_operand"  "a")
+                             (match_operand:SI 1 "const_int_operand" "J"))]
+                   UNSPECV_TABORT)]
+  "TARGET_HTM && operands != NULL"
+  "tabort\t%1(%0)"
   [(set_attr "op_type" "S")])
 
 ; Transaction extract nesting depth
-- 
1.9.1

Reply via email to