+2019-12-04 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-sccvn.c (vn_reference_lookup_3): Properly guard
+ empty CTOR and memset partial-def registering. Take advantage
+ of fancy offset analysis in memset handling.
+
2019-12-04 Richard Sandiford <richard.sandiford@arm.com>
* fold-const.c (native_encode_vector_part): Handle
return (void *)-1;
tree len = gimple_call_arg (def_stmt, 2);
HOST_WIDE_INT leni, offset2i, offseti;
+ /* Sometimes the above trickery is smarter than alias analysis. Take
+ advantage of that. */
+ if (!ranges_maybe_overlap_p (offset, maxsize, offset2,
+ (wi::to_poly_offset (len)
+ << LOG2_BITS_PER_UNIT)))
+ return NULL;
if (data->partial_defs.is_empty ()
&& known_subrange_p (offset, maxsize, offset2,
wi::to_poly_offset (len) << LOG2_BITS_PER_UNIT))
&& tree_to_poly_int64 (len).is_constant (&leni)
&& offset.is_constant (&offseti)
&& offset2.is_constant (&offset2i)
- && maxsize.is_constant (&maxsizei))
+ && maxsize.is_constant (&maxsizei)
+ && ranges_known_overlap_p (offseti, maxsizei, offset2i, leni))
{
pd_data pd;
pd.rhs = build_constructor (NULL_TREE, NULL);
&& offset2.is_constant (&offset2i)
&& offset2i % BITS_PER_UNIT == 0
&& size2.is_constant (&size2i)
- && size2i % BITS_PER_UNIT == 0)
+ && size2i % BITS_PER_UNIT == 0
+ && ranges_known_overlap_p (offseti, maxsizei,
+ offset2i, size2i))
{
/* Let clobbers be consumed by the partial-def tracker
which can choose to ignore them if they are shadowed