From d60e54483d5049e875f94c703f47738605633e51 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Mon, 30 Apr 2001 15:09:51 +0000 Subject: 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 --- gcc/regmove.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'gcc/regmove.c') 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: -- cgit v1.1