public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before
@ 2016-05-17  1:09 Segher Boessenkool
  2016-05-17  1:09 ` [PATCH 2/3] function: Factor out make_*logue_seq Segher Boessenkool
                   ` (2 more replies)
  0 siblings, 3 replies; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-17  1:09 UTC (permalink / raw)
  To: gcc-patches; +Cc: Segher Boessenkool

We should do CLEANUP_EXPENSIVE after shrink-wrapping, because shrink-
wrapping creates constructs that CLEANUP_EXPENSIVE can optimise, and
nothing runs CLEANUP_EXPENSIVE later.  We don't need cleanup_cfg before
shrink-wrapping, nothing in shrink-wrapping (or the other *logue insertion
code) cares at all.

Tested this (and the other two patches in this series) on powerpc64-linux
(-m32/-m64, -mlra/-mno-lra); on powerpc64le-linux; and on x86_64-linux.
No regressions.

Is this okay for trunk?


Segher


2016-05-16  Segher Boessenkool  <segher@kernel.crashing.org>

	* function.c (rest_of_handle_thread_prologue_and_epilogue): Call
	cleanup_cfg with CLEANUP_EXPENSIVE after shrink-wrapping.  Don't
	call cleanup_cfg before shrink-wrapping.

---
 gcc/function.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/gcc/function.c b/gcc/function.c
index 70584b9..b9a6338 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -6369,9 +6369,6 @@ make_pass_leaf_regs (gcc::context *ctxt)
 static unsigned int
 rest_of_handle_thread_prologue_and_epilogue (void)
 {
-  if (optimize)
-    cleanup_cfg (CLEANUP_EXPENSIVE);
-
   /* On some machines, the prologue and epilogue code, or parts thereof,
      can be represented as RTL.  Doing so lets us schedule insns between
      it and the rest of the code and also allows delayed branch
@@ -6384,7 +6381,7 @@ rest_of_handle_thread_prologue_and_epilogue (void)
 
   /* Shrink-wrapping can result in unreachable edges in the epilogue,
      see PR57320.  */
-  cleanup_cfg (0);
+  cleanup_cfg (optimize ? CLEANUP_EXPENSIVE : 0);
 
   /* The stack usage info is finalized during prologue expansion.  */
   if (flag_stack_usage_info)
-- 
1.9.3

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-17  1:09 [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before Segher Boessenkool
@ 2016-05-17  1:09 ` Segher Boessenkool
  2016-05-17 20:35   ` Jeff Law
  2016-05-18 17:17   ` H.J. Lu
  2016-05-17  1:09 ` [PATCH 3/3] function: Restructure *logue insertion Segher Boessenkool
  2016-05-17  8:06 ` [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before Eric Botcazou
  2 siblings, 2 replies; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-17  1:09 UTC (permalink / raw)
  To: gcc-patches; +Cc: Segher Boessenkool

Make new functions make_split_prologue_seq, make_prologue_seq, and
make_epilogue_seq.

Tested as in the previous patch; is this okay for trunk?


Segher


2016-05-16  Segher Boessenkool  <segher@kernel.crashing.org>

	* function.c (make_split_prologue_seq, make_prologue_seq,
	make_epilogue_seq): New functions, factored out from...
	(thread_prologue_and_epilogue_insns): Here.

---
 gcc/function.c | 154 +++++++++++++++++++++++++++++++--------------------------
 1 file changed, 85 insertions(+), 69 deletions(-)

diff --git a/gcc/function.c b/gcc/function.c
index b9a6338..75d2ad4 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5768,6 +5768,83 @@ set_return_jump_label (rtx_insn *returnjump)
     JUMP_LABEL (returnjump) = ret_rtx;
 }
 
+static rtx_insn *
+make_split_prologue_seq (void)
+{
+  if (!flag_split_stack
+      || lookup_attribute ("no_split_stack", DECL_ATTRIBUTES (cfun->decl)))
+    return NULL;
+
+  start_sequence ();
+  emit_insn (targetm.gen_split_stack_prologue ());
+  rtx_insn *seq = get_insns ();
+  end_sequence ();
+
+  record_insns (seq, NULL, &prologue_insn_hash);
+  set_insn_locations (seq, prologue_location);
+
+  return seq;
+}
+
+static rtx_insn *
+make_prologue_seq (void)
+{
+  if (!targetm.have_prologue ())
+    return NULL;
+
+  start_sequence ();
+  rtx_insn *seq = targetm.gen_prologue ();
+  emit_insn (seq);
+
+  /* Insert an explicit USE for the frame pointer
+     if the profiling is on and the frame pointer is required.  */
+  if (crtl->profile && frame_pointer_needed)
+    emit_use (hard_frame_pointer_rtx);
+
+  /* Retain a map of the prologue insns.  */
+  record_insns (seq, NULL, &prologue_insn_hash);
+  emit_note (NOTE_INSN_PROLOGUE_END);
+
+  /* Ensure that instructions are not moved into the prologue when
+     profiling is on.  The call to the profiling routine can be
+     emitted within the live range of a call-clobbered register.  */
+  if (!targetm.profile_before_prologue () && crtl->profile)
+    emit_insn (gen_blockage ());
+
+  seq = get_insns ();
+  end_sequence ();
+  set_insn_locations (seq, prologue_location);
+
+  return seq;
+}
+
+static rtx_insn *
+make_epilogue_seq (rtx_insn **epilogue_end)
+{
+  if (!targetm.have_epilogue ())
+    return NULL;
+
+  start_sequence ();
+  *epilogue_end = emit_note (NOTE_INSN_EPILOGUE_BEG);
+  rtx_insn *seq = targetm.gen_epilogue ();
+  if (seq)
+    emit_jump_insn (seq);
+
+  /* Retain a map of the epilogue insns.  */
+  record_insns (seq, NULL, &epilogue_insn_hash);
+  set_insn_locations (seq, epilogue_location);
+
+  seq = get_insns ();
+  rtx_insn *returnjump = get_last_insn ();
+  end_sequence ();
+
+  if (JUMP_P (returnjump))
+    set_return_jump_label (returnjump);
+
+  return seq;
+}
+
+
 
 /* Generate the prologue and epilogue RTL if the machine supports it.  Thread
    this into place with notes indicating where the prologue ends and where
@@ -5822,9 +5899,7 @@ thread_prologue_and_epilogue_insns (void)
 {
   bool inserted;
   bitmap_head bb_flags;
-  rtx_insn *returnjump;
   rtx_insn *epilogue_end ATTRIBUTE_UNUSED;
-  rtx_insn *prologue_seq ATTRIBUTE_UNUSED, *split_prologue_seq ATTRIBUTE_UNUSED;
   edge e, entry_edge, orig_entry_edge, exit_fallthru_edge;
   edge_iterator ei;
 
@@ -5834,7 +5909,6 @@ thread_prologue_and_epilogue_insns (void)
 
   inserted = false;
   epilogue_end = NULL;
-  returnjump = NULL;
 
   /* Can't deal with multiple successors of the entry block at the
      moment.  Function should always have at least one entry
@@ -5843,46 +5917,9 @@ thread_prologue_and_epilogue_insns (void)
   entry_edge = single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun));
   orig_entry_edge = entry_edge;
 
-  split_prologue_seq = NULL;
-  if (flag_split_stack
-      && (lookup_attribute ("no_split_stack", DECL_ATTRIBUTES (cfun->decl))
-	  == NULL))
-    {
-      start_sequence ();
-      emit_insn (targetm.gen_split_stack_prologue ());
-      split_prologue_seq = get_insns ();
-      end_sequence ();
-
-      record_insns (split_prologue_seq, NULL, &prologue_insn_hash);
-      set_insn_locations (split_prologue_seq, prologue_location);
-    }
-
-  prologue_seq = NULL;
-  if (targetm.have_prologue ())
-    {
-      start_sequence ();
-      rtx_insn *seq = targetm.gen_prologue ();
-      emit_insn (seq);
-
-      /* Insert an explicit USE for the frame pointer
-         if the profiling is on and the frame pointer is required.  */
-      if (crtl->profile && frame_pointer_needed)
-	emit_use (hard_frame_pointer_rtx);
-
-      /* Retain a map of the prologue insns.  */
-      record_insns (seq, NULL, &prologue_insn_hash);
-      emit_note (NOTE_INSN_PROLOGUE_END);
-
-      /* Ensure that instructions are not moved into the prologue when
-	 profiling is on.  The call to the profiling routine can be
-	 emitted within the live range of a call-clobbered register.  */
-      if (!targetm.profile_before_prologue () && crtl->profile)
-        emit_insn (gen_blockage ());
-
-      prologue_seq = get_insns ();
-      end_sequence ();
-      set_insn_locations (prologue_seq, prologue_location);
-    }
+  rtx_insn *split_prologue_seq = make_split_prologue_seq ();
+  rtx_insn *prologue_seq = make_prologue_seq ();
+  rtx_insn *epilogue_seq = make_epilogue_seq (&epilogue_end);
 
   bitmap_initialize (&bb_flags, &bitmap_default_obstack);
 
@@ -5915,7 +5952,9 @@ thread_prologue_and_epilogue_insns (void)
 
   exit_fallthru_edge = find_fallthru_edge (EXIT_BLOCK_PTR_FOR_FN (cfun)->preds);
 
-  if (targetm.have_return () && exit_fallthru_edge == NULL)
+  /* If nothing falls through into the exit block, we don't need an
+     epilogue.  */
+  if (exit_fallthru_edge == NULL)
     goto epilogue_done;
 
   /* A small fib -- epilogue is not yet completed, but we wish to re-use
@@ -5947,33 +5986,10 @@ thread_prologue_and_epilogue_insns (void)
       emit_note_after (NOTE_INSN_EPILOGUE_BEG, prev);
     }
 
-  /* If nothing falls through into the exit block, we don't need an
-     epilogue.  */
-
-  if (exit_fallthru_edge == NULL)
-    goto epilogue_done;
-
-  if (targetm.have_epilogue ())
+  if (epilogue_seq)
     {
-      start_sequence ();
-      epilogue_end = emit_note (NOTE_INSN_EPILOGUE_BEG);
-      rtx_insn *seq = targetm.gen_epilogue ();
-      if (seq)
-	emit_jump_insn (seq);
-
-      /* Retain a map of the epilogue insns.  */
-      record_insns (seq, NULL, &epilogue_insn_hash);
-      set_insn_locations (seq, epilogue_location);
-
-      seq = get_insns ();
-      returnjump = get_last_insn ();
-      end_sequence ();
-
-      insert_insn_on_edge (seq, exit_fallthru_edge);
+      insert_insn_on_edge (epilogue_seq, exit_fallthru_edge);
       inserted = true;
-
-      if (JUMP_P (returnjump))
-	set_return_jump_label (returnjump);
     }
   else
     {
-- 
1.9.3

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH 3/3] function: Restructure *logue insertion
  2016-05-17  1:09 [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before Segher Boessenkool
  2016-05-17  1:09 ` [PATCH 2/3] function: Factor out make_*logue_seq Segher Boessenkool
@ 2016-05-17  1:09 ` Segher Boessenkool
  2016-05-19  8:04   ` Segher Boessenkool
  2016-05-19 22:00   ` Jeff Law
  2016-05-17  8:06 ` [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before Eric Botcazou
  2 siblings, 2 replies; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-17  1:09 UTC (permalink / raw)
  To: gcc-patches; +Cc: Segher Boessenkool

This patch restructures how the prologues/epilogues are inserted.  Sibcalls
that run without prologue are now handled in shrink-wrap.c; it communicates
what is already handled by setting the EDGE_IGNORE flag.  The
try_shrink_wrapping function then doesn't need to be passed the bb_flags
anymore.

Tested like the previous two patches; is this okay for trunk?


Segher


2016-05-16  Segher Boessenkool  <segher@kernel.crashing.org>

	* function.c (make_epilogue_seq): Remove epilogue_end parameter.
	(thread_prologue_and_epilogue_insns): Remove bb_flags.  Restructure
	code.  Ignore sibcalls on EDGE_IGNORE edges.
	* shrink-wrap.c (handle_simple_exit): New function.  Set EDGE_IGNORE
	on edges for sibcalls that run without prologue.  The rest of the
	function is combined from...
	(fix_fake_fallthrough_edge): ... this, and ...
	(try_shrink_wrapping): ... a part of this.  Remove the bb_with
	function argument, make it a local variable.

---
 gcc/function.c    | 168 ++++++++++++++++++++++--------------------------------
 gcc/shrink-wrap.c |  88 ++++++++++++++--------------
 gcc/shrink-wrap.h |   3 +-
 3 files changed, 113 insertions(+), 146 deletions(-)

diff --git a/gcc/function.c b/gcc/function.c
index 75d2ad4..278aaf6 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5819,13 +5819,13 @@ make_prologue_seq (void)
 }
 
 static rtx_insn *
-make_epilogue_seq (rtx_insn **epilogue_end)
+make_epilogue_seq (void)
 {
   if (!targetm.have_epilogue ())
     return NULL;
 
   start_sequence ();
-  *epilogue_end = emit_note (NOTE_INSN_EPILOGUE_BEG);
+  emit_note (NOTE_INSN_EPILOGUE_BEG);
   rtx_insn *seq = targetm.gen_epilogue ();
   if (seq)
     emit_jump_insn (seq);
@@ -5897,66 +5897,29 @@ make_epilogue_seq (rtx_insn **epilogue_end)
 void
 thread_prologue_and_epilogue_insns (void)
 {
-  bool inserted;
-  bitmap_head bb_flags;
-  rtx_insn *epilogue_end ATTRIBUTE_UNUSED;
-  edge e, entry_edge, orig_entry_edge, exit_fallthru_edge;
-  edge_iterator ei;
-
   df_analyze ();
 
-  rtl_profile_for_bb (ENTRY_BLOCK_PTR_FOR_FN (cfun));
-
-  inserted = false;
-  epilogue_end = NULL;
-
   /* Can't deal with multiple successors of the entry block at the
      moment.  Function should always have at least one entry
      point.  */
   gcc_assert (single_succ_p (ENTRY_BLOCK_PTR_FOR_FN (cfun)));
-  entry_edge = single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun));
-  orig_entry_edge = entry_edge;
+
+  edge entry_edge = single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun));
+  edge orig_entry_edge = entry_edge;
 
   rtx_insn *split_prologue_seq = make_split_prologue_seq ();
   rtx_insn *prologue_seq = make_prologue_seq ();
-  rtx_insn *epilogue_seq = make_epilogue_seq (&epilogue_end);
-
-  bitmap_initialize (&bb_flags, &bitmap_default_obstack);
+  rtx_insn *epilogue_seq = make_epilogue_seq ();
 
   /* Try to perform a kind of shrink-wrapping, making sure the
      prologue/epilogue is emitted only around those parts of the
      function that require it.  */
 
-  try_shrink_wrapping (&entry_edge, &bb_flags, prologue_seq);
+  try_shrink_wrapping (&entry_edge, prologue_seq);
 
-  if (split_prologue_seq != NULL_RTX)
-    {
-      insert_insn_on_edge (split_prologue_seq, orig_entry_edge);
-      inserted = true;
-    }
-  if (prologue_seq != NULL_RTX)
-    {
-      insert_insn_on_edge (prologue_seq, entry_edge);
-      inserted = true;
-    }
-
-  /* If the exit block has no non-fake predecessors, we don't need
-     an epilogue.  */
-  FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR_FOR_FN (cfun)->preds)
-    if ((e->flags & EDGE_FAKE) == 0)
-      break;
-  if (e == NULL)
-    goto epilogue_done;
 
   rtl_profile_for_bb (EXIT_BLOCK_PTR_FOR_FN (cfun));
 
-  exit_fallthru_edge = find_fallthru_edge (EXIT_BLOCK_PTR_FOR_FN (cfun)->preds);
-
-  /* If nothing falls through into the exit block, we don't need an
-     epilogue.  */
-  if (exit_fallthru_edge == NULL)
-    goto epilogue_done;
-
   /* A small fib -- epilogue is not yet completed, but we wish to re-use
      this marker for the splits of EH_RETURN patterns, and nothing else
      uses the flag in the meantime.  */
@@ -5967,6 +5930,8 @@ thread_prologue_and_epilogue_insns (void)
      code.  In order to be able to properly annotate these with unwind
      info, try to split them now.  If we get a valid split, drop an
      EPILOGUE_BEG note and mark the insns as epilogue insns.  */
+  edge e;
+  edge_iterator ei;
   FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR_FOR_FN (cfun)->preds)
     {
       rtx_insn *prev, *last, *trial;
@@ -5986,78 +5951,84 @@ thread_prologue_and_epilogue_insns (void)
       emit_note_after (NOTE_INSN_EPILOGUE_BEG, prev);
     }
 
-  if (epilogue_seq)
-    {
-      insert_insn_on_edge (epilogue_seq, exit_fallthru_edge);
-      inserted = true;
-    }
-  else
-    {
-      basic_block cur_bb;
+  edge exit_fallthru_edge = find_fallthru_edge (EXIT_BLOCK_PTR_FOR_FN (cfun)->preds);
 
-      if (! next_active_insn (BB_END (exit_fallthru_edge->src)))
-	goto epilogue_done;
-      /* We have a fall-through edge to the exit block, the source is not
-         at the end of the function, and there will be an assembler epilogue
-         at the end of the function.
-         We can't use force_nonfallthru here, because that would try to
-	 use return.  Inserting a jump 'by hand' is extremely messy, so
-	 we take advantage of cfg_layout_finalize using
-	 fixup_fallthru_exit_predecessor.  */
-      cfg_layout_initialize (0);
-      FOR_EACH_BB_FN (cur_bb, cfun)
-	if (cur_bb->index >= NUM_FIXED_BLOCKS
-	    && cur_bb->next_bb->index >= NUM_FIXED_BLOCKS)
-	  cur_bb->aux = cur_bb->next_bb;
-      cfg_layout_finalize ();
+  if (exit_fallthru_edge)
+    {
+      if (epilogue_seq)
+	{
+	  insert_insn_on_edge (epilogue_seq, exit_fallthru_edge);
+
+	  /* The epilogue insns we inserted may cause the exit edge to no longer
+	     be fallthru.  */
+	  FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR_FOR_FN (cfun)->preds)
+	    {
+	      if (((e->flags & EDGE_FALLTHRU) != 0)
+		  && returnjump_p (BB_END (e->src)))
+		e->flags &= ~EDGE_FALLTHRU;
+	    }
+	}
+      else if (next_active_insn (BB_END (exit_fallthru_edge->src)))
+	{
+	  /* We have a fall-through edge to the exit block, the source is not
+	     at the end of the function, and there will be an assembler epilogue
+	     at the end of the function.
+	     We can't use force_nonfallthru here, because that would try to
+	     use return.  Inserting a jump 'by hand' is extremely messy, so
+	     we take advantage of cfg_layout_finalize using
+	     fixup_fallthru_exit_predecessor.  */
+	  cfg_layout_initialize (0);
+	  basic_block cur_bb;
+	  FOR_EACH_BB_FN (cur_bb, cfun)
+	    if (cur_bb->index >= NUM_FIXED_BLOCKS
+		&& cur_bb->next_bb->index >= NUM_FIXED_BLOCKS)
+	      cur_bb->aux = cur_bb->next_bb;
+	  cfg_layout_finalize ();
+	}
     }
 
-epilogue_done:
+  /* Insert the prologue.  */
 
-  default_rtl_profile ();
+  rtl_profile_for_bb (ENTRY_BLOCK_PTR_FOR_FN (cfun));
 
-  if (inserted)
+  if (split_prologue_seq || prologue_seq)
     {
-      sbitmap blocks;
+      if (split_prologue_seq)
+	insert_insn_on_edge (split_prologue_seq, orig_entry_edge);
+
+      if (prologue_seq)
+	insert_insn_on_edge (prologue_seq, entry_edge);
 
       commit_edge_insertions ();
 
       /* Look for basic blocks within the prologue insns.  */
-      blocks = sbitmap_alloc (last_basic_block_for_fn (cfun));
+      sbitmap blocks = sbitmap_alloc (last_basic_block_for_fn (cfun));
       bitmap_clear (blocks);
       bitmap_set_bit (blocks, entry_edge->dest->index);
       bitmap_set_bit (blocks, orig_entry_edge->dest->index);
       find_many_sub_basic_blocks (blocks);
       sbitmap_free (blocks);
-
-      /* The epilogue insns we inserted may cause the exit edge to no longer
-	 be fallthru.  */
-      FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR_FOR_FN (cfun)->preds)
-	{
-	  if (((e->flags & EDGE_FALLTHRU) != 0)
-	      && returnjump_p (BB_END (e->src)))
-	    e->flags &= ~EDGE_FALLTHRU;
-	}
     }
 
-  /* Emit sibling epilogues before any sibling call sites.  */
-  for (ei = ei_start (EXIT_BLOCK_PTR_FOR_FN (cfun)->preds); (e =
-							     ei_safe_edge (ei));
-							     )
-    {
-      basic_block bb = e->src;
-      rtx_insn *insn = BB_END (bb);
+  default_rtl_profile ();
 
-      if (!CALL_P (insn)
-	  || ! SIBLING_CALL_P (insn)
-	  || (targetm.have_simple_return ()
-	      && entry_edge != orig_entry_edge
-	      && !bitmap_bit_p (&bb_flags, bb->index)))
+  /* Emit sibling epilogues before any sibling call sites.  */
+  for (ei = ei_start (EXIT_BLOCK_PTR_FOR_FN (cfun)->preds);
+       (e = ei_safe_edge (ei));
+       ei_next (&ei))
+    {
+      /* Skip those already handled, the ones that run without prologue.  */
+      if (e->flags & EDGE_IGNORE)
 	{
-	  ei_next (&ei);
+	  e->flags &= ~EDGE_IGNORE;
 	  continue;
 	}
 
+      rtx_insn *insn = BB_END (e->src);
+
+      if (!(CALL_P (insn) && SIBLING_CALL_P (insn)))
+	continue;
+
       if (rtx_insn *ep_seq = targetm.gen_sibcall_epilogue ())
 	{
 	  start_sequence ();
@@ -6074,10 +6045,9 @@ epilogue_done:
 
 	  emit_insn_before (seq, insn);
 	}
-      ei_next (&ei);
     }
 
-  if (epilogue_end)
+  if (epilogue_seq)
     {
       rtx_insn *insn, *next;
 
@@ -6086,17 +6056,15 @@ epilogue_done:
 	 of such a note.  Also possibly move
 	 NOTE_INSN_FUNCTION_BEG notes, as those can be relevant for debug
 	 info generation.  */
-      for (insn = epilogue_end; insn; insn = next)
+      for (insn = epilogue_seq; insn; insn = next)
 	{
 	  next = NEXT_INSN (insn);
 	  if (NOTE_P (insn)
 	      && (NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG))
-	    reorder_insns (insn, insn, PREV_INSN (epilogue_end));
+	    reorder_insns (insn, insn, PREV_INSN (epilogue_seq));
 	}
     }
 
-  bitmap_clear (&bb_flags);
-
   /* Threading the prologue and epilogue changes the artificial refs
      in the entry and exit blocks.  */
   epilogue_completed = 1;
diff --git a/gcc/shrink-wrap.c b/gcc/shrink-wrap.c
index 0ba1fed..b85b1c3 100644
--- a/gcc/shrink-wrap.c
+++ b/gcc/shrink-wrap.c
@@ -529,30 +529,49 @@ can_dup_for_shrink_wrapping (basic_block bb, basic_block pro, unsigned max_size)
   return true;
 }
 
-/* If the source of edge E has more than one successor, the verifier for
-   branch probabilities gets confused by the fake edges we make where
-   simple_return statements will be inserted later (because those are not
-   marked as fallthrough edges).  Fix this by creating an extra block just
-   for that fallthrough.  */
+/* Do whatever needs to be done for exits that run without prologue.
+   Sibcalls need nothing done.  Normal exits get a simple_return inserted.  */
 
-static edge
-fix_fake_fallthrough_edge (edge e)
+static void
+handle_simple_exit (edge e)
 {
-  if (EDGE_COUNT (e->src->succs) <= 1)
-    return e;
 
-  basic_block old_bb = e->src;
-  rtx_insn *end = BB_END (old_bb);
-  rtx_note *note = emit_note_after (NOTE_INSN_DELETED, end);
-  basic_block new_bb = create_basic_block (note, note, old_bb);
-  BB_COPY_PARTITION (new_bb, old_bb);
-  BB_END (old_bb) = end;
+  if (e->flags & EDGE_SIBCALL)
+    {
+      /* Tell function.c to take no further action on this edge.  */
+      e->flags |= EDGE_IGNORE;
 
-  redirect_edge_succ (e, new_bb);
-  e->flags |= EDGE_FALLTHRU;
-  e->flags &= ~EDGE_FAKE;
+      e->flags &= ~EDGE_FALLTHRU;
+      emit_barrier_after_bb (e->src);
+      return;
+    }
 
-  return make_edge (new_bb, EXIT_BLOCK_PTR_FOR_FN (cfun), EDGE_FAKE);
+  /* If the basic block the edge comes from has multiple successors,
+     split the edge.  */
+  if (EDGE_COUNT (e->src->succs) > 1)
+    {
+      basic_block old_bb = e->src;
+      rtx_insn *end = BB_END (old_bb);
+      rtx_note *note = emit_note_after (NOTE_INSN_DELETED, end);
+      basic_block new_bb = create_basic_block (note, note, old_bb);
+      BB_COPY_PARTITION (new_bb, old_bb);
+      BB_END (old_bb) = end;
+
+      redirect_edge_succ (e, new_bb);
+      e->flags |= EDGE_FALLTHRU;
+
+      e = make_edge (new_bb, EXIT_BLOCK_PTR_FOR_FN (cfun), 0);
+    }
+
+  e->flags &= ~EDGE_FALLTHRU;
+  rtx_jump_insn *ret = emit_jump_insn_after (targetm.gen_simple_return (),
+					     BB_END (e->src));
+  JUMP_LABEL (ret) = simple_return_rtx;
+  emit_barrier_after_bb (e->src);
+
+  if (dump_file)
+    fprintf (dump_file, "Made simple_return with UID %d in bb %d\n",
+	     INSN_UID (ret), e->src->index);
 }
 
 /* Try to perform a kind of shrink-wrapping, making sure the
@@ -610,13 +629,10 @@ fix_fake_fallthrough_edge (edge e)
    (bb 4 is duplicated to 5; the prologue is inserted on the edge 5->3).
 
    ENTRY_EDGE is the edge where the prologue will be placed, possibly
-   changed by this function.  BB_WITH is a bitmap that, if we do shrink-
-   wrap, will on return contain the interesting blocks that run with
-   prologue.  PROLOGUE_SEQ is the prologue we will insert.  */
+   changed by this function.  PROLOGUE_SEQ is the prologue we will insert.  */
 
 void
