From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7856) id 609A53858D35; Sat, 9 Sep 2023 06:36:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 609A53858D35 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1694241389; bh=CEVr3F6Io8FgIbopxl0rn63f/NR37Y/19zBzipJd+0Y=; h=From:To:Subject:Date:From; b=mo0MCe1CHv+/tIuQuZ8+mpsbJdzGGbITZE2PlKJr1ruEdEvKbp5rcGAxbqvSwF/nn UQZalnLe9JHQkiWY4dMGw8LEoGYvsHNgv5Lt/zsS6pqWoc4qTug+a6uh+NFzklbsqz RXaD5W1JM2AzSC7KyT0rxd5fdMeYBgcK788bhu3Q= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Xi Ruoyao To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-3819] LoongArch: Slightly simplify loongarch_block_move_straight X-Act-Checkin: gcc X-Git-Author: Xi Ruoyao X-Git-Refname: refs/heads/master X-Git-Oldrev: 35adc54b55aa199f17e2c84e382792e424b6171e X-Git-Newrev: c0bb7a6f39e58717d34c9459586c0b1d5db16d89 Message-Id: <20230909063629.609A53858D35@sourceware.org> Date: Sat, 9 Sep 2023 06:36:29 +0000 (GMT) List-Id: https://gcc.gnu.org/g:c0bb7a6f39e58717d34c9459586c0b1d5db16d89 commit r14-3819-gc0bb7a6f39e58717d34c9459586c0b1d5db16d89 Author: Xi Ruoyao Date: Fri Sep 8 00:29:57 2023 +0800 LoongArch: Slightly simplify loongarch_block_move_straight gcc/ChangeLog: * config/loongarch/loongarch.cc (loongarch_block_move_straight): Check precondition (delta must be a power of 2) and use popcount_hwi instead of a homebrew loop. Diff: --- gcc/config/loongarch/loongarch.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 509ef2b97f1c..845fad5a8e8b 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -5225,9 +5225,8 @@ loongarch_block_move_straight (rtx dest, rtx src, HOST_WIDE_INT length, emit two ld.d/st.d pairs, one ld.w/st.w pair, and one ld.b/st.b pair. For each load/store pair we use a dedicated register to keep the pipeline as populated as possible. */ - HOST_WIDE_INT num_reg = length / delta; - for (delta_cur = delta / 2; delta_cur != 0; delta_cur /= 2) - num_reg += !!(length & delta_cur); + gcc_assert (pow2p_hwi (delta)); + HOST_WIDE_INT num_reg = length / delta + popcount_hwi (length % delta); /* Allocate a buffer for the temporary registers. */ regs = XALLOCAVEC (rtx, num_reg);