public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* target/10282: ICE: unable to find a register to spill in class `Q_REGS'
@ 2003-03-31 23:36 gabor
  0 siblings, 0 replies; only message in thread
From: gabor @ 2003-03-31 23:36 UTC (permalink / raw)
  To: gcc-gnats


>Number:         10282
>Category:       target
>Synopsis:       ICE: unable to find a register to spill in class `Q_REGS'
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Mon Mar 31 23:26:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Gabor Greif
>Release:        gcc (GCC) 3.4 20030325 (experimental)
>Organization:
>Environment:
Linux cantor 2.2.20 #1 Sat Apr 20 11:45:28 EST 2002 i686 unknown
>Description:
compiling attachment this way:

gcc -I.  -O2 -fomit-frame-pointer -x c -fno-strict-aliasing  bug2.c 


I get:

bug2.c: In function `formatZformatZbuf_format_integer_METH_INT_next_digit':
bug2.c:248: error: unable to find a register to spill in class `Q_REGS'
bug2.c:248: error: this is the insn:
(insn:HI 294 427 296 10 0x4013e3c8 (set (mem:QI (plus:SI (plus:SI (subreg:SI (reg/v:DI 89 [ L_value_6 ]) 0)
                    (subreg:SI (reg/v:DI 88 [ L_value_5 ]) 4))
                (const_int 16 [0x10])) [0 S1 A8])
        (subreg:QI (reg/v:SI 5 edi [orig:84 L_PCTelement ] [84]) 0)) 48 {*movqi_1} (nil)
    (expr_list:REG_DEAD (reg/v:SI 5 edi [orig:84 L_PCTelement ] [84])
        (expr_list:REG_DEAD (reg/v:DI 89 [ L_value_6 ])
            (expr_list:REG_DEAD (reg/v:DI 88 [ L_value_5 ])
                (nil)))))
bug2.c:248: internal compiler error: in spill_failure, at reload1.c:1917
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>How-To-Repeat:
compile attachment (sorry for the size)

May be related to PR#9929 ?
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/plain; name="bug2.c"
Content-Disposition: inline; filename="bug2.c"



typedef struct heapobj *heapptr_t;
typedef struct descriptor {
    heapptr_t heapptr;
    union {
        long l;
        float f;
        void *ptr;
    } dataword;
} descriptor_t;



typedef descriptor_t *(*entry_t)();

extern heapptr_t allocate(int bytes);
extern descriptor_t *allocate_stack(void);
extern void destroy(void* ptr);
extern heapptr_t make_trampoline(void *func, descriptor_t closure,
                                 int nkeys, char *signature);
extern descriptor_t *catch(descriptor_t *(*fn)(descriptor_t *sp, void *state,
                                               heapptr_t thunk),
                           descriptor_t *sp, heapptr_t func);
extern void throw(void *state, descriptor_t *stack_top);

extern descriptor_t *pad_cluster(descriptor_t *start, descriptor_t *end,
                                 int min_values);
extern descriptor_t *values_sequence(descriptor_t *sp, heapptr_t vector);

extern heapptr_t make_double_float(double value);
extern double double_float_value(heapptr_t df);

extern heapptr_t make_extended_float(long double value);
extern long double extended_float_value(heapptr_t xf);


extern heapptr_t make_double_integer(long long value);
extern long long double_integer_value(heapptr_t xf);
extern heapptr_t initial_symbols;

extern void not_reached(void);
extern void no_core_dumps(void);





extern heapptr_t dylanZdylan_visceraZas_METH_7(descriptor_t *orig_sp, heapptr_t A0, long A1, heapp\
tr_t A2);

extern struct heapobj dylanZdylan_visceraZCLS_extended_integer_HEAP;

extern struct heapobj dylanZliteral_ROOT_4;

extern struct mv_result_0 dylanZdylan_visceraZfloorSLASH_METH(descriptor_t *orig_sp, heapptr_t A0,\
 heapptr_t A1, heapptr_t A2);

extern struct heapobj dylanZliteral_ROOT_46;

extern long dylanZdylan_visceraZas_METH_8(descriptor_t *orig_sp, heapptr_t A0, heapptr_t A1, heapp\
tr_t A2);


struct mv_result_0 {
    heapptr_t R0;
    heapptr_t R1;
};


extern descriptor_t formatZliteral_2;

extern struct heapobj dylanZdylan_visceraZCLS_integer_HEAP;
extern descriptor_t formatZformatZCdigits;
extern struct heapobj dylanZliteral_ROOT_61;

extern struct heapobj formatZliteral_ROOT_4;

extern struct heapobj dylanZstr_ROOT_7;


