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

            Bug ID: 95632
           Summary: Redundant zero extension
           Product: gcc
           Version: 10.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: bina2374 at gmail dot com
                CC: kito at gcc dot gnu.org, wilson at gcc dot gnu.org
  Target Milestone: ---
            Target: riscv32-unknown-elf

Command line: bin/riscv64-unknown-elf-gcc -march=rv32imafc -mabi=ilp32f -O2
foo.c -S

==========
 C Source
==========
unsigned short foo(unsigned short crc) {
  crc ^= 0x4002;
  crc >>= 1;
  crc |= 0x8000;

  return crc;
}

=========
 GCC asm
=========
foo:
        li      a5,-24576  #
        addi    a5,a5,1    # a5 = 0xffffa001
        srli    a0,a0,1
        xor     a0,a0,a5
        slli    a0,a0,16   # 
        srli    a0,a0,16   # redundant zero-extension
        ret

=======================
 Ideal Code Generation 
=======================
foo:
        li      a5,40960   #
        addi    a5,a5,1    # a5 = 0x0000a001
        srli    a0,a0,1
        xor     a0,a0,a5
        ret

Reply via email to