aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2000-08-23 15:15:21 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>2000-08-23 15:15:21 +0000
commite04c2d6ca11eed2c675c7a6d38ce3153fd44a635 (patch)
treef66318bf944f5653cb03ef80e8fe573deeafd042 /gcc
parent47db946ca4f65b526ab014d0059766ca0b58907b (diff)
downloadgcc-e04c2d6ca11eed2c675c7a6d38ce3153fd44a635.zip
gcc-e04c2d6ca11eed2c675c7a6d38ce3153fd44a635.tar.gz
gcc-e04c2d6ca11eed2c675c7a6d38ce3153fd44a635.tar.bz2
arm.c (arm_expand_prologue): Ensure that the stack-adjustment barrier can't be ignored by the alias analysis...
* arm.c (arm_expand_prologue): Ensure that the stack-adjustment barrier can't be ignored by the alias analysis code. From-SVN: r35911
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/arm/arm.c15
2 files changed, 18 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e2940b2..3b5df62 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2000-08-23 Richard Earnshaw (rearnsha@arm.com)
+
+ * arm.c (arm_expand_prologue): Ensure that the stack-adjustment
+ barrier can't be ignored by the alias analysis code.
+
2000-08-12 Eli Zaretskii <eliz@is.elta.co.il>
* fixinc/inclhack.def (sysv68_string): Fix the Sed script so it
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index d559d00..4c7679a 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -7430,8 +7430,19 @@ arm_expand_prologue ()
insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx,
amount));
RTX_FRAME_RELATED_P (insn) = 1;
- emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode, stack_pointer_rtx)));
+
+ /* If the frame pointer is needed, emit a special barrier that
+ will prevent the scheduler from moving stores to the frame
+ before the stack adjustment. */
+ if (frame_pointer_needed)
+ {
+ rtx unspec = gen_rtx_UNSPEC (SImode,
+ gen_rtvec (2, stack_pointer_rtx,
+ hard_frame_pointer_rtx), 4);
+
+ emit_insn (gen_rtx_CLOBBER (VOIDmode,
+ gen_rtx_MEM (BLKmode, unspec)));
+ }
}
/* If we are profiling, make sure no instructions are scheduled before