diff mbox series

PR82809: register handling in ix86_vector_duplicate_value

Message ID 87bmkkmi4d.fsf@linaro.org
State New
Headers show
Series PR82809: register handling in ix86_vector_duplicate_value | expand

Commit Message

Richard Sandiford Nov. 2, 2017, 10:27 p.m. UTC
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.

Tested on x86_64-linux-gnu.  OK to install?

Thanks,
Richard


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.
diff mbox series

Patch

Index: gcc/config/i386/i386.c
===================================================================
--- gcc/config/i386/i386.c	2017-11-01 09:20:07.353478095 +0000
+++ gcc/config/i386/i386.c	2017-11-02 22:22:41.073913390 +0000
@@ -41232,7 +41232,7 @@  ix86_vector_duplicate_value (machine_mod
       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)
Index: gcc/testsuite/gcc.dg/pr82809.c
===================================================================
--- /dev/null	2017-11-02 18:54:18.211305311 +0000
+++ gcc/testsuite/gcc.dg/pr82809.c	2017-11-02 22:22:41.076914027 +0000
@@ -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;
+    }
+}