> > > > > tail -n 30 > > /work/built/mbuild/g148-rguenther-61/x86_64/Logfile.gcc-mainline.spec > > -o 32/crtbeginT.o > > ../../gcc/libgcc2.c: In function '__fixunsdfdi': > > ../../gcc/libgcc2.c:1228: error: could not split insn > > (insn:TI 17 65 66 ../../gcc/libgcc2.c:1219 (parallel [ > > (set (reg:DI 0 ax [66]) > > (ashift:DI (reg:DI 0 ax [66]) > > (const_int 32 [0x20]))) > > (clobber (reg:CC 17 flags)) > > ]) 411 {*ashldi3_1} (insn_list:REG_DEP_ANTI 15 > > (insn_list:REG_DEP_TRUE 63 (insn_list:REG_DEP_TRUE 59 (nil)))) > > (expr_list:REG_UNUSED (reg:CC 17 flags) > > (nil))) > > ../../gcc/libgcc2.c:1228: internal compiler error: in final_scan_insn, at > > final.c:2467 > > Please submit a full bug report, > > with preprocessed source if appropriate. > > See <URL:http://www.suse.de/feedback> for instructions. > > make[3]: *** [libgcc/32/_fixunsdfdi.o] Error 1 > > And this is just recent too. > > Anyways here is the reduced testcase: > long long > __fixunsdfdi (unsigned hi, unsigned lo) > { > return ((unsigned long long) hi << (32)) | lo; > }
flow2 is where the diference comes in: --- old/t.c.40.flow2 2005-11-20 02:48:18.000000000 +0100 +++ new/t.c.40.flow2 2005-11-20 02:48:30.000000000 +0100 @@ -47,12 +47,12 @@ (reg:SI 1 dx [ D.1281+4 ]))# {*movsi_1} (nil) (nil)) -(insn# # # 1 (set (reg:SI 5 di [ D.1282+4 ]) - (reg:SI 4 si [orig:60 D.1282 ] [60]))# {*movsi_1} (nil) - (nil)) - -(insn# # # 1 (set (reg:SI 4 si [orig:60 D.1282 ] [60]) - (const_int 0 [0x0]))# {*movsi_1} (nil) +(insn# # # 1 (parallel [ + (set (reg:DI 4 si [orig:60 D.1282 ] [60]) + (ashift:DI (reg:DI 4 si [orig:60 D.1282 ] [60]) + (const_int 32 [0x20]))) + (clobber (reg:CC 17 flags)) + ])# {*ashldi3_1} (nil) (nil)) (insn# # # 1 (set (reg:SI 2 cx [orig:59 D.1283 ] [59]) I don't understand why it is not being split at all. -- Pinski