From patchwork Tue Jun 28 11:26:45 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Enkovich X-Patchwork-Id: 641504 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3rf3XM0bGsz9sBl for ; Tue, 28 Jun 2016 21:30:58 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=QiKSZ1n9; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:subject:message-id:mime-version:content-type; q=dns; s= default; b=OzU6qWt5X3Jq6OEsoehJjYxn1bwDoetOK1TtsM5Fy+qyXI40lK1wD o1Hthil3Q96qg5yh7Si00xb5KM+9/tIvezxKLt3BSfei2gpvmOr4Iyr6KDfVPeZJ vFLBO45JkdiOz843mgXIHXeBxG6C4K3rYYYe2o+qdNqL+/EQi2BBUs= 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:date :from:to:subject:message-id:mime-version:content-type; s= default; bh=OZDRq5jx3jKtAcUigPTXafeNyYU=; b=QiKSZ1n99que9zPJAkgb 6km4vyM+q6tm3dMec94Hf3P9qCtMbOWcmDRPIKrVbAbQdTvODTJeBp5ER+Mgs79m KbMbyIJDgVN6/amhv7sRN39tkKfRwfTPzhvCHc8Yp70q/WrL98neB40Fv9WccsbS Jg/7Z9+o0872v3slEN6Aco0= Received: (qmail 52812 invoked by alias); 28 Jun 2016 11:30:51 -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 52794 invoked by uid 89); 28 Jun 2016 11:30:50 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=ilyaenkovichintelcom, ilya.enkovich@intel.com X-HELO: mail-qt0-f178.google.com Received: from mail-qt0-f178.google.com (HELO mail-qt0-f178.google.com) (209.85.216.178) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 28 Jun 2016 11:30:40 +0000 Received: by mail-qt0-f178.google.com with SMTP id w59so5672100qtd.3 for ; Tue, 28 Jun 2016 04:30:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:subject:message-id:mime-version :content-disposition:user-agent; bh=S+cBw3s4U918iwDfa0yll8udGuUvdbbCGdak1037fTo=; b=mbPF6uOQCRQpiXr5mFNw3drFggb/yz6f+tO10XN2K9PH9P5gkPvNI4daKvB5wcxwyv i+HiIj+1fZ8ocngwOr3VrtnPeIKqupzD68Zb5Z6DY3Ti8Ymgs0T0I8Vb8WqE8u4SXY7j dmO3heDWH7TxChm5xJJX5t0zzs102xcO4x8vzYLhoTrlk1ZjP/pVO4/KuSfz7nuUVF+Y qD5clWgOi3mqlKiDMwUb+AnWfv7hFAsIUL5G7lX14pUxIROZp+6vTq2zsEJiLGzD22Qy qoIIW1rXcGyOcbihG271Ey9B7UMni7IY4Y1dXefVuv4hb2rLRVITaHVtvbBqeB4FxJBP FrVw== X-Gm-Message-State: ALyK8tIscbwfAo+KBb4USLYUhy9y9pMZHPrfX0iavUKrHQIFwWpLlcsWoPM0xBotyPIL2g== X-Received: by 10.237.53.51 with SMTP id a48mr889628qte.54.1467113438189; Tue, 28 Jun 2016 04:30:38 -0700 (PDT) Received: from msticlxl57.ims.intel.com (irdmzpr02-ext.ir.intel.com. [192.198.151.37]) by smtp.gmail.com with ESMTPSA id l27sm5241023qtc.34.2016.06.28.04.30.36 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Jun 2016 04:30:37 -0700 (PDT) Date: Tue, 28 Jun 2016 14:26:45 +0300 From: Ilya Enkovich To: gcc-patches@gcc.gnu.org Subject: [PATCH, PR tree-optimization/71655] Fix LE and LT masks comparison cases Message-ID: <20160628112645.GA4143@msticlxl57.ims.intel.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-IsSubscribed: yes Hi, Currently we use operands swap when compare masks using LT and LE codes. Operands swap misses swap for their definition types and this patch fixes it. Testing is in progress. OK for trunk if pass? Thanks, Ilya --- gcc/ 2016-06-28 Ilya Enkovich * tree-vect-stmts.c (vectorizable_comparison): Swap definition types when swapping operands. gcc/testsuite/ 2016-06-28 Ilya Enkovich * g++.dg/pr71655.C: New test. diff --git a/gcc/testsuite/g++.dg/pr71655.C b/gcc/testsuite/g++.dg/pr71655.C new file mode 100644 index 0000000..8ed3371 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr71655.C @@ -0,0 +1,28 @@ +// PR tree-optimization/71655 +// { dg-do compile } +// { dg-options "-O3 -std=c++11" } +// { dg-additional-options "-msse4" { target i?86-*-* x86_64-*-* } } + +#include +#include +extern int var_16, le_s5, le_s6, le_s9; +std::array, 4>, 24> v4; +extern std::array, 18> v15; + +void fn1() { + for (int k0 = 0;;) + for (int i1 = 0;;) + for (int j1 = 0; j1 < le_s9; j1 = j1 + 1) { + std::valarray> v15_; + for (; le_s5;) { + std::array, 48>, 18> v16; + for (int k2 = 0;; k2 = 1) + for (int l2 = 2; l2 < 6; l2 = l2 + 1) + for (int k3 = 0; le_s6;) + for (int i4 = 0; i4 < le_s9; i4 = i4 + 1) + *(i4 + (*v16.begin())[k3].begin()) = + (v15[k2][l2] || var_16) > + unsigned(i1 <= (*v4.begin()).at(k0).at(j1)); + } + } +} diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 5c65502..c41550d 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -7858,12 +7858,14 @@ vectorizable_comparison (gimple *stmt, gimple_stmt_iterator *gsi, bitop1 = BIT_NOT_EXPR; bitop2 = BIT_AND_EXPR; std::swap (rhs1, rhs2); + std::swap (dts[0], dts[1]); } else if (code == LE_EXPR) { bitop1 = BIT_NOT_EXPR; bitop2 = BIT_IOR_EXPR; std::swap (rhs1, rhs2); + std::swap (dts[0], dts[1]); } else {