summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-03 00:46:06 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-03 00:46:06 +0000
commita2b9a662bd8f52d2a131cf369dcbd37c5be6eb7a (patch)
tree89c4a2eac8c27b87bff6eb652865b74686befcd2 /gcc
parent8832296b8668d361081fe45a3d89482967f2483f (diff)
downloadppe42-gcc-a2b9a662bd8f52d2a131cf369dcbd37c5be6eb7a.tar.gz
ppe42-gcc-a2b9a662bd8f52d2a131cf369dcbd37c5be6eb7a.zip
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78805 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/coverage.c1
-rw-r--r--gcc/optabs.c10
3 files changed, 18 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1a8e3331442..ebcd2ec39d6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
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.
diff --git a/gcc/coverage.c b/gcc/coverage.c
index 6d6f3b8b36f..d045d79358c 100644
--- a/gcc/coverage.c
+++ b/gcc/coverage.c
@@ -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;
}
diff --git a/gcc/optabs.c b/gcc/optabs.c
index cf3099b3523..0826782473f 100644
--- a/gcc/optabs.c
+++ b/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))
OpenPOWER on IntegriCloud