This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/54938] sh libgcc_unpack_df.o fails to build: ../../../srcw/libgcc/fp-bit.h:221:19: internal compiler error: in emit_cmp_and_jump_insn_1, at optabs.c:4273
- From: "eraman at google dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 16 Oct 2012 17:04:05 +0000
- Subject: [Bug target/54938] sh libgcc_unpack_df.o fails to build: ../../../srcw/libgcc/fp-bit.h:221:19: internal compiler error: in emit_cmp_and_jump_insn_1, at optabs.c:4273
- Auto-submitted: auto-generated
- References: <bug-54938-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54938
--- Comment #4 from Easwaran Raman <eraman at google dot com> 2012-10-16 17:04:05 UTC ---
(In reply to comment #3)
> Thanks JÃrn.
> The problem is not related to my changes in PR 51244. It is caused by the
> latest change to optabs.c:
>
> 2012-10-15 Easwaran Raman <eraman@google.com>
> * optabs.c (emit_cmp_and_jump_insn_1): Add a new parameter to
> specificy the probability of taking the jump.
> (emit_cmp_and_jump_insns): Likewise.
>
>
> In emit_cmp_and_jump_insn_1, the line
>
> gcc_assert (!find_reg_note (insn, REG_BR_PROB, 0));
>
> blows up, because of config/sh/sh.c (expand_cbranchsi4):
>
> rtx jump = emit_jump_insn (branch_expander (operands[3]));
> if (probability >= 0)
> add_reg_note (jump, REG_BR_PROB, GEN_INT (probability));
I am confused why this code causes the assert in emit_cmp_and_jump_insn_1.
Could you please attach a stack trace?
>
> The following seems to fix the problem
>
> Index: gcc/optabs.c
> ===================================================================
> --- gcc/optabs.c (revision 192494)
> +++ gcc/optabs.c (working copy)
> @@ -4270,8 +4270,8 @@
> && JUMP_P (insn)
> && any_condjump_p (insn))
> {
> - gcc_assert (!find_reg_note (insn, REG_BR_PROB, 0));
> - add_reg_note (insn, REG_BR_PROB, GEN_INT (prob));
> + if (!find_reg_note (insn, REG_BR_PROB, 0))
> + add_reg_note (insn, REG_BR_PROB, GEN_INT (prob));
> }
> }
>
>
> Easwaran, could you please have a look at that? Does the change above make
> sense?
While this would certainly make the error go away, it will be good to
understand the root cause. If there is a REG_BR_PROB note already but the
probability is different from what is passed to emit_cmp_and_jump_insn_1,
should the existing value be replaced or left as such.
Thanks,
Easwaran