public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: hjl@lucon.org (H.J. Lu)
To: law@cygnus.com
Cc: gafton@redhat.com, egcs@cygnus.com, coxs@dg-rtp.dg.com,
	crux@ohara.Informatik.RWTH-Aachen.DE
Subject: reg-stack.c problem
Date: Mon, 20 Apr 1998 13:06:00 -0000	[thread overview]
Message-ID: <m0yRK0o-00058vC@ocean.lucon.org> (raw)
In-Reply-To: <17624.893055503@hurl.cygnus.com>

>   > Basically convert_regs () calls change_stack () with INSN to emit
>   > some insn after INSN. But some insn has been added after INSN so
>   > that change_stack () will emit some insn at the wrong place. As the
>   > result, the floating point is broken on x86.
> This is an extremely confusing explanation, primarily because you
> use "insn"/INSN to refer to three different things.
> 
> Basically is sounds like you have
> 
> 	insn 1
>         insn 2
> 
> 
> It sounds like we thought we wanted to insert after insn 1, but
> because of other reg-stack actions we really wanted to insert
> after insn 2.
> 
>   > This patch seems to fix it. Could someone please take a look? Given
>   > the bugs we have seen in egcs 1.0.2, I suggest egcs 1.0.3 be made.
> I must confess I don't undersatnd reg-stack all that well.  Assuming
> your analysis and explanation are correct, then I think your change
> is OK, though possibly incomplete.
> 
> In particular I worry that we need to pass "new" instead of "insn"
> to the call to emit_pop_insn near the end of convert_regs.  I think
> the call to goto_block_pat in convert_regs is OK.

You may be right.

> 
> I also worry that there may be cases were we need to insert after
> insn 1 instead of after insn 2.  But I don't know reg-stack well
> enough to know if that can actually happen.

I don't think that should happen.

> 
> You might ask Bernd Schmidt or Stan Cox to look at the change and
> comment.
> 
> I'm going to go ahead and hesitantly install the change, but further
> comments from folks that understand this code would be greatly
> appreciated.
> 

How does this patch against egcs 1.0 in CVS sound?

Thanks.

-- 
H.J. Lu (hjl@gnu.org)
--
Mon Apr 20 08:02:56 1998  H.J. Lu  (hjl@gnu.org)

	(convert_regs): Abort if the last newly created insn is a JUMP
	insn.
	Call goto_block_pat (), emit_pop_insn () and straighten_stack ()
	with NEW instead of INSN.

--- reg-stack.c.1	Sat Apr 18 18:23:12 1998
+++ reg-stack.c	Mon Apr 20 08:01:58 1998
@@ -3108,6 +3108,9 @@ convert_regs ()
 
 	} while (insn != block_end[block]);
 
+      if (new != insn && GET_CODE (new) == JUMP_INSN)
+	abort ();
+
       /* Something failed if the stack life doesn't match.  */
 
       GO_IF_HARD_REG_EQUAL (regstack.reg_set, block_out_reg_set[block], win);
@@ -3121,8 +3124,8 @@ convert_regs ()
 	 jump target if the target block's stack order hasn't been set
 	 yet.  */
 
-      if (GET_CODE (insn) == JUMP_INSN)
-	goto_block_pat (insn, &regstack, PATTERN (insn));
+      if (GET_CODE (new) == JUMP_INSN)
+	goto_block_pat (new, &regstack, PATTERN (insn));
 
       /* Likewise handle the case where we fall into the next block.  */
 
@@ -3151,11 +3154,11 @@ convert_regs ()
      for (reg = regstack.top; reg >= 0; reg--)
         if (regstack.reg[reg] < value_reg_low
 	    || regstack.reg[reg] > value_reg_high)
-           insn = emit_pop_insn (insn, &regstack,
+           insn = emit_pop_insn (new, &regstack,
 			    FP_MODE_REG (regstack.reg[reg], DFmode),
 			    emit_insn_after);
    }
-  straighten_stack (insn, &regstack);
+  straighten_stack (new, &regstack);
 }
 \f
 /* Check expression PAT, which is in INSN, for label references.  if

  parent reply	other threads:[~1998-04-20 13:06 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <Pine.LNX.3.96.980414173903.3672J-100000@alien.redhat.com>
1998-04-15 19:57 ` egcs 1.0.2 is broken on x86 and a patch for it H.J. Lu
1998-04-20  0:56   ` Jeffrey A Law
1998-04-20 13:06     ` H.J. Lu
1998-04-20 13:06     ` H.J. Lu
1998-04-20 13:06     ` H.J. Lu [this message]
1998-04-22  9:05     ` Bernd Schmidt
1998-04-22  8:38       ` H.J. Lu
1998-04-23 21:12       ` Jim Wilson
1998-04-24 16:23         ` Jeffrey A Law
1998-04-24 16:23           ` H.J. Lu
1998-04-27 19:48         ` Jim Wilson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m0yRK0o-00058vC@ocean.lucon.org \
    --to=hjl@lucon.org \
    --cc=coxs@dg-rtp.dg.com \
    --cc=crux@ohara.Informatik.RWTH-Aachen.DE \
    --cc=egcs@cygnus.com \
    --cc=gafton@redhat.com \
    --cc=law@cygnus.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).