aboutsummaryrefslogtreecommitdiff
path: root/gcc/regmove.c
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2001-04-30 15:09:51 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2001-04-30 15:09:51 +0000
commitd60e54483d5049e875f94c703f47738605633e51 (patch)
tree68c63569a6f9b3ecbd97a32561f3d1cb8f8b7e19 /gcc/regmove.c
parentfea633fdfb15a45c811db7fcbfc8aa7b43713f40 (diff)
downloadgcc-d60e54483d5049e875f94c703f47738605633e51.zip
gcc-d60e54483d5049e875f94c703f47738605633e51.tar.gz
gcc-d60e54483d5049e875f94c703f47738605633e51.tar.bz2
regmove.c (record_stack_memrefs): Catch all references to the stack pointer.
* regmove.c (record_stack_memrefs): Catch all references to the stack pointer. * optimize.c (update_cloned_parm): New function. (maybe_clone_body): Use it. Update the `this' parameter too. * gcc.dg/20000724-1.c: Add a clobber of `esp'. From-SVN: r41687
Diffstat (limited to 'gcc/regmove.c')
-rw-r--r--gcc/regmove.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/regmove.c b/gcc/regmove.c
index 2e0fa9e..bb22700 100644
--- a/gcc/regmove.c
+++ b/gcc/regmove.c
@@ -2303,11 +2303,16 @@ record_stack_memrefs (xp, data)
}
return 1;
case REG:
- /* ??? We want be able to handle non-memory stack pointer references
- later. For now just discard all insns refering to stack pointer
- outside mem expressions. We would probably want to teach
- validate_replace to simplify expressions first. */
- if (x == stack_pointer_rtx)
+ /* ??? We want be able to handle non-memory stack pointer
+ references later. For now just discard all insns refering to
+ stack pointer outside mem expressions. We would probably
+ want to teach validate_replace to simplify expressions first.
+
+ We can't just compare with STACK_POINTER_RTX because the
+ reference to the stack pointer might be in some other mode.
+ In particular, an explict clobber in an asm statement will
+ result in a QImode clober. */
+ if (REGNO (x) == STACK_POINTER_REGNUM)
return 1;
break;
default: