Commit 2954d7db by Richard Kenner Committed by Richard Kenner

stmt.c (expand_return): Don't return anything if size is zero.

	* stmt.c (expand_return): Don't return anything if size is zero.
	Delete redundant assignment to BYTES.
	* expr.c (move_block_from_reg): Do nothing if NREGS is zero.

From-SVN: r39156
parent 1d26ac96
Sat Jan 20 12:46:57 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* stmt.c (expand_return): Don't return anything if size is zero.
Delete redundant assignment to BYTES.
* expr.c (move_block_from_reg): Do nothing if NREGS is zero.
2001-01-20 Marek Michalkiewicz <marekm@linux.org.pl> 2001-01-20 Marek Michalkiewicz <marekm@linux.org.pl>
* config/avr/avr.h (INIT_TARGET_OPTABS): Remove most of it, was * config/avr/avr.h (INIT_TARGET_OPTABS): Remove most of it, was
......
...@@ -1857,6 +1857,9 @@ move_block_from_reg (regno, x, nregs, size) ...@@ -1857,6 +1857,9 @@ move_block_from_reg (regno, x, nregs, size)
#endif #endif
enum machine_mode mode; enum machine_mode mode;
if (nregs == 0)
return;
/* If SIZE is that of a mode no bigger than a word, just use that /* If SIZE is that of a mode no bigger than a word, just use that
mode's store operation. */ mode's store operation. */
if (size <= UNITS_PER_WORD if (size <= UNITS_PER_WORD
......
...@@ -3016,6 +3016,12 @@ expand_return (retval) ...@@ -3016,6 +3016,12 @@ expand_return (retval)
rtx result_val = expand_expr (retval_rhs, NULL_RTX, VOIDmode, 0); rtx result_val = expand_expr (retval_rhs, NULL_RTX, VOIDmode, 0);
enum machine_mode tmpmode, result_reg_mode; enum machine_mode tmpmode, result_reg_mode;
if (bytes == 0)
{
expand_null_return ();
return;
}
/* Structures whose size is not a multiple of a word are aligned /* Structures whose size is not a multiple of a word are aligned
to the least significant byte (to the right). On a BYTES_BIG_ENDIAN to the least significant byte (to the right). On a BYTES_BIG_ENDIAN
machine, this means we must skip the empty high order bytes when machine, this means we must skip the empty high order bytes when
...@@ -3063,15 +3069,12 @@ expand_return (retval) ...@@ -3063,15 +3069,12 @@ expand_return (retval)
/* Find the smallest integer mode large enough to hold the /* Find the smallest integer mode large enough to hold the
entire structure and use that mode instead of BLKmode entire structure and use that mode instead of BLKmode
on the USE insn for the return register. */ on the USE insn for the return register. */
bytes = int_size_in_bytes (TREE_TYPE (retval_rhs));
for (tmpmode = GET_CLASS_NARROWEST_MODE (MODE_INT); for (tmpmode = GET_CLASS_NARROWEST_MODE (MODE_INT);
tmpmode != VOIDmode; tmpmode != VOIDmode;
tmpmode = GET_MODE_WIDER_MODE (tmpmode)) tmpmode = GET_MODE_WIDER_MODE (tmpmode))
{ /* Have we found a large enough mode? */
/* Have we found a large enough mode? */ if (GET_MODE_SIZE (tmpmode) >= bytes)
if (GET_MODE_SIZE (tmpmode) >= bytes) break;
break;
}
/* No suitable mode found. */ /* No suitable mode found. */
if (tmpmode == VOIDmode) if (tmpmode == VOIDmode)
......
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