-try_shrink_wrapping (edge *entry_edge, bitmap_head *bb_with,
-		     rtx_insn *prologue_seq)
+try_shrink_wrapping (edge *entry_edge, rtx_insn *prologue_seq)
 {
   /* If we cannot shrink-wrap, are told not to shrink-wrap, or it makes
      no sense to shrink-wrap: then do not shrink-wrap!  */
@@ -739,6 +755,7 @@ try_shrink_wrapping (edge *entry_edge, bitmap_head *bb_with,
      reachable from PRO that we already found, and in VEC a stack of
      those we still need to consider (to find successors).  */
 
+  bitmap bb_with = BITMAP_ALLOC (NULL);
   bitmap_set_bit (bb_with, pro->index);
 
   vec<basic_block> vec;
@@ -851,6 +868,7 @@ try_shrink_wrapping (edge *entry_edge, bitmap_head *bb_with,
 
   if (pro == entry)
     {
+      BITMAP_FREE (bb_with);
       free_dominance_info (CDI_DOMINATORS);
       return;
     }
@@ -952,26 +970,7 @@ try_shrink_wrapping (edge *entry_edge, bitmap_head *bb_with,
     if (!bitmap_bit_p (bb_with, bb->index))
       FOR_EACH_EDGE (e, ei, bb->succs)
 	if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
-	  {
-	    e = fix_fake_fallthrough_edge (e);
-
-	    e->flags &= ~EDGE_FALLTHRU;
-	    if (!(e->flags & EDGE_SIBCALL))
-	      {
-		rtx_insn *ret = targetm.gen_simple_return ();
-		rtx_insn *end = BB_END (e->src);
-		rtx_jump_insn *start = emit_jump_insn_after (ret, end);
-		JUMP_LABEL (start) = simple_return_rtx;
-		e->flags &= ~EDGE_FAKE;
-
-		if (dump_file)
-		  fprintf (dump_file,
-			   "Made simple_return with UID %d in bb %d\n",
-			   INSN_UID (start), e->src->index);
-	      }
-
-	    emit_barrier_after_bb (e->src);
-	  }
+	  handle_simple_exit (e);
 
   /* Finally, we want a single edge to put the prologue on.  Make a new
      block before the PRO block; the edge beteen them is the edge we want.
@@ -1004,5 +1003,6 @@ try_shrink_wrapping (edge *entry_edge, bitmap_head *bb_with,
   *entry_edge = make_single_succ_edge (new_bb, pro, EDGE_FALLTHRU);
   force_nonfallthru (*entry_edge);
 
+  BITMAP_FREE (bb_with);
   free_dominance_info (CDI_DOMINATORS);
 }
diff --git a/gcc/shrink-wrap.h b/gcc/shrink-wrap.h
index 4d821d7..e06ab37 100644
--- a/gcc/shrink-wrap.h
+++ b/gcc/shrink-wrap.h
@@ -24,8 +24,7 @@ along with GCC; see the file COPYING3.  If not see
 
 /* In shrink-wrap.c.  */
 extern bool requires_stack_frame_p (rtx_insn *, HARD_REG_SET, HARD_REG_SET);
-extern void try_shrink_wrapping (edge *entry_edge, bitmap_head *bb_flags,
-				 rtx_insn *prologue_seq);
+extern void try_shrink_wrapping (edge *entry_edge, rtx_insn *prologue_seq);
 #define SHRINK_WRAPPING_ENABLED \
   (flag_shrink_wrap && targetm.have_simple_return ())
 
-- 
1.9.3

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before
  2016-05-17  1:09 [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before Segher Boessenkool
  2016-05-17  1:09 ` [PATCH 2/3] function: Factor out make_*logue_seq Segher Boessenkool
  2016-05-17  1:09 ` [PATCH 3/3] function: Restructure *logue insertion Segher Boessenkool
@ 2016-05-17  8:06 ` Eric Botcazou
  2016-05-17  8:47   ` Segher Boessenkool
  2 siblings, 1 reply; 28+ messages in thread
From: Eric Botcazou @ 2016-05-17  8:06 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: gcc-patches

> We should do CLEANUP_EXPENSIVE after shrink-wrapping, because shrink-
> wrapping creates constructs that CLEANUP_EXPENSIVE can optimise, and
> nothing runs CLEANUP_EXPENSIVE later.  We don't need cleanup_cfg before
> shrink-wrapping, nothing in shrink-wrapping (or the other *logue insertion
> code) cares at all.

Are you sure of that?  I agree that CLEANUP_EXPENSIVE might be overkill, but
can't cleanup_cfg expose more opportunities to have multiple epilogues?

-- 
Eric Botcazou

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before
  2016-05-17  8:06 ` [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before Eric Botcazou
@ 2016-05-17  8:47   ` Segher Boessenkool
  2016-05-17  9:08     ` Eric Botcazou
  0 siblings, 1 reply; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-17  8:47 UTC (permalink / raw)
  To: Eric Botcazou; +Cc: gcc-patches

On Tue, May 17, 2016 at 10:05:57AM +0200, Eric Botcazou wrote:
> > We should do CLEANUP_EXPENSIVE after shrink-wrapping, because shrink-
> > wrapping creates constructs that CLEANUP_EXPENSIVE can optimise, and
> > nothing runs CLEANUP_EXPENSIVE later.  We don't need cleanup_cfg before
> > shrink-wrapping, nothing in shrink-wrapping (or the other *logue insertion
> > code) cares at all.
> 
> Are you sure of that?  I agree that CLEANUP_EXPENSIVE might be overkill, but
> can't cleanup_cfg expose more opportunities to have multiple epilogues?

How would it?  The shrink-wrapping algorithms do not much care how you
write your control flow.  The only things I can think of are drastic
things like removing some dead code, or converting a switch to a direct
jump, but those had better be done for the immediately preceding passes
already (register allocation).

I can put back a  cleanup_cfg (0)  in front if that seems less tricky
(or just safer)?


Segher

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before
  2016-05-17  8:47   ` Segher Boessenkool
@ 2016-05-17  9:08     ` Eric Botcazou
  2016-05-17  9:18       ` Segher Boessenkool
  0 siblings, 1 reply; 28+ messages in thread
From: Eric Botcazou @ 2016-05-17  9:08 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: gcc-patches

> How would it?  The shrink-wrapping algorithms do not much care how you
> write your control flow.  The only things I can think of are drastic
> things like removing some dead code, or converting a switch to a direct
> jump, but those had better be done for the immediately preceding passes
> already (register allocation).

But the compiler didn't wait until after shrink-wrapping to emit multiple 
epilogues and can still do that w/o shrink-wrapping.

> I can put back a  cleanup_cfg (0)  in front if that seems less tricky
> (or just safer)?

I think you need to evaluate the effects of the change on a set of sources.

-- 
Eric Botcazou

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before
  2016-05-17  9:08     ` Eric Botcazou
@ 2016-05-17  9:18       ` Segher Boessenkool
  2016-05-17 22:23         ` Segher Boessenkool
  0 siblings, 1 reply; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-17  9:18 UTC (permalink / raw)
  To: Eric Botcazou; +Cc: gcc-patches

On Tue, May 17, 2016 at 11:08:53AM +0200, Eric Botcazou wrote:
> > How would it?  The shrink-wrapping algorithms do not much care how you
> > write your control flow.  The only things I can think of are drastic
> > things like removing some dead code, or converting a switch to a direct
> > jump, but those had better be done for the immediately preceding passes
> > already (register allocation).
> 
> But the compiler didn't wait until after shrink-wrapping to emit multiple 
> epilogues and can still do that w/o shrink-wrapping.

It will only ever generate a single epilogue (unless you also count
sibcall epilogues), and that is done after shrink-wrapping.  Or you mean
something else and I just don't see it.

> > I can put back a  cleanup_cfg (0)  in front if that seems less tricky
> > (or just safer)?
> 
> I think you need to evaluate the effects of the change on a set of sources.

Yeah I'll do that, thanks for the idea.


Segher

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-17  1:09 ` [PATCH 2/3] function: Factor out make_*logue_seq Segher Boessenkool
@ 2016-05-17 20:35   ` Jeff Law
  2016-05-18 17:17   ` H.J. Lu
  1 sibling, 0 replies; 28+ messages in thread
From: Jeff Law @ 2016-05-17 20:35 UTC (permalink / raw)
  To: Segher Boessenkool, gcc-patches

On 05/16/2016 07:09 PM, Segher Boessenkool wrote:
> Make new functions make_split_prologue_seq, make_prologue_seq, and
> make_epilogue_seq.
>
> Tested as in the previous patch; is this okay for trunk?
>
>
> Segher
>
>
> 2016-05-16  Segher Boessenkool  <segher@kernel.crashing.org>
>
> 	* function.c (make_split_prologue_seq, make_prologue_seq,
> 	make_epilogue_seq): New functions, factored out from...
> 	(thread_prologue_and_epilogue_insns): Here.
Please add function comments for the new functions.  OK with that change.

jeff

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before
  2016-05-17  9:18       ` Segher Boessenkool
@ 2016-05-17 22:23         ` Segher Boessenkool
  2016-05-17 22:34           ` Eric Botcazou
  0 siblings, 1 reply; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-17 22:23 UTC (permalink / raw)
  To: Eric Botcazou; +Cc: gcc-patches

On Tue, May 17, 2016 at 04:17:58AM -0500, Segher Boessenkool wrote:
> On Tue, May 17, 2016 at 11:08:53AM +0200, Eric Botcazou wrote:
> > > How would it?  The shrink-wrapping algorithms do not much care how you
> > > write your control flow.  The only things I can think of are drastic
> > > things like removing some dead code, or converting a switch to a direct
> > > jump, but those had better be done for the immediately preceding passes
> > > already (register allocation).
> > 
> > But the compiler didn't wait until after shrink-wrapping to emit multiple 
> > epilogues and can still do that w/o shrink-wrapping.
> 
> It will only ever generate a single epilogue (unless you also count
> sibcall epilogues), and that is done after shrink-wrapping.  Or you mean
> something else and I just don't see it.
> 
> > > I can put back a  cleanup_cfg (0)  in front if that seems less tricky
> > > (or just safer)?
> > 
> > I think you need to evaluate the effects of the change on a set of sources.
> 
> Yeah I'll do that, thanks for the idea.

I built cross-compilers for 30 targets, and built Linux with that.
6 of those failed for unrelated reasons.  Of the 24 that do build,
five show a few insns difference between having a cleanup_cfg before
shrink-wrapping or not (CLEANUP_EXPENSIVE made no difference there).
These targets are s390, blackfin, m68k, mn10300, nios2.

It turns out that prepare_shrink_wrap *does* care about block structure:
namely, it only moves insns from the "head" block to a successor.  It
then makes a difference when the cleanup_cfg can merge two successor blocks
(say, the first is a forwarder block).  This happens quite seldomly.

So, shall I put a cleanup_cfg back before shrink-wrapping?

[ I'm now also looking at what patch #3 (and #2) change; also small stuff ].


Segher

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before
  2016-05-17 22:23         ` Segher Boessenkool
@ 2016-05-17 22:34           ` Eric Botcazou
  0 siblings, 0 replies; 28+ messages in thread
From: Eric Botcazou @ 2016-05-17 22:34 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: gcc-patches

> I built cross-compilers for 30 targets, and built Linux with that.
> 6 of those failed for unrelated reasons.  Of the 24 that do build,
> five show a few insns difference between having a cleanup_cfg before
> shrink-wrapping or not (CLEANUP_EXPENSIVE made no difference there).
> These targets are s390, blackfin, m68k, mn10300, nios2.

Interesting, thanks for experimenting.

> It turns out that prepare_shrink_wrap *does* care about block structure:
> namely, it only moves insns from the "head" block to a successor.  It
> then makes a difference when the cleanup_cfg can merge two successor blocks
> (say, the first is a forwarder block).  This happens quite seldomly.
> 
> So, shall I put a cleanup_cfg back before shrink-wrapping?

Yes, I'd only swap CLEANUP_EXPENSIVE with 0, i.e. leave the calls themselves
and add a comment on the first one saying that this helps shrink-wrapping too.

-- 
Eric Botcazou

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-17  1:09 ` [PATCH 2/3] function: Factor out make_*logue_seq Segher Boessenkool
  2016-05-17 20:35   ` Jeff Law
@ 2016-05-18 17:17   ` H.J. Lu
  2016-05-18 18:11     ` Segher Boessenkool
  1 sibling, 1 reply; 28+ messages in thread
From: H.J. Lu @ 2016-05-18 17:17 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: GCC Patches

On Mon, May 16, 2016 at 6:09 PM, Segher Boessenkool
<segher@kernel.crashing.org> wrote:
> Make new functions make_split_prologue_seq, make_prologue_seq, and
> make_epilogue_seq.
>
> Tested as in the previous patch; is this okay for trunk?
>
>
> Segher
>
>
> 2016-05-16  Segher Boessenkool  <segher@kernel.crashing.org>
>
>         * function.c (make_split_prologue_seq, make_prologue_seq,
>         make_epilogue_seq): New functions, factored out from...
>         (thread_prologue_and_epilogue_insns): Here.
>

It breaks x86:

https://gcc.gnu.org/ml/gcc-regression/2016-05/msg00263.html

FAIL: 18_support/exception_ptr/lifespan.cc execution test
FAIL: 18_support/nested_exception/rethrow_if_nested.cc execution test
FAIL: 20_util/function/63840.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/char/stod.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/char/stof.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/char/stoi.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/char/stol.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/char/stold.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/char/stoll.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/char/stoul.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/char/stoull.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/wchar_t/stod.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/wchar_t/stof.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/wchar_t/stol.cc execution test
FAIL: 21_strings/basic_string/numeric_conversions/wchar_t/stold.cc
execution test
FAIL: 21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc
execution test
FAIL: 21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc
execution test
FAIL: 21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc
execution test
FAIL: 22_locale/locale/cons/12352.cc execution test
FAIL: 22_locale/locale/cons/2.cc execution test
FAIL: 22_locale/numpunct/members/pod/2.cc execution test
FAIL: 23_containers/bitset/to_ulong/1.cc execution test
FAIL: 23_containers/deque/cons/2.cc execution test
FAIL: 23_containers/deque/requirements/exception/basic.cc execution test
FAIL: 23_containers/deque/requirements/exception/propagation_consistent.cc
execution test
FAIL: 23_containers/forward_list/requirements/exception/basic.cc execution test
FAIL: 23_containers/forward_list/requirements/exception/propagation_consistent.cc
execution test
FAIL: 23_containers/list/modifiers/insert/25288.cc execution test
FAIL: 23_containers/list/requirements/exception/basic.cc execution test
FAIL: 23_containers/list/requirements/exception/propagation_consistent.cc
execution test
FAIL: 23_containers/map/requirements/exception/basic.cc execution test
FAIL: 23_containers/map/requirements/exception/propagation_consistent.cc
execution test
FAIL: 23_containers/multimap/requirements/exception/basic.cc execution test
FAIL: 23_containers/multimap/requirements/exception/propagation_consistent.cc
execution test
FAIL: 23_containers/multiset/requirements/exception/basic.cc execution test
FAIL: 23_containers/multiset/requirements/exception/propagation_consistent.cc
execution test
FAIL: 23_containers/set/requirements/exception/basic.cc execution test
FAIL: 23_containers/set/requirements/exception/propagation_consistent.cc
execution test
FAIL: 23_containers/unordered_map/requirements/exception/basic.cc execution test
FAIL: 23_containers/unordered_map/requirements/exception/propagation_consistent.cc
execution test
FAIL: 23_containers/unordered_multimap/requirements/exception/basic.cc
execution test
FAIL: 23_containers/unordered_multimap/requirements/exception/propagation_consistent.cc
execution test
FAIL: 23_containers/unordered_multiset/insert/hash_policy.cc execution test
FAIL: 23_containers/unordered_multiset/requirements/exception/basic.cc
execution test
FAIL: 23_containers/unordered_multiset/requirements/exception/propagation_consistent.cc
execution test
FAIL: 23_containers/unordered_set/insert/hash_policy.cc execution test
FAIL: 23_containers/unordered_set/max_load_factor/robustness.cc execution test
FAIL: 23_containers/unordered_set/requirements/exception/basic.cc execution test
FAIL: 23_containers/unordered_set/requirements/exception/propagation_consistent.cc
execution test
FAIL: 23_containers/vector/capacity/2.cc execution test
FAIL: 23_containers/vector/cons/4.cc execution test
FAIL: 23_containers/vector/modifiers/push_back/strong_guarantee.cc
execution test
FAIL: 23_containers/vector/requirements/exception/basic.cc execution test
FAIL: 23_containers/vector/requirements/exception/propagation_consistent.cc
execution test
FAIL: 25_algorithms/stable_sort/mem_check.cc execution test
FAIL: 27_io/basic_istream/exceptions/char/9561.cc execution test
FAIL: 27_io/basic_istream/exceptions/wchar_t/9561.cc execution test
FAIL: 27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc
execution test
FAIL: 27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_badbit_throw.cc
execution test
FAIL: 27_io/basic_istream/extractors_other/char/exceptions_failbit_throw.cc
execution test
FAIL: 27_io/basic_istream/extractors_other/pod/3983-3.cc execution test
FAIL: 27_io/basic_istream/extractors_other/wchar_t/exceptions_failbit_throw.cc
execution test
FAIL: 27_io/basic_istream/seekg/char/exceptions_badbit_throw.cc execution test
FAIL: 27_io/basic_istream/seekg/wchar_t/exceptions_badbit_throw.cc
execution test
FAIL: 27_io/basic_istream/tellg/char/exceptions_badbit_throw.cc execution test
FAIL: 27_io/basic_istream/tellg/wchar_t/exceptions_badbit_throw.cc
execution test
FAIL: 27_io/basic_ostream/exceptions/char/9561.cc execution test
FAIL: 27_io/basic_ostream/exceptions/wchar_t/9561.cc execution test
FAIL: 27_io/basic_ostream/flush/char/exceptions_badbit_throw.cc execution test
FAIL: 27_io/basic_ostream/flush/wchar_t/exceptions_badbit_throw.cc
execution test
FAIL: 27_io/basic_ostream/inserters_arithmetic/char/9555-oa.cc execution test
FAIL: 27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc
execution test
FAIL: 27_io/basic_ostream/inserters_arithmetic/wchar_t/9555-oa.cc execution test
FAIL: 27_io/basic_ostream/inserters_arithmetic/wchar_t/exceptions_badbit_throw.cc
execution test
FAIL: 27_io/basic_ostream/inserters_character/char/9555-oc.cc execution test
FAIL: 27_io/basic_ostream/inserters_character/wchar_t/9555-oc.cc execution test
FAIL: 27_io/basic_ostream/inserters_other/char/exceptions_failbit_throw.cc
execution test
FAIL: 27_io/basic_ostream/inserters_other/char/exceptions_null.cc execution test
FAIL: 27_io/basic_ostream/inserters_other/wchar_t/exceptions_failbit_throw.cc
execution test
FAIL: 27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc
execution test
FAIL: 27_io/basic_ostream/put/char/1.cc execution test
FAIL: 27_io/basic_ostream/put/wchar_t/1.cc execution test
FAIL: 27_io/basic_ostream/seekp/char/exceptions_badbit_throw.cc execution test
FAIL: 27_io/basic_ostream/seekp/wchar_t/exceptions_badbit_throw.cc
execution test
FAIL: 27_io/basic_ostream/tellp/char/exceptions_badbit_throw.cc execution test
FAIL: 27_io/basic_ostream/tellp/wchar_t/exceptions_badbit_throw.cc
execution test
FAIL: 27_io/basic_ostream/write/char/1.cc execution test
FAIL: 27_io/basic_ostream/write/wchar_t/1.cc execution test
FAIL: 28_regex/algorithms/regex_match/basic/empty_range.cc execution test
FAIL: 28_regex/algorithms/regex_match/cstring_bracket_01.cc execution test
FAIL: 28_regex/algorithms/regex_match/ecma/char/61601.cc execution test
FAIL: 28_regex/algorithms/regex_match/ecma/char/backref.cc execution test
FAIL: 28_regex/algorithms/regex_match/ecma/char/hex.cc execution test
FAIL: 28_regex/basic_regex/assign/char/string.cc execution test
FAIL: 28_regex/basic_regex/ctors/basic/string_range_01_02_03.cc execution test
FAIL: 28_regex/basic_regex/ctors/extended/string_range_01_02_03.cc
execution test
FAIL: 30_threads/async/except.cc execution test
FAIL: 30_threads/async/forced_unwind.cc execution test
FAIL: 30_threads/lock/4.cc execution test
FAIL: 30_threads/packaged_task/forced_unwind.cc execution test
FAIL: 30_threads/promise/members/set_exception2.cc execution test
FAIL: 30_threads/shared_future/members/get2.cc execution test
FAIL: 30_threads/try_lock/4.cc execution test
FAIL: anfi -findirect-dispatch execution - source compiled test
FAIL: anfi -O3 -findirect-dispatch execution - source compiled test
FAIL: anon2 -findirect-dispatch execution - source compiled test
FAIL: anon2 -O3 -findirect-dispatch execution - source compiled test
FAIL: anon3 -findirect-dispatch execution - source compiled test
FAIL: anon3 -O3 -findirect-dispatch execution - source compiled test
FAIL: anon4 -findirect-dispatch execution - source compiled test
FAIL: anon4 -O3 -findirect-dispatch execution - source compiled test
FAIL: anonarray2 -findirect-dispatch execution - source compiled test
FAIL: anonarray2 -O3 -findirect-dispatch execution - source compiled test
FAIL: anonarray3 -findirect-dispatch execution - source compiled test
FAIL: anonarray3 -O3 -findirect-dispatch execution - source compiled test
FAIL: anonarray -findirect-dispatch execution - source compiled test
FAIL: anonarray -O3 -findirect-dispatch execution - source compiled test
FAIL: anon_ctor_itf_arg -findirect-dispatch execution - source compiled test
FAIL: anon_ctor_itf_arg -O3 -findirect-dispatch execution - source compiled test
FAIL: anon -findirect-dispatch execution - source compiled test
FAIL: anon -O3 -findirect-dispatch execution - source compiled test
FAIL: Array_1 -findirect-dispatch execution - source compiled test
FAIL: Array_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: Array_2 -findirect-dispatch execution - source compiled test
FAIL: Array_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: Array_3 -findirect-dispatch execution - source compiled test
FAIL: Array_3 -O3 -findirect-dispatch execution - source compiled test
FAIL: ArrayStore2 -findirect-dispatch execution - source compiled test
FAIL: ArrayStore2 -O3 -findirect-dispatch execution - source compiled test
FAIL: ArrayStore -findirect-dispatch execution - source compiled test
FAIL: ArrayStore -O3 -findirect-dispatch execution - source compiled test
FAIL: assign2 -findirect-dispatch execution - source compiled test
FAIL: assign2 -O3 -findirect-dispatch execution - source compiled test
FAIL: assign execution - source compiled test
FAIL: assign -findirect-dispatch execution - source compiled test
FAIL: assign -O3 execution - source compiled test
FAIL: assign -O3 -findirect-dispatch execution - source compiled test
FAIL: bclink -findirect-dispatch execution - source compiled test
FAIL: bclink -O3 -findirect-dispatch execution - source compiled test
FAIL: bytearray -findirect-dispatch execution - source compiled test
FAIL: bytearray -O3 -findirect-dispatch execution - source compiled test
FAIL: bytebuffer execution - gij test
FAIL: calls execution - gij test
FAIL: Class_1 execution - source compiled test
FAIL: Class_1 -findirect-dispatch execution - source compiled test
FAIL: Class_1 -O3 execution - source compiled test
FAIL: Class_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: CompareNaN -findirect-dispatch execution - source compiled test
FAIL: CompareNaN -O3 -findirect-dispatch execution - source compiled test
FAIL: cxxtest execution - gij test
FAIL: directbuffer execution - gij test
FAIL: direct_read -findirect-dispatch execution - source compiled test
FAIL: direct_read -O3 -findirect-dispatch execution - source compiled test
FAIL: direct_write -findirect-dispatch execution - source compiled test
FAIL: direct_write -O3 -findirect-dispatch execution - source compiled test
FAIL: Divide_1 -findirect-dispatch execution - source compiled test
FAIL: Divide_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: Divide_2 -findirect-dispatch execution - source compiled test
FAIL: Divide_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: emptystring -findirect-dispatch execution - source compiled test
FAIL: emptystring -O3 -findirect-dispatch execution - source compiled test
FAIL: err10 -findirect-dispatch execution - source compiled test
FAIL: err10 -O3 -findirect-dispatch execution - source compiled test
FAIL: err11 -findirect-dispatch execution - source compiled test
FAIL: err11 -O3 -findirect-dispatch execution - source compiled test
FAIL: err12 -findirect-dispatch execution - source compiled test
FAIL: err12 -O3 -findirect-dispatch execution - source compiled test
FAIL: err13 -findirect-dispatch execution - source compiled test
FAIL: err13 -O3 -findirect-dispatch execution - source compiled test
FAIL: err14 -findirect-dispatch execution - source compiled test
FAIL: err14 -O3 -findirect-dispatch execution - source compiled test
FAIL: err1 -findirect-dispatch execution - source compiled test
FAIL: err1 -O3 -findirect-dispatch execution - source compiled test
FAIL: err2 -findirect-dispatch execution - source compiled test
FAIL: err2 -O3 -findirect-dispatch execution - source compiled test
FAIL: err3 -findirect-dispatch execution - source compiled test
FAIL: err3 -O3 -findirect-dispatch execution - source compiled test
FAIL: err4 -findirect-dispatch execution - source compiled test
FAIL: err4 -O3 -findirect-dispatch execution - source compiled test
FAIL: err5 -findirect-dispatch execution - source compiled test
FAIL: err5 -O3 -findirect-dispatch execution - source compiled test
FAIL: err6 -findirect-dispatch execution - source compiled test
FAIL: err6 -O3 -findirect-dispatch execution - source compiled test
FAIL: err7 -findirect-dispatch execution - source compiled test
FAIL: err7 -O3 -findirect-dispatch execution - source compiled test
FAIL: err8 -findirect-dispatch execution - source compiled test
FAIL: err8 -O3 -findirect-dispatch execution - source compiled test
FAIL: err9 -findirect-dispatch execution - source compiled test
FAIL: err9 -O3 -findirect-dispatch execution - source compiled test
FAIL: EvaluationOrder -findirect-dispatch execution - source compiled test
FAIL: EvaluationOrder -O3 -findirect-dispatch execution - source compiled test
FAIL: experimental/filesystem/operations/canonical.cc execution test
FAIL: experimental/filesystem/operations/temp_directory_path.cc execution test
FAIL: experimental/optional/assignment/1.cc execution test
FAIL: experimental/optional/assignment/3.cc execution test
FAIL: ext/enc_filebuf/char/13189.cc execution test
FAIL: ext/enc_filebuf/wchar_t/13189.cc execution test
FAIL: ext/pb_ds/example/hash_illegal_resize.cc execution test
FAIL: ext/pb_ds/regression/hash_map_rand.cc execution test
FAIL: ext/pb_ds/regression/hash_set_rand.cc execution test
FAIL: ext/pb_ds/regression/priority_queue_rand.cc execution test
FAIL: ext/pb_ds/regression/tree_map_rand.cc execution test
FAIL: ext/pb_ds/regression/tree_set_rand.cc execution test
FAIL: ext/pb_ds/regression/trie_map_rand.cc execution test
FAIL: ext/pb_ds/regression/trie_set_rand.cc execution test
FAIL: ExtraClassLoader execution - source compiled test
FAIL: ExtraClassLoader -findirect-dispatch execution - source compiled test
FAIL: ExtraClassLoader -O3 execution - source compiled test
FAIL: ExtraClassLoader -O3 -findirect-dispatch execution - source compiled test
FAIL: ext/throw_allocator/check_deallocate_null.cc execution test
FAIL: ext/vstring/requirements/exception/propagation_consistent.cc
execution test
FAIL: field execution - gij test
FAIL: FileHandleGcTest -findirect-dispatch execution - source compiled test
FAIL: FileHandleGcTest -O3 -findirect-dispatch execution - source compiled test
FAIL: Final -findirect-dispatch execution - source compiled test
FAIL: final_inner -findirect-dispatch execution - source compiled test
FAIL: final_inner -O3 -findirect-dispatch execution - source compiled test
FAIL: final_int -findirect-dispatch execution - source compiled test
FAIL: final_int -O3 -findirect-dispatch execution - source compiled test
FAIL: final_method execution - gij test
FAIL: Final -O3 -findirect-dispatch execution - source compiled test
FAIL: final_static_and_friend -findirect-dispatch execution - source
compiled test
FAIL: final_static_and_friend -O3 -findirect-dispatch execution -
source compiled test
FAIL: findclass2 run
FAIL: findclass execution - gij test
FAIL: Float_1 -findirect-dispatch execution - source compiled test
FAIL: Float_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: Float_2 -findirect-dispatch execution - source compiled test
FAIL: Float_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: G19990301_01 -findirect-dispatch execution - source compiled test
FAIL: G19990301_01 -O3 -findirect-dispatch execution - source compiled test
FAIL: G19990302_02 -findirect-dispatch execution - source compiled test
FAIL: G19990302_02 -O3 -findirect-dispatch execution - source compiled test
FAIL: G19990303_01 -findirect-dispatch execution - source compiled test
FAIL: G19990303_01 -O3 -findirect-dispatch execution - source compiled test
FAIL: G19990303_02 -findirect-dispatch execution - source compiled test
FAIL: G19990303_02 -O3 -findirect-dispatch execution - source compiled test
FAIL: G19990304_01 -findirect-dispatch execution - source compiled test
FAIL: G19990304_01 -O3 -findirect-dispatch execution - source compiled test
FAIL: G19990310_01 -findirect-dispatch execution - source compiled test
FAIL: G19990310_01 -O3 -findirect-dispatch execution - source compiled test
FAIL: gcc.dg/cleanup-10.c execution test
FAIL: gcc.dg/cleanup-11.c execution test
FAIL: gcc.dg/cleanup-8.c execution test
FAIL: gcc.dg/cleanup-9.c execution test
FAIL: gcc.target/i386/cleanup-1.c execution test
FAIL: g++.dg/cilk-plus/CK/catch_exc.cc  -g -fcilkplus execution test
FAIL: g++.dg/cilk-plus/CK/catch_exc.cc  -g -O2 -fcilkplus execution test
FAIL: g++.dg/cilk-plus/CK/catch_exc.cc  -O1 -fcilkplus execution test
FAIL: g++.dg/cilk-plus/CK/catch_exc.cc  -O3 -fcilkplus execution test
FAIL: g++.dg/compat/eh/ctor1 cp_compat_x_tst.o-cp_compat_y_tst.o execute
FAIL: g++.dg/compat/eh/ctor2 cp_compat_x_tst.o-cp_compat_y_tst.o execute
FAIL: g++.dg/compat/eh/nrv1 cp_compat_x_tst.o-cp_compat_y_tst.o execute
FAIL: g++.dg/compat/eh/unexpected1 cp_compat_x_tst.o-cp_compat_y_tst.o execute
FAIL: g++.dg/compat/init/array5 cp_compat_x_tst.o-cp_compat_y_tst.o execute
FAIL: g++.dg/cpp0x/bad_array_new2.C  -std=c++11 execution test
FAIL: g++.dg/cpp0x/bad_array_new2.C  -std=c++14 execution test
FAIL: g++.dg/cpp0x/initlist90.C  -std=c++11 execution test
FAIL: g++.dg/cpp0x/initlist90.C  -std=c++14 execution test
FAIL: g++.dg/cpp0x/lambda/lambda-eh2.C  -std=gnu++11 execution test
FAIL: g++.dg/cpp0x/lambda/lambda-eh2.C  -std=gnu++14 execution test
FAIL: g++.dg/eh/ctor1.C  -std=c++11 execution test
FAIL: g++.dg/eh/ctor1.C  -std=c++14 execution test
FAIL: g++.dg/eh/ctor1.C  -std=c++98 execution test
FAIL: g++.dg/eh/ctor2.C  -std=c++11 execution test
FAIL: g++.dg/eh/ctor2.C  -std=c++14 execution test
FAIL: g++.dg/eh/ctor2.C  -std=c++98 execution test
FAIL: g++.dg/eh/delayslot1.C  -std=gnu++11 execution test
FAIL: g++.dg/eh/delayslot1.C  -std=gnu++14 execution test
FAIL: g++.dg/eh/delayslot1.C  -std=gnu++98 execution test
FAIL: g++.dg/eh/delete1.C  -std=c++11 execution test
FAIL: g++.dg/eh/delete1.C  -std=c++14 execution test
FAIL: g++.dg/eh/delete1.C  -std=c++98 execution test
FAIL: g++.dg/eh/registers1.C  -std=gnu++11 execution test
FAIL: g++.dg/eh/registers1.C  -std=gnu++14 execution test
FAIL: g++.dg/eh/registers1.C  -std=gnu++98 execution test
FAIL: g++.dg/eh/spec7.C  -std=gnu++11 execution test
FAIL: g++.dg/eh/spec7.C  -std=gnu++14 execution test
FAIL: g++.dg/eh/spec7.C  -std=gnu++98 execution test
FAIL: g++.dg/eh/uncaught4.C  -std=c++11 execution test
FAIL: g++.dg/eh/uncaught4.C  -std=c++14 execution test
FAIL: g++.dg/eh/uncaught4.C  -std=c++98 execution test
FAIL: g++.dg/eh/unexpected1.C  -std=c++11 execution test
FAIL: g++.dg/eh/unexpected1.C  -std=c++14 execution test
FAIL: g++.dg/eh/unexpected1.C  -std=c++98 execution test
FAIL: g++.dg/ext/cleanup-10.C  -std=gnu++11 execution test
FAIL: g++.dg/ext/cleanup-10.C  -std=gnu++14 execution test
FAIL: g++.dg/ext/cleanup-10.C  -std=gnu++98 execution test
FAIL: g++.dg/ext/cleanup-11.C  -std=gnu++11 execution test
FAIL: g++.dg/ext/cleanup-11.C  -std=gnu++14 execution test
FAIL: g++.dg/ext/cleanup-11.C  -std=gnu++98 execution test
FAIL: g++.dg/ext/cleanup-8.C  -std=gnu++11 execution test
FAIL: g++.dg/ext/cleanup-8.C  -std=gnu++14 execution test
FAIL: g++.dg/ext/cleanup-8.C  -std=gnu++98 execution test
FAIL: g++.dg/ext/cleanup-9.C  -std=gnu++11 execution test
FAIL: g++.dg/ext/cleanup-9.C  -std=gnu++14 execution test
FAIL: g++.dg/ext/cleanup-9.C  -std=gnu++98 execution test
FAIL: g++.dg/init/array16.C  -std=gnu++11 execution test
FAIL: g++.dg/init/array16.C  -std=gnu++14 execution test
FAIL: g++.dg/init/array16.C  -std=gnu++98 execution test
FAIL: g++.dg/init/array5.C  -std=c++11 execution test
FAIL: g++.dg/init/array5.C  -std=c++14 execution test
FAIL: g++.dg/init/array5.C  -std=c++98 execution test
FAIL: g++.dg/init/ctor1.C  -std=c++11 execution test
FAIL: g++.dg/init/ctor1.C  -std=c++14 execution test
FAIL: g++.dg/init/ctor1.C  -std=c++98 execution test
FAIL: g++.dg/ipa/pr63838.C  -std=gnu++11 execution test
FAIL: g++.dg/ipa/pr63838.C  -std=gnu++14 execution test
FAIL: g++.dg/ipa/pr63838.C  -std=gnu++98 execution test
FAIL: g++.dg/opt/eh3.C  -std=gnu++11 execution test
FAIL: g++.dg/opt/eh3.C  -std=gnu++14 execution test
FAIL: g++.dg/opt/eh3.C  -std=gnu++98 execution test
FAIL: g++.dg/opt/pr23478.C  -std=gnu++11 execution test
FAIL: g++.dg/opt/pr23478.C  -std=gnu++14 execution test
FAIL: g++.dg/opt/pr23478.C  -std=gnu++98 execution test
FAIL: g++.dg/ubsan/vptr-11.C   -O0  execution test
FAIL: g++.dg/ubsan/vptr-11.C   -Os  execution test
FAIL: getargssize run
FAIL: getlocalvartable run
FAIL: getstacktrace run
FAIL: g++.old-deja/g++.abi/cxa_vec.C  -std=gnu++11 execution test
FAIL: g++.old-deja/g++.abi/cxa_vec.C  -std=gnu++14 execution test
FAIL: g++.old-deja/g++.abi/cxa_vec.C  -std=gnu++98 execution test
FAIL: g++.old-deja/g++.eh/badalloc1.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.eh/badalloc1.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.eh/badalloc1.C  -std=c++98 execution test
FAIL: g++.old-deja/g++.eh/fntry1.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.eh/fntry1.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.eh/fntry1.C  -std=c++98 execution test
FAIL: g++.old-deja/g++.eh/rethrow3.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.eh/rethrow3.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.eh/rethrow3.C  -std=c++98 execution test
FAIL: g++.old-deja/g++.eh/spec2.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.eh/spec2.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.eh/spec2.C  -std=c++98 execution test
FAIL: g++.old-deja/g++.eh/spec3.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.eh/spec3.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.eh/spec3.C  -std=c++98 execution test
FAIL: g++.old-deja/g++.eh/vbase1.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.eh/vbase1.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.eh/vbase1.C  -std=c++98 execution test
FAIL: g++.old-deja/g++.eh/vbase2.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.eh/vbase2.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.eh/vbase2.C  -std=c++98 execution test
FAIL: g++.old-deja/g++.mike/eh16.C  -std=gnu++11 execution test
FAIL: g++.old-deja/g++.mike/eh16.C  -std=gnu++14 execution test
FAIL: g++.old-deja/g++.mike/eh16.C  -std=gnu++98 execution test
FAIL: g++.old-deja/g++.mike/eh17.C  -std=gnu++11 execution test
FAIL: g++.old-deja/g++.mike/eh17.C  -std=gnu++14 execution test
FAIL: g++.old-deja/g++.mike/eh17.C  -std=gnu++98 execution test
FAIL: g++.old-deja/g++.mike/eh23.C  -std=gnu++11 execution test
FAIL: g++.old-deja/g++.mike/eh23.C  -std=gnu++14 execution test
FAIL: g++.old-deja/g++.mike/eh23.C  -std=gnu++98 execution test
FAIL: g++.old-deja/g++.mike/eh33.C  -std=gnu++11 execution test
FAIL: g++.old-deja/g++.mike/eh33.C  -std=gnu++14 execution test
FAIL: g++.old-deja/g++.mike/eh33.C  -std=gnu++98 execution test
FAIL: g++.old-deja/g++.mike/eh39.C  -std=gnu++11 execution test
FAIL: g++.old-deja/g++.mike/eh39.C  -std=gnu++14 execution test
FAIL: g++.old-deja/g++.mike/eh39.C  -std=gnu++98 execution test
FAIL: g++.old-deja/g++.mike/eh40.C  -std=gnu++11 execution test
FAIL: g++.old-deja/g++.mike/eh40.C  -std=gnu++14 execution test
FAIL: g++.old-deja/g++.mike/eh40.C  -std=gnu++98 execution test
FAIL: g++.old-deja/g++.mike/eh41.C  -std=gnu++11 execution test
FAIL: g++.old-deja/g++.mike/eh41.C  -std=gnu++14 execution test
FAIL: g++.old-deja/g++.mike/eh41.C  -std=gnu++98 execution test
FAIL: g++.old-deja/g++.mike/eh50.C  -std=gnu++11 execution test
FAIL: g++.old-deja/g++.mike/eh50.C  -std=gnu++14 execution test
FAIL: g++.old-deja/g++.mike/eh50.C  -std=gnu++98 execution test
FAIL: g++.old-deja/g++.mike/eh51.C  -std=gnu++11 execution test
FAIL: g++.old-deja/g++.mike/eh51.C  -std=gnu++14 execution test
FAIL: g++.old-deja/g++.mike/eh51.C  -std=gnu++98 execution test
FAIL: g++.old-deja/g++.other/init7.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.other/init7.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.other/init7.C  -std=c++98 execution test
FAIL: g++.old-deja/g++.other/singleton.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.other/singleton.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.other/singleton.C  -std=c++98 execution test
FAIL: g++.old-deja/g++.other/vbase2.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.other/vbase2.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.other/vbase2.C  -std=c++98 execution test
FAIL: g++.old-deja/g++.robertl/eh990323-1.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.robertl/eh990323-1.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.robertl/eh990323-1.C  -std=c++98 execution test
FAIL: g++.old-deja/g++.robertl/eh990323-5.C  -std=c++11 execution test
FAIL: g++.old-deja/g++.robertl/eh990323-5.C  -std=c++14 execution test
FAIL: g++.old-deja/g++.robertl/eh990323-5.C  -std=c++98 execution test
FAIL: iface run
FAIL: II -findirect-dispatch execution - source compiled test
FAIL: II -O3 -findirect-dispatch execution - source compiled test
FAIL: indirect -findirect-dispatch execution - source compiled test
FAIL: indirect -O3 -findirect-dispatch execution - source compiled test
FAIL: indirect_read -findirect-dispatch execution - source compiled test
FAIL: indirect_read -O3 -findirect-dispatch execution - source compiled test
FAIL: indirect_write -findirect-dispatch execution - source compiled test
FAIL: indirect_write -O3 -findirect-dispatch execution - source compiled test
FAIL: initexc execution - source compiled test
FAIL: initexc -findirect-dispatch execution - source compiled test
FAIL: initexc -O3 execution - source compiled test
FAIL: initexc -O3 -findirect-dispatch execution - source compiled test
FAIL: init execution - gij test
FAIL: initfield -findirect-dispatch execution - source compiled test
FAIL: initfield -O3 -findirect-dispatch execution - source compiled test
FAIL: inline -findirect-dispatch execution - source compiled test
FAIL: inline -O3 -findirect-dispatch execution - source compiled test
FAIL: inner1 -findirect-dispatch execution - source compiled test
FAIL: inner1 -O3 -findirect-dispatch execution - source compiled test
FAIL: inner2 -findirect-dispatch execution - source compiled test
FAIL: inner2 -O3 -findirect-dispatch execution - source compiled test
FAIL: inner3 -findirect-dispatch execution - source compiled test
FAIL: inner3 -O3 -findirect-dispatch execution - source compiled test
FAIL: inner4 -findirect-dispatch execution - source compiled test
FAIL: inner4 -O3 -findirect-dispatch execution - source compiled test
FAIL: inner_array -findirect-dispatch execution - source compiled test
FAIL: inner_array -O3 -findirect-dispatch execution - source compiled test
FAIL: inner_interface -findirect-dispatch execution - source compiled test
FAIL: inner_interface -O3 -findirect-dispatch execution - source compiled test
FAIL: instance -findirect-dispatch execution - source compiled test
FAIL: instance -O3 -findirect-dispatch execution - source compiled test
FAIL: instinit2 -findirect-dispatch execution - source compiled test
FAIL: instinit2 -O3 -findirect-dispatch execution - source compiled test
FAIL: instinit -findirect-dispatch execution - source compiled test
FAIL: instinit -O3 -findirect-dispatch execution - source compiled test
FAIL: InterfaceDispatch execution - source compiled test
FAIL: InterfaceDispatch -findirect-dispatch execution - source compiled test
FAIL: InterfaceDispatch -O3 execution - source compiled test
FAIL: InterfaceDispatch -O3 -findirect-dispatch execution - source compiled test
FAIL: Invoke_1 -findirect-dispatch execution - source compiled test
FAIL: Invoke_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: Invoke_2 -findirect-dispatch execution - source compiled test
FAIL: Invoke_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: invoke execution - gij test
FAIL: invoke_from_inner -findirect-dispatch execution - source compiled test
FAIL: invoke_from_inner -O3 -findirect-dispatch execution - source compiled test
FAIL: InvokeInterface -findirect-dispatch execution - source compiled test
FAIL: InvokeInterface -O3 -findirect-dispatch execution - source compiled test
FAIL: InvokeReturn -findirect-dispatch execution - source compiled test
FAIL: InvokeReturn -O3 -findirect-dispatch execution - source compiled test
FAIL: invokethrow -findirect-dispatch execution - source compiled test
FAIL: invokethrow -O3 -findirect-dispatch execution - source compiled test
FAIL: jniutf execution - gij test
FAIL: KeepInline -findirect-dispatch execution - source compiled test
FAIL: KeepInline -O3 -findirect-dispatch execution - source compiled test
FAIL: klass -findirect-dispatch execution - source compiled test
FAIL: klass -O3 -findirect-dispatch execution - source compiled test
FAIL: LargeFile -findirect-dispatch execution - source compiled test
FAIL: LargeFile -O3 -findirect-dispatch execution - source compiled test
FAIL: libitm.c++/eh-1.C execution test
FAIL: libjava.jar/simple.jar execution - gij test
FAIL: libjava.jar/TestClosureGC.jar execution - gij test
FAIL: martin execution - gij test
FAIL: MathBuiltin -findirect-dispatch execution - source compiled test
FAIL: MathBuiltin -O3 -findirect-dispatch execution - source compiled test
FAIL: Matrix4f -findirect-dispatch execution - source compiled test
FAIL: Matrix4f -O3 -findirect-dispatch execution - source compiled test
FAIL: md5test -findirect-dispatch execution - source compiled test
FAIL: md5test -O3 -findirect-dispatch execution - source compiled test
FAIL: multiple_finit -findirect-dispatch execution - source compiled test
FAIL: multiple_finit -O3 -findirect-dispatch execution - source compiled test
FAIL: N19990310_02 -findirect-dispatch execution - source compiled test
FAIL: N19990310_02 -O3 -findirect-dispatch execution - source compiled test
FAIL: N19990310_3 -findirect-dispatch execution - source compiled test
FAIL: N19990310_3 -O3 -findirect-dispatch execution - source compiled test
FAIL: N19990310_4 -findirect-dispatch execution - source compiled test
FAIL: N19990310_4 -O3 -findirect-dispatch execution - source compiled test
FAIL: N19990310_5 -findirect-dispatch execution - source compiled test
FAIL: N19990310_5 -O3 -findirect-dispatch execution - source compiled test
FAIL: negzero -findirect-dispatch execution - source compiled test
FAIL: negzero -O3 -findirect-dispatch execution - source compiled test
FAIL: nested_with_ctor -findirect-dispatch execution - source compiled test
FAIL: nested_with_ctor -O3 -findirect-dispatch execution - source compiled test
FAIL: newarray_overflow -findirect-dispatch execution - source compiled test
FAIL: newarray_overflow -O3 -findirect-dispatch execution - source compiled test
FAIL: noclass run
FAIL: objc/execute/exceptions/finally-1.m execution,  -O0 -fgnu-runtime
FAIL: objc/execute/exceptions/finally-1.m execution,  -O1 -fgnu-runtime
FAIL: objc/execute/exceptions/finally-1.m execution,  -O2 -fgnu-runtime
FAIL: objc/execute/exceptions/finally-1.m execution,  -O3 -g -fgnu-runtime
FAIL: objc/execute/exceptions/finally-1.m execution,  -Os -fgnu-runtime
FAIL: Overflow -findirect-dispatch execution - source compiled test
FAIL: Overflow -O3 -findirect-dispatch execution - source compiled test
FAIL: overload execution - gij test
FAIL: override -findirect-dispatch execution - source compiled test
FAIL: override -O3 -findirect-dispatch execution - source compiled test
FAIL: pr109 -findirect-dispatch execution - source compiled test
FAIL: pr109 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr11951 execution - gij test
FAIL: PR12350 -findirect-dispatch execution - source compiled test
FAIL: PR12350 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR12416 -findirect-dispatch execution - source compiled test
FAIL: PR12416 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR12656 -findirect-dispatch execution - source compiled test
FAIL: PR12656 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR12915 -findirect-dispatch execution - source compiled test
FAIL: PR12915 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr13107_2 -findirect-dispatch execution - source compiled test
FAIL: pr13107_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr13107_3 -findirect-dispatch execution - source compiled test
FAIL: pr13107_3 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr13107 -findirect-dispatch execution - source compiled test
FAIL: pr13107 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr133 -findirect-dispatch execution - source compiled test
FAIL: pr133 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR141 -findirect-dispatch execution - source compiled test
FAIL: PR141 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR15133 execution - gij test
FAIL: PR160 -findirect-dispatch execution - source compiled test
FAIL: PR160 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR162 -findirect-dispatch execution - source compiled test
FAIL: PR162 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr16789 -findirect-dispatch execution - source compiled test
FAIL: pr16789 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR16867 -findirect-dispatch execution - source compiled test
FAIL: PR16867 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR16923 run
FAIL: pr17536 -findirect-dispatch execution - source compiled test
FAIL: pr17536 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr179 -findirect-dispatch execution - source compiled test
FAIL: pr179 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR18116 run
FAIL: pr18278 execution - gij test
FAIL: pr184 -findirect-dispatch execution - source compiled test
FAIL: pr184 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR18699 -findirect-dispatch execution - source compiled test
FAIL: PR18699 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR19870_2 -findirect-dispatch execution - source compiled test
FAIL: PR19870_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR19870 -findirect-dispatch execution - source compiled test
FAIL: PR19870 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR19921 -findirect-dispatch execution - source compiled test
FAIL: PR19921 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR20056 -findirect-dispatch execution - source compiled test
FAIL: PR20056 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr21785 execution - source compiled test
FAIL: pr21785 -findirect-dispatch execution - source compiled test
FAIL: pr21785 -O3 execution - source compiled test
FAIL: pr21785 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr21844 -findirect-dispatch execution - source compiled test
FAIL: pr21844 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR218 -findirect-dispatch execution - source compiled test
FAIL: PR218 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr23739 execution - gij test
FAIL: PR242 -findirect-dispatch execution - source compiled test
FAIL: PR242 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr24321 execution - source compiled test
FAIL: pr24321 -findirect-dispatch execution - source compiled test
FAIL: pr24321 -O3 execution - source compiled test
FAIL: pr24321 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR25535 -findirect-dispatch execution - source compiled test
FAIL: PR25535 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr25676 -findirect-dispatch execution - source compiled test
FAIL: pr25676 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR260 -findirect-dispatch execution - source compiled test
FAIL: PR260 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr26390 -findirect-dispatch execution - source compiled test
FAIL: pr26390 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR26858 -findirect-dispatch execution - source compiled test
FAIL: PR26858 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr26990 -findirect-dispatch execution - source compiled test
FAIL: pr26990 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr27171 -findirect-dispatch execution - source compiled test
FAIL: pr27171 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR27908 -findirect-dispatch execution - source compiled test
FAIL: PR27908 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR28178 execution - gij test
FAIL: PR29013 -findirect-dispatch execution - source compiled test
FAIL: PR29013 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR29495 -findirect-dispatch execution - source compiled test
FAIL: PR29495 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr29812 execution - gij test
FAIL: PR3096 -findirect-dispatch execution - source compiled test
FAIL: PR3096 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR31264 -findirect-dispatch execution - source compiled test
FAIL: PR31264 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR35020 execution - source compiled test
FAIL: PR35020 -findirect-dispatch execution - source compiled test
FAIL: PR35020 -O3 execution - source compiled test
FAIL: PR35020 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR36252 -findirect-dispatch execution - source compiled test
FAIL: PR36252 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR3731 -findirect-dispatch execution - source compiled test
FAIL: PR3731 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR5057_2 -findirect-dispatch execution - source compiled test
FAIL: PR5057_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR5057 -findirect-dispatch execution - source compiled test
FAIL: PR5057 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR55 -findirect-dispatch execution - source compiled test
FAIL: PR55 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR56 -findirect-dispatch execution - source compiled test
FAIL: PR56 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR6085 -findirect-dispatch execution - source compiled test
FAIL: PR6085 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR6204 -findirect-dispatch execution - source compiled test
FAIL: PR6204 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr6388 -findirect-dispatch execution - source compiled test
FAIL: pr6388 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR6729 -findirect-dispatch execution - source compiled test
FAIL: PR6729 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR6820 -findirect-dispatch execution - source compiled test
FAIL: PR6820 -O3 -findirect-dispatch execution - source compiled test
FAIL: PR7482 -findirect-dispatch execution - source compiled test
FAIL: PR7482 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr83 -findirect-dispatch execution - source compiled test
FAIL: pr83 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr8415 -findirect-dispatch execution - source compiled test
FAIL: pr8415 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr8676 -findirect-dispatch execution - source compiled test
FAIL: pr8676 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr8823 -findirect-dispatch execution - source compiled test
FAIL: pr8823 -O3 -findirect-dispatch execution - source compiled test
FAIL: pr8945 -findirect-dispatch execution - source compiled test
FAIL: pr8945 -O3 -findirect-dispatch execution - source compiled test
FAIL: private_direct_read -findirect-dispatch execution - source compiled test
FAIL: private_direct_read -O3 -findirect-dispatch execution - source
compiled test
FAIL: Process_1 -findirect-dispatch execution - source compiled test
FAIL: Process_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: Process_2 -findirect-dispatch execution - source compiled test
FAIL: Process_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: Process_3 -findirect-dispatch execution - source compiled test
FAIL: Process_3 -O3 -findirect-dispatch execution - source compiled test
FAIL: Process_4 -findirect-dispatch execution - source compiled test
FAIL: Process_4 -O3 -findirect-dispatch execution - source compiled test
FAIL: Process_5 -findirect-dispatch execution - source compiled test
FAIL: Process_5 -O3 -findirect-dispatch execution - source compiled test
FAIL: Process_6 -findirect-dispatch execution - source compiled test
FAIL: Process_6 -O3 -findirect-dispatch execution - source compiled test
FAIL: Process_7 -findirect-dispatch execution - source compiled test
FAIL: Process_7 -O3 -findirect-dispatch execution - source compiled test
FAIL: ProxyTest execution - source compiled test
FAIL: ProxyTest -findirect-dispatch execution - source compiled test
FAIL: ProxyTest -O3 execution - source compiled test
FAIL: ProxyTest -O3 -findirect-dispatch execution - source compiled test
FAIL: register2 run
FAIL: register run
FAIL: RH194522 -findirect-dispatch execution - source compiled test
FAIL: RH194522 -O3 -findirect-dispatch execution - source compiled test
FAIL: search_outer -findirect-dispatch execution - source compiled test
FAIL: search_outer -O3 -findirect-dispatch execution - source compiled test
FAIL: Serialization -findirect-dispatch execution - source compiled test
FAIL: Serialization -O3 -findirect-dispatch execution - source compiled test
FAIL: shatest -findirect-dispatch execution - source compiled test
FAIL: shatest -O3 -findirect-dispatch execution - source compiled test
FAIL: Shazam -findirect-dispatch execution - source compiled test
FAIL: Shazam -O3 -findirect-dispatch execution - source compiled test
FAIL: simple_int execution - gij test
FAIL: sourcelocation -findirect-dispatch execution - source compiled test
FAIL: sourcelocation -O3 -findirect-dispatch execution - source compiled test
FAIL: StackTrace2 -findirect-dispatch execution - source compiled test
FAIL: StackTrace2 -O3 -findirect-dispatch execution - source compiled test
FAIL: stacktrace -findirect-dispatch execution - source compiled test
FAIL: stacktrace -O3 -findirect-dispatch execution - source compiled test
FAIL: StaticConstructor -findirect-dispatch execution - source compiled test
FAIL: StaticConstructor -O3 -findirect-dispatch execution - source compiled test
FAIL: StringBuffer_1 execution - source compiled test
FAIL: StringBuffer_1 -findirect-dispatch execution - source compiled test
FAIL: StringBuffer_1 -O3 execution - source compiled test
FAIL: StringBuffer_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: StringBuffer_overflow execution - source compiled test
FAIL: StringBuffer_overflow -findirect-dispatch execution - source compiled test
FAIL: StringBuffer_overflow -O3 execution - source compiled test
FAIL: StringBuffer_overflow -O3 -findirect-dispatch execution - source
compiled test
FAIL: stringconst2 execution - source compiled test
FAIL: stringconst2 -findirect-dispatch execution - source compiled test
FAIL: stringconst2 -O3 execution - source compiled test
FAIL: stringconst2 -O3 -findirect-dispatch execution - source compiled test
FAIL: stringconst -findirect-dispatch execution - source compiled test
FAIL: stringconst -O3 -findirect-dispatch execution - source compiled test
FAIL: String_overflow -findirect-dispatch execution - source compiled test
FAIL: String_overflow -O3 -findirect-dispatch execution - source compiled test
FAIL: stub -findirect-dispatch execution - source compiled test
FAIL: stub -O3 -findirect-dispatch execution - source compiled test
FAIL: SyncGlobal -findirect-dispatch execution - source compiled test
FAIL: SyncGlobal -O3 -findirect-dispatch execution - source compiled test
FAIL: Synch -findirect-dispatch execution - source compiled test
FAIL: Synch -O3 -findirect-dispatch execution - source compiled test
FAIL: SyncTest -findirect-dispatch execution - source compiled test
FAIL: SyncTest -O3 -findirect-dispatch execution - source compiled test
FAIL: TestClosureGC run
FAIL: test_long -findirect-dispatch execution - source compiled test
FAIL: test_long -O3 -findirect-dispatch execution - source compiled test
FAIL: TestMultiple execution - source compiled test
FAIL: TestParent execution - source compiled test
FAIL: TestProxy -findirect-dispatch execution - source compiled test
FAIL: TestProxy -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Alive execution - source compiled test
FAIL: Thread_Alive -findirect-dispatch execution - source compiled test
FAIL: Thread_Alive -O3 execution - source compiled test
FAIL: Thread_Alive -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_HoldsLock -findirect-dispatch execution - source compiled test
FAIL: Thread_HoldsLock -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Interrupt -findirect-dispatch execution - source compiled test
FAIL: Thread_Interrupt -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Join -findirect-dispatch execution - source compiled test
FAIL: Thread_Join -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Monitor -findirect-dispatch execution - source compiled test
FAIL: Thread_Monitor -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Sleep_2 -findirect-dispatch execution - source compiled test
FAIL: Thread_Sleep_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Sleep -findirect-dispatch execution - source compiled test
FAIL: Thread_Sleep -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Wait_2 -findirect-dispatch execution - source compiled test
FAIL: Thread_Wait_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: Thread_Wait -findirect-dispatch execution - source compiled test
FAIL: Thread_Wait_Interrupt -findirect-dispatch execution - source compiled test
FAIL: Thread_Wait_Interrupt -O3 -findirect-dispatch execution - source
compiled test
FAIL: Thread_Wait -O3 -findirect-dispatch execution - source compiled test
FAIL: Throw_1 -findirect-dispatch execution - source compiled test
FAIL: Throw_1 -O3 -findirect-dispatch execution - source compiled test
FAIL: Throw_2 -findirect-dispatch execution - source compiled test
FAIL: Throw_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: Throw_3 -findirect-dispatch execution - source compiled test
FAIL: Throw_3 -O3 -findirect-dispatch execution - source compiled test
FAIL: throwit execution - gij test
FAIL: TLtest -findirect-dispatch execution - source compiled test
FAIL: TLtest -O3 -findirect-dispatch execution - source compiled test
FAIL: tmi -findirect-dispatch execution - source compiled test
FAIL: tmi -O3 -findirect-dispatch execution - source compiled test
FAIL: tp -findirect-dispatch execution - source compiled test
FAIL: tp -O3 -findirect-dispatch execution - source compiled test
FAIL: tr1/3_function_objects/function/63840.cc execution test
FAIL: update_outer -findirect-dispatch execution - source compiled test
FAIL: update_outer -O3 -findirect-dispatch execution - source compiled test
FAIL: utf8concat -findirect-dispatch execution - source compiled test
FAIL: utf8concat -O3 -findirect-dispatch execution - source compiled test
FAIL: utilTest -findirect-dispatch execution - source compiled test
FAIL: utilTest -O3 -findirect-dispatch execution - source compiled test
FAIL: verify -findirect-dispatch execution - source compiled test
FAIL: verify -O3 -findirect-dispatch execution - source compiled test
FAIL: virtual execution - gij test
FAIL: WalkerTest -findirect-dispatch execution - source compiled test
FAIL: WalkerTest -O3 -findirect-dispatch execution - source compiled test

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-18 17:17   ` H.J. Lu
@ 2016-05-18 18:11     ` Segher Boessenkool
  2016-05-18 18:20       ` H.J. Lu
  0 siblings, 1 reply; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-18 18:11 UTC (permalink / raw)
  To: H.J. Lu; +Cc: GCC Patches

On Wed, May 18, 2016 at 10:17:32AM -0700, H.J. Lu wrote:
> On Mon, May 16, 2016 at 6:09 PM, Segher Boessenkool
> <segher@kernel.crashing.org> wrote:
> > Make new functions make_split_prologue_seq, make_prologue_seq, and
> > make_epilogue_seq.
> >
> > Tested as in the previous patch; is this okay for trunk?
> >
> >
> > Segher
> >
> >
> > 2016-05-16  Segher Boessenkool  <segher@kernel.crashing.org>
> >
> >         * function.c (make_split_prologue_seq, make_prologue_seq,
> >         make_epilogue_seq): New functions, factored out from...
> >         (thread_prologue_and_epilogue_insns): Here.
> >
> 
> It breaks x86:

Are you sure it is this patch causing it?  As noted, it was tested on x86.


Segher

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-18 18:11     ` Segher Boessenkool
@ 2016-05-18 18:20       ` H.J. Lu
  2016-05-18 18:24         ` H.J. Lu
  2016-05-18 18:35         ` Segher Boessenkool
  0 siblings, 2 replies; 28+ messages in thread
From: H.J. Lu @ 2016-05-18 18:20 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: GCC Patches

On Wed, May 18, 2016 at 11:11 AM, Segher Boessenkool
<segher@kernel.crashing.org> wrote:
> On Wed, May 18, 2016 at 10:17:32AM -0700, H.J. Lu wrote:
>> On Mon, May 16, 2016 at 6:09 PM, Segher Boessenkool
>> <segher@kernel.crashing.org> wrote:
>> > Make new functions make_split_prologue_seq, make_prologue_seq, and
>> > make_epilogue_seq.
>> >
>> > Tested as in the previous patch; is this okay for trunk?
>> >
>> >
>> > Segher
>> >
>> >
>> > 2016-05-16  Segher Boessenkool  <segher@kernel.crashing.org>
>> >
>> >         * function.c (make_split_prologue_seq, make_prologue_seq,
>> >         make_epilogue_seq): New functions, factored out from...
>> >         (thread_prologue_and_epilogue_insns): Here.
>> >
>>
>> It breaks x86:
>
> Are you sure it is this patch causing it?  As noted, it was tested on x86.
>

I am pretty sure.  How did you test it on x86?  What do you get with

# make check-c++ RUNTESTFLAGS="dg.exp=ctor*.C --target_board='unix{-m32,}'"


-- 
H.J.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-18 18:20       ` H.J. Lu
@ 2016-05-18 18:24         ` H.J. Lu
  2016-05-18 18:35         ` Segher Boessenkool
  1 sibling, 0 replies; 28+ messages in thread
From: H.J. Lu @ 2016-05-18 18:24 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: GCC Patches

On Wed, May 18, 2016 at 11:20 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Wed, May 18, 2016 at 11:11 AM, Segher Boessenkool
> <segher@kernel.crashing.org> wrote:
>> On Wed, May 18, 2016 at 10:17:32AM -0700, H.J. Lu wrote:
>>> On Mon, May 16, 2016 at 6:09 PM, Segher Boessenkool
>>> <segher@kernel.crashing.org> wrote:
>>> > Make new functions make_split_prologue_seq, make_prologue_seq, and
>>> > make_epilogue_seq.
>>> >
>>> > Tested as in the previous patch; is this okay for trunk?
>>> >
>>> >
>>> > Segher
>>> >
>>> >
>>> > 2016-05-16  Segher Boessenkool  <segher@kernel.crashing.org>
>>> >
>>> >         * function.c (make_split_prologue_seq, make_prologue_seq,
>>> >         make_epilogue_seq): New functions, factored out from...
>>> >         (thread_prologue_and_epilogue_insns): Here.
>>> >
>>>
>>> It breaks x86:
>>
>> Are you sure it is this patch causing it?  As noted, it was tested on x86.
>>
>
> I am pretty sure.  How did you test it on x86?  What do you get with
>
> # make check-c++ RUNTESTFLAGS="dg.exp=ctor*.C --target_board='unix{-m32,}'"
>

I opened:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71180


-- 
H.J.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-18 18:20       ` H.J. Lu
  2016-05-18 18:24         ` H.J. Lu
@ 2016-05-18 18:35         ` Segher Boessenkool
  2016-05-18 22:13           ` Segher Boessenkool
  1 sibling, 1 reply; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-18 18:35 UTC (permalink / raw)
  To: H.J. Lu; +Cc: GCC Patches

On Wed, May 18, 2016 at 11:20:29AM -0700, H.J. Lu wrote:
> >> >         * function.c (make_split_prologue_seq, make_prologue_seq,
> >> >         make_epilogue_seq): New functions, factored out from...
> >> >         (thread_prologue_and_epilogue_insns): Here.
> >>
> >> It breaks x86:
> >
> > Are you sure it is this patch causing it?  As noted, it was tested on x86.
> 
> I am pretty sure.  How did you test it on x86?

"make -k check".  I'll test 32-bit now.


Segher

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-18 18:35         ` Segher Boessenkool
@ 2016-05-18 22:13           ` Segher Boessenkool
  2016-05-19  7:16             ` Jakub Jelinek
  0 siblings, 1 reply; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-18 22:13 UTC (permalink / raw)
  To: H.J. Lu; +Cc: GCC Patches

On Wed, May 18, 2016 at 01:35:16PM -0500, Segher Boessenkool wrote:
> On Wed, May 18, 2016 at 11:20:29AM -0700, H.J. Lu wrote:
> > >> >         * function.c (make_split_prologue_seq, make_prologue_seq,
> > >> >         make_epilogue_seq): New functions, factored out from...
> > >> >         (thread_prologue_and_epilogue_insns): Here.
> > >>
> > >> It breaks x86:
> > >
> > > Are you sure it is this patch causing it?  As noted, it was tested on x86.
> > 
> > I am pretty sure.  How did you test it on x86?
> 
> "make -k check".  I'll test 32-bit now.

Actually, it also fails on 64 bit.  It passed my testing because it does
not fail together with patch 3/3, and does not fail on powerpc at all.


Segher

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-18 22:13           ` Segher Boessenkool
@ 2016-05-19  7:16             ` Jakub Jelinek
  2016-05-19  7:28               ` Segher Boessenkool
  2016-05-19 17:20               ` Jeff Law
  0 siblings, 2 replies; 28+ messages in thread
From: Jakub Jelinek @ 2016-05-19  7:16 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: H.J. Lu, GCC Patches

On Wed, May 18, 2016 at 05:13:25PM -0500, Segher Boessenkool wrote:
> On Wed, May 18, 2016 at 01:35:16PM -0500, Segher Boessenkool wrote:
> > On Wed, May 18, 2016 at 11:20:29AM -0700, H.J. Lu wrote:
> > > >> >         * function.c (make_split_prologue_seq, make_prologue_seq,
> > > >> >         make_epilogue_seq): New functions, factored out from...
> > > >> >         (thread_prologue_and_epilogue_insns): Here.
> > > >>
> > > >> It breaks x86:
> > > >
> > > > Are you sure it is this patch causing it?  As noted, it was tested on x86.
> > > 
> > > I am pretty sure.  How did you test it on x86?
> > 
> > "make -k check".  I'll test 32-bit now.
> 
> Actually, it also fails on 64 bit.  It passed my testing because it does
> not fail together with patch 3/3, and does not fail on powerpc at all.

If 3/3 isn't approved soon, can you please revert the problematic commit
until it is if that patch can't work right on its own and needs the other
patch too)?  The trunk is in terrible state right now at least on
x86_64/i686-linux, various tests hang forever (e.g. some cleanup-* tests)
and there are hundreds of failures, making it impossible to do proper
regression testing.

	Jakub

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-19  7:16             ` Jakub Jelinek
@ 2016-05-19  7:28               ` Segher Boessenkool
  2016-05-19  7:41                 ` Jakub Jelinek
  2016-05-19 17:20               ` Jeff Law
  1 sibling, 1 reply; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-19  7:28 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: H.J. Lu, GCC Patches

On Thu, May 19, 2016 at 09:16:26AM +0200, Jakub Jelinek wrote:
> On Wed, May 18, 2016 at 05:13:25PM -0500, Segher Boessenkool wrote:
> > On Wed, May 18, 2016 at 01:35:16PM -0500, Segher Boessenkool wrote:
> > > On Wed, May 18, 2016 at 11:20:29AM -0700, H.J. Lu wrote:
> > > > >> >         * function.c (make_split_prologue_seq, make_prologue_seq,
> > > > >> >         make_epilogue_seq): New functions, factored out from...
> > > > >> >         (thread_prologue_and_epilogue_insns): Here.
> > > > >>
> > > > >> It breaks x86:
> > > > >
> > > > > Are you sure it is this patch causing it?  As noted, it was tested on x86.
> > > > 
> > > > I am pretty sure.  How did you test it on x86?
> > > 
> > > "make -k check".  I'll test 32-bit now.
> > 
> > Actually, it also fails on 64 bit.  It passed my testing because it does
> > not fail together with patch 3/3, and does not fail on powerpc at all.
> 
> If 3/3 isn't approved soon, can you please revert the problematic commit
> until it is if that patch can't work right on its own and needs the other
> patch too)?  The trunk is in terrible state right now at least on
> x86_64/i686-linux, various tests hang forever (e.g. some cleanup-* tests)
> and there are hundreds of failures, making it impossible to do proper
> regression testing.

[ You could just revert it locally if it hinders other testing -- I have
to do that all the time for pawtches breaking powerpc ].

The following fixes it, tested on x86_64-linux.  Is it okay for trunk?

(It only happens for targets that have a splitter gated by epilogue_done
for their eh_return pattern).


Segher


2016-05-19  Segher Boessenkool  <segher@kernel.crashing.org>

	* function.c (thread_prologue_and_epilogue_insn): Move the
	"goto epilogue_done" one block later.


diff --git a/gcc/function.c b/gcc/function.c
index 1c56253..4c236eb 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5960,11 +5960,6 @@ thread_prologue_and_epilogue_insns (void)
 
   exit_fallthru_edge = find_fallthru_edge (EXIT_BLOCK_PTR_FOR_FN (cfun)->preds);
 
-  /* If nothing falls through into the exit block, we don't need an
-     epilogue.  */
-  if (exit_fallthru_edge == NULL)
-    goto epilogue_done;
-
   /* A small fib -- epilogue is not yet completed, but we wish to re-use
      this marker for the splits of EH_RETURN patterns, and nothing else
      uses the flag in the meantime.  */
@@ -5994,6 +5989,11 @@ thread_prologue_and_epilogue_insns (void)
       emit_note_after (NOTE_INSN_EPILOGUE_BEG, prev);
     }
 
+  /* If nothing falls through into the exit block, we don't need an
+     epilogue.  */
+  if (exit_fallthru_edge == NULL)
+    goto epilogue_done;
+
   if (epilogue_seq)
     {
       insert_insn_on_edge (epilogue_seq, exit_fallthru_edge);

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-19  7:28               ` Segher Boessenkool
@ 2016-05-19  7:41                 ` Jakub Jelinek
  0 siblings, 0 replies; 28+ messages in thread
From: Jakub Jelinek @ 2016-05-19  7:41 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: H.J. Lu, GCC Patches

On Thu, May 19, 2016 at 02:28:15AM -0500, Segher Boessenkool wrote:
> The following fixes it, tested on x86_64-linux.  Is it okay for trunk?
> 
> (It only happens for targets that have a splitter gated by epilogue_done
> for their eh_return pattern).
> 
> 
> Segher
> 
> 
> 2016-05-19  Segher Boessenkool  <segher@kernel.crashing.org>
> 
> 	* function.c (thread_prologue_and_epilogue_insn): Move the
> 	"goto epilogue_done" one block later.

Ok, thanks.

	Jakub

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 3/3] function: Restructure *logue insertion
  2016-05-17  1:09 ` [PATCH 3/3] function: Restructure *logue insertion Segher Boessenkool
@ 2016-05-19  8:04   ` Segher Boessenkool
  2016-05-19 22:00   ` Jeff Law
  1 sibling, 0 replies; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-19  8:04 UTC (permalink / raw)
  To: gcc-patches

On Tue, May 17, 2016 at 01:09:11AM +0000, Segher Boessenkool wrote:
> This patch restructures how the prologues/epilogues are inserted.  Sibcalls
> that run without prologue are now handled in shrink-wrap.c; it communicates
> what is already handled by setting the EDGE_IGNORE flag.  The
> try_shrink_wrapping function then doesn't need to be passed the bb_flags
> anymore.

> 2016-05-16  Segher Boessenkool  <segher@kernel.crashing.org>
> 
> 	* function.c (make_epilogue_seq): Remove epilogue_end parameter.
> 	(thread_prologue_and_epilogue_insns): Remove bb_flags.  Restructure
> 	code.  Ignore sibcalls on EDGE_IGNORE edges.
> 	* shrink-wrap.c (handle_simple_exit): New function.  Set EDGE_IGNORE
> 	on edges for sibcalls that run without prologue.  The rest of the
> 	function is combined from...
> 	(fix_fake_fallthrough_edge): ... this, and ...
> 	(try_shrink_wrapping): ... a part of this.  Remove the bb_with
> 	function argument, make it a local variable.

As promised in the 1/3 subthread, I looked at the difference of building
Linux with and without (only) this patch.  With the 24 (of 30) targets
that build, I saw no generated code differences.  There also are no
testsuite regressions on powerpc, powerpc64, powerpc64le, or x86_64.


Segher

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 2/3] function: Factor out make_*logue_seq
  2016-05-19  7:16             ` Jakub Jelinek
  2016-05-19  7:28               ` Segher Boessenkool
@ 2016-05-19 17:20               ` Jeff Law
  1 sibling, 0 replies; 28+ messages in thread
From: Jeff Law @ 2016-05-19 17:20 UTC (permalink / raw)
  To: Jakub Jelinek, Segher Boessenkool; +Cc: H.J. Lu, GCC Patches

On 05/19/2016 01:16 AM, Jakub Jelinek wrote:
> On Wed, May 18, 2016 at 05:13:25PM -0500, Segher Boessenkool wrote:
>> On Wed, May 18, 2016 at 01:35:16PM -0500, Segher Boessenkool wrote:
>>> On Wed, May 18, 2016 at 11:20:29AM -0700, H.J. Lu wrote:
>>>>>>>         * function.c (make_split_prologue_seq, make_prologue_seq,
>>>>>>>         make_epilogue_seq): New functions, factored out from...
>>>>>>>         (thread_prologue_and_epilogue_insns): Here.
>>>>>>
>>>>>> It breaks x86:
>>>>>
>>>>> Are you sure it is this patch causing it?  As noted, it was tested on x86.
>>>>
>>>> I am pretty sure.  How did you test it on x86?
>>>
>>> "make -k check".  I'll test 32-bit now.
>>
>> Actually, it also fails on 64 bit.  It passed my testing because it does
>> not fail together with patch 3/3, and does not fail on powerpc at all.
>
> If 3/3 isn't approved soon, can you please revert the problematic commit
> until it is if that patch can't work right on its own and needs the other
> patch too)?  The trunk is in terrible state right now at least on
> x86_64/i686-linux, various tests hang forever (e.g. some cleanup-* tests)
> and there are hundreds of failures, making it impossible to do proper
> regression testing.
FWIW, I'm still looking at 3/3.

jeff

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 3/3] function: Restructure *logue insertion
  2016-05-17  1:09 ` [PATCH 3/3] function: Restructure *logue insertion Segher Boessenkool
  2016-05-19  8:04   ` Segher Boessenkool
