public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Reloading index register
@ 1997-10-17 19:23 Michael P. Hayes
  1997-10-17 21:50 ` Jeffrey A Law
  0 siblings, 1 reply; 2+ messages in thread
From: Michael P. Hayes @ 1997-10-17 19:23 UTC (permalink / raw)
  To: egcs

Can anybody who understands the reload pass enlighten me why it
generates,

(set (reg index2) (reg dud))
(set (reg index2) (mem (plus (reg base2) (reg index2))))
(set (reg r0) (minus (mem (plus (reg base1) (reg index1)))
                     (reg index2)))

instead of the better code,

(set (reg index2) (reg dud))
(set (reg r0) (minus (mem (plus (reg base1) (reg index1)))
                     (mem (plus (reg base2) (reg index2)))))

for the code fragment,

(set (reg r0) (minus (mem (plus (reg base1) (reg index1)))
                     (mem (plus (reg base2) (reg dud)))))

where the global register allocator couldn't assign reg dud to an
index register and so reload spills index register index2 to obtain a
reload register.







^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Reloading index register
  1997-10-17 19:23 Reloading index register Michael P. Hayes
@ 1997-10-17 21:50 ` Jeffrey A Law
  0 siblings, 0 replies; 2+ messages in thread
From: Jeffrey A Law @ 1997-10-17 21:50 UTC (permalink / raw)
  To: Michael P. Hayes; +Cc: egcs

  In message < 199710180228.PAA27273@ongaonga.chch.cri.nz >you write:
  > 
  > Can anybody who understands the reload pass enlighten me why it
  > generates,
  > 
  > (set (reg index2) (reg dud))
  > (set (reg index2) (mem (plus (reg base2) (reg index2))))
  > (set (reg r0) (minus (mem (plus (reg base1) (reg index1)))
  >                      (reg index2)))
  > 
  > instead of the better code,
  > 
  > (set (reg index2) (reg dud))
  > (set (reg r0) (minus (mem (plus (reg base1) (reg index1)))
  >                      (mem (plus (reg base2) (reg index2)))))
  > 
  > for the code fragment,
  > 
  > (set (reg r0) (minus (mem (plus (reg base1) (reg index1)))
  >                      (mem (plus (reg base2) (reg dud)))))
  > 
  > where the global register allocator couldn't assign reg dud to an
  > index register and so reload spills index register index2 to obtain a
  > reload register.
Nope.  But there's ways to figure out why.

Break in find_reloads for the insn in question, then look at calls
to push_reload and push_secondary_reload to see what pieces of
RTL the compiler thinks it needs to reload.  It may be the case that
it thinks the whole (mem (...)) needs to be reloaded.

jeff

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~1997-10-17 21:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-10-17 19:23 Reloading index register Michael P. Hayes
1997-10-17 21:50 ` Jeffrey A Law

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).