void formatZformatZbuf_format_integer_METH_INT_next_digit(descriptor_t *orig_sp, heapptr_t A_bd , \
long A_radix , heapptr_t A_buf , heapptr_t A_next , heapptr_t A_size , heapptr_t A_arg )
{
    descriptor_t *cluster_0_top;
    heapptr_t L_arg1;
    struct mv_result_0 L_temp;
    heapptr_t L_quo;
    heapptr_t L_rem;
    long L_bignum_digit;
    int L_res;
    descriptor_t L_value;
    long L_typed;
    descriptor_t L_value_2;
    descriptor_t L_value_3;
    heapptr_t L_buffer;
    descriptor_t L_temp_2;
    long L_next_ele;
    descriptor_t L_temp_3;
    long L_limit;
    descriptor_t L_temp_4;
    long L_arg1_2;
    int L_condition;
    long L_PCTelement;
    long L_value_4;
    int L_condition_2;
    long L_temp_5;
    descriptor_t L_value_5;
    descriptor_t L_value_6;
    int L_condition_3;
    descriptor_t L_value_7;
    descriptor_t L_temp_6;
    descriptor_t L_temp_7;
    descriptor_t L_temp_8;


    L_arg1 = dylanZdylan_visceraZas_METH_7(orig_sp, &dylanZdylan_visceraZCLS_extended_integer_HEAP\
, A_radix, &dylanZliteral_ROOT_4);

    L_temp = dylanZdylan_visceraZfloorSLASH_METH(orig_sp, A_arg, L_arg1, &dylanZliteral_ROOT_46);
    L_quo = L_temp.R0;
    L_rem = L_temp.R1;


    if (((*(long *)((char *)L_quo + 4)) == 1)) {
        L_bignum_digit = (*(unsigned short *)((char *)L_quo + 8 + 0 * sizeof(unsigned short)));
        L_res = (L_bignum_digit == 0);
    }
    else {
        L_res = 0;
    }
    if (L_res) {
    }
    else {

        formatZformatZbuf_format_integer_METH_INT_next_digit(orig_sp, A_bd, A_radix, A_buf, A_next\
, A_size, L_quo);
    }

    L_value = (*(descriptor_t *)((char *)A_next + 4));



    L_typed = L_value.dataword.l;
    L_value_2 = (*(descriptor_t *)((char *)A_size + 4));


    if ((L_value_2.dataword.l == L_typed)) {

        L_value_3 = (*(descriptor_t *)((char *)A_next + 4));



        formatZformatZget_next_output_buffer_FUN(orig_sp, A_bd, L_value_3.dataword.l);

        L_buffer = (*(heapptr_t *)((char *)A_bd + 8));


        L_temp_2.heapptr = L_buffer;
        L_temp_2.dataword.l = 0;
        (*(descriptor_t *)((char *)A_buf + 4)) = L_temp_2;


        L_next_ele = (*(long *)((char *)A_bd + 12));


        L_temp_3.heapptr = formatZliteral_2.heapptr;
        L_temp_3.dataword.l = L_next_ele;
        (*(descriptor_t *)((char *)A_next + 4)) = L_temp_3;


        L_limit = (*(long *)((char *)A_bd + 16));


        L_temp_4.heapptr = formatZliteral_2.heapptr;
        L_temp_4.dataword.l = L_limit;
        (*(descriptor_t *)((char *)A_size + 4)) = L_temp_4;
    }



    L_arg1_2 = dylanZdylan_visceraZas_METH_8(orig_sp, &dylanZdylan_visceraZCLS_integer_HEAP, L_rem\
, &dylanZliteral_ROOT_4);


    if ((L_arg1_2 < 0)) {
        L_condition = 0;
    }
    else {
        L_condition = (L_arg1_2 < (*(long *)((char *)formatZformatZCdigits.heapptr + 4)));
    }
    if (L_condition) {
        L_PCTelement = (*(unsigned char *)((char *)formatZformatZCdigits.heapptr + 8 + L_arg1_2 * \
sizeof(unsigned char)));


        L_value_4 = L_PCTelement;

        L_condition_2 = dylanZdylan_visceraZPCTinstanceQUERY_METH_8(orig_sp, L_value_4, &dylanZlit\
eral_ROOT_61, &formatZliteral_ROOT_4);
        if (L_condition_2) {
            L_temp_5 = L_value_4;
            L_value_5 = (*(descriptor_t *)((char *)A_next + 4));
            L_value_6 = (*(descriptor_t *)((char *)A_buf + 4));
            if ((L_value_5.dataword.l < 0)) {
                L_condition_3 = 0;
            }
            else {
                L_condition_3 = (L_value_5.dataword.l < (*(long *)((char *)L_value_6.heapptr + 12)\
));
            }
            if (L_condition_3) {
                (*(unsigned char *)((char *)L_value_6.heapptr + 16 + L_value_5.dataword.l * sizeof\
(unsigned char))) = L_temp_5;
                L_value_7 = (*(descriptor_t *)((char *)A_next + 4));


                L_temp_6.heapptr = formatZliteral_2.heapptr;
                L_temp_6.dataword.l = (L_value_7.dataword.l + 1);
                (*(descriptor_t *)((char *)A_next + 4)) = L_temp_6;
                return;
            }
            else {


                dylanZdylan_visceraZelement_error_FUN(orig_sp, L_value_6, L_value_5.dataword.l);
                not_reached();
            }
        }
        else {
            L_temp_7.heapptr = formatZliteral_2.heapptr;
            L_temp_7.dataword.l = L_value_4;
            L_temp_8.heapptr = &dylanZstr_ROOT_7;
            L_temp_8.dataword.l = 0;

            dylanZdylan_visceraZtype_error_with_location_FUN(orig_sp, L_temp_7, &dylanZliteral_ROO\
T_61, L_temp_8);
            not_reached();
        }
    }
    else {



        dylanZdylan_visceraZelement_error_FUN(orig_sp, formatZformatZCdigits, L_arg1_2);
        not_reached();
    }
}


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-03-31 23:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-03-31 23:36 target/10282: ICE: unable to find a register to spill in class `Q_REGS' gabor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).