@ 2016-05-19 22:00   ` Jeff Law
  2016-05-19 22:20     ` Segher Boessenkool
  1 sibling, 1 reply; 28+ messages in thread
From: Jeff Law @ 2016-05-19 22:00 UTC (permalink / raw)
  To: Segher Boessenkool, gcc-patches

On 05/16/2016 07:09 PM, Segher Boessenkool wrote:
> This patch restructures how the prologues/epilogues are inserted.  Sibcalls
> that run without prologue are now handled in shrink-wrap.c; it communicates
> what is already handled by setting the EDGE_IGNORE flag.  The
> try_shrink_wrapping function then doesn't need to be passed the bb_flags
> anymore.
>
> Tested like the previous two patches; is this okay for trunk?
>
>
> Segher
>
>
> 2016-05-16  Segher Boessenkool  <segher@kernel.crashing.org>
>
> 	* function.c (make_epilogue_seq): Remove epilogue_end parameter.
> 	(thread_prologue_and_epilogue_insns): Remove bb_flags.  Restructure
> 	code.  Ignore sibcalls on EDGE_IGNORE edges.
> 	* shrink-wrap.c (handle_simple_exit): New function.  Set EDGE_IGNORE
> 	on edges for sibcalls that run without prologue.  The rest of the
> 	function is combined from...
> 	(fix_fake_fallthrough_edge): ... this, and ...
> 	(try_shrink_wrapping): ... a part of this.  Remove the bb_with
> 	function argument, make it a local variable.
For some reason I found this patch awful to walk through.  In 
retrospect, it might have been better break this down further. Not 
because it's conceptually difficult to follow, but because the diffs 
themselves are difficult to read.

