+2016-06-06 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 John David Anglin <danglin@gcc.gnu.org>
* expr.c (move_by_pieces_d::generate): Mark mode parameter with
caller-saved registers.
(type_natural_mode): Don't warn ABI change for MMX in interrupt
handler.
- (ix86_function_arg_advance): Skip for callee in interrupt
- handler.
- (ix86_function_arg): Return special arguments in interrupt
- handler.
+ (ix86_function_arg_advance): Skip for callee in interrupt handler.
+ (ix86_function_arg): Return special arguments in interrupt handler.
(ix86_promote_function_mode): Promote pointer to word_mode only
for normal functions.
(ix86_can_use_return_insn_p): Don't use `ret' instruction in
(ix86_epilogue_uses): New function.
(ix86_hard_regno_scratch_ok): Likewise.
(ix86_save_reg): Preserve all registers in interrupt handler
- after reload. Preserve all registers, except for function
- return registers, if there are no caller-saved registers after
- reload.
+ after reload. Preserve all registers, except for function return
+ registers, if there are no caller-saved registers after reload.
(find_drap_reg): Always use callee-saved register if there are
no caller-saved registers.
(ix86_minimum_incoming_stack_boundary): Return MIN_STACK_BOUNDARY
2016-06-03 Alan Hayward <alan.hayward@arm.com>
- * tree-vectorizer.h (vect_get_vec_def_for_operand_1): New
- * tree-vect-stmts.c (vect_get_vec_def_for_operand_1): New
+ * tree-vectorizer.h (vect_get_vec_def_for_operand_1): New.
+ * tree-vect-stmts.c (vect_get_vec_def_for_operand_1): New.
(vect_get_vec_def_for_operand): Split out code.
2016-06-03 Segher Boessenkool <segher@kernel.crashing.org>
(P9V_BUILTIN_VSRV): Macro expansion to define argument types for
new builtin.
* doc/extend.texi: Document the new vec_vslv and vec_srv built-in
- functions.
+ functions.
2016-06-01 Uros Bizjak <ubizjak@gmail.com>
Jocelyn Mayer <l_indien@magic.fr>
m = adjust_address (op0, mode, 0);
emit_insn (extract (m, op1, const0_rtx));
m = adjust_address (op0, mode, 16);
- emit_insn (extract (m, op1, const1_rtx));
+ emit_insn (extract (m, copy_rtx (op1), const1_rtx));
}
else
gcc_unreachable ();
m = adjust_address (op0, V2SFmode, 0);
emit_insn (gen_sse_storelps (m, op1));
m = adjust_address (op0, V2SFmode, 8);
- emit_insn (gen_sse_storehps (m, op1));
+ emit_insn (gen_sse_storehps (m, copy_rtx (op1)));
}
}
else
--- /dev/null
+// { 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);
+}