This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PING][PATCH][PR65443] Add transform_to_exit_first_loop_alt


On 09/06/15 00:05, Tom de Vries wrote:
On 08/06/15 17:55, Thomas Schwinge wrote:
Hi Tom!

On Mon, 8 Jun 2015 12:43:01 +0200, Tom de Vries
<Tom_deVries@mentor.com> wrote:
There are two problems in try_transform_to_exit_first_loop_alt:
1. In case the latch is not a singleton bb, the function should return
     false rather than true.
2. The check for singleton bb should ignore debug-insns.

Attached patch fixes these problems.

Fix try_transform_to_exit_first_loop_alt

    PR tree-optimization/66442
    * gimple-iterator.h (gimple_seq_nondebug_singleton_p): Add function.
    * tree-parloops.c (try_transform_to_exit_first_loop_alt): Return
false
    if the loop latch is not a singleton.  Use
    gimple_seq_nondebug_singleton_p instead of gimple_seq_singleton_p.

Per my testing, the backport of this patch that you committed to
gomp-4_0-branch, r224219, introduces a number of regressions in your
OpenACC kernels test cases, specifically the Âscan-tree-dump-times
parloops_oacc_kernels "(?n)pragma omp target
oacc_parallel.*num_gangs\\(32\\)" 1Â tests.  Would you please have a
look?



Hi Thomas,

I seem to have committed (to both trunk and gomp-4_0-branch) an older
version of the patch, which contained an incorrect version of
gimple_seq_nondebug_singleton_p.

I'll correct the mistake tomorrow morning.

Committed attached patch to trunk and propagated to gomp-4_0-branch.

Committed as obvious, since it changes gimple_seq_nondebug_singleton_p into the tested and approved version.

Thanks,
- Tom

Fix gimple_seq_nondebug_singleton_p

2015-06-09  Tom de Vries  <tom@codesourcery.com>

	* gimple-iterator.h (gimple_seq_nondebug_singleton_p): Don't
	always return false.
---
 gcc/gimple-iterator.h | 22 ++++++++--------------
 1 file changed, 8 insertions(+), 14 deletions(-)

diff --git a/gcc/gimple-iterator.h b/gcc/gimple-iterator.h
index d08245e..76fa456 100644
--- a/gcc/gimple-iterator.h
+++ b/gcc/gimple-iterator.h
@@ -351,33 +351,27 @@ static inline bool
 gimple_seq_nondebug_singleton_p (gimple_seq seq)
 {
   gimple_stmt_iterator gsi;
+
+  /* Find a nondebug gimple.  */
   gsi.ptr = gimple_seq_first (seq);
   gsi.seq = &seq;
   gsi.bb = NULL;
-
-  /* Not a singleton if the sequence is empty.  */
-  if (gsi_end_p (gsi))
-    return false;
-
-  /* Find a nondebug gimple.  */
   while (!gsi_end_p (gsi)
 	 && is_gimple_debug (gsi_stmt (gsi)))
     gsi_next (&gsi);
 
-  /* Not a nondebug singleton if there's no nondebug gimple.  */
-  if (is_gimple_debug (gsi_stmt (gsi)))
+  /* No nondebug gimple found, not a singleton.  */
+  if (gsi_end_p (gsi))
     return false;
 
-  /* Find the next nondebug gimple.  */
+  /* Find a next nondebug gimple.  */
+  gsi_next (&gsi);
   while (!gsi_end_p (gsi)
 	 && is_gimple_debug (gsi_stmt (gsi)))
     gsi_next (&gsi);
 
-  /* If there's a next nondebug gimple, it's not a nondebug singleton.  */
-  if (!gsi_end_p (gsi))
-    return false;
-
-  return true;
+  /* Only a singleton if there's no next nondebug gimple.  */
+  return gsi_end_p (gsi);
 }
 
 #endif /* GCC_GIMPLE_ITERATOR_H */
-- 
1.9.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]