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 Any hints? - Jamie