Forgot to mention: I've bootstrapped and regtested this patch on
loongarch64-linux-gnu (with PR110939 patch applied to unbreak the
bootstrapping).  Ok for trunk?

On Wed, 2023-09-06 at 18:46 +0800, Xi Ruoyao wrote:

> If mask is a constant with value ((1 << N) - 1) << M we can perform this
> optimization.
> 
> gcc/ChangeLog:
> 
>         PR target/111252
>         * config/loongarch/loongarch-protos.h
>         (loongarch_pre_reload_split): Declare new function.
>         (loongarch_use_bstrins_for_ior_with_mask): Likewise.
>         * config/loongarch/loongarch.cc
>         (loongarch_pre_reload_split): Implement.
>         (loongarch_use_bstrins_for_ior_with_mask): Likewise.
>         * config/loongarch/predicates.md (ins_zero_bitmask_operand):
>         New predicate.
>         * config/loongarch/loongarch.md (bstrins_<mode>_for_mask):
>         New define_insn_and_split.
>         (bstrins_<mode>_for_ior_mask): Likewise.
>         (define_peephole2): Further optimize code sequence produced by
>         bstrins_<mode>_for_ior_mask if possible.
> 
> gcc/testsuite/ChangeLog:
> 
>         * g++.target/loongarch/bstrins-compile.C: New test.
>         * g++.target/loongarch/bstrins-run.C: New test.

/* snip */

-- 
Xi Ruoyao <xry...@xry111.site>
School of Aerospace Science and Technology, Xidian University

Reply via email to