I kept slicing out hunks when I could pair up the original code to its 
new functional equivalent and hunks which were just "fluff" and kept 
iterating until there was nothing left that seemed unreasonable.

OK for the trunk, but please watch closely for any fallout.

jeff

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 3/3] function: Restructure *logue insertion
  2016-05-19 22:00   ` Jeff Law
@ 2016-05-19 22:20     ` Segher Boessenkool
  2016-05-20  9:28       ` Thomas Schwinge
  0 siblings, 1 reply; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-19 22:20 UTC (permalink / raw)
  To: Jeff Law; +Cc: gcc-patches

On Thu, May 19, 2016 at 04:00:22PM -0600, Jeff Law wrote:
> >	* function.c (make_epilogue_seq): Remove epilogue_end parameter.
> >	(thread_prologue_and_epilogue_insns): Remove bb_flags.  Restructure
> >	code.  Ignore sibcalls on EDGE_IGNORE edges.
> >	* shrink-wrap.c (handle_simple_exit): New function.  Set EDGE_IGNORE
> >	on edges for sibcalls that run without prologue.  The rest of the
> >	function is combined from...
> >	(fix_fake_fallthrough_edge): ... this, and ...
> >	(try_shrink_wrapping): ... a part of this.  Remove the bb_with
> >	function argument, make it a local variable.
> For some reason I found this patch awful to walk through.  In 
> retrospect, it might have been better break this down further. Not 
> because it's conceptually difficult to follow, but because the diffs 
> themselves are difficult to read.

Yeah, I should have realised that because the changelog was hard to write.

> I kept slicing out hunks when I could pair up the original code to its 
> new functional equivalent and hunks which were just "fluff" and kept 
> iterating until there was nothing left that seemed unreasonable.
> 
> OK for the trunk, but please watch closely for any fallout.

Thanks, and I will!


Segher

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 3/3] function: Restructure *logue insertion
  2016-05-19 22:20     ` Segher Boessenkool
