diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3c90ff8a9d0..27b8b1dda5b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-02-12 H.J. Lu + + PR target/89229 + * config/i386/i386.md (*movoi_internal_avx): Revert revision + 268678 and revision 268657. + (*movti_internal): Likewise. + 2019-02-12 Ilya Leoshkevich PR target/89233 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 3d9141ae450..9948f77fca5 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1933,13 +1933,12 @@ (set_attr "type" "sselog1,sselog1,ssemov,ssemov") (set_attr "prefix" "vex") (set (attr "mode") - (cond [(and (not (match_test "TARGET_AVX512VL")) - (ior (match_operand 0 "ext_sse_reg_operand") - (match_operand 1 "ext_sse_reg_operand"))) + (cond [(ior (match_operand 0 "ext_sse_reg_operand") + (match_operand 1 "ext_sse_reg_operand")) (const_string "XI") (and (eq_attr "alternative" "1") (match_test "TARGET_AVX512VL")) - (const_string "OI") + (const_string "XI") (ior (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL") (and (eq_attr "alternative" "3") (match_test "TARGET_SSE_TYPELESS_STORES"))) @@ -2013,13 +2012,12 @@ (set (attr "mode") (cond [(eq_attr "alternative" "0,1") (const_string "DI") - (and (not (match_test "TARGET_AVX512VL")) - (ior (match_operand 0 "ext_sse_reg_operand") - (match_operand 1 "ext_sse_reg_operand"))) + (ior (match_operand 0 "ext_sse_reg_operand") + (match_operand 1 "ext_sse_reg_operand")) (const_string "XI") (and (eq_attr "alternative" "3") (match_test "TARGET_AVX512VL")) - (const_string "TI") + (const_string "XI") (ior (not (match_test "TARGET_SSE2")) (ior (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL") (and (eq_attr "alternative" "5") diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7cb2c414489..d8549f0fb3e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-02-12 H.J. Lu + + PR target/89229 + * gcc.target/i386/pr89229-1.c: New test. + 2019-02-12 Ilya Leoshkevich PR target/89233 diff --git a/gcc/testsuite/gcc.target/i386/pr89229-1.c b/gcc/testsuite/gcc.target/i386/pr89229-1.c new file mode 100644 index 00000000000..cce95350bf2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr89229-1.c @@ -0,0 +1,47 @@ +/* { dg-do assemble { target { avx512bw && avx512vl } } } */ +/* { dg-options "-O1 -mavx512bw -mavx512vl -mtune=skylake-avx512" } */ + +extern void abort (void); +extern void exit (int); +struct s { unsigned char a[256]; }; +union u { struct { struct s b; int c; } d; struct { int c; struct s b; } e; }; +static union u v; +static union u v0; +static struct s *p = &v.d.b; +static struct s *q = &v.e.b; + +static inline struct s rp (void) { return *p; } +static inline struct s rq (void) { return *q; } +static void pq (void) { *p = rq(); } +static void qp (void) { *q = rp(); } + +static void +init (struct s *sp) +{ + int i; + for (i = 0; i < 256; i++) + sp->a[i] = i; +} + +static void +check (struct s *sp) +{ + int i; + for (i = 0; i < 256; i++) + if (sp->a[i] != i) + abort (); +} + +void +main_test (void) +{ + v = v0; + init (p); + qp (); + check (q); + v = v0; + init (q); + pq (); + check (p); + exit (0); +}