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