From patchwork Wed Jan 30 21:53:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Vladimir Makarov X-Patchwork-Id: 1033798 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-494980-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="wII10CNz"; dkim-atps=neutral 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 43qcZN5fKPz9s9G for ; Thu, 31 Jan 2019 08:53:44 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=lfpJh8ct1Xu6/MpMMm7XpqFJhzFqCrzc2yRxGXgzPpqKKyusA6 wrakApeYirir9J7kxvoUi7psKUouj02s25kzfoJwSzb7pby/DKr4qni/0Hmz7lQx oBclY256GXuLU1Is1vow4cKCGRrUOA0rVeLOEL35eTTeEqj7y55/wDBh4= 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:to :from:subject:message-id:date:mime-version:content-type; s= default; bh=PtrUKygwseU+Ahq+VeJa5PeSAH4=; b=wII10CNzfRI6b+DBxM7/ CyYNsvYP3jJ6LMMq0Kd2ZBKkjPmOjbqUokt8YdOnQzZCi0l/Wl/sFAeMZfRhfpWR GmKsasDLNhRvMuFpZ8w45dPK+A1ALfdxtpSQkHKissZz9+Hsrf2bgS6yZBIdwNCc 0HK3JB+O4c79Vq2JDitVuuc= Received: (qmail 89849 invoked by alias); 30 Jan 2019 21:53:37 -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 89841 invoked by uid 89); 30 Jan 2019 21:53:37 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-10.6 required=5.0 tests=BAYES_00, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, KAM_NUMSUBJECT, KAM_SHORT, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 30 Jan 2019 21:53:35 +0000 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5B1362CD7EC for ; Wed, 30 Jan 2019 21:53:34 +0000 (UTC) Received: from [10.10.121.20] (ovpn-121-20.rdu2.redhat.com [10.10.121.20]) by smtp.corp.redhat.com (Postfix) with ESMTP id BC51F608E5 for ; Wed, 30 Jan 2019 21:53:33 +0000 (UTC) To: "gcc-patches@gcc.gnu.org" From: Vladimir Makarov Subject: patch to fix PR87246 Message-ID: <4036b2db-3b0e-8177-2f25-a9a77e7567a4@redhat.com> Date: Wed, 30 Jan 2019 16:53:33 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 X-IsSubscribed: yes The following patch fixes https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87246   The patch was successfully bootstrapped and tested on x86-64 and ppc64.   Committed as rev. 268404 Index: ChangeLog =================================================================== --- ChangeLog (revision 268403) +++ ChangeLog (working copy) @@ -1,3 +1,9 @@ +2019-01-30 Vladimir Makarov + + PR rtl-optimization/87246 + * lra-constraints.c (simplify_operand_subreg): Reload memory + in subreg if the address became invalid. + 2019-01-30 Bill Schmidt PR target/87064 Index: lra-constraints.c =================================================================== --- lra-constraints.c (revision 268117) +++ lra-constraints.c (working copy) @@ -1497,10 +1497,11 @@ simplify_operand_subreg (int nop, machin alter_subreg (curr_id->operand_loc[nop], false); rtx subst = *curr_id->operand_loc[nop]; lra_assert (MEM_P (subst)); - + const bool addr_is_valid = valid_address_p (GET_MODE (subst), + XEXP (subst, 0), + MEM_ADDR_SPACE (subst)); if (!addr_was_valid - || valid_address_p (GET_MODE (subst), XEXP (subst, 0), - MEM_ADDR_SPACE (subst)) + || addr_is_valid || ((get_constraint_type (lookup_constraint (curr_static_id->operand[nop].constraint)) != CT_SPECIAL_MEMORY) @@ -1529,12 +1530,17 @@ simplify_operand_subreg (int nop, machin data into a register when the inner is narrower than outer or missing important data from memory when the inner is wider than outer. This rule only applies to modes that are no wider than - a word. */ - if (!(maybe_ne (GET_MODE_PRECISION (mode), - GET_MODE_PRECISION (innermode)) - && known_le (GET_MODE_SIZE (mode), UNITS_PER_WORD) - && known_le (GET_MODE_SIZE (innermode), UNITS_PER_WORD) - && WORD_REGISTER_OPERATIONS) + a word. + + If valid memory becomes invalid after subreg elimination + we still have to reload memory. + */ + if ((! addr_was_valid || addr_is_valid) + && !(maybe_ne (GET_MODE_PRECISION (mode), + GET_MODE_PRECISION (innermode)) + && known_le (GET_MODE_SIZE (mode), UNITS_PER_WORD) + && known_le (GET_MODE_SIZE (innermode), UNITS_PER_WORD) + && WORD_REGISTER_OPERATIONS) && (!(MEM_ALIGN (subst) < GET_MODE_ALIGNMENT (mode) && targetm.slow_unaligned_access (mode, MEM_ALIGN (subst))) || (MEM_ALIGN (reg) < GET_MODE_ALIGNMENT (innermode) @@ -1553,7 +1559,7 @@ simplify_operand_subreg (int nop, machin enum reg_class rclass = (enum reg_class) targetm.preferred_reload_class (reg, ALL_REGS); if (get_reload_reg (curr_static_id->operand[nop].type, innermode, - reg, rclass, TRUE, "slow mem", &new_reg)) + reg, rclass, TRUE, "slow/invalid mem", &new_reg)) { bool insert_before, insert_after; bitmap_set_bit (&lra_subreg_reload_pseudos, REGNO (new_reg)); @@ -1572,7 +1578,7 @@ simplify_operand_subreg (int nop, machin rclass = (enum reg_class) targetm.preferred_reload_class (reg, ALL_REGS); if (get_reload_reg (curr_static_id->operand[nop].type, mode, reg, - rclass, TRUE, "slow mem", &new_reg)) + rclass, TRUE, "slow/invalid mem", &new_reg)) { bool insert_before, insert_after; bitmap_set_bit (&lra_subreg_reload_pseudos, REGNO (new_reg)); @@ -1585,7 +1591,7 @@ simplify_operand_subreg (int nop, machin } *curr_id->operand_loc[nop] = new_reg; lra_process_new_insns (curr_insn, before, after, - "Inserting slow mem reload"); + "Inserting slow/invalid mem reload"); return true; } Index: testsuite/ChangeLog =================================================================== --- testsuite/ChangeLog (revision 268403) +++ testsuite/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2019-01-30 Vladimir Makarov + + PR rtl-optimization/87246 + * gcc.target/i386/pr87246.c: New. + 2019-01-30 Marek Polacek PR c++/89119 - ICE with value-initialization in template. @@ -15,7 +20,7 @@ * gcc.target/powerpc/vec-extract-uint128-1.c: New test. * gcc.target/powerpc/vec-extract-ulong-1.c: New test. * gcc.target/powerpc/vec-extract-ushort-1.c: New test. - + 2019-01-30 Richard Biener PR tree-optimization/89111 Index: testsuite/gcc.target/i386/pr87246.c =================================================================== --- testsuite/gcc.target/i386/pr87246.c (nonexistent) +++ testsuite/gcc.target/i386/pr87246.c (working copy) @@ -0,0 +1,22 @@ +/* PR rtl-optimization/87246 */ +/* { dg-do compile { target int128 } } */ +/* { dg-options "-O2 -w -fnon-call-exceptions -fno-split-wide-types" } */ + +__int128 zd; +int c1; + +void +s2 (__int128 *qv) +{ + if (*qv != 0) + { + zd = 0; + c1 = c1 <= *qv; + } +} + +void +lt (unsigned int vb) +{ + s2 (vb + 1); +}