diff options
| author | krebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-05-15 08:57:19 +0000 |
|---|---|---|
| committer | krebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-05-15 08:57:19 +0000 |
| commit | 7af74943825a005cc2966a4d4e8ef3f2dab26f11 (patch) | |
| tree | 9e58bebadb6ecee6dc1e3128e5fe17b234d7195b | |
| parent | 5f233c401dc4d2c68139f9fd5b108f077fd445b7 (diff) | |
| download | ppe42-gcc-7af74943825a005cc2966a4d4e8ef3f2dab26f11.tar.gz ppe42-gcc-7af74943825a005cc2966a4d4e8ef3f2dab26f11.zip | |
2013-05-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.c (s390_register_move_cost): Don't impose the
FPR<->GPR move cost penalty if ldgr/lgdr can be used.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@198923 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/config/s390/s390.c | 12 |
2 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aa1f9109fcc..34097805cb4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-05-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> + + * 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 <rguenther@suse.de> PR tree-optimization/57275 diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 15783632457..30c34901f8d 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; |

