This is similar to PR/152866. In the following test case compiled with -O0 gcc-4.0 produces following patter in reload phase:
(insn 68 47 67 7 (set (reg:DI 32 f0) (const_int 4294967295 [0xffffffff])) 354 {*movdi_internal32} (nil) (nil)) This pattern cause ICE in gen_reg_rtx. This is the usual problem. Reload decides to use a float register for a 'long long' expression, a constant in this case because this is legit. for powerpc. But ppc patterns cannot handle it. /* Test case */ void crc() { int toread; long long nleft; unsigned char buf[(128 * 1024)]; nleft = 0; while (toread = (nleft < (2147483647 * 2U + 1U)) ? nleft: (2147483647 * 2U + 1U) ) ; } -- Summary: Another ICE caused by reload of a psuedo reg into f0 for a DImode expr Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P2 Component: target AssignedTo: uweigand at de dot ibm dot com ReportedBy: fjahanian at apple dot com CC: dje at gcc dot gnu dot org,gcc-bugs at gcc dot gnu dot org GCC build triplet: powerpc-apple-darwin7.0.0 GCC host triplet: powerpc-apple-darwin7.0.0 GCC target triplet: powerpc-apple-darwin7.0.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18641