2013-05-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
authorkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 May 2013 08:57:19 +0000 (08:57 +0000)
committerkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 May 2013 08:57:19 +0000 (08:57 +0000)
* 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

gcc/ChangeLog
gcc/config/s390/s390.c

index aa1f910..3409780 100644 (file)
@@ -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
index 1578363..30c3490 100644 (file)
@@ -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;