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:
parent
89fb70a345
commit
62a5396890
4 changed files with 21 additions and 45 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}")
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue