From patchwork Wed Jul 13 11:00:43 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 104498 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 A328AB6F69 for ; Wed, 13 Jul 2011 21:01:27 +1000 (EST) Received: (qmail 23674 invoked by alias); 13 Jul 2011 11:01:24 -0000 Received: (qmail 23649 invoked by uid 22791); 13 Jul 2011 11:01:23 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-fx0-f49.google.com (HELO mail-fx0-f49.google.com) (209.85.161.49) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 13 Jul 2011 11:00:47 +0000 Received: by fxd20 with SMTP id 20so4880919fxd.22 for ; Wed, 13 Jul 2011 04:00:46 -0700 (PDT) Received: by 10.223.55.27 with SMTP id s27mr1516258fag.121.1310554846085; Wed, 13 Jul 2011 04:00:46 -0700 (PDT) Received: from richards-thinkpad (gbibp9ph1--blueice3n2.emea.ibm.com [195.212.29.84]) by mx.google.com with ESMTPS id v20sm10460208fai.7.2011.07.13.04.00.44 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 13 Jul 2011 04:00:45 -0700 (PDT) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, rdsandiford@googlemail.com Subject: RFA: Tighten vector aliasing check Date: Wed, 13 Jul 2011 12:00:43 +0100 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) MIME-Version: 1.0 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 tree-vect-loop-manip.c assumes there is an alias if: ((store_ptr_0 + store_segment_length_0) < load_ptr_0) || (load_ptr_0 + load_segment_length_0) < store_ptr_0)) which means that contiguous arrays are unnecessarily considered to alias. This patch changes the "<" to "<=". Tested on x86_64-linux-gnu (all languages). OK to install? Richard gcc/ * tree-vect-loop-manip.c (vect_create_cond_for_alias_checks): Tighten overlap check. Index: gcc/tree-vect-loop-manip.c =================================================================== --- gcc/tree-vect-loop-manip.c 2011-06-22 16:46:34.000000000 +0100 +++ gcc/tree-vect-loop-manip.c 2011-07-13 11:12:06.000000000 +0100 @@ -2409,13 +2409,13 @@ vect_create_cond_for_alias_checks (loop_ tree part_cond_expr, length_factor; /* Create expression - ((store_ptr_0 + store_segment_length_0) < load_ptr_0) - || (load_ptr_0 + load_segment_length_0) < store_ptr_0)) + ((store_ptr_0 + store_segment_length_0) <= load_ptr_0) + || (load_ptr_0 + load_segment_length_0) <= store_ptr_0)) && ... && - ((store_ptr_n + store_segment_length_n) < load_ptr_n) - || (load_ptr_n + load_segment_length_n) < store_ptr_n)) */ + ((store_ptr_n + store_segment_length_n) <= load_ptr_n) + || (load_ptr_n + load_segment_length_n) <= store_ptr_n)) */ if (VEC_empty (ddr_p, may_alias_ddrs)) return; @@ -2484,8 +2484,8 @@ vect_create_cond_for_alias_checks (loop_ part_cond_expr = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, - fold_build2 (LT_EXPR, boolean_type_node, seg_a_max, seg_b_min), - fold_build2 (LT_EXPR, boolean_type_node, seg_b_max, seg_a_min)); + fold_build2 (LE_EXPR, boolean_type_node, seg_a_max, seg_b_min), + fold_build2 (LE_EXPR, boolean_type_node, seg_b_max, seg_a_min)); if (*cond_expr) *cond_expr = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,