Thank you for information. Updated the v3 version as below. https://gcc.gnu.org/pipermail/gcc-patches/2023-April/616154.html
Pan -----Original Message----- From: Richard Biener <rguent...@suse.de> Sent: Wednesday, April 19, 2023 4:52 PM To: Li, Pan2 <pan2...@intel.com> Cc: gcc-patches@gcc.gnu.org; juzhe.zh...@rivai.ai; kito.ch...@sifive.com; richard.sandif...@arm.com; Wang, Yanzhang <yanzhang.w...@intel.com> Subject: RE: [PATCH v2] RISC-V: Allow Vector IOR(V1, NOT V1) optimization On Wed, 19 Apr 2023, Li, Pan2 wrote: > Hi Richard, > > Do you have any idea about this? I leverage git gcc-commit-mklog, it > will generate something as below. It looks no text after colon. I am > not sure if I need to add something by myself. Well, you need to add a description of your change! > gcc/ChangeLog: > > ........* simplify-rtx.cc (simplify_context::simplify_binary_operation_1): > <=== no text here. > > gcc/testsuite/ChangeLog: > > ........* gcc.target/riscv/rvv/base/mask_insn_shortcut.c: > <=== no text here. > ........* gcc.target/riscv/simplify_ior_optimization.c: New test. > > # Please enter the commit message for your changes. Lines starting # > with '#' will be ignored, and an empty message aborts the commit. > # > # On branch master > # Your branch is up to date with 'origin/master'. > # > # Changes to be committed: > #.......modified: gcc/simplify-rtx.cc > #.......modified: > gcc/testsuite/gcc.target/riscv/rvv/base/mask_insn_shortcut.c > #.......new file: gcc/testsuite/gcc.target/riscv/simplify_ior_optimization.c > > Pan > > -----Original Message----- > From: Li, Pan2 > Sent: Wednesday, April 19, 2023 2:47 PM > To: Richard Biener <rguent...@suse.de> > Cc: gcc-patches@gcc.gnu.org; juzhe.zh...@rivai.ai; > kito.ch...@sifive.com; richard.sandif...@arm.com; Wang, Yanzhang > <yanzhang.w...@intel.com> > Subject: RE: [PATCH v2] RISC-V: Allow Vector IOR(V1, NOT V1) > optimization > > Oh, I see. The message need to be re-generated. Thank you for pointing out, > will update ASPA. > > Pan > > -----Original Message----- > From: Richard Biener <rguent...@suse.de> > Sent: Wednesday, April 19, 2023 2:40 PM > To: Li, Pan2 <pan2...@intel.com> > Cc: gcc-patches@gcc.gnu.org; juzhe.zh...@rivai.ai; > kito.ch...@sifive.com; richard.sandif...@arm.com; Wang, Yanzhang > <yanzhang.w...@intel.com> > Subject: Re: [PATCH v2] RISC-V: Allow Vector IOR(V1, NOT V1) > optimization > > On Tue, 18 Apr 2023, pan2...@intel.com wrote: > > > From: Pan Li <pan2...@intel.com> > > > > This patch add the optimization for the vector IOR(V1, NOT V1). > > Assume we have below sample code. > > > > vbool32_t test_shortcut_for_riscv_vmorn_case_5(vbool32_t v1, size_t > > vl) { > > return __riscv_vmorn_mm_b32(v1, v1, vl); } > > > > Before this patch: > > vsetvli a5,zero,e8,mf4,ta,ma > > vlm.v v24,0(a1) > > vsetvli zero,a2,e8,mf4,ta,ma > > vmorn.mm v24,v24,v24 > > vsetvli a5,zero,e8,mf4,ta,ma > > vsm.v v24,0(a0) > > ret > > > > After this patch: > > vsetvli zero,a2,e8,mf4,ta,ma > > vmset.m v24 > > vsetvli a5,zero,e8,mf4,ta,ma > > vsm.v v24,0(a0) > > ret > > > > Or in RTL's perspective, > > from: > > (ior:VNx2BI (reg/v:VNx2BI 137 [ v1 ]) (not:VNx2BI (reg/v:VNx2BI 137 > > [ > > v1 ]))) > > to: > > (const_vector:VNx2BI repeat [ (const_int 1 [0x1]) ]) > > > > The similar optimization like VMANDN has enabled already. There > > should be no difference execpt the operator when compare the VMORN > > and VMANDN for such kind of optimization. The patch allows the > > VECTOR_BOOL IOR(V1, NOT V1) simplification besides the existing SCALAR_INT > > mode. > > > > gcc/ChangeLog: > > > > * simplify-rtx.cc (simplify_context::simplify_binary_operation_1): > > This needs some text > > > gcc/testsuite/ChangeLog: > > > > * gcc.target/riscv/rvv/base/mask_insn_shortcut.c: > > Likewise. > > OK with that fixed. > > > * gcc.target/riscv/simplify_ior_optimization.c: New test. > > > > Signed-off-by: Pan Li <pan2...@intel.com> > > --- > > gcc/simplify-rtx.cc | 4 +- > > .../riscv/rvv/base/mask_insn_shortcut.c | 3 +- > > .../riscv/simplify_ior_optimization.c | 50 +++++++++++++++++++ > > 3 files changed, 53 insertions(+), 4 deletions(-) create mode > > 100644 gcc/testsuite/gcc.target/riscv/simplify_ior_optimization.c > > > > diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc index > > ee75079917f..3bc9b2f55ea 100644 > > --- a/gcc/simplify-rtx.cc > > +++ b/gcc/simplify-rtx.cc > > @@ -3332,8 +3332,8 @@ simplify_context::simplify_binary_operation_1 > > (rtx_code code, > > if (((GET_CODE (op0) == NOT && rtx_equal_p (XEXP (op0, 0), op1)) > > || (GET_CODE (op1) == NOT && rtx_equal_p (XEXP (op1, 0), op0))) > > && ! side_effects_p (op0) > > - && SCALAR_INT_MODE_P (mode)) > > - return constm1_rtx; > > + && GET_MODE_CLASS (mode) != MODE_CC) > > + return CONSTM1_RTX (mode); > > > > /* (ior A C) is C if all bits of A that might be nonzero are on in > > C. */ > > if (CONST_INT_P (op1) > > diff --git > > a/gcc/testsuite/gcc.target/riscv/rvv/base/mask_insn_shortcut.c > > b/gcc/testsuite/gcc.target/riscv/rvv/base/mask_insn_shortcut.c > > index 83cc4a1b5a5..57d0241675a 100644 > > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/mask_insn_shortcut.c > > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/mask_insn_shortcut.c > > @@ -233,9 +233,8 @@ vbool64_t > > test_shortcut_for_riscv_vmxnor_case_6(vbool64_t v1, size_t vl) { > > /* { dg-final { scan-assembler-not {vmxor\.mm\s+v[0-9]+,\s*v[0-9]+} > > } } */ > > /* { dg-final { scan-assembler-not {vmor\.mm\s+v[0-9]+,\s*v[0-9]+} > > } } */ > > /* { dg-final { scan-assembler-not {vmnor\.mm\s+v[0-9]+,\s*v[0-9]+} > > } } */ > > -/* { dg-final { scan-assembler-times > > {vmorn\.mm\s+v[0-9]+,\s*v[0-9]+,\s*v[0-9]+} 7 } } */ > > /* { dg-final { scan-assembler-not > > {vmxnor\.mm\s+v[0-9]+,\s*v[0-9]+} } } */ > > /* { dg-final { scan-assembler-times {vmclr\.m\s+v[0-9]+} 14 } } */ > > -/* { dg-final { scan-assembler-times {vmset\.m\s+v[0-9]+} 7 } } */ > > +/* { dg-final { scan-assembler-times {vmset\.m\s+v[0-9]+} 14 } } */ > > /* { dg-final { scan-assembler-times {vmmv\.m\s+v[0-9]+,\s*v[0-9]+} > > 14 } } */ > > /* { dg-final { scan-assembler-times > > {vmnot\.m\s+v[0-9]+,\s*v[0-9]+} > > 14 } } */ diff --git > > a/gcc/testsuite/gcc.target/riscv/simplify_ior_optimization.c > > b/gcc/testsuite/gcc.target/riscv/simplify_ior_optimization.c > > new file mode 100644 > > index 00000000000..ec3bd0baf03 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/riscv/simplify_ior_optimization.c > > @@ -0,0 +1,50 @@ > > +/* { dg-do compile } */ > > +/* { dg-options "-march=rv64gc -mabi=lp64 -O2" } */ > > + > > +#include <stdint.h> > > + > > +uint8_t test_simplify_ior_scalar_case_0 (uint8_t a) { > > + return a | ~a; > > +} > > + > > +uint16_t test_simplify_ior_scalar_case_1 (uint16_t a) { > > + return a | ~a; > > +} > > + > > +uint32_t test_simplify_ior_scalar_case_2 (uint32_t a) { > > + return a | ~a; > > +} > > + > > +uint64_t test_simplify_ior_scalar_case_3 (uint64_t a) { > > + return a | ~a; > > +} > > + > > +int8_t test_simplify_ior_scalar_case_4 (int8_t a) { > > + return a | ~a; > > +} > > + > > +int16_t test_simplify_ior_scalar_case_5 (int16_t a) { > > + return a | ~a; > > +} > > + > > +int32_t test_simplify_ior_scalar_case_6 (int32_t a) { > > + return a | ~a; > > +} > > + > > +int64_t test_simplify_ior_scalar_case_7 (int64_t a) { > > + return a | ~a; > > +} > > + > > +/* { dg-final { scan-assembler-times {li\s+a[0-9]+,\s*-1} 6 } } */ > > +/* { dg-final { scan-assembler-times {li\s+a[0-9]+,\s*255} 1 } } */ > > +/* { dg-final { scan-assembler-times {li\s+a[0-9]+,\s*65536} 1 } } > > +*/ > > +/* { dg-final { scan-assembler-not {or\s+a[0-9]+} } } */ > > +/* { dg-final { scan-assembler-not {not\s+a[0-9]+} } } */ > > > > -- > Richard Biener <rguent...@suse.de> > SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 > Nuernberg, Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, > Boudien Moerman; HRB 36809 (AG Nuernberg) > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman; HRB 36809 (AG Nuernberg)