Hi,

so far we emitted the jump over the literal pool as normal insn:

(insn 8094 5448 8483 (parallel [
            (set (reg:SI 13 %r13)
                (unspec [
                        (label_ref 8095)
                    ] UNSPEC_MAIN_BASE))
            (set (pc)
                (label_ref 8097))
        ]) /build/gcc-ok/libjava/gnu/gcj/tools/gcj_dbtool/
            Main.java:26 610 {main_base_31_large}
     (nil))

When dwarf2cfi tries to build its own cfg it does not recognize the
insn as control flow change.  With the attached patch the back-end
properly emits the insn as jump_insn.

This fixes java bootstrap on s390 and s390x.

Committed to mainline.

Bye,

-Andreas-


2011-12-08  Andreas Krebbel  <andreas.kreb...@de.ibm.com>

        PR target/50395
        * config/s390/s390.c (s390_mainpool_finish): Emit the jump over
        the literal pool as jump insn.


Index: gcc/config/s390/s390.c
===================================================================
*** gcc/config/s390/s390.c.orig
--- gcc/config/s390/s390.c
*************** s390_mainpool_finish (struct constant_po
*** 6476,6482 ****
        rtx pool_end = gen_label_rtx ();
  
        insn = gen_main_base_31_large (base_reg, pool->label, pool_end);
!       insn = emit_insn_after (insn, pool->pool_insn);
        INSN_ADDRESSES_NEW (insn, -1);
        remove_insn (pool->pool_insn);
  
--- 6476,6483 ----
        rtx pool_end = gen_label_rtx ();
  
        insn = gen_main_base_31_large (base_reg, pool->label, pool_end);
!       insn = emit_jump_insn_after (insn, pool->pool_insn);
!       JUMP_LABEL (insn) = pool_end;
        INSN_ADDRESSES_NEW (insn, -1);
        remove_insn (pool->pool_insn);
  

Reply via email to