From: Andreas Krebbel Date: Wed, 15 May 2013 08:57:19 +0000 (+0000) Subject: s390.c (s390_register_move_cost): Don't impose the FPR<->GPR move cost penalty if... X-Git-Tag: releases/gcc-4.9.0~5884 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1dd03b91ccae183b0b313cc0a54953dfc621951a;p=thirdparty%2Fgcc.git s390.c (s390_register_move_cost): Don't impose the FPR<->GPR move cost penalty if ldgr/lgdr can be used. 2013-05-15 Andreas Krebbel * config/s390/s390.c (s390_register_move_cost): Don't impose the FPR<->GPR move cost penalty if ldgr/lgdr can be used. From-SVN: r198923 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aa1f9109fcc7..34097805cb4c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-05-15 Andreas Krebbel + + * config/s390/s390.c (s390_register_move_cost): Don't impose the + FPR<->GPR move cost penalty if ldgr/lgdr can be used. + 2013-05-15 Richard Biener PR tree-optimization/57275 diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 157836324575..30c34901f8d4 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -2432,11 +2432,13 @@ static int s390_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED, reg_class_t from, reg_class_t to) { -/* On s390, copy between fprs and gprs is expensive. */ - if ((reg_classes_intersect_p (from, GENERAL_REGS) - && reg_classes_intersect_p (to, FP_REGS)) - || (reg_classes_intersect_p (from, FP_REGS) - && reg_classes_intersect_p (to, GENERAL_REGS))) + /* On s390, copy between fprs and gprs is expensive as long as no + ldgr/lgdr can be used. */ + if ((!TARGET_Z10 || GET_MODE_SIZE (mode) != 8) + && ((reg_classes_intersect_p (from, GENERAL_REGS) + && reg_classes_intersect_p (to, FP_REGS)) + || (reg_classes_intersect_p (from, FP_REGS) + && reg_classes_intersect_p (to, GENERAL_REGS)))) return 10; return 1;