Commit 27ab3e91 by Richard Henderson Committed by Richard Henderson

re PR middle-end/11767 (different code behaviour with -fnon-call-exceptions -fprofile-arcs)

        PR middle-end/11767
        * coverage.c (coverage_counter_ref): Set MEM_NOTRAP_P.
        * optabs.c (prepare_cmp_insn): Force trapping memories to registers
        before the compare, if flag_non_call_exceptions.
        * g++.dg/other/profile1.C: New.

From-SVN: r78805
parent 0b1d67d2
2004-03-02 Richard Henderson <rth@redhat.com>
PR middle-end/11767
* coverage.c (coverage_counter_ref): Set MEM_NOTRAP_P.
* optabs.c (prepare_cmp_insn): Force trapping memories to registers
before the compare, if flag_non_call_exceptions.
2004-03-02 Richard Henderson <rth@redhat.com>
PR middle-end/14327
* stmt.c (expand_computed_goto): Do do_pending_stack_adjust before
emitting the label, not after.
......
......@@ -399,6 +399,7 @@ coverage_counter_ref (unsigned counter, unsigned no)
ref = plus_constant (ctr_labels[counter], gcov_size / BITS_PER_UNIT * no);
ref = gen_rtx_MEM (mode, ref);
set_mem_alias_set (ref, new_alias_set ());
MEM_NOTRAP_P (ref) = 1;
return ref;
}
......
......@@ -3650,6 +3650,16 @@ prepare_cmp_insn (rtx *px, rtx *py, enum rtx_code *pcomparison, rtx size,
return;
}
/* Don't allow operands to the compare to trap, as that can put the
compare and branch in different basic blocks. */
if (flag_non_call_exceptions)
{
if (may_trap_p (x))
x = force_reg (mode, x);
if (may_trap_p (y))
y = force_reg (mode, y);
}
*px = x;
*py = y;
if (can_compare_p (*pcomparison, mode, purpose))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment