https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121867
Bug ID: 121867 Summary: PPC: Misses modulo reduction for constant shift in AltiVec vec_sl Product: gcc Version: 16.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: jeevitha at gcc dot gnu.org Target Milestone: --- PowerPC has a modulo shift, so it does not matter if higher bits are set in the shift amount. For vslb, only the last 3 bits (bits 5–7) are considered. For vslw, only the last 5 bits (bits 27–31) are considered. #include <altivec.h> vector unsigned char shl31(vector unsigned char in) { return vec_sl(in, vec_splats((unsigned char)35)); } Currently on Power8 it generates: addis 2,12,.TOC.-.LCF0@ha addi 2,2,.TOC.-.LCF0@l addis %r9,%r2,.LC0@toc@ha addi %r9,%r9,.LC0@toc@l lvx %v0,0,%r9 vslb %v2,%v2,%v0 blr Should be done by: On Power8, vspltisb %v3, 3 vslb %v2, %v2, %v3 blr On Power9, xxspltib %vs35, 3 vslb %v2, %v2, %v3 blr