OSDN Git Service

* calls.c (expand_call): When copying unaligned values into a register,
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 Apr 1997 23:30:18 +0000 (23:30 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 Apr 1997 23:30:18 +0000 (23:30 +0000)
zero out the register first rather than emitting a clobber.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@13898 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/calls.c

index d7c4c31..91ebe63 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;