+2017-12-21 Richard Sandiford <richard.sandiford@linaro.org>
+ Alan Hayward <alan.hayward@arm.com>
+ David Sherwood <david.sherwood@arm.com>
+
+ * tree-vect-data-refs.c (vect_compute_data_ref_alignment):
+ Treat drb->init as a poly_int. Fail if its misalignment wrt
+ vector_alignment isn't known.
+
2017-12-21 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
DR_VECT_AUX (dr)->base_misaligned = true;
base_misalignment = 0;
}
- unsigned int misalignment = (base_misalignment
- + TREE_INT_CST_LOW (drb->init));
+ poly_int64 misalignment
+ = base_misalignment + wi::to_poly_offset (drb->init).force_shwi ();
/* If this is a backward running DR then first access in the larger
vectype actually is N-1 elements before the address in the DR.
misalignment += ((TYPE_VECTOR_SUBPARTS (vectype) - 1)
* TREE_INT_CST_LOW (drb->step));
- SET_DR_MISALIGNMENT (dr, misalignment & (vector_alignment - 1));
+ unsigned int const_misalignment;
+ if (!known_misalignment (misalignment, vector_alignment,
+ &const_misalignment))
+ {
+ if (dump_enabled_p ())
+ {
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ "Non-constant misalignment for access: ");
+ dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM, ref);
+ dump_printf (MSG_MISSED_OPTIMIZATION, "\n");
+ }
+ return true;
+ }
+
+ SET_DR_MISALIGNMENT (dr, const_misalignment);
if (dump_enabled_p ())
{