https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93012
Bug ID: 93012
Summary: PPC: inefficient 64-bit constant generation (upper =
lower)
Product: gcc
Version: 8.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jens.seifert at de dot ibm.com
Target Milestone: ---
unsigned long long msk66()
{
return 0x6666666666666666ULL;
}
gcc -maix64 -O2 const.C -save-temps
Output:
._Z5msk66v:
LFB..0:
lis 3,0x6666
ori 3,3,0x6666
sldi 3,3,32
oris 3,3,0x6666
ori 3,3,0x6666
blr
Any 64-bit constant that has matching upper 32-bit and lower 32-bit can be
created using 3 instructions construct 32-bit lower part and then use rldimi to
duplicate into upper part of register.
Sample:
lis 3, 26214
ori 3, 3, 26214
rldimi 3, 3, 32, 0