aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorJames E Wilson <wilson@specifixinc.com>2003-12-11 19:04:07 +0000
committerJim Wilson <wilson@gcc.gnu.org>2003-12-11 11:04:07 -0800
commit1ec7a83137275efef6050bb652ac57af2ce05f8e (patch)
tree10bc58864ba022fa4eec97364c57606ab6d548a4 /gcc/function.c
parenta9f4e3d2443f96ef52e9dab4bf99206c9570bb3a (diff)
downloadgcc-1ec7a83137275efef6050bb652ac57af2ce05f8e.zip
gcc-1ec7a83137275efef6050bb652ac57af2ce05f8e.tar.gz
gcc-1ec7a83137275efef6050bb652ac57af2ce05f8e.tar.bz2
Fix for problem with unnecessary volatile mems.
PR target/13132 * function.c (gen_mem_addressof): When no decl, explicitly clear flag bits. From-SVN: r74543
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 2f6fb9b..7ae19d5 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -2868,7 +2868,17 @@ gen_mem_addressof (rtx reg, tree decl, int rescan)
fixup_var_refs (reg, GET_MODE (reg), TREE_UNSIGNED (type), reg, 0);
}
else if (rescan)
- fixup_var_refs (reg, GET_MODE (reg), 0, reg, 0);
+ {
+ /* This can only happen during reload. Clear the same flag bits as
+ reload. */
+ MEM_VOLATILE_P (reg) = 0;
+ RTX_UNCHANGING_P (reg) = 0;
+ MEM_IN_STRUCT_P (reg) = 0;
+ MEM_SCALAR_P (reg) = 0;
+ MEM_ATTRS (reg) = 0;
+
+ fixup_var_refs (reg, GET_MODE (reg), 0, reg, 0);
+ }
return reg;
}