@ 2016-05-20  9:28       ` Thomas Schwinge
  2016-05-20 13:21         ` Thomas Schwinge
  2016-05-20 21:27         ` Segher Boessenkool
  0 siblings, 2 replies; 28+ messages in thread
From: Thomas Schwinge @ 2016-05-20  9:28 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: gcc-patches, Jeff Law

[-- Attachment #1: Type: text/plain, Size: 961 bytes --]

Hi!

> > >	* function.c (make_epilogue_seq): Remove epilogue_end parameter.
> > >	(thread_prologue_and_epilogue_insns): Remove bb_flags.  Restructure
> > >	code.  Ignore sibcalls on EDGE_IGNORE edges.
> > >	* shrink-wrap.c (handle_simple_exit): New function.  Set EDGE_IGNORE
> > >	on edges for sibcalls that run without prologue.  The rest of the
> > >	function is combined from...
> > >	(fix_fake_fallthrough_edge): ... this, and ...
> > >	(try_shrink_wrapping): ... a part of this.  Remove the bb_with
> > >	function argument, make it a local variable.

On Thu, 19 May 2016 17:20:46 -0500, Segher Boessenkool <segher@kernel.crashing.org> wrote:
> On Thu, May 19, 2016 at 04:00:22PM -0600, Jeff Law wrote:
> > OK for the trunk, but please watch closely for any fallout.
> 
> Thanks, and I will!

With nvptx offloading on x86_64 GNU/Linux, this (r236491) is causing
several execution test failures.  I'll have a look.


Grüße
 Thomas

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 3/3] function: Restructure *logue insertion
  2016-05-20  9:28       ` Thomas Schwinge
