aboutsummaryrefslogtreecommitdiff
path: root/gcc/emit-rtl.c
diff options
context:
space:
mode:
authorJ"orn Rennecke <joern.rennecke@st.com>2005-09-05 16:45:20 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2005-09-05 17:45:20 +0100
commitbf877a7649b686fd19a4384c137357a0ca697931 (patch)
tree159440e0f5720f60d1900ef723f6d1455a729b10 /gcc/emit-rtl.c
parent8b0a8500fdc6b09d5b3d78d394d4d189571f9cb5 (diff)
downloadgcc-bf877a7649b686fd19a4384c137357a0ca697931.zip
gcc-bf877a7649b686fd19a4384c137357a0ca697931.tar.gz
gcc-bf877a7649b686fd19a4384c137357a0ca697931.tar.bz2
rtl.h (gen_frame_mem, [...]): Declare.
* rtl.h (gen_frame_mem, gen_tmp_stack_mem): Declare. * emit-rtl.c (gen_frame_mem, gen_tmp_stack_mem): New functions. * builtins.c (expand_builtin_return_addr): Use gen_frame_mem. From-SVN: r103917
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r--gcc/emit-rtl.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index d9e253e..53bff45 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -607,6 +607,31 @@ gen_const_mem (enum machine_mode mode, rtx addr)
return mem;
}
+/* Generate a MEM referring to fixed portions of the frame, e.g., register
+ save areas. */
+
+rtx
+gen_frame_mem (enum machine_mode mode, rtx addr)
+{
+ rtx mem = gen_rtx_MEM (mode, addr);
+ MEM_NOTRAP_P (mem) = 1;
+ set_mem_alias_set (mem, get_frame_alias_set ());
+ return mem;
+}
+
+/* Generate a MEM referring to a temporary use of the stack, not part
+ of the fixed stack frame. For example, something which is pushed
+ by a target splitter. */
+rtx
+gen_tmp_stack_mem (enum machine_mode mode, rtx addr)
+{
+ rtx mem = gen_rtx_MEM (mode, addr);
+ MEM_NOTRAP_P (mem) = 1;
+ if (!current_function_calls_alloca)
+ set_mem_alias_set (mem, get_frame_alias_set ());
+ return mem;
+}
+
/* We want to create (subreg:OMODE (obj:IMODE) OFFSET). Return true if
this construct would be valid, and false otherwise. */