PR82809: register handling in ix86_vector_duplicate_value

When adding the call to gen_vec_duplicate, I failed to notice that
code further down modified the VEC_DUPLICATE in place.  That isn't
safe if gen_vec_duplicate returned a const_vector.

2017-11-02  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	PR target/82809
	* config/i386/i386.c (ix86_vector_duplicate_value): Use
	gen_vec_duplicate after forcing the scalar into a register.

gcc/testsuite/
	* gcc.dg/pr82809.c: New test.

From-SVN: r254366
This commit is contained in:
Richard Sandiford 2017-11-03 09:24:28 +00:00 committed by Richard Sandiford
parent f53bd85648
commit a34a16abe5
4 changed files with 33 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2017-11-03 Richard Sandiford <richard.sandiford@linaro.org>
PR target/82809
* config/i386/i386.c (ix86_vector_duplicate_value): Use
gen_vec_duplicate after forcing the scalar into a register.
2017-11-02 Segher Boessenkool <segher@kernel.crashing.org>
* combine (try_combine): Print the insns input to try_combine to the

View File

@ -41232,7 +41232,7 @@ ix86_vector_duplicate_value (machine_mode mode, rtx target, rtx val)
reg = force_reg (innermode, val);
if (GET_MODE (reg) != innermode)
reg = gen_lowpart (innermode, reg);
XEXP (dup, 0) = reg;
SET_SRC (PATTERN (insn)) = gen_vec_duplicate (mode, reg);
seq = get_insns ();
end_sequence ();
if (seq)

View File

@ -1,3 +1,7 @@
2017-11-03 Richard Sandiford <richard.sandiford@linaro.org>
* gcc.dg/pr82809.c: New test.
2017-11-02 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/81957

View File

@ -0,0 +1,22 @@
/* { dg-do compile } */
/* { dg-options "-Ofast -fno-tree-dominator-opts" } */
struct locale_time_t
{
const char *abday[7];
const unsigned int *wabday[7];
};
static const unsigned int empty_wstr[1] = { 0 };
void
time_read (struct locale_time_t *time)
{
int cnt;
for (cnt=0; cnt < 7; cnt++)
{
time->abday[cnt] = "";
time->wabday[cnt] = empty_wstr;
}
}