@ 2016-05-20 13:21         ` Thomas Schwinge
  2016-05-20 14:47           ` Nathan Sidwell
  2016-05-20 21:27         ` Segher Boessenkool
  1 sibling, 1 reply; 28+ messages in thread
From: Thomas Schwinge @ 2016-05-20 13:21 UTC (permalink / raw)
  To: Bernd Schmidt, Nathan Sidwell; +Cc: gcc-patches, Jeff Law, Segher Boessenkool

Hi!

The nvptx maintainer Bernd, Nathan: can you take it from here, or should
I continue to figure it out?

On Fri, 20 May 2016 11:28:25 +0200, I wrote:
> > > >	* function.c (make_epilogue_seq): Remove epilogue_end parameter.
> > > >	(thread_prologue_and_epilogue_insns): Remove bb_flags.  Restructure
> > > >	code.  Ignore sibcalls on EDGE_IGNORE edges.
> > > >	* shrink-wrap.c (handle_simple_exit): New function.  Set EDGE_IGNORE
> > > >	on edges for sibcalls that run without prologue.  The rest of the
> > > >	function is combined from...
> > > >	(fix_fake_fallthrough_edge): ... this, and ...
> > > >	(try_shrink_wrapping): ... a part of this.  Remove the bb_with
> > > >	function argument, make it a local variable.
> 
> On Thu, 19 May 2016 17:20:46 -0500, Segher Boessenkool <segher@kernel.crashing.org> wrote:
> > On Thu, May 19, 2016 at 04:00:22PM -0600, Jeff Law wrote:
> > > OK for the trunk, but please watch closely for any fallout.
> > 
> > Thanks, and I will!
> 
> With nvptx offloading on x86_64 GNU/Linux, this (r236491) is causing
> several execution test failures.  I'll have a look.

OK, no offloading required.  The problem -- or, "a" problem; hopefully
the same ;-) -- also reproduces with a nvptx-none target configuration.
A before/after r236491 diff of:

    $ build-gcc/gcc/xgcc -Bbuild-gcc/gcc/ source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c -O0 -Wall -Wextra -Bbuild-gcc/nvptx-none/newlib/ -Lbuild-gcc/nvptx-none/newlib -mmainkernel -o ./20000121-1.exe -fdump-tree-all -fdump-ipa-all -fdump-rtl-all -save-temps

..., shows the execution failure ("nvptx-none-run-single 20000121-1.exe"
returns exit code 1), and (aside from earlier, hopefully benign
address/ID changes) shows the following dump changes, starting with:

    --- before/20000121-1.c.281r.mach       2016-05-20 14:56:37.794367323 +0200
    +++ after/20000121-1.c.281r.mach        2016-05-20 14:54:34.537741174 +0200
    @@ -5,16 +5,10 @@
     ending the processing of deferred insns
     df_analyze called
     df_worklist_dataflow_doublequeue:n_basic_blocks 3 n_edges 2 count 3 (    1)
    -scanning new insn with uid = 11.
    -changing bb of uid 13
    -  unscanned insn
    -changing bb of uid 11
    -  from 2 to 3
     starting the processing of deferred insns
     ending the processing of deferred insns
     df_analyze called
    -df_worklist_dataflow_doublequeue:n_basic_blocks 4 n_edges 3 count 4 (    1)
    -df_worklist_dataflow_doublequeue:n_basic_blocks 4 n_edges 3 count 4 (    1)
    +df_worklist_dataflow_doublequeue:n_basic_blocks 3 n_edges 2 count 3 (    1)
     
     
     big
    @@ -27,8 +21,8 @@
     ;;  entry block defs    1 [%stack] 2 [%frame] 3 [%args] 4 [%chain]
     ;;  exit block uses     1 [%stack] 2 [%frame]
     ;;  regs ever live      2 [%frame]
    -;;  ref usage  r1={1d,3u} r2={1d,4u} r3={1d,2u} r4={1d} r22={1d,1u} 
    -;;    total ref usage 15{5d,10u,0e} in 4{4 regular + 0 call} insns.
    +;;  ref usage  r1={1d,2u} r2={1d,3u} r3={1d,1u} r4={1d} r22={1d,1u} 
    +;;    total ref usage 12{5d,7u,0e} in 3{3 regular + 0 call} insns.
     
     ( )->[0]->( 2 )
     ;; bb 0 artificial_defs: { d-1(1){ }d-1(2){ }d-1(3){ }d-1(4){ }}
    @@ -42,7 +36,7 @@
     ;; lr  out      1 [%stack] 2 [%frame] 3 [%args]
     ;; live  out    1 [%stack] 2 [%frame] 3 [%args]
     
    -( 0 )->[2]->( 3 )
    +( 0 )->[2]->( 1 )
     ;; bb 2 artificial_defs: { }
     ;; bb 2 artificial_uses: { u-1(1){ }u-1(2){ }u-1(3){ }}
     ;; lr  in       1 [%stack] 2 [%frame] 3 [%args]
    @@ -54,19 +48,7 @@
     ;; lr  out      1 [%stack] 2 [%frame] 3 [%args]
     ;; live  out    1 [%stack] 2 [%frame] 3 [%args]
     
    -( 2 )->[3]->( 1 )
    -;; bb 3 artificial_defs: { }
    -;; bb 3 artificial_uses: { u-1(1){ }u-1(2){ }u-1(3){ }}
    -;; lr  in       1 [%stack] 2 [%frame] 3 [%args]
    -;; lr  use      1 [%stack] 2 [%frame] 3 [%args]
    -;; lr  def     
    -;; live  in     1 [%stack] 2 [%frame] 3 [%args]
    -;; live  gen   
    -;; live  kill  
    -;; lr  out      1 [%stack] 2 [%frame] 3 [%args]
    -;; live  out    1 [%stack] 2 [%frame] 3 [%args]
    -
    -( 3 )->[1]->( )
    +( 2 )->[1]->( )
     ;; bb 1 artificial_defs: { }
     ;; bb 1 artificial_uses: { u-1(1){ }u-1(2){ }}
     ;; lr  in       1 [%stack] 2 [%frame]
    @@ -92,8 +74,8 @@
     ;;  entry block defs    1 [%stack] 2 [%frame] 3 [%args] 4 [%chain]
     ;;  exit block uses     1 [%stack] 2 [%frame]
     ;;  regs ever live      2 [%frame]
    -;;  ref usage  r1={1d,3u} r2={1d,4u} r3={1d,2u} r4={1d} r22={1d,1u} 
    -;;    total ref usage 15{5d,10u,0e} in 4{4 regular + 0 call} insns.
    +;;  ref usage  r1={1d,2u} r2={1d,3u} r3={1d,1u} r4={1d} r22={1d,1u} 
    +;;    total ref usage 12{5d,7u,0e} in 3{3 regular + 0 call} insns.
     (note 1 0 5 NOTE_INSN_DELETED)
     (note 5 1 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
     (insn 2 5 3 2 (set (reg:DI 22)
    @@ -105,14 +87,8 @@
             (reg:DI 22)) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:1 5 {*movdi_insn}
          (nil))
     (note 4 3 9 2 NOTE_INSN_FUNCTION_BEG)
    -(insn 9 4 10 2 (const_int 0 [0]) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:1 191 {nop}
    +(insn 9 4 0 2 (const_int 0 [0]) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:1 191 {nop}
          (nil))
    -(note 10 9 13 2 NOTE_INSN_EPILOGUE_BEG)
    -(note 13 10 11 3 [bb 3] NOTE_INSN_BASIC_BLOCK)
    -(jump_insn 11 13 12 3 (return) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:1 192 {return}
    -     (nil)
    - -> return)
    -(barrier 12 11 0)
     
     ;; Function doit (doit, funcdef_no=1, decl_uid=1375, cgraph_uid=1, symbol_order=1)
     
    @@ -120,19 +96,13 @@
     ending the processing of deferred insns
     df_analyze called
     df_worklist_dataflow_doublequeue:n_basic_blocks 3 n_edges 2 count 3 (    1)
    -scanning new insn with uid = 27.
     verify found no changes in insn with uid = 16.
     verify found no changes in insn with uid = 19.
     verify found no changes in insn with uid = 22.
    -changing bb of uid 29
    -  unscanned insn
    -changing bb of uid 27
    -  from 2 to 3
     starting the processing of deferred insns
     ending the processing of deferred insns
     df_analyze called
    -df_worklist_dataflow_doublequeue:n_basic_blocks 4 n_edges 3 count 4 (    1)
    -df_worklist_dataflow_doublequeue:n_basic_blocks 4 n_edges 3 count 4 (    1)
    +df_worklist_dataflow_doublequeue:n_basic_blocks 3 n_edges 2 count 3 (    1)
     
     
     doit
    @@ -145,8 +115,8 @@
     ;;  entry block defs    1 [%stack] 2 [%frame] 3 [%args] 4 [%chain]
     ;;  exit block uses     1 [%stack] 2 [%frame]
     ;;  regs ever live      1 [%stack] 2 [%frame]
    -;;  ref usage  r0={3d} r1={1d,6u} r2={1d,9u} r3={1d,2u} r4={4d} r5={3d} r6={3d} r7={3d} r8={3d} r9={3d} r10={3d} r11={3d} r12={3d} r13={3d} r14={3d} r15={3d} r22={1d,1u} r23={1d,1u} r24={1d,1u} r25={1d,1u} r26={1d,1u} r27={1d,1u} r28={1d,1u} r29={1d,1u} r30={1d,1u} r31={1d,1u} r32={1d,1u} r33={1d,1u} 
    -;;    total ref usage 84{55d,29u,0e} in 20{17 regular + 3 call} insns.
    +;;  ref usage  r0={3d} r1={1d,5u} r2={1d,8u} r3={1d,1u} r4={4d} r5={3d} r6={3d} r7={3d} r8={3d} r9={3d} r10={3d} r11={3d} r12={3d} r13={3d} r14={3d} r15={3d} r22={1d,1u} r23={1d,1u} r24={1d,1u} r25={1d,1u} r26={1d,1u} r27={1d,1u} r28={1d,1u} r29={1d,1u} r30={1d,1u} r31={1d,1u} r32={1d,1u} r33={1d,1u} 
    +;;    total ref usage 81{55d,26u,0e} in 19{16 regular + 3 call} insns.
     
     ( )->[0]->( 2 )
     ;; bb 0 artificial_defs: { d-1(1){ }d-1(2){ }d-1(3){ }d-1(4){ }}
    @@ -160,7 +130,7 @@
     ;; lr  out      1 [%stack] 2 [%frame] 3 [%args]
     ;; live  out    1 [%stack] 2 [%frame] 3 [%args]
     
    -( 0 )->[2]->( 3 )
    +( 0 )->[2]->( 1 )
     ;; bb 2 artificial_defs: { }
     ;; bb 2 artificial_uses: { u-1(1){ }u-1(2){ }u-1(3){ }}
     ;; lr  in       1 [%stack] 2 [%frame] 3 [%args]
    @@ -172,19 +142,7 @@
     ;; lr  out      1 [%stack] 2 [%frame] 3 [%args]
     ;; live  out    1 [%stack] 2 [%frame] 3 [%args]
     
    -( 2 )->[3]->( 1 )
    -;; bb 3 artificial_defs: { }
    -;; bb 3 artificial_uses: { u-1(1){ }u-1(2){ }u-1(3){ }}
    -;; lr  in       1 [%stack] 2 [%frame] 3 [%args]
    -;; lr  use      1 [%stack] 2 [%frame] 3 [%args]
    -;; lr  def     
    -;; live  in     1 [%stack] 2 [%frame] 3 [%args]
    -;; live  gen   
    -;; live  kill  
    -;; lr  out      1 [%stack] 2 [%frame] 3 [%args]
    -;; live  out    1 [%stack] 2 [%frame] 3 [%args]
    -
    -( 3 )->[1]->( )
    +( 2 )->[1]->( )
     ;; bb 1 artificial_defs: { }
     ;; bb 1 artificial_uses: { u-1(1){ }u-1(2){ }}
     ;; lr  in       1 [%stack] 2 [%frame]
    @@ -210,8 +168,8 @@
     ;;  entry block defs    1 [%stack] 2 [%frame] 3 [%args] 4 [%chain]
     ;;  exit block uses     1 [%stack] 2 [%frame]
     ;;  regs ever live      1 [%stack] 2 [%frame]
    -;;  ref usage  r0={3d} r1={1d,6u} r2={1d,9u} r3={1d,2u} r4={4d} r5={3d} r6={3d} r7={3d} r8={3d} r9={3d} r10={3d} r11={3d} r12={3d} r13={3d} r14={3d} r15={3d} r22={1d,1u} r23={1d,1u} r24={1d,1u} r25={1d,1u} r26={1d,1u} r27={1d,1u} r28={1d,1u} r29={1d,1u} r30={1d,1u} r31={1d,1u} r32={1d,1u} r33={1d,1u} 
    -;;    total ref usage 84{55d,29u,0e} in 20{17 regular + 3 call} insns.
    +;;  ref usage  r0={3d} r1={1d,5u} r2={1d,8u} r3={1d,1u} r4={4d} r5={3d} r6={3d} r7={3d} r8={3d} r9={3d} r10={3d} r11={3d} r12={3d} r13={3d} r14={3d} r15={3d} r22={1d,1u} r23={1d,1u} r24={1d,1u} r25={1d,1u} r26={1d,1u} r27={1d,1u} r28={1d,1u} r29={1d,1u} r30={1d,1u} r31={1d,1u} r32={1d,1u} r33={1d,1u} 
    +;;    total ref usage 81{55d,26u,0e} in 19{16 regular + 3 call} insns.
     (note 1 0 9 NOTE_INSN_DELETED)
     (note 9 1 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
     (insn 2 9 3 2 (set (reg:SI 26)
    @@ -258,7 +216,7 @@
             (reg:DI 23 [ _2 ])) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:5 5 {*movdi_insn}
          (nil))
     (call_insn 16 15 17 2 (parallel [
    -            (call (mem:QI (symbol_ref:DI ("big") [flags 0x3]  <function_decl 0x7fea3de250e0 big>) [0 big S1 A8])
    +            (call (mem:QI (symbol_ref:DI ("big") [flags 0x3]  <function_decl 0x7fb5fdc880e0 big>) [0 big S1 A8])
                     (const_int 0 [0]))
                 (use (reg:DI 31))
             ]) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:5 129 {call_insn}
    @@ -271,7 +229,7 @@
             (reg:DI 24 [ _3 ])) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:6 5 {*movdi_insn}
          (nil))
     (call_insn 19 18 20 2 (parallel [
    -            (call (mem:QI (symbol_ref:DI ("big") [flags 0x3]  <function_decl 0x7fea3de250e0 big>) [0 big S1 A8])
    +            (call (mem:QI (symbol_ref:DI ("big") [flags 0x3]  <function_decl 0x7fb5fdc880e0 big>) [0 big S1 A8])
                     (const_int 0 [0]))
                 (use (reg:DI 32))
             ]) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:6 129 {call_insn}
    @@ -285,20 +243,14 @@
             (reg:DI 25 [ _4 ])) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:7 5 {*movdi_insn}
          (nil))
     (call_insn 22 21 25 2 (parallel [
    -            (call (mem:QI (symbol_ref:DI ("big") [flags 0x3]  <function_decl 0x7fea3de250e0 big>) [0 big S1 A8])
    +            (call (mem:QI (symbol_ref:DI ("big") [flags 0x3]  <function_decl 0x7fb5fdc880e0 big>) [0 big S1 A8])
                     (const_int 0 [0]))
                 (use (reg:DI 33))
             ]) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:7 129 {call_insn}
          (nil)
         (nil))
    -(insn 25 22 26 2 (const_int 0 [0]) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:8 191 {nop}
    +(insn 25 22 0 2 (const_int 0 [0]) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:8 191 {nop}
          (nil))
    -(note 26 25 29 2 NOTE_INSN_EPILOGUE_BEG)
    -(note 29 26 27 3 [bb 3] NOTE_INSN_BASIC_BLOCK)
    -(jump_insn 27 29 28 3 (return) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:8 192 {return}
    -     (nil)
    - -> return)
    -(barrier 28 27 0)
     
     ;; Function main (main, funcdef_no=2, decl_uid=1378, cgraph_uid=2, symbol_order=2)
     
    @@ -306,17 +258,11 @@
     ending the processing of deferred insns
     df_analyze called
     df_worklist_dataflow_doublequeue:n_basic_blocks 3 n_edges 2 count 3 (    1)
    -scanning new insn with uid = 20.
     verify found no changes in insn with uid = 8.
    -changing bb of uid 22
    -  unscanned insn
    -changing bb of uid 20
    -  from 2 to 3
     starting the processing of deferred insns
     ending the processing of deferred insns
     df_analyze called
    -df_worklist_dataflow_doublequeue:n_basic_blocks 4 n_edges 3 count 4 (    1)
    -df_worklist_dataflow_doublequeue:n_basic_blocks 4 n_edges 3 count 4 (    1)
    +df_worklist_dataflow_doublequeue:n_basic_blocks 3 n_edges 2 count 3 (    1)
     
     
     main
    @@ -329,8 +275,8 @@
     ;;  entry block defs    1 [%stack] 2 [%frame] 3 [%args] 4 [%chain]
     ;;  exit block uses     0 [%value] 1 [%stack] 2 [%frame]
     ;;  regs ever live      0 [%value] 1 [%stack]
    -;;  ref usage  r0={2d,2u} r1={1d,4u} r2={1d,3u} r3={1d,2u} r4={2d} r5={1d} r6={1d} r7={1d} r8={1d} r9={1d} r10={1d} r11={1d} r12={1d} r13={1d} r14={1d} r15={1d} r22={1d,1u} r23={1d,1u} r24={1d,1u} r25={1d,1u} r26={1d,1u} 
    -;;    total ref usage 39{23d,16u,0e} in 9{8 regular + 1 call} insns.
    +;;  ref usage  r0={2d,2u} r1={1d,3u} r2={1d,2u} r3={1d,1u} r4={2d} r5={1d} r6={1d} r7={1d} r8={1d} r9={1d} r10={1d} r11={1d} r12={1d} r13={1d} r14={1d} r15={1d} r22={1d,1u} r23={1d,1u} r24={1d,1u} r25={1d,1u} r26={1d,1u} 
    +;;    total ref usage 36{23d,13u,0e} in 8{7 regular + 1 call} insns.
     
     ( )->[0]->( 2 )
     ;; bb 0 artificial_defs: { d-1(1){ }d-1(2){ }d-1(3){ }d-1(4){ }}
    @@ -344,7 +290,7 @@
     ;; lr  out      1 [%stack] 2 [%frame] 3 [%args]
     ;; live  out    1 [%stack] 2 [%frame] 3 [%args]
     
    -( 0 )->[2]->( 3 )
    +( 0 )->[2]->( 1 )
     ;; bb 2 artificial_defs: { }
     ;; bb 2 artificial_uses: { u-1(1){ }u-1(2){ }u-1(3){ }}
     ;; lr  in       1 [%stack] 2 [%frame] 3 [%args]
    @@ -356,19 +302,7 @@
     ;; lr  out      0 [%value] 1 [%stack] 2 [%frame] 3 [%args]
     ;; live  out    0 [%value] 1 [%stack] 2 [%frame] 3 [%args]
     
    -( 2 )->[3]->( 1 )
    -;; bb 3 artificial_defs: { }
    -;; bb 3 artificial_uses: { u-1(1){ }u-1(2){ }u-1(3){ }}
    -;; lr  in       0 [%value] 1 [%stack] 2 [%frame] 3 [%args]
    -;; lr  use      1 [%stack] 2 [%frame] 3 [%args]
    -;; lr  def     
    -;; live  in     0 [%value] 1 [%stack] 2 [%frame] 3 [%args]
    -;; live  gen   
    -;; live  kill  
    -;; lr  out      0 [%value] 1 [%stack] 2 [%frame] 3 [%args]
    -;; live  out    0 [%value] 1 [%stack] 2 [%frame] 3 [%args]
    -
    -( 3 )->[1]->( )
    +( 2 )->[1]->( )
     ;; bb 1 artificial_defs: { }
     ;; bb 1 artificial_uses: { u-1(0){ }u-1(1){ }u-1(2){ }}
     ;; lr  in       0 [%value] 1 [%stack] 2 [%frame]
    @@ -394,13 +328,13 @@
     ;;  entry block defs    1 [%stack] 2 [%frame] 3 [%args] 4 [%chain]
     ;;  exit block uses     0 [%value] 1 [%stack] 2 [%frame]
     ;;  regs ever live      0 [%value] 1 [%stack]
    -;;  ref usage  r0={2d,2u} r1={1d,4u} r2={1d,3u} r3={1d,2u} r4={2d} r5={1d} r6={1d} r7={1d} r8={1d} r9={1d} r10={1d} r11={1d} r12={1d} r13={1d} r14={1d} r15={1d} r22={1d,1u} r23={1d,1u} r24={1d,1u} r25={1d,1u} r26={1d,1u} 
    -;;    total ref usage 39{23d,16u,0e} in 9{8 regular + 1 call} insns.
    +;;  ref usage  r0={2d,2u} r1={1d,3u} r2={1d,2u} r3={1d,1u} r4={2d} r5={1d} r6={1d} r7={1d} r8={1d} r9={1d} r10={1d} r11={1d} r12={1d} r13={1d} r14={1d} r15={1d} r22={1d,1u} r23={1d,1u} r24={1d,1u} r25={1d,1u} r26={1d,1u} 
    +;;    total ref usage 36{23d,13u,0e} in 8{7 regular + 1 call} insns.
     (note 1 0 3 NOTE_INSN_DELETED)
     (note 3 1 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
     (note 2 3 5 2 NOTE_INSN_FUNCTION_BEG)
     (insn 5 2 6 2 (set (reg:DI 26)
    -        (symbol_ref/f:DI ("$LC0") [flags 0x802]  <var_decl 0x7fea3f484480 $LC0>)) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:12 5 {*movdi_insn}
    +        (symbol_ref/f:DI ("$LC0") [flags 0x802]  <var_decl 0x7fb5ff2e7480 $LC0>)) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:12 5 {*movdi_insn}
          (nil))
     (insn 6 5 7 2 (set (reg:SI 25)
             (const_int 1 [0x1])) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:12 4 {*movsi_insn}
    @@ -409,7 +343,7 @@
             (const_int 1 [0x1])) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:12 4 {*movsi_insn}
          (nil))
     (call_insn 8 7 9 2 (parallel [
    -            (call (mem:QI (symbol_ref:DI ("doit") [flags 0x3]  <function_decl 0x7fea3de251c0 doit>) [0 doit S1 A8])
    +            (call (mem:QI (symbol_ref:DI ("doit") [flags 0x3]  <function_decl 0x7fb5fdc881c0 doit>) [0 doit S1 A8])
                     (const_int 0 [0]))
                 (use (reg:SI 24))
                 (use (reg:SI 25))
    @@ -426,11 +360,5 @@
     (insn 16 12 17 2 (set (reg/i:SI 0 %value)
             (reg:SI 23 [ <retval> ])) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:14 4 {*movsi_insn}
          (nil))
    -(insn 17 16 19 2 (use (reg/i:SI 0 %value)) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:14 -1
    +(insn 17 16 0 2 (use (reg/i:SI 0 %value)) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:14 -1
          (nil))
    -(note 19 17 22 2 NOTE_INSN_EPILOGUE_BEG)
    -(note 22 19 20 3 [bb 3] NOTE_INSN_BASIC_BLOCK)
    -(jump_insn 20 22 21 3 (return) source-gcc/gcc/testsuite/gcc.c-torture/execute/20000121-1.c:14 192 {return}
    -     (nil)
    - -> return)
    -(barrier 21 20 0)
    --- before/20000121-1.c.282r.barriers   2016-05-20 14:56:37.794367323 +0200
    +++ after/20000121-1.c.282r.barriers    2016-05-20 14:54:34.537741174 +0200
    [...]
    --- before/20000121-1.c.286r.shorten    2016-05-20 14:56:37.794367323 +0200
    +++ after/20000121-1.c.286r.shorten     2016-05-20 14:54:34.537741174 +0200
    [...]
    --- before/20000121-1.c.287r.nothrow    2016-05-20 14:56:37.794367323 +0200
    +++ after/20000121-1.c.287r.nothrow     2016-05-20 14:54:34.537741174 +0200
    [...]
    --- before/20000121-1.c.289r.final      2016-05-20 14:56:37.794367323 +0200
    +++ after/20000121-1.c.289r.final       2016-05-20 14:54:34.537741174 +0200
    [...]
    --- before/20000121-1.c.290r.dfinish    2016-05-20 14:56:37.794367323 +0200
    +++ after/20000121-1.c.290r.dfinish     2016-05-20 14:54:34.537741174 +0200
    [...]

..., and resulting in the following assembly changes:

    --- before/20000121-1.s 2016-05-20 14:56:37.794367323 +0200
    +++ after/20000121-1.s  2016-05-20 14:54:34.537741174 +0200
    @@ -19,7 +19,6 @@
            .reg.u64 %r22;
                    mov.u64 %r22, %ar0;
                    st.u64  [%frame], %r22;
    -       ret;
     }
     
     // BEGIN GLOBAL FUNCTION DECL: doit
    @@ -79,7 +78,6 @@
                    st.param.u64 [%out_arg1], %r33;
                    call big, (%out_arg1);
            }
    -       ret;
     }
     
     // BEGIN VAR DEF: $LC0
    @@ -112,6 +110,4 @@
                    mov.u32 %r22, 0;
                    mov.u32 %r23, %r22;
                    mov.u32 %value, %r23;
    -       st.param.u32    [%value_out], %value;
    -       ret;
     }

The disappearing "ret" statements don't matter, but the disappearing
store at the end of "main" does.


Grüße
 Thomas

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 3/3] function: Restructure *logue insertion
  2016-05-20 13:21         ` Thomas Schwinge
