Hi Jeff, Hi Alex,

  The MN10300 target is currently failing to build in the mainline FSF
  sources because of this error when creating libgcc:

    gcc/libgcc2.c: In function '__popcountsi2':
    gcc/libgcc2.c:834:1: internal compiler error: in create_trace_edges, at 
dwarf2cfi.c:2325

  This turns out to be because the code in create_trace_edges does not
  handle jumps inside parallel insns, like this:

    (jump_insn 72 52 31 3 (parallel [
            (set (pc)
                (if_then_else (ne (reg:CC 51 EPSW)
                        (const_int 0 [0]))
                    (label_ref 29)
                    (pc)))
            (unspec [
                    (const_int 1 [0x1])
                ] 9)
        ]) gcc/libgcc2.c:830 -1
     (insn_list:REG_LABEL_OPERAND 29 (nil)))

  I am not sure if create_trace_edges should handle this, but I felt
  that the easiest thing to do was to fix the MN10300 backend so that
  when it was creating this insn, it would also set the label on the
  parallel container.  That is what the patch below does and with this
  applied I can build the toolchain again.

  OK to apply, or is there a better way to fix the problem ?

Cheers
  Nick

gcc/ChangeLog
2011-09-06  Nick Clifton  <ni...@redhat.com>

        * config/mn10300/mn10300.c (mn10300_insert_setlb_lcc): Set the
        jump label on the parallel part of the insn.

Index: gcc/config/mn10300/mn10300.c
===================================================================
--- gcc/config/mn10300/mn10300.c        (revision 178566)
+++ gcc/config/mn10300/mn10300.c        (working copy)
@@ -3150,6 +3150,7 @@
 
   lcc = emit_jump_insn_before (lcc, branch);
   mark_jump_label (XVECEXP (PATTERN (lcc), 0, 0), lcc, 0);
+  JUMP_LABEL (lcc) = label;
   DUMP ("Replacing branch insn...", branch);
   DUMP ("... with Lcc insn:", lcc);  
   delete_insn (branch);

   

Reply via email to