pa.md (return): Delete pattern.

rtl-optimization/32296
	* pa.md (return): Delete pattern.
	(return_internal): Remove "(const_int 1)" from pattern.
	(epilogue): Use return_internal pattern for trivial returns.
	* pa-protos.h (hppa_can_use_return_insn_p): Delete declaration.
	* pa.c (hppa_can_use_return_insn_p): Delete function.  Include "df.h".

From-SVN: r126150
This commit is contained in:
John David Anglin 2007-06-30 14:26:18 +00:00 committed by John David Anglin
parent 89fb70a345
commit 62a5396890
4 changed files with 21 additions and 45 deletions

View file

@ -1,3 +1,12 @@
2007-06-30 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
rtl-optimization/32296
* pa.md (return): Delete pattern.
(return_internal): Remove "(const_int 1)" from pattern.
(epilogue): Use return_internal pattern for trivial returns.
* pa-protos.h (hppa_can_use_return_insn_p): Delete declaration.
* pa.c (hppa_can_use_return_insn_p): Delete function. Include "df.h".
2007-06-30 Daniel Berlin <dberlin@dberlin.org>
Fix PR tree-optimization/32540

View file

@ -144,7 +144,6 @@ extern int and_mask_p (unsigned HOST_WIDE_INT);
extern int cint_ok_for_move (HOST_WIDE_INT);
extern void hppa_expand_prologue (void);
extern void hppa_expand_epilogue (void);
extern int hppa_can_use_return_insn_p (void);
extern int ior_mask_p (unsigned HOST_WIDE_INT);
extern void compute_zdepdi_operands (unsigned HOST_WIDE_INT,
unsigned *);

View file

@ -47,6 +47,7 @@ Boston, MA 02110-1301, USA. */
#include "tm_p.h"
#include "target.h"
#include "target-def.h"
#include "df.h"
/* Return nonzero if there is a bypass for the output of
OUT_INSN and the fp store IN_INSN. */
@ -4403,22 +4404,6 @@ return_addr_rtx (int count, rtx frameaddr)
return saved_rp;
}
/* This is only valid once reload has completed because it depends on
knowing exactly how much (if any) frame there is and...
It's only valid if there is no frame marker to de-allocate and...
It's only valid if %r2 hasn't been saved into the caller's frame
(we're not profiling and %r2 isn't live anywhere). */
int
hppa_can_use_return_insn_p (void)
{
return (reload_completed
&& (compute_frame_size (get_frame_size (), 0) ? 0 : 1)
&& ! df_regs_ever_live_p (2)
&& ! frame_pointer_needed);
}
void
emit_bcond_fp (enum rtx_code code, rtx operand0)
{

View file

@ -7343,28 +7343,10 @@
;; Unconditional and other jump instructions.
;; This can only be used in a leaf function, so we do
;; not need to use the PIC register when generating PIC code.
(define_insn "return"
[(return)
(use (reg:SI 2))
(const_int 0)]
"hppa_can_use_return_insn_p ()"
"*
{
if (TARGET_PA_20)
return \"bve%* (%%r2)\";
return \"bv%* %%r0(%%r2)\";
}"
[(set_attr "type" "branch")
(set_attr "length" "4")])
;; Emit a different pattern for functions which have non-trivial
;; epilogues so as not to confuse jump and reorg.
;; This is used for most returns.
(define_insn "return_internal"
[(return)
(use (reg:SI 2))
(const_int 1)]
(use (reg:SI 2))]
""
"*
{
@ -7406,14 +7388,16 @@
""
"
{
/* Try to use the trivial return first. Else use the full
epilogue. */
if (hppa_can_use_return_insn_p ())
emit_jump_insn (gen_return ());
rtx x;
/* Try to use the trivial return first. Else use the full epilogue. */
if (reload_completed
&& !frame_pointer_needed
&& !df_regs_ever_live_p (2)
&& (compute_frame_size (get_frame_size (), 0) ? 0 : 1))
x = gen_return_internal ();
else
{
rtx x;
hppa_expand_epilogue ();
/* EH returns bypass the normal return stub. Thus, we must do an
@ -7426,9 +7410,8 @@
x = gen_return_external_pic ();
else
x = gen_return_internal ();
emit_jump_insn (x);
}
emit_jump_insn (x);
DONE;
}")