Define target hook TARGET_UNWIND_EMIT_BEFORE_INSN.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Sep 2010 17:25:11 +0000 (17:25 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Sep 2010 17:25:11 +0000 (17:25 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163961 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/final.c
gcc/target.def

index 746b3fb..f544f73 100644 (file)
@@ -1,3 +1,10 @@
+2010-09-07  Richard Henderson  <rth@redhat.com>
+
+       * target.def (unwind_emit_before_insn): New hook.
+       * doc/tm.texi.in: Add @hook marker for it.
+       * doc/tm.texi: Rebuild.
+       * final.c (final_scan_insn): Respect unwind_emit_before_insn.
+
 2010-09-07  Martin Jambor  <mjambor@suse.cz>
 
        PR fortran/43665
@@ -6,8 +13,8 @@
 
 2010-09-07  Jan Hubicka  <jh@suse.cz>
 
-       * tree-ssa-ccp.c (fold_const_aggregate_ref): Fix handling of array_ref_low_bound
-       in string access folding.
+       * tree-ssa-ccp.c (fold_const_aggregate_ref): Fix handling of
+       array_ref_low_bound in string access folding.
 
 2010-09-07  Uros Bizjak  <ubizjak@gmail.com>
 
index 5954ea3..a8db902 100644 (file)
@@ -8749,6 +8749,10 @@ This target hook emits assembly directives required to unwind the
 given instruction.  This is only used when TARGET_UNWIND_INFO is set.
 @end deftypefn
 
+@deftypevr {Target Hook} bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
+True if the @code{TARGET_ASM_UNWIND_EMIT} hook should be called before the assembly for @var{insn} has been emitted, false if the hook should be called afterward.
+@end deftypevr
+
 @node Exception Region Output
 @subsection Assembler Commands for Exception Regions
 
index 24f5c1b..2efc1ae 100644 (file)
@@ -8739,6 +8739,8 @@ This target hook emits assembly directives required to unwind the
 given instruction.  This is only used when TARGET_UNWIND_INFO is set.
 @end deftypefn
 
+@hook TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
+
 @node Exception Region Output
 @subsection Assembler Commands for Exception Regions
 
index 73c6069..06ebc17 100644 (file)
@@ -2655,7 +2655,8 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
        /* ??? This will put the directives in the wrong place if
           get_insn_template outputs assembly directly.  However calling it
           before get_insn_template breaks if the insns is split.  */
-       if (targetm.asm_out.unwind_emit)
+       if (targetm.asm_out.unwind_emit_before_insn
+           && targetm.asm_out.unwind_emit)
          targetm.asm_out.unwind_emit (asm_out_file, insn);
 
        if (CALL_P (insn))
@@ -2713,6 +2714,10 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
          dwarf2out_frame_debug (insn, true);
 #endif
 
+       if (!targetm.asm_out.unwind_emit_before_insn
+           && targetm.asm_out.unwind_emit)
+         targetm.asm_out.unwind_emit (asm_out_file, insn);
+
        current_output_insn = debug_insn = 0;
       }
     }
index f11328b..e62a977 100644 (file)
@@ -152,6 +152,13 @@ DEFHOOK
  void, (FILE *stream, rtx insn),
  NULL)
 
+DEFHOOKPOD
+(unwind_emit_before_insn,
+ "True if the @code{TARGET_ASM_UNWIND_EMIT} hook should be called before\
+ the assembly for @var{insn} has been emitted, false if the hook should\
+ be called afterward.",
+ bool, true)
+
 /* Output an internal label.  */
 DEFHOOK
 (internal_label,