Testcase:
vector float b[560560];
vector float c[560560];
void f(void);
vector float Mult(vector float a)
{
b[560560/16] = a;
asm
("":::"memory","0","3","4","5","6","7","8","9","10","11","12","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29");
b[560560/16] = a;
}
---- CUT ----
We get:
lis 9,0x8
ori 9,9,36272
add 9,9,9
stvx 0,0,9
Which is obviously wrong.
--
Summary: Wrong code with altivec and offsets
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: pinskia at gcc dot gnu dot org
GCC target triplet: powerpc64-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34529