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).