The following code causes an ICE with any -O flag except -O0:

#include <mmintrin.h>
#include <stdint.h>
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

Reply via email to