Commit 212b7e9c by John David Anglin

re PR target/79027 (fold-const.c:11104:1: internal compiler error: Floating point exception)

	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
parent 3aa0a770
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> 2017-05-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* config/rs6000/rs6000.c (altivec_init_builtins): Define POWER8 * config/rs6000/rs6000.c (altivec_init_builtins): Define POWER8
......
...@@ -9962,19 +9962,23 @@ pa_cannot_change_mode_class (machine_mode from, machine_mode to, ...@@ -9962,19 +9962,23 @@ pa_cannot_change_mode_class (machine_mode from, machine_mode to,
if (from == to) if (from == to)
return false; 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. */ /* Reject changes to/from complex and vector modes. */
if (COMPLEX_MODE_P (from) || VECTOR_MODE_P (from) if (COMPLEX_MODE_P (from) || VECTOR_MODE_P (from)
|| COMPLEX_MODE_P (to) || VECTOR_MODE_P (to)) || COMPLEX_MODE_P (to) || VECTOR_MODE_P (to))
return true; return true;
if (GET_MODE_SIZE (from) == GET_MODE_SIZE (to)) /* There is no way to load QImode or HImode values directly from memory
return false; to a FP register. SImode loads to the FP registers are not zero
extended. On the 64-bit target, this conflicts with the definition
/* There is no way to load QImode or HImode values directly from of LOAD_EXTEND_OP. Thus, we can't allow changing between modes with
memory. SImode loads to the FP registers are not zero extended. different sizes in the floating-point registers. */
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)) if (MAYBE_FP_REG_CLASS_P (rclass))
return true; return true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment