https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90806

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Version|6.4.1                       |11.0

--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> ---
Since -9223372036854775808 is 0x8000000000000000 and ar3[0] == 1 it suggests
that the offset is somewhere truncated to 32bits ... but I can't reproduce
with a x86_64 to aarch64 cross and your reduced testcase for example.

It should probably go "wrong" here: (tree-ssa-sccvn.c:2828 and later):

  /* 3) Assignment from a constant.  We can use folds native encode/interpret
     routines to extract the assigned bits.  */
  else if (known_eq (ref->size, maxsize)
           && is_gimple_reg_type (vr->type)

which sees the def

  ar3 = "\x01\x02\x03";

for the ref

  _2 = MEM[(char *)&ar3 + -9223372036854775808B];

but adjust_offsets_for_equal_base_address fails for me because the LHS base
is not a MEM_REF (and get_ref_base_and_extend refuses to decompose the
MEM[(char *)&ar3 + -9223372036854775808B] base because the offset in bits
doesn't fit a HWI).

Reply via email to