calls.c (expand_call): When copying unaligned values into a register...
authorDoug Evans <dje@gnu.org>
Sun, 13 Apr 1997 23:30:18 +0000 (23:30 +0000)
committerDoug Evans <dje@gnu.org>
Sun, 13 Apr 1997 23:30:18 +0000 (23:30 +0000)
* calls.c (expand_call): When copying unaligned values into a register,
zero out the register first rather than emitting a clobber.

From-SVN: r13898

gcc/calls.c

index d7c4c312c5ff535f9f275f8d62019d7da724aa66..91ebe63c6f9c57188d0aebb807439390a19ab686 100644 (file)
@@ -1782,9 +1782,15 @@ expand_call (exp, target, ignore)
              /* Clobber REG and move each partword into it.  Ensure we don't
                 go past the end of the structure.  Note that the loop below
                 works because we've already verified that padding
-                and endianness are compatible.  */
+                and endianness are compatible.
 
-             emit_insn (gen_rtx (CLOBBER, VOIDmode, reg));
+                We use to emit a clobber here but that doesn't let later
+                passes optimize the instructions we emit.  By storing 0 into
+                the register later passes know the first AND to zero out the
+                bitfield being set in the register is unnecessary.  The store
+                of 0 will be deleted as will at least the first AND.  */
+
+             emit_move_insn (reg, const0_rtx);
 
              for (bitpos = 0;
                   bitpos < BITS_PER_WORD && bytes > 0;