aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKito Cheng <kito.cheng@gmail.com>2018-05-20 07:31:55 +0000
committerChung-Ju Wu <jasonwucj@gcc.gnu.org>2018-05-20 07:31:55 +0000
commit69e7672a3bc8b1b40b92277437947f2778c51b96 (patch)
tree0819b082dfa77dedb105b78aec3153941fad6b4c /gcc
parent19c93809c274015f25db9856ffdfb40df3a828ab (diff)
downloadgcc-69e7672a3bc8b1b40b92277437947f2778c51b96.zip
gcc-69e7672a3bc8b1b40b92277437947f2778c51b96.tar.gz
gcc-69e7672a3bc8b1b40b92277437947f2778c51b96.tar.bz2
[NDS32] Adjust register move cost for graywolf cpu.
gcc/ * config/nds32/nds32.c (nds32_register_move_cost): Take garywolf cpu into consideration. Co-Authored-By: Chung-Ju Wu <jasonwucj@gmail.com> From-SVN: r260412
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/nds32/nds32.c24
2 files changed, 28 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 63e5c66..d76ff7d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,6 +1,12 @@
2018-05-20 Kito Cheng <kito.cheng@gmail.com>
Chung-Ju Wu <jasonwucj@gmail.com>
+ * config/nds32/nds32.c (nds32_register_move_cost): Take garywolf cpu
+ into consideration.
+
+2018-05-20 Kito Cheng <kito.cheng@gmail.com>
+ Chung-Ju Wu <jasonwucj@gmail.com>
+
* config/nds32/nds32-cost.c (rtx_cost_model_t): New structure.
(insn_size_16bit, insn_size_32bit): New variables for cost evaluation.
(nds32_rtx_costs_impl): Simplify.
diff --git a/gcc/config/nds32/nds32.c b/gcc/config/nds32/nds32.c
index ac67ba4..649e6f4 100644
--- a/gcc/config/nds32/nds32.c
+++ b/gcc/config/nds32/nds32.c
@@ -3005,13 +3005,33 @@ nds32_canonicalize_comparison (int *code,
/* Describing Relative Costs of Operations. */
static int
-nds32_register_move_cost (machine_mode mode ATTRIBUTE_UNUSED,
+nds32_register_move_cost (machine_mode mode,
reg_class_t from,
reg_class_t to)
{
+ /* In garywolf cpu, FPR to GPR is chaper than other cpu. */
+ if (TARGET_PIPELINE_GRAYWOLF)
+ {
+ if (GET_MODE_SIZE (mode) == 8)
+ {
+ /* DPR to GPR. */
+ if (from == FP_REGS && to != FP_REGS)
+ return 3;
+ /* GPR to DPR. */
+ if (from != FP_REGS && to == FP_REGS)
+ return 2;
+ }
+ else
+ {
+ if ((from == FP_REGS && to != FP_REGS)
+ || (from != FP_REGS && to == FP_REGS))
+ return 2;
+ }
+ }
+
if ((from == FP_REGS && to != FP_REGS)
|| (from != FP_REGS && to == FP_REGS))
- return 9;
+ return 3;
else if (from == HIGH_REGS || to == HIGH_REGS)
return optimize_size ? 6 : 2;
else