Commit 62a53968 by John David Anglin Committed by John David Anglin

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
parent 89fb70a3
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> 2007-06-30 Daniel Berlin <dberlin@dberlin.org>
Fix PR tree-optimization/32540 Fix PR tree-optimization/32540
......
...@@ -144,7 +144,6 @@ extern int and_mask_p (unsigned HOST_WIDE_INT); ...@@ -144,7 +144,6 @@ extern int and_mask_p (unsigned HOST_WIDE_INT);
extern int cint_ok_for_move (HOST_WIDE_INT); extern int cint_ok_for_move (HOST_WIDE_INT);
extern void hppa_expand_prologue (void); extern void hppa_expand_prologue (void);
extern void hppa_expand_epilogue (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 int ior_mask_p (unsigned HOST_WIDE_INT);
extern void compute_zdepdi_operands (unsigned HOST_WIDE_INT, extern void compute_zdepdi_operands (unsigned HOST_WIDE_INT,
unsigned *); unsigned *);
......
...@@ -47,6 +47,7 @@ Boston, MA 02110-1301, USA. */ ...@@ -47,6 +47,7 @@ Boston, MA 02110-1301, USA. */
#include "tm_p.h" #include "tm_p.h"
#include "target.h" #include "target.h"
#include "target-def.h" #include "target-def.h"
#include "df.h"
/* Return nonzero if there is a bypass for the output of /* Return nonzero if there is a bypass for the output of
OUT_INSN and the fp store IN_INSN. */ OUT_INSN and the fp store IN_INSN. */
...@@ -4403,22 +4404,6 @@ return_addr_rtx (int count, rtx frameaddr) ...@@ -4403,22 +4404,6 @@ return_addr_rtx (int count, rtx frameaddr)
return saved_rp; 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 void
emit_bcond_fp (enum rtx_code code, rtx operand0) emit_bcond_fp (enum rtx_code code, rtx operand0)
{ {
......
...@@ -7343,28 +7343,10 @@ ...@@ -7343,28 +7343,10 @@
;; Unconditional and other jump instructions. ;; Unconditional and other jump instructions.
;; This can only be used in a leaf function, so we do ;; This is used for most returns.
;; 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.
(define_insn "return_internal" (define_insn "return_internal"
[(return) [(return)
(use (reg:SI 2)) (use (reg:SI 2))]
(const_int 1)]
"" ""
"* "*
{ {
...@@ -7406,14 +7388,16 @@ ...@@ -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 ());
else
{
rtx x; 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
{
hppa_expand_epilogue (); hppa_expand_epilogue ();
/* EH returns bypass the normal return stub. Thus, we must do an /* EH returns bypass the normal return stub. Thus, we must do an
...@@ -7426,9 +7410,8 @@ ...@@ -7426,9 +7410,8 @@
x = gen_return_external_pic (); x = gen_return_external_pic ();
else else
x = gen_return_internal (); x = gen_return_internal ();
emit_jump_insn (x);
} }
emit_jump_insn (x);
DONE; DONE;
}") }")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment