From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2063) id DD73A3858402; Mon, 17 Jan 2022 05:44:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DD73A3858402 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Kewen Lin To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-6621] rs6000: Use known constant for GET_MODE_NUNITS and similar X-Act-Checkin: gcc X-Git-Author: Kewen Lin X-Git-Refname: refs/heads/master X-Git-Oldrev: 240dd6c063b481c092c9ec406b69b400f6f033f1 X-Git-Newrev: b3e77224edbcb06cfd6ef585c11fc2c7d9672a16 Message-Id: <20220117054404.DD73A3858402@sourceware.org> Date: Mon, 17 Jan 2022 05:44:04 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Jan 2022 05:44:05 -0000 https://gcc.gnu.org/g:b3e77224edbcb06cfd6ef585c11fc2c7d9672a16 commit r12-6621-gb3e77224edbcb06cfd6ef585c11fc2c7d9672a16 Author: Kewen Lin Date: Sun Jan 16 22:55:42 2022 -0600 rs6000: Use known constant for GET_MODE_NUNITS and similar This patch is to clean up some codes with GET_MODE_UNIT_SIZE or GET_MODE_NUNITS, which can use known constants or just be removed. Note that Carl Love helped to confirm altivec_vreveti2 introduced in r12-1341 is useless and can be removed. gcc/ChangeLog: * config/rs6000/altivec.md (altivec_vreveti2): Remove. * config/rs6000/vsx.md (*vsx_extract_si, *vsx_extract_si_float_df, *vsx_extract_si_float_, *vsx_insert_extract_v4sf_p9): Use known constant values to simplify code. Diff: --- gcc/config/rs6000/altivec.md | 25 ------------------------- gcc/config/rs6000/vsx.md | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md index d7e93f2b0c6..efc8ae35c2e 100644 --- a/gcc/config/rs6000/altivec.md +++ b/gcc/config/rs6000/altivec.md @@ -3961,31 +3961,6 @@ DONE; }) -;; Vector reverse elements -(define_expand "altivec_vreveti2" - [(set (match_operand:TI 0 "register_operand" "=v") - (unspec:TI [(match_operand:TI 1 "register_operand" "v")] - UNSPEC_VREVEV))] - "TARGET_ALTIVEC" -{ - int i, j, size, num_elements; - rtvec v = rtvec_alloc (16); - rtx mask = gen_reg_rtx (V16QImode); - - size = GET_MODE_UNIT_SIZE (TImode); - num_elements = GET_MODE_NUNITS (TImode); - - for (j = 0; j < num_elements; j++) - for (i = 0; i < size; i++) - RTVEC_ELT (v, i + j * size) - = GEN_INT (i + (num_elements - 1 - j) * size); - - emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v))); - emit_insn (gen_altivec_vperm_ti (operands[0], operands[1], - operands[1], mask)); - DONE; -}) - ;; Vector reverse elements for V16QI V8HI V4SI V4SF (define_expand "altivec_vreve2" [(set (match_operand:VEC_K 0 "register_operand" "=v") diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index 65bbc763eb0..e84ffb6a6db 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -3854,8 +3854,10 @@ rtx vec_tmp = operands[3]; int value; + /* Adjust index for LE element ordering, the below minuend 3 is computed by + GET_MODE_NUNITS (V4SImode) - 1. */ if (!BYTES_BIG_ENDIAN) - element = GEN_INT (GET_MODE_NUNITS (V4SImode) - 1 - INTVAL (element)); + element = GEN_INT (3 - INTVAL (element)); /* If the value is in the correct position, we can avoid doing the VSPLT instruction. */ @@ -4230,8 +4232,10 @@ rtx v4si_tmp = operands[3]; int value; + /* Adjust index for LE element ordering, the below minuend 3 is computed by + GET_MODE_NUNITS (V4SImode) - 1. */ if (!BYTES_BIG_ENDIAN) - element = GEN_INT (GET_MODE_NUNITS (V4SImode) - 1 - INTVAL (element)); + element = GEN_INT (3 - INTVAL (element)); /* If the value is in the correct position, we can avoid doing the VSPLT instruction. */ @@ -4273,8 +4277,10 @@ rtx df_tmp = operands[4]; int value; + /* Adjust index for LE element ordering, the below minuend 3 is computed by + GET_MODE_NUNITS (V4SImode) - 1. */ if (!BYTES_BIG_ENDIAN) - element = GEN_INT (GET_MODE_NUNITS (V4SImode) - 1 - INTVAL (element)); + element = GEN_INT (3 - INTVAL (element)); /* If the value is in the correct position, we can avoid doing the VSPLT instruction. */ @@ -4466,8 +4472,10 @@ { int ele = INTVAL (operands[4]); + /* Adjust index for LE element ordering, the below minuend 3 is computed by + GET_MODE_NUNITS (V4SFmode) - 1. */ if (!BYTES_BIG_ENDIAN) - ele = GET_MODE_NUNITS (V4SFmode) - 1 - ele; + ele = 3 - ele; operands[4] = GEN_INT (GET_MODE_SIZE (SFmode) * ele); return "xxinsertw %x0,%x2,%4";