diff options
author | kkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-12-19 04:51:53 +0000 |
---|---|---|
committer | kkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-12-19 04:51:53 +0000 |
commit | 90e650e55d2976e15280dea901e8a682ee87783f (patch) | |
tree | efc586deab7e998c98127f76a9a43a385ca1c0fc /gcc/config/sh/sh.c | |
parent | ea68d4ba1b27db5bcda3f07e484d1fd0e0954ed5 (diff) | |
download | gcc-90e650e55d2976e15280dea901e8a682ee87783f.tar.gz |
* [SH] Modify movsi_ie and movsf_ie patterns for LRA.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218890 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/sh/sh.c')
-rw-r--r-- | gcc/config/sh/sh.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index b01efb09d3f..7851fe86863 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -13291,6 +13291,35 @@ sh_legitimize_address_displacement (rtx *disp, rtx *offs, return false; } +/* Return true if movsf insn should be splited with an additional + register. */ +bool +sh_movsf_ie_ra_split_p (rtx op0, rtx op1, rtx op2) +{ + /* op0 == op1 */ + if (rtx_equal_p (op0, op1)) + return true; + /* fy, FQ, reg */ + if (GET_CODE (op1) == CONST_DOUBLE + && ! satisfies_constraint_G (op1) + && ! satisfies_constraint_H (op1) + && REG_P (op0) + && REG_P (op2)) + return true; + /* f, r, y */ + if (REG_P (op0) && FP_REGISTER_P (REGNO (op0)) + && REG_P (op1) && GENERAL_REGISTER_P (REGNO (op1)) + && REG_P (op2) && (REGNO (op2) == FPUL_REG)) + return true; + /* r, f, y */ + if (REG_P (op1) && FP_REGISTER_P (REGNO (op1)) + && REG_P (op0) && GENERAL_REGISTER_P (REGNO (op0)) + && REG_P (op2) && (REGNO (op2) == FPUL_REG)) + return true; + + return false; +} + static void sh_conditional_register_usage (void) { |