+2014-09-24 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (insn_is_swappable_p): Don't provide
+ special handling for stores whose SET_SRC is an UNSPEC (such as
+ UNSPEC_STVE).
+
2014-09-24 Jiong Wang <jiong.wang@arm.com>
* shrink-wrap.c (move_insn_for_shrink_wrap): Add further check when
return 0;
/* Loads and stores seen here are not permuting, but we can still
- fix them up by converting them to permuting ones. Exception:
- UNSPEC_LVX and UNSPEC_STVX, which have a PARALLEL body instead
- of a SET. */
+ fix them up by converting them to permuting ones. Exceptions:
+ UNSPEC_LVE, UNSPEC_LVX, and UNSPEC_STVX, which have a PARALLEL
+ body instead of a SET; and UNSPEC_STVE, which has an UNSPEC
+ for the SET source. */
rtx body = PATTERN (insn);
int i = INSN_UID (insn);
if (insn_entry[i].is_store)
{
- if (GET_CODE (body) == SET)
+ if (GET_CODE (body) == SET && GET_CODE (SET_SRC (body)) != UNSPEC)
{
*special = SH_NOSWAP_ST;
return 1;
+2014-09-24 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ * gcc.target/powerpc/swaps-p8-17.c: New test.
+
2014-09-24 Jiong Wang <jiong.wang@arm.com>
* gcc.target/aarch64/shrink_wrap_symbol_ref_1.c: New testcase.
--- /dev/null
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-options "-mcpu=power8 -O1" } */
+/* { dg-final { scan-assembler "lxvd2x" } } */
+/* { dg-final { scan-assembler "xxpermdi" } } */
+
+/* Verify that we don't try to do permute removal in the presence of
+ vec_ste. This used to ICE. */
+#include <altivec.h>
+
+void f (void *p)
+{
+ vector unsigned int u32 = vec_vsx_ld (1, (const unsigned int *)p);
+ vec_ste (u32, 1, (unsigned int *)p);
+}