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>
Fix PR tree-optimization/32540
......
......@@ -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 *);
......
......@@ -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)
{
......
......@@ -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;
}")
......
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