The following code causes an ICE with any -O flag except -O0:
#include
#include
int main(int argc, char *argv[]) {
__m64 a, b, c;
a = b = c = (__m64)(uint64_t)argc; /* Load with arbitrary values */
a = _mm_slli_pi16(a, 3);
a = _mm_adds_pi16(a, b);
c = _mm_srli_pi16(c, 8);
c = _mm_slli_pi16(c, 3);
b = _mm_adds_pi16(b, c);
a = _mm_unpacklo_pi8(a, b);
return (int)(uint64_t)a;
}
Resulting error is:
crashmmx.c: In function main:
crashmmx.c:16: internal compiler error: in trunc_int_for_mode, at explow.c:53
--
Summary: MMX intrinsics cause ICE in trunc_int_for_mode
Product: gcc
Version: 4.0.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: sam at zoy dot org
CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: i486-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963