re PR target/71389 (ICE on trunk gcc on ivybridge target (df_refs_verify))

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.

testsuite/ChangeLog:

	PR target/71389
	* g++.dg/pr71389.C: New test.

From-SVN: r237178
This commit is contained in:
Uros Bizjak 2016-06-07 17:23:42 +02:00
parent 658b4b19f2
commit 15e0956f3c
4 changed files with 49 additions and 14 deletions

View File

@ -1,3 +1,10 @@
2016-06-07 Uros Bizjak <ubizjak@gmail.com>
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 <ubizjak@gmail.com> 2016-06-05 Uros Bizjak <ubizjak@gmail.com>
Backport from mainline Backport from mainline

View File

@ -17707,7 +17707,7 @@ ix86_avx256_split_vector_move_misalign (rtx op0, rtx op1)
m = adjust_address (op0, mode, 0); m = adjust_address (op0, mode, 0);
emit_insn (extract (m, op1, const0_rtx)); emit_insn (extract (m, op1, const0_rtx));
m = adjust_address (op0, mode, 16); m = adjust_address (op0, mode, 16);
emit_insn (extract (m, op1, const1_rtx)); emit_insn (extract (m, copy_rtx (op1), const1_rtx));
} }
else else
emit_insn (store_unaligned (op0, op1)); 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); m = adjust_address (op0, V2SFmode, 0);
emit_insn (gen_sse_storelps (m, op1)); emit_insn (gen_sse_storelps (m, op1));
m = adjust_address (op0, V2SFmode, 8); m = adjust_address (op0, V2SFmode, 8);
emit_insn (gen_sse_storehps (m, op1)); emit_insn (gen_sse_storehps (m, copy_rtx (op1)));
} }
} }
} }

View File

@ -1,3 +1,8 @@
2016-06-07 Uros Bizjak <ubizjak@gmail.com>
PR target/71389
* g++.dg/pr71389.C: New test.
2016-06-03 Release Manager 2016-06-03 Release Manager
* GCC 5.4.0 released. * GCC 5.4.0 released.

View File

@ -0,0 +1,23 @@
// { dg-do compile { target i?86-*-* x86_64-*-* } }
// { dg-options "-std=c++11 -O3 -march=ivybridge" }
#include <functional>
extern int le_s6, le_s9, le_s11;
long foo_v14[16][16];
void fn1() {
std::array<std::array<int, 16>, 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);
}