Commit d876f5cd by Dominik Vogt Committed by Andreas Krebbel

S/390: Fix matching setmem_long_and*.

The attached patch reactivates the setmem_long_and* patterns on S/390
that have not been generated for a while.

gcc/ChangeLog:

2017-01-27  Dominik Vogt  <vogt@linux.vnet.ibm.com>

	* config/s390/s390.md ("*setmem_long_and")
	("*setmem_long_and_31z"): Use zero_extend instead of and.

gcc/testsuite/ChangeLog:

2017-01-27  Dominik Vogt  <vogt@linux.vnet.ibm.com>

	* gcc.target/s390/md/setmem_long-1.c: Remove xfail, skip with -O0.

From-SVN: r244963
parent bb6a6ee9
2017-01-27 Dominik Vogt <vogt@linux.vnet.ibm.com>
* config/s390/s390.md ("*setmem_long_and")
("*setmem_long_and_31z"): Use zero_extend instead of and.
2017-01-26 Martin Sebor <msebor@redhat.com> 2017-01-26 Martin Sebor <msebor@redhat.com>
* gimple-ssa-sprintf.c (format_floating): Simplify the computation * gimple-ssa-sprintf.c (format_floating): Simplify the computation
......
...@@ -3402,15 +3402,12 @@ ...@@ -3402,15 +3402,12 @@
(define_insn "*setmem_long_and" (define_insn "*setmem_long_and"
[(clobber (match_operand:<DBL> 0 "register_operand" "=d")) [(clobber (match_operand:<DBL> 0 "register_operand" "=d"))
(set (mem:BLK (subreg:P (match_operand:<DBL> 3 "register_operand" "0") 0)) (set (mem:BLK (subreg:P (match_operand:<DBL> 3 "register_operand" "0") 0))
(unspec:BLK [(and:P (unspec:BLK [(zero_extend:P (match_operand:QI 2 "setmem_operand" "Y"))
(match_operand:P 2 "setmem_operand" "Y")
(match_operand:P 4 "const_int_operand" "n"))
(subreg:P (match_dup 3) <modesize>)] (subreg:P (match_dup 3) <modesize>)]
UNSPEC_REPLICATE_BYTE)) UNSPEC_REPLICATE_BYTE))
(use (match_operand:<DBL> 1 "register_operand" "d")) (use (match_operand:<DBL> 1 "register_operand" "d"))
(clobber (reg:CC CC_REGNUM))] (clobber (reg:CC CC_REGNUM))]
"(TARGET_64BIT || !TARGET_ZARCH) && "(TARGET_64BIT || !TARGET_ZARCH)"
(INTVAL (operands[4]) & 255) == 255"
"mvcle\t%0,%1,%Y2\;jo\t.-4" "mvcle\t%0,%1,%Y2\;jo\t.-4"
[(set_attr "length" "8") [(set_attr "length" "8")
(set_attr "type" "vs")]) (set_attr "type" "vs")])
...@@ -3433,14 +3430,11 @@ ...@@ -3433,14 +3430,11 @@
(define_insn "*setmem_long_and_31z" (define_insn "*setmem_long_and_31z"
[(clobber (match_operand:TI 0 "register_operand" "=d")) [(clobber (match_operand:TI 0 "register_operand" "=d"))
(set (mem:BLK (subreg:SI (match_operand:TI 3 "register_operand" "0") 4)) (set (mem:BLK (subreg:SI (match_operand:TI 3 "register_operand" "0") 4))
(unspec:BLK [(and:SI (unspec:BLK [(zero_extend:SI (match_operand:QI 2 "setmem_operand" "Y"))
(match_operand:SI 2 "setmem_operand" "Y")
(match_operand:SI 4 "const_int_operand" "n"))
(subreg:SI (match_dup 3) 12)] UNSPEC_REPLICATE_BYTE)) (subreg:SI (match_dup 3) 12)] UNSPEC_REPLICATE_BYTE))
(use (match_operand:TI 1 "register_operand" "d")) (use (match_operand:TI 1 "register_operand" "d"))
(clobber (reg:CC CC_REGNUM))] (clobber (reg:CC CC_REGNUM))]
"(!TARGET_64BIT && TARGET_ZARCH) && "(!TARGET_64BIT && TARGET_ZARCH)"
(INTVAL (operands[4]) & 255) == 255"
"mvcle\t%0,%1,%Y2\;jo\t.-4" "mvcle\t%0,%1,%Y2\;jo\t.-4"
[(set_attr "length" "8") [(set_attr "length" "8")
(set_attr "type" "vs")]) (set_attr "type" "vs")])
......
2017-01-27 Dominik Vogt <vogt@linux.vnet.ibm.com>
* gcc.target/s390/md/setmem_long-1.c: Remove xfail, skip with -O0.
2017-01-27 Adam Butcher <adam@jessamine.co.uk> 2017-01-27 Adam Butcher <adam@jessamine.co.uk>
PR c++/64382 PR c++/64382
......
...@@ -4,6 +4,12 @@ ...@@ -4,6 +4,12 @@
/* { dg-options "-mmvcle -dP -save-temps" } */ /* { dg-options "-mmvcle -dP -save-temps" } */
/* { dg-do run { target { s390_useable_hw } } } */ /* { dg-do run { target { s390_useable_hw } } } */
/* Skip test if -O0 is present on the command line or -O... is missing:
{ dg-skip-if "" { *-*-* } { "-march=z9*" "-O0" } { "" } }
{ dg-skip-if "" { *-*-* } { "*" } { "-O*" } }
*/
__attribute__ ((noinline)) __attribute__ ((noinline))
void test(char *p, char c, int len) void test(char *p, char c, int len)
{ {
...@@ -17,8 +23,8 @@ void test2(char *p, int c, int len) ...@@ -17,8 +23,8 @@ void test2(char *p, int c, int len)
} }
/* Check that the right patterns are used. */ /* Check that the right patterns are used. */
/* { dg-final { scan-assembler-times {c"?:10 .*{[*]setmem_long_?3?1?z?}} 1 } } */ /* { dg-final { scan-assembler-times {c"?:16 .*{[*]setmem_long_?3?1?z?}} 1 } } */
/* { dg-final { scan-assembler-times {c"?:16 .*{[*]setmem_long_and_?3?1?z?}} 1 { xfail *-*-* } } } */ /* { dg-final { scan-assembler-times {c"?:22 .*{[*]setmem_long_and_?3?1?z?}} 1 } } */
#define LEN 500 #define LEN 500
char buf[LEN + 2]; char buf[LEN + 2];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment