Pushed r14-3819. On Sat, 2023-09-09 at 14:16 +0800, chenglulu wrote: > > 在 2023/9/8 上午12:33, Xi Ruoyao 写道: > > 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. > > --- > > > > I've not run a full bootstrap with this, but it should be obvious. > > Ok for trunk? > > LGTM! > > Thanks! > > > > > 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 509ef2b97f1..845fad5a8e8 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); >
-- Xi Ruoyao <xry...@xry111.site> School of Aerospace Science and Technology, Xidian University