public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug middle-end/14060] New: An unused register is saved to the stack. @ 2004-02-07 6:25 kazu at cs dot umass dot edu 2004-02-07 6:38 ` [Bug middle-end/14060] " kazu at cs dot umass dot edu ` (3 more replies) 0 siblings, 4 replies; 5+ messages in thread From: kazu at cs dot umass dot edu @ 2004-02-07 6:25 UTC (permalink / raw) To: gcc-bugs /* Use ./cc1 -mh -O2 -fomit-frame-pointer. */ extern long bar (long, long *); void foo (long z) { long a[2]; a[0] = z; while (1) { if (bar (z, a)) return; } } Note that er5 is saved but not used anywhere in the function. _foo: mov.l er4,@-er7 mov.l er5,@-er7 subs #4,er7 subs #4,er7 mov.l er0,er4 mov.l er0,@er7 .L2: mov.l er7,er1 mov.l er4,er0 jsr @_bar mov.l er0,er0 beq .L2 adds #4,er7 adds #4,er7 mov.l @er7+,er5 mov.l @er7+,er4 rts -- Summary: An unused register is saved to the stack. Product: gcc Version: 3.5.0 Status: UNCONFIRMED Keywords: pessimizes-code Severity: normal Priority: P2 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: kazu at cs dot umass dot edu CC: gcc-bugs at gcc dot gnu dot org GCC host triplet: i686-pc-linux-gnu GCC target triplet: h8300-elf http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14060 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug middle-end/14060] An unused register is saved to the stack. 2004-02-07 6:25 [Bug middle-end/14060] New: An unused register is saved to the stack kazu at cs dot umass dot edu @ 2004-02-07 6:38 ` kazu at cs dot umass dot edu 2004-02-07 8:39 ` pinskia at gcc dot gnu dot org ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: kazu at cs dot umass dot edu @ 2004-02-07 6:38 UTC (permalink / raw) To: gcc-bugs ------- Additional Comments From kazu at cs dot umass dot edu 2004-02-07 06:38 ------- My guess is as follows: Before the register allocation, we have this. (insn 46 10 12 0 (set (reg/f:SI 20) (plus:SI (reg/f:SI 11 fp) (const_int -8 [0xfffffff8]))) 36 {*addsi_h8300hs} (nil) (nil)) There is no matching constraint for this insn (because H8 is a two-address machine). So the source is spilled. But it turns out that (plus (reg:SI 11) (const_int -8)) is equal to (reg:SI sp). So an addition instruction becomes a move instruction: (set (reg:SI 20) (reg:SI sp)) But the reload or the register allocator doesn't go back and say that the spill made above is not necessary anymore. Before this patch http://gcc.gnu.org/ml/gcc-patches/2004-01/msg03252.html I used to see a use of er5 (although a stupid one). eliminate_regs_in_insn() is called too late to notice that the spill is not needed. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14060 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug middle-end/14060] An unused register is saved to the stack. 2004-02-07 6:25 [Bug middle-end/14060] New: An unused register is saved to the stack kazu at cs dot umass dot edu 2004-02-07 6:38 ` [Bug middle-end/14060] " kazu at cs dot umass dot edu @ 2004-02-07 8:39 ` pinskia at gcc dot gnu dot org 2004-02-09 17:07 ` kazu at cs dot umass dot edu 2005-02-08 17:10 ` steven at gcc dot gnu dot org 3 siblings, 0 replies; 5+ messages in thread From: pinskia at gcc dot gnu dot org @ 2004-02-07 8:39 UTC (permalink / raw) To: gcc-bugs -- What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |enhancement http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14060 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug middle-end/14060] An unused register is saved to the stack. 2004-02-07 6:25 [Bug middle-end/14060] New: An unused register is saved to the stack kazu at cs dot umass dot edu 2004-02-07 6:38 ` [Bug middle-end/14060] " kazu at cs dot umass dot edu 2004-02-07 8:39 ` pinskia at gcc dot gnu dot org @ 2004-02-09 17:07 ` kazu at cs dot umass dot edu 2005-02-08 17:10 ` steven at gcc dot gnu dot org 3 siblings, 0 replies; 5+ messages in thread From: kazu at cs dot umass dot edu @ 2004-02-09 17:07 UTC (permalink / raw) To: gcc-bugs -- What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed| |1 Last reconfirmed|0000-00-00 00:00:00 |2004-02-09 17:07:37 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14060 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug middle-end/14060] An unused register is saved to the stack. 2004-02-07 6:25 [Bug middle-end/14060] New: An unused register is saved to the stack kazu at cs dot umass dot edu ` (2 preceding siblings ...) 2004-02-09 17:07 ` kazu at cs dot umass dot edu @ 2005-02-08 17:10 ` steven at gcc dot gnu dot org 3 siblings, 0 replies; 5+ messages in thread From: steven at gcc dot gnu dot org @ 2005-02-08 17:10 UTC (permalink / raw) To: gcc-bugs ------- Additional Comments From steven at gcc dot gnu dot org 2005-02-08 10:19 ------- Kazu, is this still a problem? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14060 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2005-02-08 10:19 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2004-02-07 6:25 [Bug middle-end/14060] New: An unused register is saved to the stack kazu at cs dot umass dot edu 2004-02-07 6:38 ` [Bug middle-end/14060] " kazu at cs dot umass dot edu 2004-02-07 8:39 ` pinskia at gcc dot gnu dot org 2004-02-09 17:07 ` kazu at cs dot umass dot edu 2005-02-08 17:10 ` steven at gcc dot gnu dot org
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).