From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpbgeu2.qq.com (smtpbgeu2.qq.com [18.194.254.142]) by sourceware.org (Postfix) with ESMTPS id DF4B33858D3C for ; Tue, 25 Jul 2023 12:58:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DF4B33858D3C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivai.ai Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivai.ai X-QQ-mid: bizesmtp85t1690289914tozsd8x5 Received: from rios-cad5.localdomain ( [58.60.1.11]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 25 Jul 2023 20:58:33 +0800 (CST) X-QQ-SSF: 01400000000000G0U000000A0000000 X-QQ-FEAT: mUIRx8rVmSZe9cauSDW/1m0mwPy/U3wXPTTmLMeBUYYPa4UbyP3SFwUPspCnE wviUVkoYPRTBtQUcvJKh/oXPH1Q12MmuCuUU5JAku0DxWvOPugQgtVkUpuW+m4oOwamQdMh aLq4nGxW5TM/Q59+yMExrxQ1avE2ZbgaKed1UvhcVps1AqQUVTft7eN8j850fMgahuS0Pjb oVib9RxmrW0ZMaePqlu1hu7x9zRI3kkZ71OJ7CKbQ9x/vS8PtgVkTAlub/OhrKewwqmR+9l eA+lGydhatr5UC70VW9BiO/rTfQV6/wYqS+8YYhT0I3uMg8/h3Lpne3I/O5L2qtC5GPI5fE WgT8k2wq/pC1JAqq4Il2yuwLLWj1Hfo2DdmPDIJh1r1quBuG0TEH6Kg5cDxHrcbJLNqG3ZY 3+onHtgE0U0= X-QQ-GoodBg: 2 X-BIZMAIL-ID: 7856403137210274099 From: juzhe.zhong@rivai.ai To: gcc-patches@gcc.gnu.org Cc: richard.sandiford@arm.com, rguenther@suse.de, Ju-Zhe Zhong Subject: [PATCH] internal-fn: Refine macro define of COND_* and COND_LEN_* internal functions Date: Tue, 25 Jul 2023 20:58:32 +0800 Message-Id: <20230725125832.1399590-1-juzhe.zhong@rivai.ai> X-Mailer: git-send-email 2.36.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:rivai.ai:qybglogicsvrgz:qybglogicsvrgz7a-one-0 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE,T_SPF_HELO_TEMPERROR,UPPERCASE_50_75 autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: From: Ju-Zhe Zhong Hi, Richard and Richi. Base on previous disscussions, we should make COND_* and COND_LEN_* consistent. So, this patch define these internal function together by these 2 wrappers: #ifndef DEF_INTERNAL_COND_FN #define DEF_INTERNAL_COND_FN(NAME, FLAGS, OPTAB, TYPE) \ DEF_INTERNAL_OPTAB_FN (COND_##NAME, FLAGS, cond_##OPTAB, cond_##TYPE) \ DEF_INTERNAL_OPTAB_FN (COND_LEN_##NAME, FLAGS, cond_len_##OPTAB, \ cond_len_##TYPE) #endif #ifndef DEF_INTERNAL_SIGNED_COND_FN #define DEF_INTERNAL_SIGNED_COND_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \ UNSIGNED_OPTAB, TYPE) \ DEF_INTERNAL_SIGNED_OPTAB_FN (COND_##NAME, FLAGS, SELECTOR, \ cond_##SIGNED_OPTAB, cond_##UNSIGNED_OPTAB, \ cond_##TYPE) \ DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_##NAME, FLAGS, SELECTOR, \ cond_len_##SIGNED_OPTAB, \ cond_len_##UNSIGNED_OPTAB, cond_len_##TYPE) #endif Bootstrap and Regression on X86 passed. Ok for trunk ? gcc/ChangeLog: * internal-fn.def (DEF_INTERNAL_COND_FN): New macro. (DEF_INTERNAL_SIGNED_COND_FN): Ditto. (COND_ADD): Remove. (COND_SUB): Ditto. (COND_MUL): Ditto. (COND_DIV): Ditto. (COND_MOD): Ditto. (COND_RDIV): Ditto. (COND_MIN): Ditto. (COND_MAX): Ditto. (COND_FMIN): Ditto. (COND_FMAX): Ditto. (COND_AND): Ditto. (COND_IOR): Ditto. (COND_XOR): Ditto. (COND_SHL): Ditto. (COND_SHR): Ditto. (COND_FMA): Ditto. (COND_FMS): Ditto. (COND_FNMA): Ditto. (COND_FNMS): Ditto. (COND_NEG): Ditto. (COND_LEN_ADD): Ditto. (COND_LEN_SUB): Ditto. (COND_LEN_MUL): Ditto. (COND_LEN_DIV): Ditto. (COND_LEN_MOD): Ditto. (COND_LEN_RDIV): Ditto. (COND_LEN_MIN): Ditto. (COND_LEN_MAX): Ditto. (COND_LEN_FMIN): Ditto. (COND_LEN_FMAX): Ditto. (COND_LEN_AND): Ditto. (COND_LEN_IOR): Ditto. (COND_LEN_XOR): Ditto. (COND_LEN_SHL): Ditto. (COND_LEN_SHR): Ditto. (COND_LEN_FMA): Ditto. (COND_LEN_FMS): Ditto. (COND_LEN_FNMA): Ditto. (COND_LEN_FNMS): Ditto. (COND_LEN_NEG): Ditto. (ADD): New macro define. (SUB): Ditto. (MUL): Ditto. (DIV): Ditto. (MOD): Ditto. (RDIV): Ditto. (MIN): Ditto. (MAX): Ditto. (FMIN): Ditto. (FMAX): Ditto. (AND): Ditto. (IOR): Ditto. (XOR): Ditto. (SHL): Ditto. (SHR): Ditto. (FMA): Ditto. (FMS): Ditto. (FNMA): Ditto. (FNMS): Ditto. (NEG): Ditto. --- gcc/internal-fn.def | 123 ++++++++++++++++++++------------------------ 1 file changed, 56 insertions(+), 67 deletions(-) diff --git a/gcc/internal-fn.def b/gcc/internal-fn.def index 04f3812326e..bf6825c5d00 100644 --- a/gcc/internal-fn.def +++ b/gcc/internal-fn.def @@ -34,10 +34,12 @@ along with GCC; see the file COPYING3. If not see UNSIGNED_OPTAB, TYPE) DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE) + DEF_INTERNAL_COND_FN (NAME, FLAGS, OPTAB, TYPE) + DEF_INTERNAL_SIGNED_COND_FN (NAME, FLAGS, OPTAB, TYPE) where NAME is the name of the function, FLAGS is a set of ECF_* flags and FNSPEC is a string describing functions fnspec. - + DEF_INTERNAL_OPTAB_FN defines an internal function that maps to a direct optab. The function should only be called with a given set of types if the associated optab is available for the modes @@ -74,7 +76,8 @@ along with GCC; see the file COPYING3. If not see - cond_len_unary: a conditional unary optab, such as cond_len_neg - cond_len_binary: a conditional binary optab, such as cond_len_add - - cond_len_ternary: a conditional ternary optab, such as cond_len_fma_rev + - cond_len_ternary: a conditional ternary optab, such as + cond_len_fma_rev DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that maps to one of two optabs, depending on the signedness of an input. @@ -106,6 +109,16 @@ along with GCC; see the file COPYING3. If not see These five internal functions will require two optabs each, a SIGNED_OPTAB and an UNSIGNED_OTPAB. + DEF_INTERNAL_COND_FN is a wrapper that defines 2 internal functions with + DEF_INTERNAL_OPTAB_FN: + - One is COND_* operations that are predicated by mask only. Such operations + make sense for both vectors and scalars. + - The other is COND_LEN_* operations that are predicated by mask and len + both. Such operations only make sense for vectors. + + DEF_INTERNAL_SIGNED_COND_FN is like DEF_INTERNAL_COND_FN but defines intenal + functions with DEF_INTERNAL_SIGNED_OPTAB_FN. + Each entry must have a corresponding expander of the form: void expand_NAME (gimple_call stmt) @@ -153,6 +166,24 @@ along with GCC; see the file COPYING3. If not see DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _ODD, FLAGS, SELECTOR, SOPTAB##_odd, UOPTAB##_odd, TYPE) #endif +#ifndef DEF_INTERNAL_COND_FN +#define DEF_INTERNAL_COND_FN(NAME, FLAGS, OPTAB, TYPE) \ + DEF_INTERNAL_OPTAB_FN (COND_##NAME, FLAGS, cond_##OPTAB, cond_##TYPE) \ + DEF_INTERNAL_OPTAB_FN (COND_LEN_##NAME, FLAGS, cond_len_##OPTAB, \ + cond_len_##TYPE) +#endif + +#ifndef DEF_INTERNAL_SIGNED_COND_FN +#define DEF_INTERNAL_SIGNED_COND_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \ + UNSIGNED_OPTAB, TYPE) \ + DEF_INTERNAL_SIGNED_OPTAB_FN (COND_##NAME, FLAGS, SELECTOR, \ + cond_##SIGNED_OPTAB, cond_##UNSIGNED_OPTAB, \ + cond_##TYPE) \ + DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_##NAME, FLAGS, SELECTOR, \ + cond_len_##SIGNED_OPTAB, \ + cond_len_##UNSIGNED_OPTAB, cond_len_##TYPE) +#endif + DEF_INTERNAL_OPTAB_FN (MASK_LOAD, ECF_PURE, maskload, mask_load) DEF_INTERNAL_OPTAB_FN (LOAD_LANES, ECF_CONST, vec_load_lanes, load_lanes) DEF_INTERNAL_OPTAB_FN (MASK_LOAD_LANES, ECF_PURE, @@ -220,71 +251,29 @@ DEF_INTERNAL_SIGNED_OPTAB_FN (MULHS, ECF_CONST | ECF_NOTHROW, first, DEF_INTERNAL_SIGNED_OPTAB_FN (MULHRS, ECF_CONST | ECF_NOTHROW, first, smulhrs, umulhrs, binary) -DEF_INTERNAL_OPTAB_FN (COND_ADD, ECF_CONST, cond_add, cond_binary) -DEF_INTERNAL_OPTAB_FN (COND_SUB, ECF_CONST, cond_sub, cond_binary) -DEF_INTERNAL_OPTAB_FN (COND_MUL, ECF_CONST, cond_smul, cond_binary) -DEF_INTERNAL_SIGNED_OPTAB_FN (COND_DIV, ECF_CONST, first, - cond_sdiv, cond_udiv, cond_binary) -DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MOD, ECF_CONST, first, - cond_smod, cond_umod, cond_binary) -DEF_INTERNAL_OPTAB_FN (COND_RDIV, ECF_CONST, cond_sdiv, cond_binary) -DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MIN, ECF_CONST, first, - cond_smin, cond_umin, cond_binary) -DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MAX, ECF_CONST, first, - cond_smax, cond_umax, cond_binary) -DEF_INTERNAL_OPTAB_FN (COND_FMIN, ECF_CONST, cond_fmin, cond_binary) -DEF_INTERNAL_OPTAB_FN (COND_FMAX, ECF_CONST, cond_fmax, cond_binary) -DEF_INTERNAL_OPTAB_FN (COND_AND, ECF_CONST | ECF_NOTHROW, - cond_and, cond_binary) -DEF_INTERNAL_OPTAB_FN (COND_IOR, ECF_CONST | ECF_NOTHROW, - cond_ior, cond_binary) -DEF_INTERNAL_OPTAB_FN (COND_XOR, ECF_CONST | ECF_NOTHROW, - cond_xor, cond_binary) -DEF_INTERNAL_OPTAB_FN (COND_SHL, ECF_CONST | ECF_NOTHROW, - cond_ashl, cond_binary) -DEF_INTERNAL_SIGNED_OPTAB_FN (COND_SHR, ECF_CONST | ECF_NOTHROW, first, - cond_ashr, cond_lshr, cond_binary) - -DEF_INTERNAL_OPTAB_FN (COND_FMA, ECF_CONST, cond_fma, cond_ternary) -DEF_INTERNAL_OPTAB_FN (COND_FMS, ECF_CONST, cond_fms, cond_ternary) -DEF_INTERNAL_OPTAB_FN (COND_FNMA, ECF_CONST, cond_fnma, cond_ternary) -DEF_INTERNAL_OPTAB_FN (COND_FNMS, ECF_CONST, cond_fnms, cond_ternary) - -DEF_INTERNAL_OPTAB_FN (COND_NEG, ECF_CONST, cond_neg, cond_unary) - -DEF_INTERNAL_OPTAB_FN (COND_LEN_ADD, ECF_CONST, cond_len_add, cond_len_binary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_SUB, ECF_CONST, cond_len_sub, cond_len_binary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_MUL, ECF_CONST, cond_len_smul, cond_len_binary) -DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_DIV, ECF_CONST, first, cond_len_sdiv, - cond_len_udiv, cond_len_binary) -DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_MOD, ECF_CONST, first, cond_len_smod, - cond_len_umod, cond_len_binary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_RDIV, ECF_CONST, cond_len_sdiv, cond_len_binary) -DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_MIN, ECF_CONST, first, cond_len_smin, - cond_len_umin, cond_len_binary) -DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_MAX, ECF_CONST, first, cond_len_smax, - cond_len_umax, cond_len_binary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_FMIN, ECF_CONST, cond_len_fmin, cond_len_binary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_FMAX, ECF_CONST, cond_len_fmax, cond_len_binary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_AND, ECF_CONST | ECF_NOTHROW, cond_len_and, - cond_len_binary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_IOR, ECF_CONST | ECF_NOTHROW, cond_len_ior, - cond_len_binary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_XOR, ECF_CONST | ECF_NOTHROW, cond_len_xor, - cond_len_binary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_SHL, ECF_CONST | ECF_NOTHROW, cond_len_ashl, - cond_len_binary) -DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_SHR, ECF_CONST | ECF_NOTHROW, first, - cond_len_ashr, cond_len_lshr, cond_len_binary) - -DEF_INTERNAL_OPTAB_FN (COND_LEN_FMA, ECF_CONST, cond_len_fma, cond_len_ternary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_FMS, ECF_CONST, cond_len_fms, cond_len_ternary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_FNMA, ECF_CONST, cond_len_fnma, - cond_len_ternary) -DEF_INTERNAL_OPTAB_FN (COND_LEN_FNMS, ECF_CONST, cond_len_fnms, - cond_len_ternary) - -DEF_INTERNAL_OPTAB_FN (COND_LEN_NEG, ECF_CONST, cond_len_neg, cond_len_unary) +DEF_INTERNAL_COND_FN (ADD, ECF_CONST, add, binary) +DEF_INTERNAL_COND_FN (SUB, ECF_CONST, sub, binary) +DEF_INTERNAL_COND_FN (MUL, ECF_CONST, smul, binary) +DEF_INTERNAL_SIGNED_COND_FN (DIV, ECF_CONST, first, sdiv, udiv, binary) +DEF_INTERNAL_SIGNED_COND_FN (MOD, ECF_CONST, first, smod, umod, binary) +DEF_INTERNAL_COND_FN (RDIV, ECF_CONST, sdiv, binary) +DEF_INTERNAL_SIGNED_COND_FN (MIN, ECF_CONST, first, smin, umin, binary) +DEF_INTERNAL_SIGNED_COND_FN (MAX, ECF_CONST, first, smax, umax, binary) +DEF_INTERNAL_COND_FN (FMIN, ECF_CONST, fmin, binary) +DEF_INTERNAL_COND_FN (FMAX, ECF_CONST, fmax, binary) +DEF_INTERNAL_COND_FN (AND, ECF_CONST | ECF_NOTHROW, and, binary) +DEF_INTERNAL_COND_FN (IOR, ECF_CONST | ECF_NOTHROW, ior, binary) +DEF_INTERNAL_COND_FN (XOR, ECF_CONST | ECF_NOTHROW, xor, binary) +DEF_INTERNAL_COND_FN (SHL, ECF_CONST | ECF_NOTHROW, ashl, binary) +DEF_INTERNAL_SIGNED_COND_FN (SHR, ECF_CONST | ECF_NOTHROW, first, ashr, lshr, + binary) + +DEF_INTERNAL_COND_FN (FMA, ECF_CONST, fma, ternary) +DEF_INTERNAL_COND_FN (FMS, ECF_CONST, fms, ternary) +DEF_INTERNAL_COND_FN (FNMA, ECF_CONST, fnma, ternary) +DEF_INTERNAL_COND_FN (FNMS, ECF_CONST, fnms, ternary) + +DEF_INTERNAL_COND_FN (NEG, ECF_CONST, neg, unary) DEF_INTERNAL_OPTAB_FN (RSQRT, ECF_CONST, rsqrt, unary) -- 2.36.3