RE: Re: [PATCH v6] RISC-V: Implement RESOLVE_OVERLOADED_BUILTIN for RVV intrinsic
Thanks xuli for enabling this feature, we can update the CI of rvv-intrinsic-doc for overloaded API(s) after committed. Pan -Original Message- From: Li Xu Sent: Tuesday, October 31, 2023 7:37 PM To: juzhe.zh...@rivai.ai Cc: gcc-patches ; kito.cheng ; palmer Subject: Re: Re: [PATCH v6] RISC-V: Implement RESOLVE_OVERLOADED_BUILTIN for RVV intrinsic All overload and non-overload intrinsics have been tested successfully on gcc and g++. Thanks. > -原始邮件-发件人:"juzhe.zh...@rivai.ai" > 发送时间:2023-10-31 17:07:11 (星期二)收件人:"Li Xu" > , gcc-patches > 抄送:"kito.cheng" , palmer > , "Li Xu" 主题:Re: [PATCH v6] > RISC-V: Implement RESOLVE_OVERLOADED_BUILTIN for RVV intrinsic > > LGTM from my side. > > Give kito one more day to review it. > > Thanks for support this feature ! > > juzhe.zh...@rivai.ai > > From: Li Xu > Date: 2023-10-31 17:03 > To: gcc-patches > CC: kito.cheng; palmer; juzhe.zhong; xuli > Subject: [PATCH v6] RISC-V: Implement RESOLVE_OVERLOADED_BUILTIN for RVV > intrinsic > From: xuli > > Update in v6: > * Rename maybe_require_frm_p to may_require_frm_p. > * Rename maybe_require_vxrm_p to may_require_vxrm_p. > * Move may_require_frm_p and may_require_vxrm_p to function_base. > > Update in v5: > * Split has_vxrm_or_frm_p into maybe_require_frm_p and > maybe_require_vxrm_p. > * Adjust comments. > > Update in v4: > * Remove class function_resolver. > * Remove function get_non_overloaded_instance. > * Add overloaded hash traits for non-overloaded intrinsic. > * All overloaded intrinsics are implemented, and the tests pass. > > Update in v3: > > * Rewrite comment for overloaded function add. > * Move get_non_overloaded_instance to function_base. > > Update in v2: > > * Add get_non_overloaded_instance for function instance. > * Fix overload check for policy function. > * Enrich the test cases check. > > Original log: > > This patch would like add the framework to support the RVV overloaded > intrinsic API in riscv-xxx-xxx-gcc, like riscv-xxx-xxx-g++ did. > > However, it almost leverage the hook TARGET_RESOLVE_OVERLOADED_BUILTIN > with below steps. > > * Register overloaded functions. > * Add function_resolver for overloaded function resolving. > * Add resolve API for function shape with default implementation. > * Implement HOOK for navigating the overloaded API to non-overloaded API. > > gcc/ChangeLog: > > * config/riscv/riscv-c.cc (riscv_resolve_overloaded_builtin): New > function for the hook. > (riscv_register_pragmas): Register the hook. > * config/riscv/riscv-protos.h (resolve_overloaded_builtin): New decl. > * config/riscv/riscv-vector-builtins-bases.cc: New function impl. > * config/riscv/riscv-vector-builtins-shapes.cc (build_one): Register > overloaded function. > * config/riscv/riscv-vector-builtins.cc (struct > non_overloaded_registered_function_hasher): New hash table. > (function_builder::add_function): Add overloaded arg. > (function_builder::add_unique_function): Map overloaded function to > non-overloaded function. > (function_builder::add_overloaded_function): New API impl. > (registered_function::overloaded_hash): Calculate hash value. > (has_vxrm_or_frm_p): New function impl. > (non_overloaded_registered_function_hasher::hash): Ditto. > (non_overloaded_registered_function_hasher::equal): Ditto. > (handle_pragma_vector): Allocate space for hash table. > (resolve_overloaded_builtin): New function impl. > * config/riscv/riscv-vector-builtins.h > (function_base::may_require_frm_p): Ditto. > (function_base::may_require_vxrm_p): Ditto. > > gcc/testsuite/ChangeLog: > > * gcc.target/riscv/rvv/base/overloaded_rv32_vadd.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv32_vfadd.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv32_vget_vset.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv32_vloxseg2ei16.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv32_vmv.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv32_vreinterpret.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vadd.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vfadd.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vget_vset.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vloxseg2ei16.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vmv.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vreinterpret.c: New test.
Re: Re: [PATCH v6] RISC-V: Implement RESOLVE_OVERLOADED_BUILTIN for RVV intrinsic
All overload and non-overload intrinsics have been tested successfully on gcc and g++. Thanks. > -原始邮件-发件人:"juzhe.zh...@rivai.ai" > 发送时间:2023-10-31 17:07:11 (星期二)收件人:"Li Xu" > , gcc-patches > 抄送:"kito.cheng" , palmer > , "Li Xu" 主题:Re: [PATCH v6] > RISC-V: Implement RESOLVE_OVERLOADED_BUILTIN for RVV intrinsic > > LGTM from my side. > > Give kito one more day to review it. > > Thanks for support this feature ! > > juzhe.zh...@rivai.ai > > From: Li Xu > Date: 2023-10-31 17:03 > To: gcc-patches > CC: kito.cheng; palmer; juzhe.zhong; xuli > Subject: [PATCH v6] RISC-V: Implement RESOLVE_OVERLOADED_BUILTIN for RVV > intrinsic > From: xuli > > Update in v6: > * Rename maybe_require_frm_p to may_require_frm_p. > * Rename maybe_require_vxrm_p to may_require_vxrm_p. > * Move may_require_frm_p and may_require_vxrm_p to function_base. > > Update in v5: > * Split has_vxrm_or_frm_p into maybe_require_frm_p and > maybe_require_vxrm_p. > * Adjust comments. > > Update in v4: > * Remove class function_resolver. > * Remove function get_non_overloaded_instance. > * Add overloaded hash traits for non-overloaded intrinsic. > * All overloaded intrinsics are implemented, and the tests pass. > > Update in v3: > > * Rewrite comment for overloaded function add. > * Move get_non_overloaded_instance to function_base. > > Update in v2: > > * Add get_non_overloaded_instance for function instance. > * Fix overload check for policy function. > * Enrich the test cases check. > > Original log: > > This patch would like add the framework to support the RVV overloaded > intrinsic API in riscv-xxx-xxx-gcc, like riscv-xxx-xxx-g++ did. > > However, it almost leverage the hook TARGET_RESOLVE_OVERLOADED_BUILTIN > with below steps. > > * Register overloaded functions. > * Add function_resolver for overloaded function resolving. > * Add resolve API for function shape with default implementation. > * Implement HOOK for navigating the overloaded API to non-overloaded API. > > gcc/ChangeLog: > > * config/riscv/riscv-c.cc (riscv_resolve_overloaded_builtin): New > function for the hook. > (riscv_register_pragmas): Register the hook. > * config/riscv/riscv-protos.h (resolve_overloaded_builtin): New decl. > * config/riscv/riscv-vector-builtins-bases.cc: New function impl. > * config/riscv/riscv-vector-builtins-shapes.cc (build_one): Register > overloaded function. > * config/riscv/riscv-vector-builtins.cc (struct > non_overloaded_registered_function_hasher): New hash table. > (function_builder::add_function): Add overloaded arg. > (function_builder::add_unique_function): Map overloaded function to > non-overloaded function. > (function_builder::add_overloaded_function): New API impl. > (registered_function::overloaded_hash): Calculate hash value. > (has_vxrm_or_frm_p): New function impl. > (non_overloaded_registered_function_hasher::hash): Ditto. > (non_overloaded_registered_function_hasher::equal): Ditto. > (handle_pragma_vector): Allocate space for hash table. > (resolve_overloaded_builtin): New function impl. > * config/riscv/riscv-vector-builtins.h > (function_base::may_require_frm_p): Ditto. > (function_base::may_require_vxrm_p): Ditto. > > gcc/testsuite/ChangeLog: > > * gcc.target/riscv/rvv/base/overloaded_rv32_vadd.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv32_vfadd.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv32_vget_vset.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv32_vloxseg2ei16.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv32_vmv.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv32_vreinterpret.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vadd.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vfadd.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vget_vset.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vloxseg2ei16.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vmv.c: New test. > * gcc.target/riscv/rvv/base/overloaded_rv64_vreinterpret.c: New test. > * gcc.target/riscv/rvv/base/overloaded_vadd.h: New test. > * gcc.target/riscv/rvv/base/overloaded_vfadd.h: New test. > * gcc.target/riscv/rvv/base/overloaded_vget_vset.h: New test. > * gcc.target/riscv/rvv/base/overloaded_vloxseg2ei16.h: New test. > * gcc.target/riscv/rvv/base/overloaded_vmv.h: New test. &g
Re: [PATCH v6] RISC-V: Implement RESOLVE_OVERLOADED_BUILTIN for RVV intrinsic
LGTM from my side. Give kito one more day to review it. Thanks for support this feature ! juzhe.zh...@rivai.ai From: Li Xu Date: 2023-10-31 17:03 To: gcc-patches CC: kito.cheng; palmer; juzhe.zhong; xuli Subject: [PATCH v6] RISC-V: Implement RESOLVE_OVERLOADED_BUILTIN for RVV intrinsic From: xuli Update in v6: * Rename maybe_require_frm_p to may_require_frm_p. * Rename maybe_require_vxrm_p to may_require_vxrm_p. * Move may_require_frm_p and may_require_vxrm_p to function_base. Update in v5: * Split has_vxrm_or_frm_p into maybe_require_frm_p and maybe_require_vxrm_p. * Adjust comments. Update in v4: * Remove class function_resolver. * Remove function get_non_overloaded_instance. * Add overloaded hash traits for non-overloaded intrinsic. * All overloaded intrinsics are implemented, and the tests pass. Update in v3: * Rewrite comment for overloaded function add. * Move get_non_overloaded_instance to function_base. Update in v2: * Add get_non_overloaded_instance for function instance. * Fix overload check for policy function. * Enrich the test cases check. Original log: This patch would like add the framework to support the RVV overloaded intrinsic API in riscv-xxx-xxx-gcc, like riscv-xxx-xxx-g++ did. However, it almost leverage the hook TARGET_RESOLVE_OVERLOADED_BUILTIN with below steps. * Register overloaded functions. * Add function_resolver for overloaded function resolving. * Add resolve API for function shape with default implementation. * Implement HOOK for navigating the overloaded API to non-overloaded API. gcc/ChangeLog: * config/riscv/riscv-c.cc (riscv_resolve_overloaded_builtin): New function for the hook. (riscv_register_pragmas): Register the hook. * config/riscv/riscv-protos.h (resolve_overloaded_builtin): New decl. * config/riscv/riscv-vector-builtins-bases.cc: New function impl. * config/riscv/riscv-vector-builtins-shapes.cc (build_one): Register overloaded function. * config/riscv/riscv-vector-builtins.cc (struct non_overloaded_registered_function_hasher): New hash table. (function_builder::add_function): Add overloaded arg. (function_builder::add_unique_function): Map overloaded function to non-overloaded function. (function_builder::add_overloaded_function): New API impl. (registered_function::overloaded_hash): Calculate hash value. (has_vxrm_or_frm_p): New function impl. (non_overloaded_registered_function_hasher::hash): Ditto. (non_overloaded_registered_function_hasher::equal): Ditto. (handle_pragma_vector): Allocate space for hash table. (resolve_overloaded_builtin): New function impl. * config/riscv/riscv-vector-builtins.h (function_base::may_require_frm_p): Ditto. (function_base::may_require_vxrm_p): Ditto. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/overloaded_rv32_vadd.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv32_vfadd.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv32_vget_vset.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv32_vloxseg2ei16.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv32_vmv.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv32_vreinterpret.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vadd.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vfadd.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vget_vset.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vloxseg2ei16.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vmv.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vreinterpret.c: New test. * gcc.target/riscv/rvv/base/overloaded_vadd.h: New test. * gcc.target/riscv/rvv/base/overloaded_vfadd.h: New test. * gcc.target/riscv/rvv/base/overloaded_vget_vset.h: New test. * gcc.target/riscv/rvv/base/overloaded_vloxseg2ei16.h: New test. * gcc.target/riscv/rvv/base/overloaded_vmv.h: New test. * gcc.target/riscv/rvv/base/overloaded_vreinterpret.h: New test. Signed-off-by: Li Xu Co-Authored-By: Pan Li --- gcc/config/riscv/riscv-c.cc | 36 ++- gcc/config/riscv/riscv-protos.h | 1 + .../riscv/riscv-vector-builtins-bases.cc | 69 +- .../riscv/riscv-vector-builtins-shapes.cc | 1 + gcc/config/riscv/riscv-vector-builtins.cc | 226 +- gcc/config/riscv/riscv-vector-builtins.h | 27 ++- .../riscv/rvv/base/overloaded_rv32_vadd.c | 12 + .../riscv/rvv/base/overloaded_rv32_vfadd.c | 12 + .../rvv/base/overloaded_rv32_vget_vset.c | 7 + .../rvv/base/overloaded_rv32_vloxseg2ei16.c | 11 + .../riscv/rvv/base/overloaded_rv32_vmv.c | 10 + .../rvv/base/overloaded_rv32_vreinterpret.c | 10 + .../riscv/rvv/base/overloaded_rv64_vadd.c | 11 + .../riscv/rvv/base/overloaded_rv64_vfadd.c
[PATCH v6] RISC-V: Implement RESOLVE_OVERLOADED_BUILTIN for RVV intrinsic
From: xuli Update in v6: * Rename maybe_require_frm_p to may_require_frm_p. * Rename maybe_require_vxrm_p to may_require_vxrm_p. * Move may_require_frm_p and may_require_vxrm_p to function_base. Update in v5: * Split has_vxrm_or_frm_p into maybe_require_frm_p and maybe_require_vxrm_p. * Adjust comments. Update in v4: * Remove class function_resolver. * Remove function get_non_overloaded_instance. * Add overloaded hash traits for non-overloaded intrinsic. * All overloaded intrinsics are implemented, and the tests pass. Update in v3: * Rewrite comment for overloaded function add. * Move get_non_overloaded_instance to function_base. Update in v2: * Add get_non_overloaded_instance for function instance. * Fix overload check for policy function. * Enrich the test cases check. Original log: This patch would like add the framework to support the RVV overloaded intrinsic API in riscv-xxx-xxx-gcc, like riscv-xxx-xxx-g++ did. However, it almost leverage the hook TARGET_RESOLVE_OVERLOADED_BUILTIN with below steps. * Register overloaded functions. * Add function_resolver for overloaded function resolving. * Add resolve API for function shape with default implementation. * Implement HOOK for navigating the overloaded API to non-overloaded API. gcc/ChangeLog: * config/riscv/riscv-c.cc (riscv_resolve_overloaded_builtin): New function for the hook. (riscv_register_pragmas): Register the hook. * config/riscv/riscv-protos.h (resolve_overloaded_builtin): New decl. * config/riscv/riscv-vector-builtins-bases.cc: New function impl. * config/riscv/riscv-vector-builtins-shapes.cc (build_one): Register overloaded function. * config/riscv/riscv-vector-builtins.cc (struct non_overloaded_registered_function_hasher): New hash table. (function_builder::add_function): Add overloaded arg. (function_builder::add_unique_function): Map overloaded function to non-overloaded function. (function_builder::add_overloaded_function): New API impl. (registered_function::overloaded_hash): Calculate hash value. (has_vxrm_or_frm_p): New function impl. (non_overloaded_registered_function_hasher::hash): Ditto. (non_overloaded_registered_function_hasher::equal): Ditto. (handle_pragma_vector): Allocate space for hash table. (resolve_overloaded_builtin): New function impl. * config/riscv/riscv-vector-builtins.h (function_base::may_require_frm_p): Ditto. (function_base::may_require_vxrm_p): Ditto. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/overloaded_rv32_vadd.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv32_vfadd.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv32_vget_vset.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv32_vloxseg2ei16.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv32_vmv.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv32_vreinterpret.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vadd.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vfadd.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vget_vset.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vloxseg2ei16.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vmv.c: New test. * gcc.target/riscv/rvv/base/overloaded_rv64_vreinterpret.c: New test. * gcc.target/riscv/rvv/base/overloaded_vadd.h: New test. * gcc.target/riscv/rvv/base/overloaded_vfadd.h: New test. * gcc.target/riscv/rvv/base/overloaded_vget_vset.h: New test. * gcc.target/riscv/rvv/base/overloaded_vloxseg2ei16.h: New test. * gcc.target/riscv/rvv/base/overloaded_vmv.h: New test. * gcc.target/riscv/rvv/base/overloaded_vreinterpret.h: New test. Signed-off-by: Li Xu Co-Authored-By: Pan Li --- gcc/config/riscv/riscv-c.cc | 36 ++- gcc/config/riscv/riscv-protos.h | 1 + .../riscv/riscv-vector-builtins-bases.cc | 69 +- .../riscv/riscv-vector-builtins-shapes.cc | 1 + gcc/config/riscv/riscv-vector-builtins.cc | 226 +- gcc/config/riscv/riscv-vector-builtins.h | 27 ++- .../riscv/rvv/base/overloaded_rv32_vadd.c | 12 + .../riscv/rvv/base/overloaded_rv32_vfadd.c| 12 + .../rvv/base/overloaded_rv32_vget_vset.c | 7 + .../rvv/base/overloaded_rv32_vloxseg2ei16.c | 11 + .../riscv/rvv/base/overloaded_rv32_vmv.c | 10 + .../rvv/base/overloaded_rv32_vreinterpret.c | 10 + .../riscv/rvv/base/overloaded_rv64_vadd.c | 11 + .../riscv/rvv/base/overloaded_rv64_vfadd.c| 11 + .../rvv/base/overloaded_rv64_vget_vset.c | 6 + .../rvv/base/overloaded_rv64_vloxseg2ei16.c | 10 + .../riscv/rvv/base/overloaded_rv64_vmv.c | 10 + .../rvv/base/overloaded_rv64_vreinterpret.c | 9 + .../riscv/rvv/base/overloaded_vadd.h | 59 + .../ri