From patchwork Fri Dec 6 18:10:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Uros Bizjak X-Patchwork-Id: 2019453 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Yh8y78Ql; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Y4fXz3G5qz1yQq for ; Sat, 7 Dec 2024 05:14:27 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1EE463858C42 for ; Fri, 6 Dec 2024 18:14:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1EE463858C42 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Yh8y78Ql X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lj1-x233.google.com (mail-lj1-x233.google.com [IPv6:2a00:1450:4864:20::233]) by sourceware.org (Postfix) with ESMTPS id 8BEA03858408 for ; Fri, 6 Dec 2024 18:10:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8BEA03858408 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8BEA03858408 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::233 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1733508637; cv=none; b=ExT652IHk13VOCJqDneOrD5NOwh0JFGFfYVGp+d/LmPyMQ7kuY3ZywTY2ZvaQ5cJudryNr29DhKUdCHKdZZ9nqXIrBu+b89P88MQh0zLViMYHuDxR6ZqShHrM2TA+9Y57ws+ddf+tfVBdGviRf4uPg2SnEW3ObO/o6aN5g1nASs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1733508637; c=relaxed/simple; bh=ROYuZDeN+vJBNZ7sCdMVP0weLJjBGqrBY3oa3BqVDYw=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=u/eJa7AV/INnELloOx0hg/tI/XsK9krP4y1nkz0t4x73vt+JiSbjn+jQBI+o1yfmRPfbGUXjbIivOHSURWaZcHV7rwtqdOVP425Z7JYSceeAaBgLv5eVDfpS0sHvRNyGdYhiMCVTEc9qIBnHWN0ZZn9lYE4WFMldBoRKG+PT4Xc= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8BEA03858408 Received: by mail-lj1-x233.google.com with SMTP id 38308e7fff4ca-2ffbfee94d7so19517661fa.3 for ; Fri, 06 Dec 2024 10:10:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733508634; x=1734113434; darn=gcc.gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=BCzlcZ5bvwyO9DxDn/IKKtnZFSKldzQppMNna8JcYBc=; b=Yh8y78QlTROEpG6sDjfdpXA7SBRCf5oAx2CstOvPNpLoal+bBXOR2bnCTv+YI5GFg6 uGHqWqev5EgMhBoctgjkEbRXXeZKcSHG3fsB542P6WRB4iHpZWam661QAVR4aC3c6bXF LNFsyKtx0sQjDT0Iuwi7CLFxlFmArdHkNCeS4LGMZnMHp3SwwrHfH/zuAyFnjIVupk9z fsg/KU9fI07OPrZhDYcK86o+lGAND+5BzYY3CuHUCjIFzlWycChqOwr5pvXFJ/bVbWls pZHsMLHhWS5aitzmvwnCiI4UXVfdfHXwhSLfHaQPnIPZ7UNtITjShR6+HGkejmC+u3kx k23g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733508634; x=1734113434; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=BCzlcZ5bvwyO9DxDn/IKKtnZFSKldzQppMNna8JcYBc=; b=XA9Ggq+q0UnBkKqLLOIBP9Ev9BlNFkCUKfTFm7251lAqlSk6J5Vc/ZfJsFRfmvlfZ5 0/l3BVXMLBuPlpanXzVnMSoiUgtYDQQA63UUOQRMwInmS/kiCilrCvWT1tlzIHLu+ivb hn5qLdk3Ynb5/x7wCIeiftiJatq/o3CrTEtoOK6/V7TXdn1iqmJE+pR/auePn/3SYXtO gIxHfyUhNB00qO+EFAho6S+eMExGm7/e7VldHStBqbzBjJpJZWsW6V4MwEXxB26Hhcd2 hXB74yYsXkRGCZZLGAkc0vG3zjFcSFIVTbHDSABlaR3/Mo0ndI6b+WLq4iJVd2uUjnUz KoPA== X-Gm-Message-State: AOJu0YyncBFuIwIfuLsED421pDCjYy72OksBRCkJ2U+c3YMzScrkKQGo Xzp4YCXZm82Oksoua/LqLS+Bp1n9kBw5zqmIEcgOhdxaeAuv82HZKSvt0JiG1146sDlBFnuVXZj j+vzd1DmBWkrYpMIhXWLYroft2iZpxdXB X-Gm-Gg: ASbGncvvxzk/2fkjpG7Tn8OFHzNkjBnCsiTQvWhDejx60WZOVwXDGFRD4GZh1HMy9Gw zNrQAaUY8nzcrpk93nTxXtpb/j5xeERM= X-Google-Smtp-Source: AGHT+IGdFq8NXbhGSanwvSGP2oSAWmLD813bftP3GS8W22gkVLmX9Yw4Nzej1YnSwyS7IOuzI8eECl/5zlB4EEBdQww= X-Received: by 2002:a2e:a10e:0:b0:300:1448:c526 with SMTP id 38308e7fff4ca-3002fc97665mr13905671fa.37.1733508634396; Fri, 06 Dec 2024 10:10:34 -0800 (PST) MIME-Version: 1.0 From: Uros Bizjak Date: Fri, 6 Dec 2024 19:10:22 +0100 Message-ID: Subject: [committed] i386: Fix gcc.target/i386/pr101716.c (and some related cleanups) To: "gcc-patches@gcc.gnu.org" X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org Fix pr101716.c testcase scan-assembler failure. The combine pass will not combine instructions that use registers in TARGET_CLASS_LIKELY_SPILLED class, such as %eax return register in AREG class. Change the testcase to use pseudos only and explicitly scan for zero_extendsidi pattern name. While looking there, also clean ix86_decompose_address a bit: eliminate common code and use UINTVAL and HOST_WIDE_INT_UC macros in the condition for AND wrapped address. gcc/ChangeLog: * config/i386/i386.cc (ix86_decompose_address): Eliminate common code and use UINTVAL and HOST_WIDE_INT_UC macros in the condition for AND wrapped address. gcc/testsuite/ChangeLog: * gcc.target/i386/pr101716.c (dg-options): Add -dp. (dg-final): Scan for zero_extendsidi. (sample1): Change the code to use pseudos only. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Uros. diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index b426d29fcb5..0cdc2838bbc 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -10806,36 +10806,26 @@ ix86_decompose_address (rtx addr, struct ix86_address *out) if (CONST_INT_P (addr)) return false; } - else if (GET_CODE (addr) == AND - && const_32bit_mask (XEXP (addr, 1), DImode)) - { - addr = lowpart_subreg (SImode, XEXP (addr, 0), DImode); - if (addr == NULL_RTX) - return false; - - if (CONST_INT_P (addr)) - return false; - } else if (GET_CODE (addr) == AND) { - /* For ASHIFT inside AND, combine will not generate - canonical zero-extend. Merge mask for AND and shift_count - to check if it is canonical zero-extend. */ - tmp = XEXP (addr, 0); rtx mask = XEXP (addr, 1); - if (tmp && GET_CODE(tmp) == ASHIFT) + rtx shift_val; + + if (const_32bit_mask (mask, DImode) + /* For ASHIFT inside AND, combine will not generate + canonical zero-extend. Merge mask for AND and shift_count + to check if it is canonical zero-extend. */ + || (CONST_INT_P (mask) + && GET_CODE (XEXP (addr, 0)) == ASHIFT + && CONST_INT_P (shift_val = XEXP (XEXP (addr, 0), 1)) + && ((UINTVAL (mask) + | ((HOST_WIDE_INT_1U << INTVAL (shift_val)) - 1)) + == HOST_WIDE_INT_UC (0xffffffff)))) { - rtx shift_val = XEXP (tmp, 1); - if (CONST_INT_P (mask) && CONST_INT_P (shift_val) - && (((unsigned HOST_WIDE_INT) INTVAL(mask) - | ((HOST_WIDE_INT_1U << INTVAL(shift_val)) - 1)) - == 0xffffffff)) - { - addr = lowpart_subreg (SImode, XEXP (addr, 0), - DImode); - } + addr = lowpart_subreg (SImode, XEXP (addr, 0), DImode); + if (addr == NULL_RTX) + return false; } - } } diff --git a/gcc/testsuite/gcc.target/i386/pr101716.c b/gcc/testsuite/gcc.target/i386/pr101716.c index 5e3ea64a320..25d3c41357e 100644 --- a/gcc/testsuite/gcc.target/i386/pr101716.c +++ b/gcc/testsuite/gcc.target/i386/pr101716.c @@ -1,11 +1,10 @@ /* PR target/101716 */ /* { dg-do compile { target { ! ia32 } } } */ -/* { dg-options "-O2" } */ +/* { dg-options "-O2 -dp" } */ +/* { dg-final { scan-assembler-not "zero_extendsidi" } } */ -/* { dg-final { scan-assembler "leal\[\\t \]\[^\\n\]*eax" } } */ -/* { dg-final { scan-assembler-not "movl\[\\t \]\[^\\n\]*eax" } } */ - -unsigned long long sample1(unsigned long long m) { - unsigned int t = -1; - return (m << 1) & t; +void sample1 (unsigned long long x, unsigned long long *r) +{ + unsigned int t = -1; + *r = (x << 1) & t; }