diff options
author | Jan Hubicka <jh@suse.cz> | 2020-10-08 14:13:54 +0200 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2020-10-08 14:13:54 +0200 |
commit | 2bdf324fb33d67f0850139040df0c0390258ab38 (patch) | |
tree | 2e10c8a794361e25ce262d1dd2355d3de093a17d /gcc/ipa-modref.c | |
parent | e4ee51ebcf00dc0e003f9208766cb0fbda819ac0 (diff) | |
download | gcc-2bdf324fb33d67f0850139040df0c0390258ab38.zip gcc-2bdf324fb33d67f0850139040df0c0390258ab38.tar.gz gcc-2bdf324fb33d67f0850139040df0c0390258ab38.tar.bz2 |
Fix handling of parm_offset in ipa-modref on 32bit targets.
* ipa-modref.c (get_access): Fix handling of offsets.
* tree-ssa-alias.c (modref_may_conflict): Watch for overflows.
Diffstat (limited to 'gcc/ipa-modref.c')
-rw-r--r-- | gcc/ipa-modref.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/ipa-modref.c b/gcc/ipa-modref.c index a5fa33a..5868aa9 100644 --- a/gcc/ipa-modref.c +++ b/gcc/ipa-modref.c @@ -318,8 +318,7 @@ get_access (ao_ref *ref) 0, -1, false}; if (TREE_CODE (base) == MEM_REF || TREE_CODE (base) == TARGET_MEM_REF) { - tree offset = TREE_CODE (base) == MEM_REF - ? TREE_OPERAND (base, 1) : NULL_TREE; + tree memref = base; base = TREE_OPERAND (base, 0); if (TREE_CODE (base) == SSA_NAME && SSA_NAME_IS_DEFAULT_DEF (base) @@ -336,8 +335,14 @@ get_access (ao_ref *ref) } a.parm_index++; } - a.parm_offset_known - = offset && wi::to_poly_offset (offset).to_shwi (&a.parm_offset); + if (TREE_CODE (memref) == MEM_REF) + { + a.parm_offset_known + = wi::to_poly_wide (TREE_OPERAND + (memref, 1)).to_shwi (&a.parm_offset); + } + else + a.parm_offset_known = false; } else a.parm_index = -1; |