Commit cbf6bcbe by John David Anglin

re PR target/61853 (ICE: SIGSEGV in store_field)

	PR target/61853
	* config/pa/pa.c (pa_function_value): Directly handle aggregates
	that fit exactly in a word or double word.

From-SVN: r215309
parent 0e05c303
2014-09-16 John David Anglin <danglin@gcc.gnu.org>
PR target/61853
* config/pa/pa.c (pa_function_value): Directly handle aggregates
that fit exactly in a word or double word.
2014-09-16 Ilya Tocar <ilya.tocar@intel.com> 2014-09-16 Ilya Tocar <ilya.tocar@intel.com>
* config/i386/driver-i386.c (host_detect_local_cpu): Detect lack of * config/i386/driver-i386.c (host_detect_local_cpu): Detect lack of
...@@ -9298,6 +9298,12 @@ pa_function_value (const_tree valtype, ...@@ -9298,6 +9298,12 @@ pa_function_value (const_tree valtype,
|| TREE_CODE (valtype) == COMPLEX_TYPE || TREE_CODE (valtype) == COMPLEX_TYPE
|| TREE_CODE (valtype) == VECTOR_TYPE) || TREE_CODE (valtype) == VECTOR_TYPE)
{ {
HOST_WIDE_INT valsize = int_size_in_bytes (valtype);
/* Handle aggregates that fit exactly in a word or double word. */
if ((valsize & (UNITS_PER_WORD - 1)) == 0)
return gen_rtx_REG (TYPE_MODE (valtype), 28);
if (TARGET_64BIT) if (TARGET_64BIT)
{ {
/* Aggregates with a size less than or equal to 128 bits are /* Aggregates with a size less than or equal to 128 bits are
...@@ -9306,7 +9312,7 @@ pa_function_value (const_tree valtype, ...@@ -9306,7 +9312,7 @@ pa_function_value (const_tree valtype,
memory. */ memory. */
rtx loc[2]; rtx loc[2];
int i, offset = 0; int i, offset = 0;
int ub = int_size_in_bytes (valtype) <= UNITS_PER_WORD ? 1 : 2; int ub = valsize <= UNITS_PER_WORD ? 1 : 2;
for (i = 0; i < ub; i++) for (i = 0; i < ub; i++)
{ {
...@@ -9318,7 +9324,7 @@ pa_function_value (const_tree valtype, ...@@ -9318,7 +9324,7 @@ pa_function_value (const_tree valtype,
return gen_rtx_PARALLEL (BLKmode, gen_rtvec_v (ub, loc)); return gen_rtx_PARALLEL (BLKmode, gen_rtvec_v (ub, loc));
} }
else if (int_size_in_bytes (valtype) > UNITS_PER_WORD) else if (valsize > UNITS_PER_WORD)
{ {
/* Aggregates 5 to 8 bytes in size are returned in general /* Aggregates 5 to 8 bytes in size are returned in general
registers r28-r29 in the same manner as other non registers r28-r29 in the same manner as other non
......
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