rx.c (rx_can_use_simple_return): New function.

* config/rx/rx.c (rx_can_use_simple_return): New function.
        * config/rx/rx-protos.h (rx_can_use_simple_return): Prototype.
        * config/rx/rx.md (return): Predicate on rx_can_use_simple_return.

From-SVN: r183252
This commit is contained in:
Nick Clifton 2012-01-17 15:41:50 +00:00 committed by Nick Clifton
parent 99eb180f66
commit be61ce5214
4 changed files with 40 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2012-01-17 Nick Clifton <nickc@redhat.com>
* config/rx/rx.c (rx_can_use_simple_return): New function.
* config/rx/rx-protos.h (rx_can_use_simple_return): Prototype.
* config/rx/rx.md (return): Predicate on rx_can_use_simple_return.
2012-01-17 Richard Guenther <rguenther@suse.de>
PR middle-end/51782

View File

@ -1,5 +1,6 @@
/* Exported function prototypes from the Renesas RX backend.
Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
Copyright (C) 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
Contributed by Red Hat.
This file is part of GCC.
@ -21,6 +22,8 @@
#ifndef GCC_RX_PROTOS_H
#define GCC_RX_PROTOS_H
extern bool rx_can_use_simple_return (void);
extern void rx_expand_epilogue (bool);
extern void rx_expand_prologue (void);
extern int rx_initial_elimination_offset (int, int);
@ -29,7 +32,6 @@ extern int rx_adjust_insn_length (rtx, int);
extern int rx_align_for_label (rtx, int);
extern void rx_emit_stack_popm (rtx *, bool);
extern void rx_emit_stack_pushm (rtx *);
extern void rx_expand_epilogue (bool);
extern char * rx_gen_move_template (rtx *, bool);
extern bool rx_is_legitimate_constant (enum machine_mode, rtx);
extern bool rx_is_restricted_memory_address (rtx,

View File

@ -1,5 +1,6 @@
/* Subroutines used for code generation on Renesas RX processors.
Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
Copyright (C) 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
Contributed by Red Hat.
This file is part of GCC.
@ -1818,7 +1819,31 @@ gen_rx_popm_vector (unsigned int low, unsigned int high)
return vector;
}
/* Returns true if a simple return insn can be used. */
bool
rx_can_use_simple_return (void)
{
unsigned int low;
unsigned int high;
unsigned int frame_size;
unsigned int stack_size;
unsigned int register_mask;
if (is_naked_func (NULL_TREE)
|| is_fast_interrupt_func (NULL_TREE)
|| is_interrupt_func (NULL_TREE))
return false;
rx_get_stack_layout (& low, & high, & register_mask,
& frame_size, & stack_size);
return (register_mask == 0
&& (frame_size + stack_size) == 0
&& low == 0);
}
void
rx_expand_epilogue (bool is_sibcall)
{

View File

@ -1,5 +1,6 @@
;; Machine Description for Renesas RX processors
;; Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
;; Copyright (C) 2008, 2009, 2010, 2011, 2012
;; Free Software Foundation, Inc.
;; Contributed by Red Hat.
;; This file is part of GCC.
@ -342,7 +343,7 @@
(define_expand "return"
[(return)]
""
"rx_can_use_simple_return ()"
"rx_expand_epilogue (false); DONE;"
)