2016-11-30 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/78602
* config/rs6000/rs6000.c (rs6000_expand_vector_extract): If the
element is not a constant or in a register, force it to a
register.
PR target/78560
* config/rs6000/rs6000.c (rs6000_expand_vector_set): Force value
that will be set to a vector element to be in a register.
* config/rs6000/vsx.md (vsx_set_<mode>_p9): Fix thinko that used
the wrong multiplier to convert the element number to a byte
offset.
From-SVN: r243044
+2016-11-30 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/78602
+ * config/rs6000/rs6000.c (rs6000_expand_vector_extract): If the
+ element is not a constant or in a register, force it to a
+ register.
+
+ PR target/78560
+ * config/rs6000/rs6000.c (rs6000_expand_vector_set): Force value
+ that will be set to a vector element to be in a register.
+ * config/rs6000/vsx.md (vsx_set_<mode>_p9): Fix thinko that used
+ the wrong multiplier to convert the element number to a byte
+ offset.
+
2016-11-30 Vladimir Makarov <vmakarov@redhat.com>
PR tree-optimization/77856
int width = GET_MODE_SIZE (inner_mode);
int i;
+ val = force_reg (GET_MODE (val), val);
+
if (VECTOR_MEM_VSX_P (mode))
{
rtx insn = NULL_RTX;
convert_move (tmp, elt, 0);
elt = tmp;
}
+ else if (!REG_P (elt))
+ elt = force_reg (DImode, elt);
switch (mode)
{
if (!VECTOR_ELT_ORDER_BIG)
ele = nunits - 1 - ele;
- operands[3] = GEN_INT (nunits * ele);
+ operands[3] = GEN_INT (GET_MODE_SIZE (<VS_scalar>mode) * ele);
if (<MODE>mode == V4SImode)
return "xxinsertw %x0,%x2,%3";
else