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
This commit is contained in:
parent
0b1d67d23b
commit
27ab3e9128
3 changed files with 18 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
|||
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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
10
gcc/optabs.c
10
gcc/optabs.c
|
@ -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))
|
||||
|
|
Loading…
Add table
Reference in a new issue