[Bug rtl-optimization/56225] New: ICE in lra-constraints.c when executing the testsuite with -m32 -march=pentium3

dnovillo at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Feb 6 14:00:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56225

             Bug #: 56225
           Summary: ICE in lra-constraints.c when executing the testsuite
                    with -m32 -march=pentium3
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: dnovillo@gcc.gnu.org
                CC: vmakarov@redhat.com
            Target: x86_64-unknown-linux-gnu


I'm getting several failures when running the testsuite with -m32
-march=pentium3.  They all seem related.  I've taken this one from
gcc.c-torture/execute/scal-to-vec2.c

$ cat scal-to-vec2.i
long __attribute__ ((noinline)) vlng () { return (long)42; }
int __attribute__ ((noinline)) vint () { return (int) 43; }
short __attribute__ ((noinline)) vsrt () { return (short)42; }
char __attribute__ ((noinline)) vchr () { return (char)42; }


int main (int argc, char *argv[]) {
    __attribute__((vector_size((16)*sizeof(char)))) char c0 = {argc,
1,2,3,4,5,6,7, argc, 1,2,3,4,5,6,7};
    __attribute__((vector_size((16)*sizeof(char)))) char c1;

    __attribute__((vector_size((8)*sizeof(short)))) short s0 = {argc,
1,2,3,4,5,6,7};
    __attribute__((vector_size((8)*sizeof(short)))) short s1;

    __attribute__((vector_size((4)*sizeof(int)))) int i0 = {argc, 1, 2, 3};
    __attribute__((vector_size((4)*sizeof(int)))) int i1;

    __attribute__((vector_size((2)*sizeof(long)))) long l0 = {argc, 1};
    __attribute__((vector_size((2)*sizeof(long)))) long l1;

    c1 = vchr() + c0; do { int __i; for (__i = 0; __i < 16; __i++) { if
((*((char *) &(c1) + __i)) != (vchr() + (*((char *) &(c0) + __i))))
__builtin_abort (); }} while (0);

    s1 = vsrt() + s0; do { int __i; for (__i = 0; __i < 8; __i++) { if
((*((short *) &(s1) + __i)) != (vsrt() + (*((short *) &(s0) + __i))))
__builtin_abort (); }} while (0);
    s1 = vchr() + s0; do { int __i; for (__i = 0; __i < 8; __i++) { if
((*((short *) &(s1) + __i)) != (vchr() + (*((short *) &(s0) + __i))))
__builtin_abort (); }} while (0);

    i1 = vint() * i0; do { int __i; for (__i = 0; __i < 4; __i++) { if ((*((int
*) &(i1) + __i)) != (vint() * (*((int *) &(i0) + __i)))) __builtin_abort (); }}
while (0);
    i1 = vsrt() * i0; do { int __i; for (__i = 0; __i < 4; __i++) { if ((*((int
*) &(i1) + __i)) != (vsrt() * (*((int *) &(i0) + __i)))) __builtin_abort (); }}
while (0);
    i1 = vchr() * i0; do { int __i; for (__i = 0; __i < 4; __i++) { if ((*((int
*) &(i1) + __i)) != (vchr() * (*((int *) &(i0) + __i)))) __builtin_abort (); }}
while (0);

    l1 = vlng() * l0; do { int __i; for (__i = 0; __i < 2; __i++) { if
((*((long *) &(l1) + __i)) != (vlng() * (*((long *) &(l0) + __i))))
__builtin_abort (); }} while (0);
    l1 = vint() * l0; do { int __i; for (__i = 0; __i < 2; __i++) { if
((*((long *) &(l1) + __i)) != (vint() * (*((long *) &(l0) + __i))))
__builtin_abort (); }} while (0);
    l1 = vsrt() * l0; do { int __i; for (__i = 0; __i < 2; __i++) { if
((*((long *) &(l1) + __i)) != (vsrt() * (*((long *) &(l0) + __i))))
__builtin_abort (); }} while (0);
    l1 = vchr() * l0; do { int __i; for (__i = 0; __i < 2; __i++) { if
((*((long *) &(l1) + __i)) != (vchr() * (*((long *) &(l0) + __i))))
__builtin_abort (); }} while (0);

    return 0;
}

When compiled with -m32, it works fine:
$ ../cc1 -fpreprocessed scal-to-vec2.i -quiet -dumpbase scal-to-vec2.c
-mtune=generic -auxbase scal-to-vec2 -O1 -w -version
-fno-diagnostics-show-caret -o scal-to-vec2.s -quiet -m32
GNU C (GCC) version 4.8.x-google-integration 20130201 (experimental)
(x86_64-unknown-linux-gnu)
        compiled by GNU C version 4.8.x-google-integration 20130201
(experimental), GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
GNU C (GCC) version 4.8.x-google-integration 20130201 (experimental)
(x86_64-unknown-linux-gnu)
        compiled by GNU C version 4.8.x-google-integration 20130201
(experimental), GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: 261028b85770ed5f451425c66cb11710

But when compiled with -m32 -march=pentium3, it fails with:
$ ../cc1 -fpreprocessed scal-to-vec2.i -quiet -dumpbase scal-to-vec2.c
-mtune=generic -auxbase scal-to-vec2 -O1 -w -version
-fno-diagnostics-show-caret -o scal-to-vec2.s -quiet -m32 -march=pentium3
GNU C (GCC) version 4.8.x-google-integration 20130201 (experimental)
(x86_64-unknown-linux-gnu)
        compiled by GNU C version 4.8.x-google-integration 20130201
(experimental), GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
GNU C (GCC) version 4.8.x-google-integration 20130201 (experimental)
(x86_64-unknown-linux-gnu)
        compiled by GNU C version 4.8.x-google-integration 20130201
(experimental), GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: 261028b85770ed5f451425c66cb11710
scal-to-vec2.i: In function 'main':
scal-to-vec2.i:35:1: internal compiler error: Max. number of generated reload
insns per insn is achieved (90)

0x7fc437 lra_constraints(bool)
        gcc/lra-constraints.c:3481
0x7ef18e lra(_IO_FILE*)
        gcc/lra.c:2279
0x7b74b8 do_reload
        gcc/ira.c:4623
0x7b74b8 rest_of_handle_reload
        gcc/ira.c:4736

Please disregard the version string 4.8.x-google-integration.  This branch is a
pure copy of trunk (with some configuration patches but no changes to the
compiler).  This also reproduces in vanilla trunk.



More information about the Gcc-bugs mailing list