Commit 8c6b5eb8 by Jakub Jelinek Committed by Jakub Jelinek

re PR target/84524 (-O3 causes behavior change)

	PR target/84524
	* config/i386/sse.md (*<code><mode>3): Replace <mask_prefix3> with
	orig,vex.
	(*<plusminus_insn><mode>3): Likewise.  Remove <mask_operand3> uses.

	* gcc.c-torture/execute/pr84524.c: New test.
	* gcc.target/i386/avx512bw-pr84524.c: New test.

From-SVN: r258252
parent 75a741e8
2018-03-05 Jakub Jelinek <jakub@redhat.com>
PR target/84524
* config/i386/sse.md (*<code><mode>3): Replace <mask_prefix3> with
orig,vex.
(*<plusminus_insn><mode>3): Likewise. Remove <mask_operand3> uses.
2018-03-05 Peter Bergner <bergner@vnet.ibm.com> 2018-03-05 Peter Bergner <bergner@vnet.ibm.com>
PR target/84264 PR target/84264
......
...@@ -10090,11 +10090,11 @@ ...@@ -10090,11 +10090,11 @@
"TARGET_SSE2 && ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)" "TARGET_SSE2 && ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
"@ "@
p<plusminus_mnemonic><ssemodesuffix>\t{%2, %0|%0, %2} p<plusminus_mnemonic><ssemodesuffix>\t{%2, %0|%0, %2}
vp<plusminus_mnemonic><ssemodesuffix>\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}" vp<plusminus_mnemonic><ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx") [(set_attr "isa" "noavx,avx")
(set_attr "type" "sseiadd") (set_attr "type" "sseiadd")
(set_attr "prefix_data16" "1,*") (set_attr "prefix_data16" "1,*")
(set_attr "prefix" "<mask_prefix3>") (set_attr "prefix" "orig,vex")
(set_attr "mode" "<sseinsnmode>")]) (set_attr "mode" "<sseinsnmode>")])
(define_insn "*<plusminus_insn><mode>3_mask" (define_insn "*<plusminus_insn><mode>3_mask"
...@@ -11899,7 +11899,7 @@ ...@@ -11899,7 +11899,7 @@
(eq_attr "mode" "TI")) (eq_attr "mode" "TI"))
(const_string "1") (const_string "1")
(const_string "*"))) (const_string "*")))
(set_attr "prefix" "<mask_prefix3>,evex") (set_attr "prefix" "orig,vex,evex")
(set (attr "mode") (set (attr "mode")
(cond [(and (match_test "<MODE_SIZE> == 16") (cond [(and (match_test "<MODE_SIZE> == 16")
(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")) (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
......
2018-03-05 Jakub Jelinek <jakub@redhat.com>
PR target/84524
* gcc.c-torture/execute/pr84524.c: New test.
* gcc.target/i386/avx512bw-pr84524.c: New test.
2018-03-05 Peter Bergner <bergner@vnet.ibm.com> 2018-03-05 Peter Bergner <bergner@vnet.ibm.com>
PR target/84264 PR target/84264
......
/* PR target/84524 */
__attribute__((noipa)) void
foo (unsigned short *x)
{
unsigned short i, v;
unsigned char j;
for (i = 0; i < 256; i++)
{
v = i << 8;
for (j = 0; j < 8; j++)
if (v & 0x8000)
v = (v << 1) ^ 0x1021;
else
v = v << 1;
x[i] = v;
}
}
int
main ()
{
unsigned short a[256];
foo (a);
for (int i = 0; i < 256; i++)
{
unsigned short v = i << 8;
for (int j = 0; j < 8; j++)
{
asm volatile ("" : "+r" (v));
if (v & 0x8000)
v = (v << 1) ^ 0x1021;
else
v = v << 1;
}
if (a[i] != v)
__builtin_abort ();
}
return 0;
}
/* PR target/84524 */
/* { dg-do run { target avx512bw } } */
/* { dg-options "-O3 -mavx512bw" } */
#include "avx512bw-check.h"
#define main() do_main()
#include "../../gcc.c-torture/execute/pr84524.c"
static void
avx512bw_test (void)
{
do_main ();
}
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