Take the following code:
vector int bar3(long long x)
{
return (vector int)(vector long long){x,x};
}
---
Currently we get:
_bar3:
mfspr r0,256
stw r0,-8(r1)
oris r0,r0,0x8000
mtspr 256,r0
addi r2,r1,-32
stw r3,0(r2)
stw r4,4(r2)
stw r3,8(r2)
stw r4,12(r2)
lvx v0,0,r2
lwz r12,-8(r1)
vor v2,v0,v0
mtspr 256,r12
blr
But we should really allocate v0 in v2, removing the save/restore/setting of
VRSAVE.
Like:
_bar3:
addi r2,r1,-32
stw r3,0(r2)
stw r4,4(r2)
stw r3,8(r2)
stw r4,12(r2)
lvx v2,0,r2
blr
--
Summary: Not that good register allocating on powerpc for vectors
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Keywords: missed-optimization, ra
Severity: enhancement
Priority: P2
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: pinskia at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: powerpc-darwin
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24082