@ 2016-05-20 14:47           ` Nathan Sidwell
  2016-05-20 15:35             ` Segher Boessenkool
  0 siblings, 1 reply; 28+ messages in thread
From: Nathan Sidwell @ 2016-05-20 14:47 UTC (permalink / raw)
  To: Thomas Schwinge, Bernd Schmidt; +Cc: gcc-patches, Jeff Law, Segher Boessenkool

On 05/20/16 09:21, Thomas Schwinge wrote:
> Hi!
>
> The nvptx maintainer Bernd, Nathan: can you take it from here, or should
> I continue to figure it out?

What is the defect?


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 3/3] function: Restructure *logue insertion
  2016-05-20 14:47           ` Nathan Sidwell
@ 2016-05-20 15:35             ` Segher Boessenkool
  0 siblings, 0 replies; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-20 15:35 UTC (permalink / raw)
  To: Nathan Sidwell; +Cc: Thomas Schwinge, Bernd Schmidt, gcc-patches, Jeff Law

On Fri, May 20, 2016 at 10:47:19AM -0400, Nathan Sidwell wrote:
> On 05/20/16 09:21, Thomas Schwinge wrote:
> >Hi!
> >
> >The nvptx maintainer Bernd, Nathan: can you take it from here, or should
> >I continue to figure it out?
> 
> What is the defect?

I have a fix, testing now.


Segher

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH 3/3] function: Restructure *logue insertion
  2016-05-20  9:28       ` Thomas Schwinge
  2016-05-20 13:21         ` Thomas Schwinge
@ 2016-05-20 21:27         ` Segher Boessenkool
  1 sibling, 0 replies; 28+ messages in thread
From: Segher Boessenkool @ 2016-05-20 21:27 UTC (permalink / raw)
  To: Thomas Schwinge; +Cc: gcc-patches, Jeff Law

On Fri, May 20, 2016 at 11:28:25AM +0200, Thomas Schwinge wrote:
> > > >	* function.c (make_epilogue_seq): Remove epilogue_end parameter.
> > > >	(thread_prologue_and_epilogue_insns): Remove bb_flags.  Restructure
> > > >	code.  Ignore sibcalls on EDGE_IGNORE edges.
> > > >	* shrink-wrap.c (handle_simple_exit): New function.  Set EDGE_IGNORE
> > > >	on edges for sibcalls that run without prologue.  The rest of the
> > > >	function is combined from...
> > > >	(fix_fake_fallthrough_edge): ... this, and ...
> > > >	(try_shrink_wrapping): ... a part of this.  Remove the bb_with
> > > >	function argument, make it a local variable.
> 
> On Thu, 19 May 2016 17:20:46 -0500, Segher Boessenkool <segher@kernel.crashing.org> wrote:
> > On Thu, May 19, 2016 at 04:00:22PM -0600, Jeff Law wrote:
> > > OK for the trunk, but please watch closely for any fallout.
> > 
> > Thanks, and I will!
> 
> With nvptx offloading on x86_64 GNU/Linux, this (r236491) is causing
> several execution test failures.  I'll have a look.

nvptx calls thread_prologue_and_epilogue_insns directly.  It seems in
the "normal" way there always is a commit_edge_insertions afterwards,
but for nvptx there isn't.  thrread_prologue_and_epilogue_insertions
should do it itself, of course.  This patch fixes it; regression tested
on powerpc64-linux, and Thomas says it looks good on nvptx.  Committing
to trunk as obvious.


Segher


===
This fixes a bug in my r236491: on nvptx, functions without prologue
would not get an epilogue either.


2016-05-20  Segher Boessenkool  <segher@kernel.crashing.org>

	* function.c (thread_prologue_and_epilogue_insns): Commit the
	insertion of the epilogue.

---
 gcc/function.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gcc/function.c b/gcc/function.c
index 25e0e0c..b517012 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5977,6 +5977,7 @@ thread_prologue_and_epilogue_insns (void)
       if (epilogue_seq)
 	{
 	  insert_insn_on_edge (epilogue_seq, exit_fallthru_edge);
+	  commit_edge_insertions ();
 
 	  /* The epilogue insns we inserted may cause the exit edge to no longer
 	     be fallthru.  */
-- 
1.9.3

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2016-05-20 21:27 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-17  1:09 [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before Segher Boessenkool
2016-05-17  1:09 ` [PATCH 2/3] function: Factor out make_*logue_seq Segher Boessenkool
2016-05-17 20:35   ` Jeff Law
2016-05-18 17:17   ` H.J. Lu
2016-05-18 18:11     ` Segher Boessenkool
2016-05-18 18:20       ` H.J. Lu
2016-05-18 18:24         ` H.J. Lu
2016-05-18 18:35         ` Segher Boessenkool
2016-05-18 22:13           ` Segher Boessenkool
2016-05-19  7:16             ` Jakub Jelinek
2016-05-19  7:28               ` Segher Boessenkool
2016-05-19  7:41                 ` Jakub Jelinek
2016-05-19 17:20               ` Jeff Law
2016-05-17  1:09 ` [PATCH 3/3] function: Restructure *logue insertion Segher Boessenkool
2016-05-19  8:04   ` Segher Boessenkool
2016-05-19 22:00   ` Jeff Law
2016-05-19 22:20     ` Segher Boessenkool
2016-05-20  9:28       ` Thomas Schwinge
2016-05-20 13:21         ` Thomas Schwinge
2016-05-20 14:47           ` Nathan Sidwell
2016-05-20 15:35             ` Segher Boessenkool
2016-05-20 21:27         ` Segher Boessenkool
2016-05-17  8:06 ` [PATCH 1/3] function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before Eric Botcazou
2016-05-17  8:47   ` Segher Boessenkool
2016-05-17  9:08     ` Eric Botcazou
2016-05-17  9:18       ` Segher Boessenkool
2016-05-17 22:23         ` Segher Boessenkool
2016-05-17 22:34           ` Eric Botcazou

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).