From patchwork Fri Mar 11 11:13:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Enkovich X-Patchwork-Id: 596166 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 D977F140297 for ; Fri, 11 Mar 2016 22:13:59 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=uRTSYbAr; 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:cc:subject:message-id:mime-version:content-type; q=dns; s=default; b=A7CfQiwDJzl/4kQ3JpGxOZihSF6/j2W7DoGNii2axtbdYZ53BR f7qHVBrdkR6ijVdcv3DulfDT+tcflbS2nd+dH7diRPy8W9gX2kvFw6ddTs0gLTHt dWK/S+d1AGCzvmoktaxmKLkbrbH9nDVTIE8kU736w/4SqP1HsKfsQ6TNg= 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:cc:subject:message-id:mime-version:content-type; s= default; bh=pOzR8ghfDex6ufO9WmXpU/wnvtE=; b=uRTSYbArW+oHaJiauZPA hyPxdbIXNcK5En3+V1wo2xwgFQR4HHM2TjLaq5SR3zanhkw/sn4dgGnAo03qkAJQ hNNTZhfxu+PA80LDFHeftJk97HYhnvSqHlBuvmhBbizJdYWN1ADzHAV7eNNROqGN ZLCZXlEof8j4BMtmEc/FHKM= Received: (qmail 119620 invoked by alias); 11 Mar 2016 11:13:52 -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 119496 invoked by uid 89); 11 Mar 2016 11:13: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=enkovich.gnu@gmail.com, enkovichgnugmailcom, Hx-languages-length:1844, 2016-03-11 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 (AES128-GCM-SHA256 encrypted) ESMTPS; Fri, 11 Mar 2016 11:13:49 +0000 Received: by mail-wm0-f49.google.com with SMTP id l68so13866513wml.0 for ; Fri, 11 Mar 2016 03:13:48 -0800 (PST) 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:cc:subject:message-id:mime-version :content-disposition:user-agent; bh=3l8i8k4Yx9HPG/EqUUu+56NzWxNBPvQnZ/kzTvCydtg=; b=F7pXVO6Ie/0xt7nB7lI1SgoqRpxa5DjRVaDs6WMVslDa92iLwST7eq/rXxsXos5bm8 8uA3CwSXjYytpAdaS/FbodBn7s7alpP/niJRchdBndLaJL25Hyg7Osgv9GNbSwM3dBf7 8FkOQJNgQQ5GKYl64jspWqb1NsWWwX2dBiyayFtmkyr40/dvHR/C8eTJJw90RtTHrWM3 Pr/fCd37UTKXZzIeWHiaHJ5iwLhP+24xnoU0FMXW3Ft0zULHIUBlEcctzMLnq2TCF9zb YsOThV5Hk7Q78ni8GW/jMGz1j4/s8UTkLlJk6j3PLu7pdwGOxyUXvrhdyOjQMyX9HGZ4 srcw== X-Gm-Message-State: AD7BkJLHrraBvrn9fbQ6zQfo+9d1CFd9CN3Be+btUAqWD48rh6Ekuy44cnpJbNiT9Ku/ag== X-Received: by 10.28.111.135 with SMTP id c7mr2403099wmi.46.1457694826090; Fri, 11 Mar 2016 03:13:46 -0800 (PST) Received: from msticlxl57.ims.intel.com (irdmzpr01-ext.ir.intel.com. [192.198.151.36]) by smtp.gmail.com with ESMTPSA id 202sm1787394wmo.7.2016.03.11.03.13.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 11 Mar 2016 03:13:45 -0800 (PST) Date: Fri, 11 Mar 2016 14:13:01 +0300 From: Ilya Enkovich To: gcc-patches@gcc.gnu.org Cc: ubizjak@gmail.com Subject: [PATCH, PR target/70160] Support uninitialized register uses in STV pass Message-ID: <20160311111301.GC3131@msticlxl57.ims.intel.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-IsSubscribed: yes Hi, This patch is for PR70160. The problem is that when we build instructions chain for conversion in STV pass we don't include instruction using unitialized register value but don't skip them when convert register. This patch simply fixes it by skipping such register uses. Bootstrapped and tested on x86_64-pc-linux-gnu {-m32}. OK for trunk? Thanks, Ilya --- gcc/ 2016-03-11 Ilya Enkovich Jakub Jelinek PR target/70160 * config/i386/i386.c (scalar_chain::convert_reg): Skip uses of uninitialized values. gcc/testsuite/ 2016-03-11 Ilya Enkovich PR target/70160 * gcc.target/i386/pr70160.c: New test. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index fa7d3ff..3d8dbc4 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -3372,8 +3372,11 @@ scalar_chain::convert_reg (unsigned regno) bitmap_clear_bit (conv, DF_REF_INSN_UID (ref)); } } - else if (NONDEBUG_INSN_P (DF_REF_INSN (ref))) + /* Skip debug insns and uninitialized uses. */ + else if (DF_REF_CHAIN (ref) + && NONDEBUG_INSN_P (DF_REF_INSN (ref))) { + gcc_assert (scopy); replace_rtx (DF_REF_INSN (ref), reg, scopy); df_insn_rescan (DF_REF_INSN (ref)); } diff --git a/gcc/testsuite/gcc.target/i386/pr70160.c b/gcc/testsuite/gcc.target/i386/pr70160.c new file mode 100644 index 0000000..725e955 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr70160.c @@ -0,0 +1,19 @@ +/* { dg-do compile { target { ia32 } } } */ +/* { dg-options "-O2 -msse2 -Wno-uninitialized -Wno-maybe-uninitialized" } */ + +long long a; +void fn1(); +void fn2(unsigned t, int a_int, unsigned p) +{ + long long x; + int i, j = 1; + t = i; + for (; j;) { + a = x; + x = 1 + t; + j += a_int; + fn1(); + if (x == 1) + return; + } +}