https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97891

--- Comment #4 from Hongtao.liu <crazylht at gmail dot com> ---
(In reply to Hongtao.liu from comment #3)
> This problem is very similar to the one pass_rpad deals with.

We already have mov<mode>_xor for mov $0 to reg, so we only need to handle mov
$0 to mem.

and size for:

xorl --- 2 byte
$0 in movb ----- 1 byte
$0 in movw ----- 2 byte
$0 in mov{l,q} ----- 4 byte

   0:   31 d2                   xor    %edx,%edx
   2:   48 c7 07 00 00 00 00    movq   $0x0,(%rdi)
   9:   48 89 37                mov    %rsi,(%rdi)
   c:   88 17                   mov    %dl,(%rdi)
   e:   c6 07 00                movb   $0x0,(%rdi)
  11:   66 89 17                mov    %dx,(%rdi)
  14:   66 c7 07 00 00          movw   $0x0,(%rdi)
  19:   89 3f                   mov    %edi,(%rdi)
  1b:   c7 07 00 00 00 00       movl   $0x0,(%rdi)


As long as immediate $0 occupied more than 2 bytes, it would be codesize
beneficial to replace mov $0, mem with xor reg0, reg0 + mov reg0, mem.

Reply via email to