})
(define_insn_and_split "*movoo"
- [(set (match_operand:OO 0 "nonimmediate_operand" "=wa,m,wa")
- (match_operand:OO 1 "input_operand" "m,wa,wa"))]
+ [(set (match_operand:OO 0 "nonimmediate_operand" "=wa,ZwO,wa")
+ (match_operand:OO 1 "input_operand" "ZwO,wa,wa"))]
"TARGET_MMA
&& (gpc_reg_operand (operands[0], OOmode)
|| gpc_reg_operand (operands[1], OOmode))"
})
(define_insn_and_split "*movxo"
- [(set (match_operand:XO 0 "nonimmediate_operand" "=d,m,d")
- (match_operand:XO 1 "input_operand" "m,d,d"))]
+ [(set (match_operand:XO 0 "nonimmediate_operand" "=d,ZwO,d")
+ (match_operand:XO 1 "input_operand" "ZwO,d,d"))]
"TARGET_MMA
&& (gpc_reg_operand (operands[0], XOmode)
|| gpc_reg_operand (operands[1], XOmode))"
(define_predicate "vsx_quad_dform_memory_operand"
(match_code "mem")
{
- if (!TARGET_P9_VECTOR || !MEM_P (op) || GET_MODE_SIZE (mode) != 16)
+ if (!TARGET_P9_VECTOR)
return false;
return quad_address_p (XEXP (op, 0), mode, false);
--- /dev/null
+/* PR target/110411 */
+/* { dg-options "-O2 -mdejagnu-cpu=power10 -mblock-ops-vector-pair" } */
+
+/* Verify we do not ICE on the following. */
+
+#include <string.h>
+
+struct s {
+ long a;
+ long b;
+ long c;
+ long d: 1;
+};
+unsigned long ptr;
+
+void
+bug (struct s *dst)
+{
+ struct s *src = (struct s *)(ptr & ~0xFUL);
+ memcpy (dst, src, sizeof(struct s));
+}
--- /dev/null
+/* PR target/110411 */
+/* { dg-require-effective-target power10_ok } */
+/* { dg-options "-O2 -mdejagnu-cpu=power10" } */
+
+/* Verify we do not ICE on the following. */
+
+void
+bug (__vector_quad *dst)
+{
+ dst = (__vector_quad *)((unsigned long)dst & ~0xFUL);
+ __builtin_mma_xxsetaccz (dst);
+}