> From: Jamie Prescott <jpre...@yahoo.com>
> To: gcc@gcc.gnu.org
> Sent: Friday, May 15, 2009 3:28:18 PM
> Subject: Different reload behavior from 4.3.3 to 4.4
> 
> 
> In my VM, the X_REGS class is a generic 64bit regsiter class that can hold
> both 64bit DImode and 64bit DFmode.
> Such class does not allow direct constant loading, so in 4.3.3 I had:
> 
> enum reg_class
> xxx_preferred_reload_class(rtx x, enum reg_class regclass)
> {
>         enum machine_mode mode = GET_MODE(x);
> 
>         if (regclass == NO_REGS ||
>             ((GET_CODE(x) == CONST_INT ||
>               GET_CODE(x) == CONST_DOUBLE) && regclass == X_REGS))
>                 return NO_REGS;
>         switch (mode) {
>         case DImode:
>         case SFmode:
>         case DFmode:
>                 return X_REGS;
>         default:
>                 break;
>         }
> 
>         return regclass;
> }
> 
> This was working fine with 4.3.3, while with 4.4 I get an error like if GCC 
> was 
> trying
> to load a const_int directly anyway:
> 
> ./csrc/test_sha512.c:294: error: insn does not satisfy its constraints:
> (insn 870 869 43 2 ./csrc/test_sha512.c:200 (set (reg:DI 55 x0)
>         (const_int 7640891576956012808 [0x6a09e667f3bcc908])) 31 {movdi} 
> (nil))
> ./csrc/test_sha512.c:294: internal compiler error: in 
> reload_cse_simplify_operands, at postreload.c:396

Strange thing, this works:

<<<<<<<<
extern int loola(long long);

int noola(void)
{
        return loola(19291291912LL);
}

>>>>>>>>
$LC0:
        qword   19291291912
_noola:
        push    r8
        lea     $LC0,r8
        ldr.q    r8,x0
        call    _loola
        pop     r8
        ret


While this chokes:

<<<<<<<<<
struct ff {
        long long ll[4];
};

void noola(struct ff *p)
{
        p->ll[0] = 19291291912LL;
}

>>>>>>>>>
ainl.c: In function 'noola':
ainl.c:11: error: insn does not satisfy its constraints:
(insn 17 16 6 2 ainl.c:10 (set (reg:DI 55 x0)
        (const_int 19291291912 [0x47dd9c108])) 31 {movdi} (nil))
ainl.c:11: internal compiler error: in reload_cse_simplify_operands, at 
postreload.c:396


      

Reply via email to