summaryrefslogtreecommitdiff
path: root/gcc/mode-switching.c
diff options
context:
space:
mode:
authoraesok <aesok@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-02 10:49:10 +0000
committeraesok <aesok@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-02 10:49:10 +0000
commite1ce1485c85cf2ea659a92ccddf9305fc2ff3c00 (patch)
tree135035b83149e0071966cf5b87b3d84d1448ce95 /gcc/mode-switching.c
parent6cd9a8733290b42109486fd799a07cc810f4d6a1 (diff)
downloadgcc-e1ce1485c85cf2ea659a92ccddf9305fc2ff3c00.tar.gz
* target.h (struct calls): Add function_value_regno_p field.
* target-def.h (TARGET_FUNCTION_VALUE_REGNO_P): Define. (TARGET_INITIALIZER): Use TARGET_FUNCTION_VALUE_REGNO_P. * targhooks.c (default_function_value_regno_p): New function. * targhooks.h (default_function_value_regno_p): Declare function. * rtlanal.c (keep_with_call_p): Use function_value_regno_p hook. * builtins.c. (apply_result_size): (Ditto.). * combine.c. (likely_spilled_retval_p): (Ditto.). * mode-switching.c. Include 'target.h'. (create_pre_exit): Use function_value_regno_p hook. * Makefile.in (mode-switching.o): Add dependency on TARGET_H. * doc/tm.texi (FUNCTION_VALUE_REGNO_P, TARGET_FUNCTION_VALUE_REGNO_P): Revise documentation. * config/i386/i386.h (TARGET_FUNCTION_VALUE_REGNO_P): Remove macro. * config/i386/i386.c (TARGET_FUNCTION_VALUE_REGNO_P): Define macro. (ix86_function_value_regno_p): Declare as static, change argument type to const unsigned int. * config/i386/i386-protos.h (ix86_function_value_regno_p): Remove. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158970 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/mode-switching.c')
-rw-r--r--gcc/mode-switching.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/mode-switching.c b/gcc/mode-switching.c
index 140c513918e..30051c6ea24 100644
--- a/gcc/mode-switching.c
+++ b/gcc/mode-switching.c
@@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see
#include "system.h"
#include "coretypes.h"
#include "tm.h"
+#include "target.h"
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -262,7 +263,7 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
case USE:
/* Skip __builtin_apply pattern. */
if (GET_CODE (XEXP (return_copy_pat, 0)) == REG
- && (FUNCTION_VALUE_REGNO_P
+ && (targetm.calls.function_value_regno_p
(REGNO (XEXP (return_copy_pat, 0)))))
{
maybe_builtin_apply = 1;
@@ -359,7 +360,8 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
&& copy_start + copy_num <= ret_end)
nregs -= copy_num;
else if (!maybe_builtin_apply
- || !FUNCTION_VALUE_REGNO_P (copy_start))
+ || !targetm.calls.function_value_regno_p
+ (copy_start))
break;
last_insn = return_copy;
}