From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x52f.google.com (mail-pg1-x52f.google.com [IPv6:2607:f8b0:4864:20::52f]) by sourceware.org (Postfix) with ESMTPS id EC2DF3AA88AC for ; Thu, 17 Nov 2022 14:58:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EC2DF3AA88AC 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-pg1-x52f.google.com with SMTP id v3so2188074pgh.4 for ; Thu, 17 Nov 2022 06:58:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=rvM+T1weAr2DE6tRZhfPVCq3toiX72IABbWmPuqRx7Q=; b=lGOZco0YKsnATammdR1xk+dDmQ3OUFI8z0iIRVXgX8jKdeUFjDzPyMlJFTxD7G9Xep FrbqqYB8uZjMwVdpfplVNZA907dRWgGGfkT7QGBUiMPwteaBcsm9+YoWnXuawM3cPWp1 4lxreZ3CWlASK0Rwmy0IGV4oAKRP/qjZgk6rsiT4tzt/7lb4KPNo5yXZ89FQ8pn5mzGv Ssc6A7KmeiWkJmhEaJ/zB/IeHP6bO0f1oD2V7JxurxDYE+YM7B0p0WZ7V88FdZIuF2Ch 4xpEC7rCIfxQ1neXIkpXJyWAaOgBtNw5g4hh8upGB64JOw/v7ZxmMUP4M4hYEKGzGLtj Pksw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rvM+T1weAr2DE6tRZhfPVCq3toiX72IABbWmPuqRx7Q=; b=QEIxFn6dPaoZn/9cYFPw1HtUCuFcMUtxgjv96qjIsbB677gjL3fyfFrepZwmthThFu pRpkSd32a09OzcbN3yucZZr6j4yo03vyHJc6Lh6LYdM8u7uptdTkE5CXAefRK2zpJRX7 OoLWsJrNK3Lz3V1KKW10Esr6cbbcMHK9vMm6Cz1sfp1QGkvYPtTYJniR2MeTWrH3uU58 PCFu3pn4m0Nfnexs96vIE1NB782ynOB38t6jUN+6Jtrgn0GZ61MwGYtrhJbDMhj3JEOI ueWDlQPFLN1LeEBcX8SQcAwCS9u7vJ/EYiHIFOaLQON6EFyos6oLhzSUjqTEOyR2w/UT oJIQ== X-Gm-Message-State: ANoB5plYdN65Hzn/agBkuZ9uFH8vjXaPmo9uS6V3N64GIg84adoz2dv0 ae98mcRMkTxfv8E1d8wIU50= X-Google-Smtp-Source: AA0mqf6uGea3983xo4yobnLoY/20cKOp4a1SP0YDhd+MAWTFFjaMgQLNclSL+pG6K3cTRFmgrfcnBg== X-Received: by 2002:a63:e09:0:b0:46b:8e9:749 with SMTP id d9-20020a630e09000000b0046b08e90749mr2316179pgl.260.1668697133745; Thu, 17 Nov 2022 06:58:53 -0800 (PST) Received: from ?IPV6:2601:681:8600:13d0::f0a? ([2601:681:8600:13d0::f0a]) by smtp.gmail.com with ESMTPSA id h19-20020a656393000000b0044ed37dbca8sm1117988pgv.2.2022.11.17.06.58.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 17 Nov 2022 06:58:52 -0800 (PST) Message-ID: <71d8d0ca-c249-28fd-7327-5a3b932dad94@gmail.com> Date: Thu, 17 Nov 2022 07:58:51 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.1 Subject: Re: [PATCH] RISC-V: Handle "(a & twobits) == singlebit" in branches using Zbs Content-Language: en-US To: Philipp Tomsich , gcc-patches@gcc.gnu.org Cc: Christoph Muellner , Kito Cheng , Vineet Gupta , Jeff Law , Palmer Dabbelt References: <20221113204858.4062163-1-philipp.tomsich@vrull.eu> From: Jeff Law In-Reply-To: <20221113204858.4062163-1-philipp.tomsich@vrull.eu> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-8.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,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: On 11/13/22 13:48, Philipp Tomsich wrote: > Use Zbs when generating a sequence for "if ((a & twobits) == singlebit) ..." > that can be expressed as bexti + bexti + andn. > > gcc/ChangeLog: > > * config/riscv/bitmanip.md (*branch_mask_twobits_equals_singlebit): > Handle "if ((a & T) == C)" using Zbs, when T has 2 bits set and C has one > of these tow bits set. > * config/riscv/predicates.md (const_twobits_operand): New predicate. > > gcc/testsuite/ChangeLog: > > * gcc.target/riscv/zbs-if_then_else-01.c: New test. s/tow/two/ in the ChangeLog. > > Signed-off-by: Philipp Tomsich > --- > > gcc/config/riscv/bitmanip.md | 42 +++++++++++++++++++ > gcc/config/riscv/predicates.md | 5 +++ > .../gcc.target/riscv/zbs-if_then_else-01.c | 20 +++++++++ > 3 files changed, 67 insertions(+) > create mode 100644 gcc/testsuite/gcc.target/riscv/zbs-if_then_else-01.c > > diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md > index 7a8f4e35880..2cea394671f 100644 > --- a/gcc/config/riscv/bitmanip.md > +++ b/gcc/config/riscv/bitmanip.md > @@ -690,3 +690,45 @@ > "TARGET_ZBS" > [(set (match_dup 0) (zero_extract:X (match_dup 1) (const_int 1) (match_dup 2))) > (set (match_dup 0) (xor:X (match_dup 0) (const_int 1)))]) > + > +;; IF_THEN_ELSE: test for 2 bits of opposite polarity > +(define_insn_and_split "*branch_mask_twobits_equals_singlebit" > + [(set (pc) > + (if_then_else (match_operator 1 "equality_operator" > + [(and:X (match_operand:X 2 "register_operand" "r") > + (match_operand:X 3 "const_twobits_operand" "i")) > + (match_operand:X 4 "single_bit_mask_operand" "i")]) > + (label_ref (match_operand 0 "" "")) > + (pc))) > + (clobber (match_scratch:X 5 "=&r")) > + (clobber (match_scratch:X 6 "=&r"))] > + "TARGET_ZBS && TARGET_ZBB && !SMALL_OPERAND (INTVAL (operands[3]))" > + "#" > + "&& reload_completed" > + [(set (match_dup 5) (zero_extract:X (match_dup 2) > + (const_int 1) > + (match_dup 8))) > + (set (match_dup 6) (zero_extract:X (match_dup 2) > + (const_int 1) > + (match_dup 9))) > + (set (match_dup 6) (and:X (not:X (match_dup 6)) (match_dup 5))) > + (set (pc) (if_then_else (match_op_dup 1 [(match_dup 6) (const_int 0)]) > + (label_ref (match_dup 0)) > + (pc)))] > +{ > + unsigned HOST_WIDE_INT twobits_mask = UINTVAL (operands[3]); > + unsigned HOST_WIDE_INT singlebit_mask = UINTVAL (operands[4]); > + > + /* Make sure that the reference value has one of the bits of the mask set */ > + if ((twobits_mask & singlebit_mask) == 0) > + FAIL; This fails the split, but in the event this scenario occurs we still would up with an ICE as the output template requires splitting.  Don't we need to have this be part of the pattern's condition instead so that it never matches in that case? ISTM we should probably have a test to cover this scenario. jeff