https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106602
Bug ID: 106602
Summary: riscv: suboptimal codegen for shift left, right, left
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: vineetg at rivosinc dot com
CC: christophm30 at gmail dot com, kito at gcc dot gnu.org
Target Milestone: ---
This came up when investigating
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106545. The test to supposedly
induce the peephole doesn't, but generates far inferior code.
unsigned long foo2(unsigned long a)
{
return (unsigned long)(unsigned int)a << 6;
}
-march=rv64gc -O2 # no bitmanip
foo2:
li a5,1
slli a5,a5,38
addi a5,a5,-64
slli a0,a0,6
and a0,a0,a5
ret
llvm generates expected
foo:
slli a0, a0, 32
srli a0, a0, 26
ret