From 662795a85f138c84aa9505ba731cf5fd25dd24eb Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 27 Mar 2001 21:40:43 -0800 Subject: [PATCH] combine.c (distribute_notes): If non-call exceptions, put the note on the trapping instruction. * combine.c (distribute_notes) [REG_EH_REGION]: If non-call exceptions, put the note on the trapping instruction. From-SVN: r40907 --- gcc/ChangeLog | 3 +++ gcc/combine.c | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 156756fb9a5..92105e086ec 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -20,6 +20,9 @@ * except.h (flag_non_call_exceptions): Move ... * flags.h: ... here. + * combine.c (distribute_notes) [REG_EH_REGION]: If non-call + exceptions, put the note on the trapping instruction. + 2001-03-27 Kaveh R. Ghazi * configure.in: Don't check for bcopy. diff --git a/gcc/combine.c b/gcc/combine.c index 4a148b9ce7a..4aa7721e880 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -12074,6 +12074,25 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1) break; case REG_EH_REGION: + /* These notes must remain with the call or trapping instruction. */ + if (GET_CODE (i3) == CALL_INSN) + place = i3; + else if (i2 && GET_CODE (i2) == CALL_INSN) + place = i2; + else if (flag_non_call_exceptions) + { + if (may_trap_p (i3)) + place = i3; + else if (i2 && may_trap_p (i2)) + place = i2; + /* ??? Otherwise assume we've combined things such that we + can now prove that the instructions can't trap. Drop the + note in this case. */ + } + else + abort (); + break; + case REG_EH_RETHROW: case REG_NORETURN: /* These notes must remain with the call. It should not be -- 2.30.2