From patchwork Fri Jul 16 07:03:56 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Pop X-Patchwork-Id: 59074 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 42305B6F19 for ; Fri, 16 Jul 2010 17:05:11 +1000 (EST) Received: (qmail 972 invoked by alias); 16 Jul 2010 07:04:48 -0000 Received: (qmail 677 invoked by uid 22791); 16 Jul 2010 07:04:44 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, TW_TM, T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-gy0-f175.google.com (HELO mail-gy0-f175.google.com) (209.85.160.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 16 Jul 2010 07:04:34 +0000 Received: by gya6 with SMTP id 6so1239206gya.20 for ; Fri, 16 Jul 2010 00:04:33 -0700 (PDT) Received: by 10.100.95.6 with SMTP id s6mr749652anb.200.1279263873056; Fri, 16 Jul 2010 00:04:33 -0700 (PDT) Received: from napoca (cpe-70-120-196-107.austin.res.rr.com [70.120.196.107]) by mx.google.com with ESMTPS id r7sm21500958anb.15.2010.07.16.00.04.31 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 16 Jul 2010 00:04:32 -0700 (PDT) Received: by napoca (sSMTP sendmail emulation); Fri, 16 Jul 2010 02:04:29 -0500 From: Sebastian Pop To: gcc-patches@gcc.gnu.org Cc: gcc-graphite@googlegroups.com, Sebastian Pop Subject: [PATCH 05/12] Remove uses of loop->single_iv. Date: Fri, 16 Jul 2010 02:03:56 -0500 Message-Id: <1279263843-9149-6-git-send-email-sebpop@gmail.com> In-Reply-To: <1279263843-9149-1-git-send-email-sebpop@gmail.com> References: <1279263843-9149-1-git-send-email-sebpop@gmail.com> X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org 2010-07-15 Sebastian Pop * cfgloop.c (alloc_loop): Remove initialization of loop->single_iv. * cfgloop.h (struct loop): Remove single_iv field. * graphite-sese-to-poly.c (graphite_loop_normal_form): Removed. (scop_canonicalize_loops): Removed. (scop_ivs_can_be_represented): Do not use loop->single_iv. Iterate over all the loop phi nodes in loop->header. (build_poly_scop): Remove use of scop_canonicalize_loops. --- gcc/ChangeLog.graphite | 10 +++++++ gcc/cfgloop.c | 1 - gcc/cfgloop.h | 4 --- gcc/graphite-sese-to-poly.c | 62 +++++++----------------------------------- 4 files changed, 21 insertions(+), 56 deletions(-) diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index a83cc99..8408cf2 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,5 +1,15 @@ 2010-07-15 Sebastian Pop + * cfgloop.c (alloc_loop): Remove initialization of loop->single_iv. + * cfgloop.h (struct loop): Remove single_iv field. + * graphite-sese-to-poly.c (graphite_loop_normal_form): Removed. + (scop_canonicalize_loops): Removed. + (scop_ivs_can_be_represented): Do not use loop->single_iv. Iterate + over all the loop phi nodes in loop->header. + (build_poly_scop): Remove use of scop_canonicalize_loops. + +2010-07-15 Sebastian Pop + * graphite-sese-to-poly.c (rewrite_cross_bb_scalar_deps): Also handle GIMPLE_CALL. diff --git a/gcc/cfgloop.c b/gcc/cfgloop.c index 858e75b..0a8ceba 100644 --- a/gcc/cfgloop.c +++ b/gcc/cfgloop.c @@ -339,7 +339,6 @@ alloc_loop (void) loop->exits = GGC_CNEW (struct loop_exit); loop->exits->next = loop->exits->prev = loop->exits; loop->can_be_parallel = false; - loop->single_iv = NULL_TREE; return loop; } diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h index 3821ee6..4d16a23 100644 --- a/gcc/cfgloop.h +++ b/gcc/cfgloop.h @@ -165,10 +165,6 @@ struct GTY ((chain_next ("%h.next"))) loop { /* Head of the cyclic list of the exits of the loop. */ struct loop_exit *exits; - - /* The single induction variable of the loop when the loop is in - normal form. */ - tree single_iv; }; /* Flags for state of loop structure. */ diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index 22f9536..9c54f0b 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -2905,45 +2905,6 @@ rewrite_commutative_reductions_out_of_ssa (sese region, sbitmap reductions) #endif } -/* A LOOP is in normal form for Graphite when it contains only one - scalar phi node that defines the main induction variable of the - loop, only one increment of the IV, and only one exit condition. */ - -static void -graphite_loop_normal_form (loop_p loop) -{ - struct tree_niter_desc niter; - tree nit; - gimple_seq stmts; - edge exit = single_dom_exit (loop); - - bool known_niter = number_of_iterations_exit (loop, exit, &niter, false); - - /* At this point we should know the number of iterations. */ - gcc_assert (known_niter); - - nit = force_gimple_operand (unshare_expr (niter.niter), &stmts, true, - NULL_TREE); - if (stmts) - gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts); - - loop->single_iv = canonicalize_loop_ivs (loop, &nit, false); -} - -/* Rewrite all the loops of SCOP in normal form: one induction - variable per loop. */ - -static void -scop_canonicalize_loops (scop_p scop) -{ - loop_iterator li; - loop_p loop; - - FOR_EACH_LOOP (li, loop, 0) - if (loop_in_sese_p (loop, SCOP_REGION (scop))) - graphite_loop_normal_form (loop); -} - /* Java does not initialize long_long_integer_type_node. */ #define my_long_long (long_long_integer_type_node ? long_long_integer_type_node : ssizetype) @@ -2956,24 +2917,24 @@ scop_ivs_can_be_represented (scop_p scop) { loop_iterator li; loop_p loop; + gimple_stmt_iterator psi; FOR_EACH_LOOP (li, loop, 0) { - tree type; - int precision; - if (!loop_in_sese_p (loop, SCOP_REGION (scop))) continue; - if (!loop->single_iv) - continue; - - type = TREE_TYPE (loop->single_iv); - precision = TYPE_PRECISION (type); + for (psi = gsi_start_phis (loop->header); + !gsi_end_p (psi); gsi_next (&psi)) + { + gimple phi = gsi_stmt (psi); + tree res = PHI_RESULT (phi); + tree type = TREE_TYPE (res); - if (TYPE_UNSIGNED (type) - && precision >= TYPE_PRECISION (my_long_long)) - return false; + if (TYPE_UNSIGNED (type) + && TYPE_PRECISION (type) >= TYPE_PRECISION (my_long_long)) + return false; + } } return true; @@ -2997,7 +2958,6 @@ build_poly_scop (scop_p scop) if (nb_pbbs_in_loops (scop) == 0) return; - scop_canonicalize_loops (scop); if (!scop_ivs_can_be_represented (scop)) return;