From patchwork Thu Feb 8 13:29:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 127667 Delivered-To: patch@linaro.org Received: by 10.46.124.24 with SMTP id x24csp1488736ljc; Thu, 8 Feb 2018 05:30:07 -0800 (PST) X-Google-Smtp-Source: AH8x2242+ZFX5M5UjRHPZxEWueBh8TZrTPt7iHblFsCEss/v0dnKt9SbdKl9yYGn6UtQmF4AMkCV X-Received: by 10.99.140.83 with SMTP id q19mr527232pgn.51.1518096606943; Thu, 08 Feb 2018 05:30:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518096606; cv=none; d=google.com; s=arc-20160816; b=MhEnGcxhrL/HQTG6NADUOaKDF0vFGCHFqljdGkKFX6RpzD0JjAVlhS+nWdBCBHkDP+ kdM6+ZrVP3Oafff3E+o+9n39bq4Rtt9BJSYRdetfcuATG7l2KrgV+YqWLWFtTayc7Nm7 9hw2hSVllzh/g6qJvDden/chRqUBks7GQ7esF5EhA5GBhug0xi2kMgPjQ58qYAfhGFWU N+2+ytNNeZc+Jm4Cjjv3VQDJad3itkcSq+yrvikvQX3fw7WpcasEYwuk6IuNEqYDu0KU BdBQNYZU/OoKx/B8H2NKySir3NG2Q2XoSVUahJ4a6rM7nBp77v+6oHCDNsOXSW3nv5Fv 7I6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:user-agent:message-id:date:subject:mail-followup-to:to :from:delivered-to:sender:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:mailing-list:dkim-signature :domainkey-signature:arc-authentication-results; bh=ndKRsXWyynNbSN4NiqyX0mJrAkN3DAYo18Q7cjYKr3I=; b=LzIv7IVSIDmE8l4S9l85iRf/g7USGjCGG6z81Knq0ABKS7bGRGsZ830pC5CBe06tCa 576xvqeJ7oqzKKPevadO8qEnzY0PzeCXQZo89DdurGI2QKigKRT5BOOGOHY+xLf9J71x +6fE2r9JRXAu7aVaihYBOyvs/KepA20ShpsSvXqs9OwZLlzoSNBGvof4vFzx/7BKIBi3 xz03BtNbOovd0ct9C6eEG1XyLvMP6LnIE4zhZLTkVhjbCO2LmqfHN+HlrFcXJVHyMCD1 iyE4XV5tdI3J5eTUQePwK9rLke5u8aRfzQBVdd/wvZGj2dKlUrtbsRm4ETUSDB5suK/g W5vg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=V3eZM+RS; spf=pass (google.com: domain of gcc-patches-return-472851-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-472851-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id u22si2812117pfh.162.2018.02.08.05.30.06 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 08 Feb 2018 05:30:06 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-472851-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=V3eZM+RS; spf=pass (google.com: domain of gcc-patches-return-472851-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-472851-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:message-id:mime-version:content-type; q=dns; s= default; b=ZP0xBzVBoxnHG/o1TvH/chOYG/VMJfaxguqdDjPC+q9P2T3/9nl9p BtkNZty5eg5WcjqkHeK+376TzVgbOnBOb77AECdODT6NCzTRk2VZ18fF5s3VApUD o7GRahQJgWT0Y1K2I2GSkEXb9ykQN4omjGNhX/3jZreF6zZj2k/Dc4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:message-id:mime-version:content-type; s= default; bh=XhwteAE3LczvJeqv4Si19MWsgUw=; b=V3eZM+RSibncoVAoNPJl XQQdPrEA14sY7MKHVHpGQVXTQRoo0hsXBG26k3oXksanbAS/+FjsN0BHcMRk1rYN b1br0p9FgeBZx2R3bI3NhvL3AjtWtiVoBHsCsohyPxZXFJwHHAtb2AOd7o0vMPbs pCXD08QQAfsJINpxmQToGTE= Received: (qmail 90253 invoked by alias); 8 Feb 2018 13:29:54 -0000 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 Received: (qmail 90244 invoked by uid 89); 8 Feb 2018 13:29:54 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=classifying X-HELO: mail-wm0-f49.google.com Received: from mail-wm0-f49.google.com (HELO mail-wm0-f49.google.com) (74.125.82.49) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 08 Feb 2018 13:29:52 +0000 Received: by mail-wm0-f49.google.com with SMTP id j21-v6so27405169wmh.1 for ; Thu, 08 Feb 2018 05:29:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:mail-followup-to:subject:date:message-id :user-agent:mime-version; bh=ndKRsXWyynNbSN4NiqyX0mJrAkN3DAYo18Q7cjYKr3I=; b=OcCmSLJHeONWGBQjNEn5RzrWxsQiCiwf3pg+TvrbPWgcYvEoOwGhqY6IXSlNt5KdnI zPIQs6K1pzwrQ9ykLlhMpMgbRuT8fnscgkPWwVsEg5aeIvDallJKzISlqHf8SznGCg1u WM/0Z4em7WthR6enS5zUuYqKPQgpk7aSEcHJ1nfRzt02g7L369hhed7lbxI2nUBsxv96 g4YLVe1pZ9OPXMnsxgSIPyOA7jsd1I+PzvYrccAURfOJHevUpsIoOoL7igkeRZXflv64 +p7+QvnMDAXORxXoKYeQU+5AGIo6wx6F1SYSTf6mRVbG2CBnOA6ybvauDqjwQ5h+Y8mj pN9A== X-Gm-Message-State: APf1xPDNW4di53RPUMgTxUIVbJQeKM/9GJJvgNab/RsoF9tGAv2xnuOx nTPeTdZ9P1i4ZLI9XDTcpsKYiH+Vz7E= X-Received: by 10.28.153.20 with SMTP id b20mr1156266wme.6.1518096590144; Thu, 08 Feb 2018 05:29:50 -0800 (PST) Received: from localhost (188.29.164.130.threembb.co.uk. [188.29.164.130]) by smtp.gmail.com with ESMTPSA id e127sm267478wmg.10.2018.02.08.05.29.49 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 08 Feb 2018 05:29:49 -0800 (PST) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@linaro.org Subject: Another fix for single-element permutes (PR 84265) Date: Thu, 08 Feb 2018 13:29:47 +0000 Message-ID: <878tc3y5h0.fsf@linaro.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) MIME-Version: 1.0 PR83753 was about a case in which we ended up trying to "vectorise" a group of loads ore stores using single-element vectors. The problem was that we were classifying the load or store as VMAT_CONTIGUOUS_PERMUTE rather than VMAT_CONTIGUOUS, even though it doesn't make sense to permute a single-element vector. In that PR it was enough to change get_group_load_store_type, because vectorisation ended up being unprofitable and so we didn't take things further. But when vectorisation is profitable, the same fix is needed in vectorizable_load and vectorizable_store. Tested on aarch64-linux-gnu, aarch64_be-elf and x86_64-linux-gnu. OK to install? Richard 2018-02-08 Richard Sandiford gcc/ PR tree-optimization/84265 * tree-vect-stmts.c (vectorizable_store): Don't treat VMAT_CONTIGUOUS accesses as grouped. (vectorizable_load): Likewise. gcc/testsuite/ PR tree-optimization/84265 * gcc.dg/vect/pr84265.c: New test. Index: gcc/tree-vect-stmts.c =================================================================== --- gcc/tree-vect-stmts.c 2018-01-30 09:45:27.710764075 +0000 +++ gcc/tree-vect-stmts.c 2018-02-08 13:26:39.242566948 +0000 @@ -6214,7 +6214,8 @@ vectorizable_store (gimple *stmt, gimple } grouped_store = (STMT_VINFO_GROUPED_ACCESS (stmt_info) - && memory_access_type != VMAT_GATHER_SCATTER); + && memory_access_type != VMAT_GATHER_SCATTER + && (slp || memory_access_type != VMAT_CONTIGUOUS)); if (grouped_store) { first_stmt = GROUP_FIRST_ELEMENT (stmt_info); @@ -7696,7 +7697,8 @@ vectorizable_load (gimple *stmt, gimple_ return true; } - if (memory_access_type == VMAT_GATHER_SCATTER) + if (memory_access_type == VMAT_GATHER_SCATTER + || (!slp && memory_access_type == VMAT_CONTIGUOUS)) grouped_load = false; if (grouped_load) Index: gcc/testsuite/gcc.dg/vect/pr84265.c =================================================================== --- /dev/null 2018-02-08 11:17:10.862716283 +0000 +++ gcc/testsuite/gcc.dg/vect/pr84265.c 2018-02-08 13:26:39.240567025 +0000 @@ -0,0 +1,23 @@ +/* { dg-do compile } */ + +struct a +{ + unsigned long b; + unsigned long c; + int d; + int *e; + char f; +}; + +struct +{ + int g; + struct a h[]; +} i; + +int j, k; +void l () +{ + for (; k; k++) + j += (int) (i.h[k].c - i.h[k].b); +}