From 2954d7dbf7d309d5b5c8fc2a32dae155936ee264 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sat, 20 Jan 2001 17:47:45 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/expr.c | 3 +++ gcc/stmt.c | 15 +++++++++------ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cded5b23d6a..3cff034218d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Sat Jan 20 12:46:57 2001 Richard Kenner + + * 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 * config/avr/avr.h (INIT_TARGET_OPTABS): Remove most of it, was diff --git a/gcc/expr.c b/gcc/expr.c index a78be1b132b..848431e0440 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -1857,6 +1857,9 @@ move_block_from_reg (regno, x, nregs, size) #endif enum machine_mode mode; + if (nregs == 0) + return; + /* If SIZE is that of a mode no bigger than a word, just use that mode's store operation. */ if (size <= UNITS_PER_WORD diff --git a/gcc/stmt.c b/gcc/stmt.c index 450b0da7c1a..2399b6f83bf 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -3016,6 +3016,12 @@ expand_return (retval) rtx result_val = expand_expr (retval_rhs, NULL_RTX, VOIDmode, 0); 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 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 @@ -3063,15 +3069,12 @@ expand_return (retval) /* Find the smallest integer mode large enough to hold the entire structure and use that mode instead of BLKmode 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); tmpmode != VOIDmode; tmpmode = GET_MODE_WIDER_MODE (tmpmode)) - { - /* Have we found a large enough mode? */ - if (GET_MODE_SIZE (tmpmode) >= bytes) - break; - } + /* Have we found a large enough mode? */ + if (GET_MODE_SIZE (tmpmode) >= bytes) + break; /* No suitable mode found. */ if (tmpmode == VOIDmode) -- 2.30.2