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