Back-End differences between 4.2.1 and 4.3.1

Boris Boesler baembel@gmx.de
Mon Jun 23 09:31:00 GMT 2008


Hi!

  I upgraded from GCC 4.2.1 to GCC 4.3.1. But with this new version I  
can't compile any program with my back-end which works with GCC 4.2.1.  
I get the following error message:

empty-void.c: In function 'main':
empty-void.c:15: error: unrecognizable insn:
(insn 14 4 15 empty-void.c:14 (parallel [
             (set (reg/f:SI 45 A13)
                 (plus:SI (reg/f:SI 45 A13)
                     (const_int -32 [0xffffffe0])))
             (clobber (reg:CC 49 CONDSEL))
         ]) -1 (nil))
empty-void.c:15: internal compiler error: in insn_default_length, at  
insn-attrtab.c:417

  This insn belongs to the epilogue code. The error message is emitted  
AFTER expanding the prologue and the epilogue where I emit additional  
instructions but BEFORE reorganization. In 4.2.1 I solved this kind of  
errors by calling the functions "init_insn_lengths ();" and  
"shorten_branches (get_insns ());" I call "init_insn_lengths()" after  
expanding the prologue and the epilogue but that doesn't show any  
difference.

  The backtrace is:
(gdb) bt
#0  insn_default_length (insn=0x406e35a0) at insn-attrtab.c:415
#1  0x001569d0 in shorten_branches (first=0x40c83720) at ../../ 
gcc-4.3.1/gcc/final.c:1128
#2  0x00156b93 in rest_of_handle_shorten_branches () at ../../ 
gcc-4.3.1/gcc/final.c:4190
#3  0x0021a071 in execute_one_pass (pass=0x4b89e0) at ../../gcc-4.3.1/ 
gcc/passes.c:1122
#4  0x0021a247 in execute_pass_list (pass=0x4b89e0) at ../../gcc-4.3.1/ 
gcc/passes.c:1175

  Did I miss a change? Is emitting instructions more restrictive now?  
How can I solve this?

Thanks,
Boris



More information about the Gcc mailing list