From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28464 invoked by alias); 26 May 2015 11:13:37 -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 28429 invoked by uid 89); 26 May 2015 11:13:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,NO_DNS_FOR_FROM autolearn=no version=3.3.2 X-HELO: mail-ob0-f170.google.com Received: from Unknown (HELO mail-ob0-f170.google.com) (209.85.214.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 26 May 2015 11:13:10 +0000 Received: by obbea2 with SMTP id ea2so71355095obb.3 for ; Tue, 26 May 2015 04:13:02 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.60.55.36 with SMTP id o4mr21274041oep.0.1432638782268; Tue, 26 May 2015 04:13:02 -0700 (PDT) Received: by 10.76.134.100 with HTTP; Tue, 26 May 2015 04:13:02 -0700 (PDT) Date: Tue, 26 May 2015 12:19:00 -0000 Message-ID: Subject: [PATCH GCC]Improve overflow in scev by using information computed in loop niter, part II From: "Bin.Cheng" To: gcc-patches List Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2015-05/txt/msg02323.txt.bz2 Hi, The first part patch improving how we handle overflow in scev is posted at https://gcc.gnu.org/ml/gcc-patches/2015-05/msg01795.html . Here comes the second part patch. This patch does below improvements: 1) Computes and records control iv for each loop's exit edge. This provides a way to compute overflow information in loop niter and use it in different customers. It think it's useful, especially with option -funsafe-loop-optimizers. 2) Improve chrec_convert by adding new interface loop_exits_before_overflow. It checks if a converted IV overflows wrto its type and loop using overflow information of loop's control iv. This basically propagates no-overflow information from control iv to ivs converted from control iv. Moreover, we can further improve the logic by using possible VRP information in the future. With this patch, cases like scev-9.c and scev-10.c in patch can be handled now. Cases reported in PR48052 can be vectorized too. Opinions? Thanks, bin 2015-05-26 Bin Cheng * cfgloop.h (struct control_iv): New. (struct loop): New field control_ivs. * tree-ssa-loop-niter.c : Include "stor-layout.h". (number_of_iterations_lt): Set no_overflow information. (number_of_iterations_exit): Init control iv in niter struct. (record_control_iv): New. (estimate_numbers_of_iterations_loop): Call record_control_iv. (loop_exits_before_overflow): New. Interface factored out of scev_probably_wraps_p. (scev_probably_wraps_p): Factor loop niter related code into loop_exits_before_overflow. (free_numbers_of_iterations_estimates_loop): Free control ivs. * tree-ssa-loop-niter.h (free_loop_control_ivs): New. gcc/testsuite/ChangeLog 2015-05-26 Bin Cheng PR tree-optimization/48052 * gcc.dg/tree-ssa/scev-8.c: New. * gcc.dg/tree-ssa/scev-9.c: New. * gcc.dg/tree-ssa/scev-10.c: New. * gcc.dg/vect/pr48052.c: New.