re PR target/79027 (fold-const.c:11104:1: internal compiler error: Floating point...
authorJohn David Anglin <danglin@gcc.gnu.org>
Wed, 10 May 2017 22:54:07 +0000 (22:54 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Wed, 10 May 2017 22:54:07 +0000 (22:54 +0000)
PR target/79027
* config/pa/pa.c (pa_cannot_change_mode_class): Reject changes to/from
modes with zero size.  Enhance comment.

From-SVN: r247869

gcc/ChangeLog
gcc/config/pa/pa.c

index 075b50d1fc5fd88d697942c813b92a38b8dd56bb..4483f33ed1fed27ea30c8b2c92e681a39dba696b 100644 (file)
@@ -1,3 +1,9 @@
+2017-05-10  John David Anglin  <danglin@gcc.gnu.org>
+
+       PR target/79027
+       * config/pa/pa.c (pa_cannot_change_mode_class): Reject changes to/from
+       modes with zero size.  Enhance comment.
+
 2017-05-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        * config/rs6000/rs6000.c (altivec_init_builtins): Define POWER8
index 3f7b2c71a2f832c411be37306fbebbce6cc811de..874d12d374110cc21934cc9279779e5936e33397 100644 (file)
@@ -9962,19 +9962,23 @@ pa_cannot_change_mode_class (machine_mode from, machine_mode to,
   if (from == to)
     return false;
 
+  if (GET_MODE_SIZE (from) == GET_MODE_SIZE (to))
+    return false;
+
+  /* Reject changes to/from modes with zero size.  */
+  if (!GET_MODE_SIZE (from) || !GET_MODE_SIZE (to))
+    return true;
+
   /* Reject changes to/from complex and vector modes.  */
   if (COMPLEX_MODE_P (from) || VECTOR_MODE_P (from)
       || COMPLEX_MODE_P (to) || VECTOR_MODE_P (to))
     return true;
       
-  if (GET_MODE_SIZE (from) == GET_MODE_SIZE (to))
-    return false;
-
-  /* There is no way to load QImode or HImode values directly from
-     memory.  SImode loads to the FP registers are not zero extended.
-     On the 64-bit target, this conflicts with the definition of
-     LOAD_EXTEND_OP.  Thus, we can't allow changing between modes
-     with different sizes in the floating-point registers.  */
+  /* There is no way to load QImode or HImode values directly from memory
+     to a FP register.  SImode loads to the FP registers are not zero
+     extended.  On the 64-bit target, this conflicts with the definition
+     of LOAD_EXTEND_OP.  Thus, we can't allow changing between modes with
+     different sizes in the floating-point registers.  */
   if (MAYBE_FP_REG_CLASS_P (rclass))
     return true;