This test case causes two different internal compiler errors in GCC when compiled with "-m32 -maltivec", with VECSIZE either 2 or 8: __attribute__ ((vector_size (VECSIZE))) unsigned char v1, v2, v3; void vxor (void) { v1 = v2 ^ v3; } Using a cross compiler on i686-linux with today's mainline: laptop% $XGCC -m32 -maltivec -DVECSIZE=2 -c bug2.c bug2.c: In function 'vxor': bug2.c:9: internal compiler error: in operand_subword_force, at /emit-rtl.c:1384Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. laptop% $XGCC -m32 -maltivec -DVECSIZE=8 -c bug2.c bug2.c: In function 'vxor': bug2.c:10: internal compiler error: in simplify_subreg, at /simplify-rtx.c:3572 Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions.
There is no ICE when VECSIZE is 4. Hardware-supported AltiVec vectors are 16 bytes, so all of these are smaller than hardware-supported vectors. The larger testcase compiles and runs as expected when hardware vector support is not enabled. -- Summary: ICE for operation on small vector with altivec enabled Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: janis187 at us dot ibm dot com CC: gcc-bugs at gcc dot gnu dot org GCC target triplet: powerpc-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17961