From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31286 invoked by alias); 21 Mar 2013 12:34:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 30678 invoked by uid 89); 21 Mar 2013 12:34:22 -0000 X-Spam-SWARE-Status: No, score=-7.2 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD autolearn=ham version=3.3.1 Received: from cantor2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Thu, 21 Mar 2013 12:34:20 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id D0267A3A49 for ; Thu, 21 Mar 2013 13:34:17 +0100 (CET) Date: Thu, 21 Mar 2013 12:34:00 -0000 From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] Pushing out more LIM TLC patches Message-ID: User-Agent: Alpine 2.00 (LNX 1167 2008-08-23) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-SW-Source: 2013-03/txt/msg00797.txt.bz2 Bootstrapped and tested on x86_64-unknown-linux-gnu, applied. Richard. 2013-03-21 Richard Biener * tree-ssa-loop-im.c (can_sm_ref_p): Do not test whether ref is stored in the loop. (find_refs_for_sm): Walk only over all stores. (store_motion_loop): Allocate from lim_bitmap_obstack. (store_motion): Likewise. Index: trunk/gcc/tree-ssa-loop-im.c =================================================================== *** trunk.orig/gcc/tree-ssa-loop-im.c 2013-03-14 11:50:55.000000000 +0100 --- trunk/gcc/tree-ssa-loop-im.c 2013-03-14 11:52:08.744186528 +0100 *************** can_sm_ref_p (struct loop *loop, mem_ref *** 2315,2324 **** if (!MEM_ANALYZABLE (ref)) return false; - /* Unless the reference is stored in the loop, there is nothing to do. */ - if (!bitmap_bit_p (ref->stored, loop->num)) - return false; - /* It should be movable. */ if (!is_gimple_reg_type (TREE_TYPE (ref->mem.ref)) || TREE_THIS_VOLATILE (ref->mem.ref) --- 2315,2320 ---- *************** can_sm_ref_p (struct loop *loop, mem_ref *** 2354,2360 **** static void find_refs_for_sm (struct loop *loop, bitmap sm_executed, bitmap refs_to_sm) { ! bitmap refs = memory_accesses.all_refs_in_loop[loop->num]; unsigned i; bitmap_iterator bi; mem_ref_p ref; --- 2350,2356 ---- static void find_refs_for_sm (struct loop *loop, bitmap sm_executed, bitmap refs_to_sm) { ! bitmap refs = memory_accesses.all_refs_stored_in_loop[loop->num]; unsigned i; bitmap_iterator bi; mem_ref_p ref; *************** store_motion_loop (struct loop *loop, bi *** 2394,2400 **** { vec exits = get_loop_exit_edges (loop); struct loop *subloop; ! bitmap sm_in_loop = BITMAP_ALLOC (NULL); if (loop_suitable_for_sm (loop, exits)) { --- 2390,2396 ---- { vec exits = get_loop_exit_edges (loop); struct loop *subloop; ! bitmap sm_in_loop = BITMAP_ALLOC (&lim_bitmap_obstack); if (loop_suitable_for_sm (loop, exits)) { *************** static void *** 2417,2423 **** store_motion (void) { struct loop *loop; ! bitmap sm_executed = BITMAP_ALLOC (NULL); for (loop = current_loops->tree_root->inner; loop != NULL; loop = loop->next) store_motion_loop (loop, sm_executed); --- 2413,2419 ---- store_motion (void) { struct loop *loop; ! bitmap sm_executed = BITMAP_ALLOC (&lim_bitmap_obstack); for (loop = current_loops->tree_root->inner; loop != NULL; loop = loop->next) store_motion_loop (loop, sm_executed);