From patchwork Mon Feb 20 21:09:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Jelinek X-Patchwork-Id: 59674 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1513802wrn; Mon, 20 Feb 2023 13:10:08 -0800 (PST) X-Google-Smtp-Source: AK7set8BMMqXGvVfjI7Aro/eUxOz4m2e1ZXHatL4Aj2mX7Fd50IHSuUqVgHMKKC2qk9uwmxZCA82 X-Received: by 2002:a17:906:9f25:b0:8b1:4d5f:fb83 with SMTP id fy37-20020a1709069f2500b008b14d5ffb83mr10701824ejc.15.1676927408750; Mon, 20 Feb 2023 13:10:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676927408; cv=none; d=google.com; s=arc-20160816; b=SA2OdMf7DDMQfODAdtJuF7lN2l2LOV7cRkGaz6LsALais6U5y7Xd61kaJ9ows98tn5 5JeaMtpiUuLruSP2oGzKNBkgxHEtUk4gg/mrGFX1NoYhSfpEqBFJX3kC7ndlwBJdEqJf x1mE48IXqDZG8qk05o72ZQEGG6iZzPq9dlH39xUXx+2C0K7nsPOOL+BI4QgtdtHt3xHy 7OhNvUPMCbcB/6XkFR40Yv1up21Pz7ZLa3xQfDvJahhA/9j6IitEqVpp74qw5XIUC5tZ enWoP7ir/T1qhkuHALZJGUrs+6hIutowf0Jypeya1penIwWdR00Owx6hpYGXgeE4dGBh waqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-disposition:mime-version:message-id:subject:cc:to:date :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=XKYgZ92XC8O8rVnzR04waFxnOIwZGb2f6zVs3+I52W0=; b=O4XTIgi9+tfPWlYL6j4/pym94YjVRrEjjq/kFg68v9YMLxojohfgPEuie4qZ3voQSC 4UT/GRpCltUyJeXG1GCgtRcCLK8/HNJs2L0dFe2XBs1znSATFWL/GIC0VNwAquHF1yw6 3K/GqqOZQNPZtvnRf676WEL5jrqBLEObc3pdeTS16xMJky2KZ0lF8/qFuQYRQAM8IMzE L9PveuR0Yi1fDzps/QA0nmMCMS28BjiM5x8LNlAxpFfLw19I80xwpoVqiS6XLLaxCt2o 05Na1pX3L8apF8X42nz4ktZtiCEQ766JZato7Y1TWdXtl4DXF+wgFHu+SGGynaofF0Gk 5MqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=akfHETq9; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id gh13-20020a1709073c0d00b008b19eb2bcc8si10794939ejc.600.2023.02.20.13.10.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Feb 2023 13:10:08 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=akfHETq9; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8EAF13857026 for ; Mon, 20 Feb 2023 21:09:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8EAF13857026 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1676927399; bh=XKYgZ92XC8O8rVnzR04waFxnOIwZGb2f6zVs3+I52W0=; h=Date:To:Cc:Subject:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=akfHETq9rjULsxFd92i5hG0VslYnbW40n+Any+PytQF9u9OQ4h8nsfrMwcHh6kF9N anUW5KCqQQOxThnPAJLfVbdHrKPO9ukL+6WPxsRWS9zODlTvT3OyjJBWspRfPIomnd 1VI53vULyb/YxjGjP+TVngVIx6JbqU6DoxQf7DD8= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id AB8E3385B501 for ; Mon, 20 Feb 2023 21:09:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AB8E3385B501 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-391-igxaTGkxNCKwDaLVyoJKMg-1; Mon, 20 Feb 2023 16:09:14 -0500 X-MC-Unique: igxaTGkxNCKwDaLVyoJKMg-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id EECCE29AA2CE; Mon, 20 Feb 2023 21:09:13 +0000 (UTC) Received: from tucnak.zalov.cz (unknown [10.39.192.62]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B4354492B04; Mon, 20 Feb 2023 21:09:13 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.17.1/8.17.1) with ESMTPS id 31KL960O1817331 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 20 Feb 2023 22:09:11 +0100 Received: (from jakub@localhost) by tucnak.zalov.cz (8.17.1/8.17.1/Submit) id 31KL903o1817330; Mon, 20 Feb 2023 22:09:00 +0100 Date: Mon, 20 Feb 2023 22:09:00 +0100 To: Segher Boessenkool Cc: gcc-patches@gcc.gnu.org Subject: [committed] powerpc: Another umaddditi4 fix [PR108862] Message-ID: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jakub Jelinek via Gcc-patches From: Jakub Jelinek Reply-To: Jakub Jelinek Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758385834862378144?= X-GMAIL-MSGID: =?utf-8?q?1758385834862378144?= Hi! The following testcase is miscompiled on powerpc64le-linux with -O2 -mcpu=power9. The problem is that gen_umaddditi4 is called with the same TImode register for both op0 and op3, and maddlddi4 overwrites the low half of op0 before the low half of op3 is read, so when they are the same register it reads the result of maddlddi4. The following patch fixes that by swapping maddlddi4 and umadddi4_highpart{,_le} during expansion, as the latter writes into a temporary pseudo and so can't change anything maddlddi4 depends on. Bootstrapped/regtested on powerpc64-linux (power7, tested -m32/-m64), powerpc64le-linux (power8 and another on power9 with --with-cpu-64=power9 --with-tune-64=power9), preapproved by Segher on IRC, committed to trunk. 2023-02-20 Jakub Jelinek PR target/108862 * config/rs6000/rs6000.md (umaddditi4): Swap gen_maddlddi4 with gen_umadddi4_highpart{,_le}. * gcc.dg/pr108862.c: New test. * gcc.target/powerpc/pr108862.c: New test. Jakub --- gcc/config/rs6000/rs6000.md.jj 2023-02-15 10:51:12.745802021 +0100 +++ gcc/config/rs6000/rs6000.md 2023-02-20 16:01:02.929027764 +0100 @@ -3249,8 +3249,6 @@ rtx op3_hi = gen_rtx_SUBREG (DImode, operands[3], BYTES_BIG_ENDIAN ? 0 : 8); rtx hi_temp = gen_reg_rtx (DImode); - emit_insn (gen_maddlddi4 (op0_lo, operands[1], operands[2], op3_lo)); - if (BYTES_BIG_ENDIAN) emit_insn (gen_umadddi4_highpart (hi_temp, operands[1], operands[2], op3_lo)); @@ -3258,6 +3256,8 @@ emit_insn (gen_umadddi4_highpart_le (hi_temp, operands[1], operands[2], op3_lo)); + emit_insn (gen_maddlddi4 (op0_lo, operands[1], operands[2], op3_lo)); + emit_insn (gen_adddi3 (op0_hi, hi_temp, op3_hi)); DONE; --- gcc/testsuite/gcc.dg/pr108862.c.jj 2023-02-20 15:52:20.570619215 +0100 +++ gcc/testsuite/gcc.dg/pr108862.c 2023-02-20 15:51:52.363029125 +0100 @@ -0,0 +1,27 @@ +/* PR target/108862 */ +/* { dg-do run { target int128 } } */ +/* { dg-options "-O2" } */ + +unsigned long long a[2] = { 0x04a13945d898c296ULL, 0x0000100000000fffULL }; +unsigned long long b[4] = { 0x04a13945d898c296ULL, 0, 0, 0x0000100000000fffULL }; + +__attribute__((noipa)) unsigned __int128 +foo (int x, unsigned long long *y, unsigned long long *z) +{ + unsigned __int128 w = 0; + for (int i = 0; i < x; i++) + w += (unsigned __int128)*y++ * (unsigned __int128)*z--; + return w; +} + +int +main () +{ + unsigned __int128 x = foo (1, &a[0], &a[1]); + unsigned __int128 y = foo (2, &b[0], &b[3]); + if ((unsigned long long) (x >> 64) != 0x0000004a13945dd3ULL + || (unsigned long long) x != 0x9b1c8443b3909d6aULL + || x != y) + __builtin_abort (); + return 0; +} --- gcc/testsuite/gcc.target/powerpc/pr108862.c.jj 2023-02-20 15:52:51.374171586 +0100 +++ gcc/testsuite/gcc.target/powerpc/pr108862.c 2023-02-20 15:53:04.497980869 +0100 @@ -0,0 +1,6 @@ +/* PR target/108862 */ +/* { dg-do run { target int128 } } */ +/* { dg-require-effective-target p9vector_hw } */ +/* { dg-options "-O2 -mdejagnu-cpu=power9" } */ + +#include "../../gcc.dg/pr108862.c"