diff options
author | Andreas Krebbel <krebbel@linux.vnet.ibm.com> | 2016-03-01 09:22:20 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2016-03-01 09:22:20 +0000 |
commit | adf22b3f5a9b826192c4582c897e9b8c8b4ff37a (patch) | |
tree | 0eca7195ce47363e0394da08d683d4094333c799 /gcc | |
parent | 191eb16d3adfc397f63d63c2bafa9be187f9f054 (diff) | |
download | gcc-adf22b3f5a9b826192c4582c897e9b8c8b4ff37a.zip gcc-adf22b3f5a9b826192c4582c897e9b8c8b4ff37a.tar.gz gcc-adf22b3f5a9b826192c4582c897e9b8c8b4ff37a.tar.bz2 |
S/390: Get rid of Y constraint in left and logical right
shift patterns.
With this patch the substitution patterns added earlier are used for
the logical right shift and all the left shift patterns.
2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/s390.md ("<shift><mode>3"): Change predicate of
op2 to nonmemory_operand.
("*<shift>di3_31", "*<shift>di3_31_and"):
Merge into single pattern definition ...
("*<shift>di3_31<addr_style_op><masked_op>"): New pattern.
("*<shift><mode>3", "*<shift><mode>3_and"): Merge into single
pattern definition ...
("*<shift><mode>3<addr_style_op><masked_op>"): New pattern.
* config/s390/subst.md: Add ashift and lshiftrt to SUBST
iterator.
From-SVN: r233844
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/config/s390/s390.md | 55 | ||||
-rw-r--r-- | gcc/config/s390/subst.md | 2 |
3 files changed, 30 insertions, 40 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 416eed7..aa829f0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,18 @@ 2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + * config/s390/s390.md ("<shift><mode>3"): Change predicate of + op2 to nonmemory_operand. + ("*<shift>di3_31", "*<shift>di3_31_and"): + Merge into single pattern definition ... + ("*<shift>di3_31<addr_style_op><masked_op>"): New pattern. + ("*<shift><mode>3", "*<shift><mode>3_and"): Merge into single + pattern definition ... + ("*<shift><mode>3<addr_style_op><masked_op>"): New pattern. + * config/s390/subst.md: Add ashift and lshiftrt to SUBST + iterator. + +2016-03-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + * config/s390/predicates.md (const_int_6bitset_operand): New predicates. * config/s390/s390.md: Include subst.md. diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index b7c037a..771d1e9 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -8408,60 +8408,37 @@ (define_expand "<shift><mode>3" [(set (match_operand:DSI 0 "register_operand" "") (SHIFT:DSI (match_operand:DSI 1 "register_operand" "") - (match_operand:SI 2 "shift_count_or_setmem_operand" "")))] + (match_operand:SI 2 "nonmemory_operand" "")))] "" "") +; ESA 64 bit register pair shift with reg or imm shift count ; sldl, srdl -(define_insn "*<shift>di3_31" - [(set (match_operand:DI 0 "register_operand" "=d") - (SHIFT:DI (match_operand:DI 1 "register_operand" "0") - (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")))] +(define_insn "*<shift>di3_31<addr_style_op><masked_op>" + [(set (match_operand:DI 0 "register_operand" "=d") + (SHIFT:DI (match_operand:DI 1 "register_operand" "0") + (match_operand:SI 2 "nonmemory_operand" "an")))] "!TARGET_ZARCH" - "s<lr>dl\t%0,%Y2" + "s<lr>dl\t%0,<addr_style_op_ops>" [(set_attr "op_type" "RS") (set_attr "atype" "reg") (set_attr "z196prop" "z196_cracked")]) -; sll, srl, sllg, srlg, sllk, srlk -(define_insn "*<shift><mode>3" - [(set (match_operand:GPR 0 "register_operand" "=d,d") - (SHIFT:GPR (match_operand:GPR 1 "register_operand" "<d0>,d") - (match_operand:SI 2 "shift_count_or_setmem_operand" "Y,Y")))] - "" - "@ - s<lr>l<g>\t%0,<1>%Y2 - s<lr>l<gk>\t%0,%1,%Y2" - [(set_attr "op_type" "RS<E>,RSY") - (set_attr "atype" "reg,reg") - (set_attr "cpu_facility" "*,z196") - (set_attr "z10prop" "z10_super_E1,*")]) - -; sldl, srdl -(define_insn "*<shift>di3_31_and" - [(set (match_operand:DI 0 "register_operand" "=d") - (SHIFT:DI (match_operand:DI 1 "register_operand" "0") - (and:SI (match_operand:SI 2 "shift_count_or_setmem_operand" "Y") - (match_operand:SI 3 "const_int_operand" "n"))))] - "!TARGET_ZARCH && (INTVAL (operands[3]) & 63) == 63" - "s<lr>dl\t%0,%Y2" - [(set_attr "op_type" "RS") - (set_attr "atype" "reg")]) +; 64 bit register shift with reg or imm shift count ; sll, srl, sllg, srlg, sllk, srlk -(define_insn "*<shift><mode>3_and" - [(set (match_operand:GPR 0 "register_operand" "=d,d") - (SHIFT:GPR (match_operand:GPR 1 "register_operand" "<d0>,d") - (and:SI (match_operand:SI 2 "shift_count_or_setmem_operand" "Y,Y") - (match_operand:SI 3 "const_int_operand" "n,n"))))] - "(INTVAL (operands[3]) & 63) == 63" +(define_insn "*<shift><mode>3<addr_style_op><masked_op>" + [(set (match_operand:GPR 0 "register_operand" "=d, d") + (SHIFT:GPR (match_operand:GPR 1 "register_operand" "<d0>, d") + (match_operand:SI 2 "nonmemory_operand" "an,an")))] + "" "@ - s<lr>l<g>\t%0,<1>%Y2 - s<lr>l<gk>\t%0,%1,%Y2" + s<lr>l<g>\t%0,<1><addr_style_op_ops> + s<lr>l<gk>\t%0,%1,<addr_style_op_ops>" [(set_attr "op_type" "RS<E>,RSY") (set_attr "atype" "reg,reg") (set_attr "cpu_facility" "*,z196") - (set_attr "z10prop" "z10_super_E1,*")]) + (set_attr "z10prop" "z10_super_E1,*")]) ; ; ashr(di|si)3 instruction pattern(s). diff --git a/gcc/config/s390/subst.md b/gcc/config/s390/subst.md index c3761a9..907676a 100644 --- a/gcc/config/s390/subst.md +++ b/gcc/config/s390/subst.md @@ -19,7 +19,7 @@ ;; along with GCC; see the file COPYING3. If not see ;; <http://www.gnu.org/licenses/>. -(define_code_iterator SUBST [rotate]) +(define_code_iterator SUBST [rotate ashift lshiftrt]) ; This expands an register/immediate operand to a register+immediate ; operand to draw advantage of the address style operand format |