diff --git a/gcc/ChangeLog b/gcc/ChangeLog index beec50132a6b..1a85dbe9d154 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-06-07 Uros Bizjak + + PR target/71389 + * config/i386/i386.c (ix86_avx256_split_vector_move_misalign): + Copy op1 RTX to avoid invalid sharing. + (ix86_expand_vector_move_misalign): Ditto. + 2016-06-05 Uros Bizjak Backport from mainline @@ -15,7 +22,7 @@ 2016-06-03 Andreas Tobler Backport from mainline - 2016-05-30 Andreas Tobler + 2016-05-30 Andreas Tobler * config.gcc: Move hard float support for arm*hf*-*-freebsd* into armv6*-*-freebsd* for FreeBSD 11. Eliminate the arm*hf*-*-freebsd* @@ -61,7 +68,7 @@ 2016-03-24 Richard Henderson - PR middle-end/69845 + PR middle-end/69845 * fold-const.c (extract_muldiv_1): Correct test for multiplication overflow. @@ -2219,7 +2226,7 @@ Backport from mainline 2015-11-26 Kyrylo Tkachov - Bernd Schmidt + Bernd Schmidt PR rtl-optimization/67226 * calls.c (store_one_arg): Take into account @@ -2279,7 +2286,7 @@ Backport from mainline 2015-11-24 Bernd Schmidt - Kyrylo Tkachov + Kyrylo Tkachov PR rtl-optimization/68194 PR rtl-optimization/68328 @@ -2552,7 +2559,7 @@ Backport from mainline 2015-11-16 Oleg Endo - Kaz Kojima + Kaz Kojima PR target/68277 * config/sh/sh.md (addsi3_scr): Handle reg overlap of operands[0] and @@ -2626,7 +2633,7 @@ Backport from mainline 2015-10-23 Steve Ellcey - Andrew Pinski + Andrew Pinski PR rtl-optimization/67736 * combine.c (simplify_comparison): Use gen_lowpart_or_truncate instead diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index f96dd6623461..993d8826ee4a 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -17707,7 +17707,7 @@ ix86_avx256_split_vector_move_misalign (rtx op0, rtx op1) m = adjust_address (op0, mode, 0); emit_insn (extract (m, op1, const0_rtx)); m = adjust_address (op0, mode, 16); - emit_insn (extract (m, op1, const1_rtx)); + emit_insn (extract (m, copy_rtx (op1), const1_rtx)); } else emit_insn (store_unaligned (op0, op1)); @@ -18015,7 +18015,7 @@ ix86_expand_vector_move_misalign (machine_mode mode, rtx operands[]) m = adjust_address (op0, V2SFmode, 0); emit_insn (gen_sse_storelps (m, op1)); m = adjust_address (op0, V2SFmode, 8); - emit_insn (gen_sse_storehps (m, op1)); + emit_insn (gen_sse_storehps (m, copy_rtx (op1))); } } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 64e7f7590dc4..d628477e2d99 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-06-07 Uros Bizjak + + PR target/71389 + * g++.dg/pr71389.C: New test. + 2016-06-03 Release Manager * GCC 5.4.0 released. @@ -31,7 +36,7 @@ * gcc.dg/pr69634.c: New. 2016-03-23 Patrick Palka - + PR c++/70347 * g++.dg/cpp1y/nsdmi-union1.C: New test. @@ -42,7 +47,7 @@ 2016-03-24 Richard Henderson - PR middle-end/69845 + PR middle-end/69845 * gcc.dg/tree-ssa/pr69845-1.c: New test. * gcc.dg/tree-ssa/pr69845-2.c: New test. @@ -105,8 +110,8 @@ PR middle-end/67278 * gcc.dg/simd-7.c: Add -w -Wno-psabi to dg-options. - PR target/67278 - * gcc.dg/simd-8.c: Add -w -Wno-psabi to dg-options. + PR target/67278 + * gcc.dg/simd-8.c: Add -w -Wno-psabi to dg-options. 2016-05-20 Richard Biener @@ -130,13 +135,13 @@ * gcc.dg/torture/pr70941.c: New testcase. 2016-05-06 Jakub Jelinek - + PR middle-end/70941 * gcc.dg/torture/pr70941.c (abort): Remove prototype. (a, b, c, d): Change type from char to signed char. (main): Compare against (signed char) -1634678893 instead of hardcoded -109. Use __builtin_abort instead of abort. - + 2016-05-06 Richard Biener PR middle-end/70931 diff --git a/gcc/testsuite/g++.dg/pr71389.C b/gcc/testsuite/g++.dg/pr71389.C new file mode 100644 index 000000000000..023abe1755cb --- /dev/null +++ b/gcc/testsuite/g++.dg/pr71389.C @@ -0,0 +1,23 @@ +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-options "-std=c++11 -O3 -march=ivybridge" } + +#include + +extern int le_s6, le_s9, le_s11; +long foo_v14[16][16]; + +void fn1() { + std::array, 16> v13; + for (; le_s6;) + for (int k1 = 2; k1 < 4; k1 = k1 + 1) { + for (int n1 = 0; n1 < le_s9; n1 = 8) { + *foo_v14[6] = 20923310; + for (int i2 = n1; i2 < n1 + 8; i2 = i2 + 1) + v13.at(5).at(i2 + 6 - n1) = 306146921; + } + + for (int l2 = 0; l2 < le_s11; l2 = l2 + 1) + *(l2 + v13.at(5).begin()) = 306146921; + } + v13.at(le_s6 - 4); +}