From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yw1-x1130.google.com (mail-yw1-x1130.google.com [IPv6:2607:f8b0:4864:20::1130]) by sourceware.org (Postfix) with ESMTPS id 6DFD63858D39 for ; Tue, 28 Feb 2023 05:13:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6DFD63858D39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-yw1-x1130.google.com with SMTP id 00721157ae682-53916ab0c6bso239989657b3.7 for ; Mon, 27 Feb 2023 21:13:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=URpZVyD//UCEmTO2KcRQ9zqSuXyBhhdh+LmRCzl+3DM=; b=dfFOUhvK7smvCoWMHBw/DUc/pvHEL7W1DwUUc1Najzr84WX6pOcXvu0SHoeeZIybKG cpco3vUUhgZZPF3cXl+jPoz7gZBd4P5/vgf+6RogPyS/2NYXS+SfrKxliwQIJ0gdcr9W 8oxoWltXd4c4Rohw2JiWmMGez/LtWV3KQsj5ugI84krIbp7Y8oRQOqcy2yUm0Gcz9/AP quY9Wxj/q7wKmRl71KLTbuYdhpAjUbVVZE18teJnrWPY+Y2cC+3QaYZmQlYFCTQirE8C BuMPkh68G46RXHSZ4I2qRtdu5a+DM/znRY5M6bl8RRMp0kD+GOU8HoFYta+BdKOshsFN cJhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=URpZVyD//UCEmTO2KcRQ9zqSuXyBhhdh+LmRCzl+3DM=; b=mBnYlr6aCSK+3znCgo+WkzdriNyvexE8HeqzD2st7RQdJ7dGHFAuGTu316ldx9sBLP xM9zAKe7rdB31OGehbl3VHbinXeFOR0QjnmgwRQW9r07kAtsp7xWvsoNosR/6FtqcrNt 66ebQLfApr/oNIVckgV7bmmuDBTJLG+jSqSksfIz/B0LHtUJuYanH6wmEYhK6Hte8xpq tjCicAqUnKzeY5a22ne+G2TGwrHu5mz6Cdt+TSSnFjGjdjMPa8PYGm/zyE0BUzKo3m6M 1Vw4WvaKkqJYBdXI8KvDBtNSv4Ja3whOuIOTJhVkuGfgHlJebCRNBsH5yjXRHxK+dc5M k/KQ== X-Gm-Message-State: AO0yUKU7zZOHd4kUB3QeguJL0XLQPRSm+SsLz1bSmddOc3QmdQhvD9om jrvVPx4eEXgQD3DsmcOGmojpRC0UGxhwBuOtziAwyf8cRPXxj1GRVEc= X-Google-Smtp-Source: AK7set//z17rqLvy01di4fA1fyGVXj8KVdOrDn6ySxPA27MMO4+/1zw24iOZ0xkCddQJ3avx6ORhKWZb9vC9qhHIIDQ= X-Received: by 2002:a25:900d:0:b0:a27:40c4:e12c with SMTP id s13-20020a25900d000000b00a2740c4e12cmr728505ybl.2.1677561183619; Mon, 27 Feb 2023 21:13:03 -0800 (PST) MIME-Version: 1.0 References: <20230228050036.30601-1-mynameisxiaou@gmail.com> In-Reply-To: <20230228050036.30601-1-mynameisxiaou@gmail.com> From: Sinan Lin Date: Tue, 28 Feb 2023 13:12:52 +0800 Message-ID: Subject: Re: [PATCH] RISC-V: Fix wrong partial subreg check for bsetidisi To: gcc-patches@gcc.gnu.org Content-Type: multipart/alternative; boundary="0000000000007054ee05f5bba6e5" X-Spam-Status: No, score=-8.5 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,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 List-Id: --0000000000007054ee05f5bba6e5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I encountered a miscompilation case with zbs, where bseti without sign extension emitted from bsetidisi pattern leads to wrong output. Take pr68648.c as an example, -march=3Drv64gc_zba_zbb_zbs -O3 did not gener= ate sext.w in int bar (void) and led to a wrong value in a0. It seems that the partial subreg check is wrongly set to the immediate operand. int foo (void): li a0,123 ret int bar (void): addi sp,sp,-16 sd ra,8(sp) call foo # a0 123 li a5,248639488 # a0 123, a5 0xed1f000 addi a5,a5,11 # a0 123, a5 0xed1f00b slli a5,a5,14 # a0 123, a5 0x3b47c02c000 addi a5,a5,-8 # a0 123, a5 0x3b47c02bff8 ld ra,8(sp) or a0,a0,a5 # a0 0x3b47c02bffb, a5 0x3b47c02bff8 bseti a5,zero,32 # a0 0x3b47c02bffb, a5 0x100000000 addi a5,a5,-1 # a0 0x3b47c02bffb, a5 0x0ffffffff xor a0,a0,a5 # a0 0x3b483fd4004, a5 0x0ffffffff bseti a0,a0,0 # a0 0x3b483fd4005, a5 0x0ffffffff addi sp,sp,16 # sext.w a0,a0 is missing jr ra main: addi sp,sp,-16 sd ra,8(sp) call bar li a5,-2080555008 addi a5,a5,5 bne a0,a5,.L8 # a0 0x3b483fd4005, a5 0x83fd4005 ld ra,8(sp) li a0,0 addi sp,sp,16 jr ra .L8: call abort Lin Sinan =E4=BA=8E2023=E5=B9=B42=E6=9C=8828=E6= =97=A5=E5=91=A8=E4=BA=8C 13:00=E5=86=99=E9=81=93=EF=BC=9A > From: Lin Sinan > > The partial subreg check should be for subreg operand(operand 1) instead = of > the immediate operand(operand 2). This change also fix pr68648.c in zbs. > > gcc/ChangeLog: > > * config/riscv/bitmanip.md: Fix wrong index in the check. > > --- > gcc/config/riscv/bitmanip.md | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md > index 14d18edbe62..58a86bd929f 100644 > --- a/gcc/config/riscv/bitmanip.md > +++ b/gcc/config/riscv/bitmanip.md > @@ -442,7 +442,7 @@ > (ior:DI (sign_extend:DI (match_operand:SI 1 "register_operand" > "r")) > (match_operand 2 "single_bit_mask_operand" "i")))] > "TARGET_ZBS && TARGET_64BIT > - && !partial_subreg_p (operands[2])" > + && !partial_subreg_p (operands[1])" > "bseti\t%0,%1,%S2" > [(set_attr "type" "bitmanip")]) > > -- > 2.34.1 > > --0000000000007054ee05f5bba6e5--