aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-modref.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2020-10-08 14:13:54 +0200
committerJan Hubicka <jh@suse.cz>2020-10-08 14:13:54 +0200
commit2bdf324fb33d67f0850139040df0c0390258ab38 (patch)
tree2e10c8a794361e25ce262d1dd2355d3de093a17d /gcc/ipa-modref.c
parente4ee51ebcf00dc0e003f9208766cb0fbda819ac0 (diff)
downloadgcc-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.c13
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;