Hi Uros,

在 2026/6/16 15:40, Uros Bizjak 写道:
> On Tue, Jun 16, 2026 at 4:49 AM Kewen Lin <[email protected]> wrote:
>>
>> Hi,
>>
>> Authored-by: Xin Liu <[email protected]>
>>
>> Add c86-4g-m8 as a new HYGON Family 18h model 8 processor.  It
>> inherits the c86-4g-m7 ISA set and most tuning decisions, including
>> the same processor costs and scheduling model baseline.
>>
>> The patch wires c86-4g-m8 into the common x86 processor tables,
>> driver CPU detection, target macros, --with-arch/--with-cpu handling,
>> builtin CPU detection and documentation.  It also extends the c86-4g
>> tuning masks that already special-case c86-4g-m7 to cover c86-4g-m8.
>>
>> For scheduling, rename the shared scheduling description file from
>> gcc/config/i386/c86-4g-m7.md to gcc/config/i386/c86-4g-m7m8.md and
>> reuse the c86-4g-m7 scheduling reservations for c86-4g-m8 where the
>> latency and resource usage are the same.  Add separate c86-4g-m8
>> reservations for the few operations with different latency.  This patch
>> does not affect genautomata build time.
>>
>> Bootstrapped and regtested on a hygon c86-4g-m7 machine, as well as
>> a cfarm x86-64 machine.
>>
>> Is it ok for trunk?  Also ok to backport to gcc-16/gcc-15 after burn-in
>> time?
> 
> OK with some minor inconsistencies resolved (see inline), also OK for
> backports after some time in mainline.
> 
> Thanks,
> Uros.
> 
>>
>> BR,
>> Kewen
>> -----
>>
>> gcc/ChangeLog:
>>
>>         * common/config/i386/cpuinfo.h (get_hygon_cpu): Detect HYGON
>>         Family 18h model 8 as c86-4g-m8.
>>         * common/config/i386/i386-common.cc (processor_names): Add
>>         c86-4g-m8.
>>         (processor_alias_table): Likewise.
>>         * common/config/i386/i386-cpuinfo.h (enum processor_subtypes): Add
>>         HYGONFAM18H_C86_4G_M8.
>>         * config.gcc: Add c86-4g-m8 to supported x86 CPUs and handle
>>         c86_4g_m8 target triples.
>>         * config/i386/c86-4g-m7.md: Rename to ...
>>         * config/i386/c86-4g-m7m8.md: ... this and extend shared c86-4g-m7
>>         scheduling reservations to c86-4g-m8.
>>         (c86_4g_m8_imov_cwde): New reservation.
>>         (c86_4g_m7_imov_xchg): Add c86_4g_m8 to CPU attribute.
>>         (c86_4g_m7_imov_xchg_load): Ditto.
>>         (c86_4g_m7_imov): Ditto.
>>         (c86_4g_m7_imov_load): Ditto.
>>         (c86_4g_m7_imov_store): Ditto.
>>         (c86_4g_m7_push): Ditto.
>>         (c86_4g_m7_push_mem): Ditto.
>>         (c86_4g_m7_pop): Ditto.
>>         (c86_4g_m7_pop_mem): Ditto.
>>         (c86_4g_m7_imul): Ditto.
>>         (c86_4g_m7_imul_load): Ditto.
>>         (c86_4g_m7_idiv): Ditto.
>>         (c86_4g_m7_idiv_QI): Ditto.
>>         (c86_4g_m7_idiv_load): Ditto.
>>         (c86_4g_m7_idiv_QI_load): Ditto.
>>         (c86_4g_m7_insn): Ditto.
>>         (c86_4g_m7_insn_load): Ditto.
>>         (c86_4g_m7_insn_store): Ditto.
>>         (c86_4g_m7_insn2_store): Ditto.
>>         (c86_4g_m7_insn_both): Ditto.
>>         (c86_4g_m7_setcc): Ditto.
>>         (c86_4g_m7_setcc_load): Ditto.
>>         (c86_4g_m7_setcc_store): Ditto.
>>         (c86_4g_m7_alu1_double): Ditto.
>>         (c86_4g_m7_alu1_double_load): Ditto.
>>         (c86_4g_m7_alu1_vector): Ditto.
>>         (c86_4g_m7_alu1_vector_load): Ditto.
>>         (c86_4g_m7_alu1_direct): Ditto.
>>         (c86_4g_m7_alu1_direct_load): Ditto.
>>         (c86_4g_m7_call): Ditto.
>>         (c86_4g_m7_branch): Ditto.
>>         (c86_4g_m7_branch_load): Ditto.
>>         (c86_4g_m7_lea): Ditto.
>>         (c86_4g_m7_leave): Ditto.
>>         (c86_4g_m7_str): Ditto.
>>         (c86_4g_m7_str_load): Ditto.
>>         (c86_4g_m7_ieu_vector): Ditto.
>>         (c86_4g_m7_ieu_vector_load): Ditto.
>>         (c86_4g_m7_sse_insertimm): Ditto.
>>         (c86_4g_m7_sse_insert): Ditto.
>>         (c86_4g_m7_fp_cmov): Ditto.
>>         (c86_4g_m7_fp_mov_direct_load): Ditto.
>>         (c86_4g_m7_fp_mov_direct_store): Ditto.
>>         (c86_4g_m7_fp_mov_double_load): Ditto.
>>         (c86_4g_m7_fp_mov_double_store): Ditto.
>>         (c86_4g_m7_fp_mov_direct): Ditto.
>>         (c86_4g_m7_fp_sqrt): Ditto.
>>         (c86_4g_m7_fp_spc_direct): Ditto.
>>         (c86_4g_m7_fp_spc): Ditto.
>>         (c86_4g_m7_fp_op_mul): Ditto.
>>         (c86_4g_m7_fp_op_mul_load): Ditto.
>>         (c86_4g_m7_fp_op_imul_load): Ditto.
>>         (c86_4g_m7_fp_div): Ditto.
>>         (c86_4g_m7_fp_div_load): Ditto.
>>         (c86_4g_m7_fp_idiv_load): Ditto.
>>         (c86_4g_m7_fp_fsgn): Ditto.
>>         (c86_4g_m7_fp_fcmp): Ditto.
>>         (c86_4g_m7_fp_fcmp_load): Ditto.
>>         (c86_4g_m7_fp_mmx): Ditto.
>>         (c86_4g_m7_mmx_add_cmp): Ditto.
>>         (c86_4g_m7_mmx_add_cmp_load): Ditto.
>>         (c86_4g_m7_mmx_cvt): Ditto.
>>         (c86_4g_m7_mmx_cvt_load): Ditto.
>>         (c86_4g_m7_mmx_shift): Ditto.
>>         (c86_4g_m7_mmx_shift_load): Ditto.
>>         (c86_4g_m7_mmx_shift_avg): Ditto.
>>         (c86_4g_m7_mmx_shift_avg_load): Ditto.
>>         (c86_4g_m7_mmx_shift_sadbw): Ditto.
>>         (c86_4g_m7_mmx_shift_sadbw_load): Ditto.
>>         (c86_4g_m7_mmx_mov): Ditto.
>>         (c86_4g_m7_mmx_mov_store): Ditto.
>>         (c86_4g_m7_mmx_mov_load): Ditto.
>>         (c86_4g_m7_mmx_mul): Ditto.
>>         (c86_4g_m7_mmx_mul_load): Ditto.
>>         (c86_4g_m7_sse_pinsr_reg): Ditto.
>>         (c86_4g_m7_sse_pinsr_reg_load): Ditto.
>>         (c86_4g_m7_avx_vpinsr_reg): Ditto.
>>         (c86_4g_m7_avx_vpinsr_reg_load): Ditto.
>>         (c86_4g_m7_avx512_perm_xmm): Ditto.
>>         (c86_4g_m7_avx512_perm_xmm_opload): Ditto.
>>         (c86_4g_m7_avx512_permi2_ymm): Ditto.
>>         (c86_4g_m7_avx512_permi2_zmm): Ditto.
>>         (c86_4g_m7_avx512_permi2_ymm_load): Ditto.
>>         (c86_4g_m7_avx512_permi2_zmm_load): Ditto.
>>         (c86_4g_m7_avx512_perm_zmm_imm): Ditto.
>>         (c86_4g_m7_avx512_perm_zmm_imm_load): Ditto.
>>         (c86_4g_m7_avx512_perm_zmm_noimm): Ditto.
>>         (c86_4g_m7_sse_perm_zmm_noimm_load): Ditto.
>>         (c86_4g_m7_avx512_insertx_ymm): Ditto.
>>         (c86_4g_m7_avx512_insertx_ymem): Ditto.
>>         (c86_4g_m7_avx512_insertx_zxmm): Ditto.
>>         (c86_4g_m7_avx512_insertx_zxmem): Ditto.
>>         (c86_4g_m7_avx512_insertx_zymm): Ditto.
>>         (c86_4g_m7_avx512_insertx_zymem): Ditto.
>>         (c86_4g_m7_avx_insertx_ymm): Ditto.
>>         (c86_4g_m7_avx_insertx_ymem): Ditto.
>>         (c86_4g_m7_avx512_shuf_xymm): Ditto.
>>         (c86_4g_m7_avx512_shuf_zmm): Ditto.
>>         (c86_4g_m7_avx512_shuf_xymem): Ditto.
>>         (c86_4g_m7_avx512_shuf_zmem): Ditto.
>>         (c86_4g_m7_sselogic_xymm): Ditto.
>>         (c86_4g_m7_sselogic_xymm_load): Ditto.
>>         (c86_4g_m7_avx512_cmpestr): Ditto.
>>         (c86_4g_m7_avx512_cmpestr_load): Ditto.
>>         (c86_4g_m7_avx512_log): Ditto.
>>         (c86_4g_m7_avx512_log_load): Ditto.
>>         (c86_4g_m7_avx512_vdbpsadbw_xymm): Ditto.
>>         (c86_4g_m7_avx512_vdbpsadbw_xymem): Ditto.
>>         (c86_4g_m7_avx512_vdbpsadbw_zmm): Ditto.
>>         (c86_4g_m7_avx512_vdbpsadbw_zmem): Ditto.
>>         (c86_4g_m7_avx512_abs): Ditto.
>>         (c86_4g_m7_avx512_abs_load): Ditto.
>>         (c86_4g_m7_avx_sign): Ditto.
>>         (c86_4g_m7_avx_sign_load): Ditto.
>>         (c86_4g_m7_avx_blend): Ditto.
>>         (c86_4g_m7_avx_blend_load): Ditto.
>>         (c86_4g_m7_avx512_aes): Ditto.
>>         (c86_4g_m7_avx512_aes_load): Ditto.
>>         (c86_4g_m7_avx_aes): Ditto.
>>         (c86_4g_m7_avx_aes_load): Ditto.
>>         (c86_4g_m7_extr): Ditto.
>>         (c86_4g_m7_extr_store): Ditto.
>>         (c86_4g_m7_avx_ssecomi_comi): Ditto.
>>         (c86_4g_m7_avx_ssecomi_comi_load): Ditto.
>>         (c86_4g_m7_avx_ssecomi_test): Ditto.
>>         (c86_4g_m7_avx_ssecomi_test_load): Ditto.
>>         (c86_4g_m7_avx512_imul): Ditto.
>>         (c86_4g_m7_avx512_imul_mem): Ditto.
>>         (c86_4g_m7_avx_imul): Ditto.
>>         (c86_4g_m7_avx_imul_mem): Ditto.
>>         (c86_4g_m7_avx512_mov_vmov): Ditto.
>>         (c86_4g_m7_avx512_mov_vmov_store): Ditto.
>>         (c86_4g_m7_avx512_mov_vmov_load): Ditto.
>>         (c86_4g_m7_avx512_vpmovx_y): Ditto.
>>         (c86_4g_m7_avx512_vpmovx_y_load): Ditto.
>>         (c86_4g_m7_avx512_vpmovx_z): Ditto.
>>         (c86_4g_m7_avx512_vpmovx_z_load): Ditto.
>>         (c86_4g_m7_avx512_vpmovx_x): Ditto.
>>         (c86_4g_m7_avx512_vpmovx_x_load): Ditto.
>>         (c86_4g_m7_avx_vpmovx_xx): Ditto.
>>         (c86_4g_m7_avx_vpmovx_xx_load): Ditto.
>>         (c86_4g_m7_avx512_expand): Ditto.
>>         (c86_4g_m7_avx512_expand_load): Ditto.
>>         (c86_4g_m7_avx512_expand_z): Ditto.
>>         (c86_4g_m7_avx512_expand_z_load): Ditto.
>>         (c86_4g_m7_avx512_movnt_load): Ditto.
>>         (c86_4g_m7_avx512_movnt_store): Ditto.
>>         (c86_4g_m7_sse_movnt_store): Ditto.
>>         (c86_4g_m7_sse_movnt): Ditto.
>>         (c86_4g_m7_avx512_blendv): Ditto.
>>         (c86_4g_m7_avx512_blendv_load): Ditto.
>>         (c86_4g_m7_sse_mov2): Ditto.
>>         (c86_4g_m7_sse_mov2_load): Ditto.
>>         (c86_4g_m7_avx512_sseishft_aligr): Ditto.
>>         (c86_4g_m7_avx512_sseishft_aligr_load): Ditto.
>>         (c86_4g_m7_avx512_sseishft_vshift): Ditto.
>>         (c86_4g_m7_avx512_sseishft_vshift_load): Ditto.
>>         (c86_4g_m7_avx512_sseadd_maxmin): Ditto.
>>         (c86_4g_m7_avx512_sseadd_maxmin_load): Ditto.
>>         (c86_4g_m7_avx_sseadd_maxmin): Ditto.
>>         (c86_4g_m7_avx_sseadd_maxmin_load): Ditto.
>>         (c86_4g_m7_sse_sseadd_maxmin): Ditto.
>>         (c86_4g_m7_sse_sseadd_maxmin_load): Ditto.
>>         (c86_4g_m7_avx512_sseadd): Ditto.
>>         (c86_4g_m7_avx512_sseadd_load): Ditto.
>>         (c86_4g_m7_avx_sseadd_hplus): Ditto.
>>         (c86_4g_m7_avx_sseadd_hplus_load): Ditto.
>>         (c86_4g_m7_avx512_sseiadd_madd): Ditto.
>>         (c86_4g_m7_avx512_sseiadd_madd_mem): Ditto.
>>         (c86_4g_m7_avx_sseiadd_sadbw): Ditto.
>>         (c86_4g_m7_avx_sseiadd_sadbw_mem): Ditto.
>>         (c86_4g_m7_sse_sseiadd_sadbw): Ditto.
>>         (c86_4g_m7_sse_sseiadd_sadbw_mem): Ditto.
>>         (c86_4g_m7_sse_sseiadd_madd): Ditto.
>>         (c86_4g_m7_sse_sseiadd_madd_mem): Ditto.
>>         (c86_4g_m7_avx512_sseiadd_avg): Ditto.
>>         (c86_4g_m7_avx512_sseiadd_avg_load): Ditto.
>>         (c86_4g_m7_avx_sseiadd_hplus): Ditto.
>>         (c86_4g_m7_avx_sseiadd_hplus_load): Ditto.
>>         (c86_4g_m7_sse_sseiadd_hplus): Ditto.
>>         (c86_4g_m7_sse_sseiadd_hplus_load): Ditto.
>>         (c86_4g_m8_avx512_ssemul): New reservation.
>>         (c86_4g_m8_avx512_ssemul_load): Ditto.
>>         (c86_4g_m7_avx512_ssediv_x): Add c86_4g_m8 to CPU attribute.
>>         (c86_4g_m7_avx512_ssediv_xmem): Ditto.
>>         (c86_4g_m7_avx512_ssediv_y): Ditto.
>>         (c86_4g_m7_avx512_ssediv_ymem): Ditto.
>>         (c86_4g_m7_avx512_ssediv_z): Ditto.
>>         (c86_4g_m7_avx512_ssediv_zmem): Ditto.
>>         (c86_4g_m7_avx512_ssecmp): Ditto.
>>         (c86_4g_m7_avx512_ssecmp_load): Ditto.
>>         (c86_4g_m7_avx512_ssecmp_z): Ditto.
>>         (c86_4g_m7_avx512_ssecmp_z_load): Ditto.
>>         (c86_4g_m7_avx512_ssecmp_vp): Ditto.
>>         (c86_4g_m7_avx512_ssecmp_vp_load): Ditto.
>>         (c86_4g_m7_avx512_ssecmp_vp_z): Ditto.
>>         (c86_4g_m7_avx512_ssecmp_vp_z_load): Ditto.
>>         (c86_4g_m7_avx_ssecmp_vp): Ditto.
>>         (c86_4g_m7_avx_ssecmp_vp_load): Ditto.
>>         (c86_4g_m7_avx512_ssecmp_test): Ditto.
>>         (c86_4g_m7_avx512_ssecmp_test_load): Ditto.
>>         (c86_4g_m7_avx512_ssecvt_xy): Ditto.
>>         (c86_4g_m7_avx512_ssecvt_xy_load): Ditto.
>>         (c86_4g_m7_avx512_ssecvt_y_z): Ditto.
>>         (c86_4g_m7_avx512_ssecvt_y_z_load): Ditto.
>>         (c86_4g_m7_avx512_ssecvt_z): Ditto.
>>         (c86_4g_m7_avx512_ssecvt_z_load): Ditto.
>>         (c86_4g_m7_avx_ssecvt): Ditto.
>>         (c86_4g_m7_avx_ssecvt_load): Ditto.
>>         (c86_4g_m7_sse_ssecvt_pspi): Ditto.
>>         (c86_4g_m7_sse_ssecvt_pspi_load): Ditto.
>>         (c86_4g_m7_sse_ssecvt_pi): Ditto.
>>         (c86_4g_m7_sse_ssecvt_pi_load): Ditto.
>>         (c86_4g_m8_avx512_muladd): New reservation.
>>         (c86_4g_m8_avx512_muladd_load): Ditto.
>>         (c86_4g_m7_avx512_muladd_madd): Add c86_4g_m8 to CPU attribute.
>>         (c86_4g_m7_avx512_muladd_madd_load): Ditto.
>>         (c86_4g_m7_avx512_sse_range): Ditto.
>>         (c86_4g_m7_avx512_sse_range_load): Ditto.
>>         (c86_4g_m7_avx512_sse_conflict_x): Ditto.
>>         (c86_4g_m7_avx512_sse_conflict_x_load): Ditto.
>>         (c86_4g_m7_avx512_sse_conflict_y): Ditto.
>>         (c86_4g_m7_avx512_sse_conflict_y_load): Ditto.
>>         (c86_4g_m7_avx512_sse_conflict_z): Ditto.
>>         (c86_4g_m7_avx512_sse_conflict_z_load): Ditto.
>>         (c86_4g_m7_avx512_sse_class): Ditto.
>>         (c86_4g_m7_avx512_sse_class_load): Ditto.
>>         (c86_4g_m7_avx512_sse_class_z): Ditto.
>>         (c86_4g_m7_avx512_sse_class_z_load): Ditto.
>>         (c86_4g_m7_avx_sse): Ditto.
>>         (c86_4g_m7_avx_sse_load): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_sf_x): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_sf_xload): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_sf_y): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_sf_yload): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_sf_z): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_sf_zload): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_df_x): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_df_xload): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_df_y): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_df_yload): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_df_z): Ditto.
>>         (c86_4g_m7_avx512_sse_sqrt_df_zload): Ditto.
>>         (c86_4g_m7_avx512_msklog): Ditto.
>>         (c86_4g_m7_avx512_msklog_vector): Ditto.
>>         (c86_4g_m7_avx512_mskmov_reg_k): Ditto.
>>         (c86_4g_m7_avx512_mskmov_xy_k): Ditto.
>>         (c86_4g_m7_avx512_mskmov_z_k): Ditto.
>>         (c86_4g_m7_avx512_mskmov_k_k): Ditto.
>>         (c86_4g_m7_avx512_mskmov_k_reg): Ditto.
>>         (c86_4g_m7_avx512_mskmov_k_m): Ditto.
>>         * config/i386/driver-i386.cc (host_detect_local_cpu): Detect
>>         c86-4g-m8.
>>         * config/i386/i386-c.cc (ix86_target_macros_internal): Define
>>         c86-4g-m8 arch and tune macros.
>>         * config/i386/i386-options.cc (m_C86_4G_M8): New macro.
>>         (m_C86_4G): Include m_C86_4G_M8.
>>         (processor_cost_table): Add c86_4g_m8_cost.
>>         * config/i386/i386.cc (ix86_reassociation_width): Handle
>>         PROCESSOR_C86_4G_M8.
>>         * config/i386/i386.h (enum processor_type): Add
>>         PROCESSOR_C86_4G_M8.
>>         (PTA_C86_4G_M8): New.
>>         * config/i386/i386.md: Add c86_4g_m8 to cpu attribute.
>>         * config/i386/x86-tune-costs.h (c86_4g_m8_cost): New.
>>         * config/i386/x86-tune-sched.cc (ix86_issue_rate): Handle
>>         PROCESSOR_C86_4G_M8.
>>         (ix86_adjust_cost): Likewise.
>>         * config/i386/x86-tune.def (X86_TUNE_USE_SCATTER_2PARTS): Include
>>         m_C86_4G_M8.
>>         (X86_TUNE_USE_SCATTER_4PARTS): Likewise.
>>         (X86_TUNE_USE_SCATTER_8PARTS): Likewise.
>>         (X86_TUNE_SSE_REDUCTION_PREFER_PSHUF): Likewise.
>>         (X86_TUNE_AVX512_SPLIT_REGS): Likewise.
>>         (X86_TUNE_AVX512_AVOID_VEC_PERM): Likewise.
>>         (X86_TUNE_AVX512_MOVE_BY_PIECES): Likewise.
>>         (X86_TUNE_AVX512_MASKED_EPILOGUES): Likewise.
>>         * doc/extend.texi: Document c86-4g-m8 for __builtin_cpu_is.
>>         * doc/invoke.texi: Document c86-4g-m8.
>>
>> gcc/testsuite/ChangeLog:
>>
>>         * g++.target/i386/mv33.C: Add c86-4g-m8 target clone test.
>>         * gcc.target/i386/funcspec-56.inc: Add c86-4g-m8 arch and tune
>>         target attribute tests.
>>
>> Signed-off-by: Xin Liu <[email protected]>
>> ---
>>  gcc/common/config/i386/cpuinfo.h              |   6 +
>>  gcc/common/config/i386/i386-common.cc         |   6 +-
>>  gcc/common/config/i386/i386-cpuinfo.h         |   1 +
>>  gcc/config.gcc                                |  10 +-
>>  .../i386/{c86-4g-m7.md => c86-4g-m7m8.md}     | 544 ++++++++++--------
>>  gcc/config/i386/driver-i386.cc                |   7 +-
>>  gcc/config/i386/i386-c.cc                     |   7 +
>>  gcc/config/i386/i386-options.cc               |   7 +-
>>  gcc/config/i386/i386.cc                       |   3 +-
>>  gcc/config/i386/i386.h                        |   2 +
>>  gcc/config/i386/i386.md                       |   4 +-
>>  gcc/config/i386/x86-tune-costs.h              |   2 +
>>  gcc/config/i386/x86-tune-sched.cc             |   2 +
>>  gcc/config/i386/x86-tune.def                  |  18 +-
>>  gcc/doc/extend.texi                           |   3 +
>>  gcc/doc/invoke.texi                           |   9 +
>>  gcc/testsuite/g++.target/i386/mv33.C          |   6 +
>>  gcc/testsuite/gcc.target/i386/funcspec-56.inc |   2 +
>>  18 files changed, 369 insertions(+), 270 deletions(-)
>>  rename gcc/config/i386/{c86-4g-m7.md => c86-4g-m7m8.md} (84%)
>>
>> diff --git a/gcc/common/config/i386/cpuinfo.h 
>> b/gcc/common/config/i386/cpuinfo.h
>> index 62e9210b067..f59090c8cde 100644
>> --- a/gcc/common/config/i386/cpuinfo.h
>> +++ b/gcc/common/config/i386/cpuinfo.h
>> @@ -383,6 +383,12 @@ get_hygon_cpu (struct __processor_model *cpu_model,
>>           CHECK___builtin_cpu_is ("c86-4g-m7");
>>           cpu_model->__cpu_subtype = HYGONFAM18H_C86_4G_M7;
>>         }
>> +      else if (model == 0x8)
> 
> This condition is inconsistent with the condition in driver-i386.cc, where
> 
> else if (model >= 8) // open-ended
>    processor = PROCESSOR_C86_4G_M8;
> 
> I think this should be (model >= 0x8) so a hypothetical model 9 would
> get m8 tuning.

As the else if hunk has a CHECK for exact m8, it was intentional to keep
the checking for "== 8" only.  Does it sound reasonable?

> 
>> +       {
>> +         cpu = "c86-4g-m8";
>> +         CHECK___builtin_cpu_is ("c86-4g-m8");
>> +         cpu_model->__cpu_subtype = HYGONFAM18H_C86_4G_M8;
>> +       }
>>        break;
>>      default:
>>        break;
>> diff --git a/gcc/common/config/i386/i386-common.cc 
>> b/gcc/common/config/i386/i386-common.cc
>> index 1dd9819c309..effc570aca1 100644
>> --- a/gcc/common/config/i386/i386-common.cc
>> +++ b/gcc/common/config/i386/i386-common.cc
>> @@ -2208,7 +2208,8 @@ const char *const processor_names[] =
>>    "znver6",
>>    "c86-4g-m4",
>>    "c86-4g-m6",
>> -  "c86-4g-m7"
>> +  "c86-4g-m7",
>> +  "c86-4g-m8"
>>  };
>>
>>  /* Guarantee that the array is aligned with enum processor_type.  */
>> @@ -2485,6 +2486,9 @@ const pta processor_alias_table[] =
>>    {"c86-4g-m7", PROCESSOR_C86_4G_M7, CPU_C86_4G_M7,
>>      PTA_C86_4G_M7,
>>      M_CPU_SUBTYPE (HYGONFAM18H_C86_4G_M7), P_PROC_AVX512F},
>> +  {"c86-4g-m8", PROCESSOR_C86_4G_M8, CPU_C86_4G_M8,
>> +    PTA_C86_4G_M8,
>> +    M_CPU_SUBTYPE (HYGONFAM18H_C86_4G_M8), P_PROC_AVX512F},
>>
>>    {"generic", PROCESSOR_GENERIC, CPU_GENERIC,
>>      PTA_64BIT
>> diff --git a/gcc/common/config/i386/i386-cpuinfo.h 
>> b/gcc/common/config/i386/i386-cpuinfo.h
>> index 5407d9d9eba..944b585dd57 100644
>> --- a/gcc/common/config/i386/i386-cpuinfo.h
>> +++ b/gcc/common/config/i386/i386-cpuinfo.h
>> @@ -113,6 +113,7 @@ enum processor_subtypes
>>    HYGONFAM18H_C86_4G_M4,
>>    HYGONFAM18H_C86_4G_M6,
>>    HYGONFAM18H_C86_4G_M7,
>> +  HYGONFAM18H_C86_4G_M8,
>>    CPU_SUBTYPE_MAX
>>  };
>>
>> diff --git a/gcc/config.gcc b/gcc/config.gcc
>> index fabd5f75f96..fb4cdc0a475 100644
>> --- a/gcc/config.gcc
>> +++ b/gcc/config.gcc
>> @@ -763,7 +763,7 @@ sapphirerapids alderlake rocketlake eden-x2 nano 
>> nano-1000 nano-2000 nano-3000 \
>>  nano-x2 eden-x4 nano-x4 lujiazui yongfeng shijidadao x86-64 x86-64-v2 \
>>  x86-64-v3 x86-64-v4 sierraforest graniterapids graniterapids-d grandridge \
>>  arrowlake arrowlake-s clearwaterforest pantherlake diamondrapids novalake \
>> -c86-4g-m4 c86-4g-m6 c86-4g-m7 native"
>> +c86-4g-m4 c86-4g-m6 c86-4g-m7 c86-4g-m8 native"
>>
>>  # Additional x86 processors supported by --with-cpu=.  Each processor
>>  # MUST be separated by exactly one space.
>> @@ -4009,6 +4009,10 @@ case ${target} in
>>         arch=c86-4g-m7
>>         cpu=c86-4g-m7
>>         ;;
>> +      c86_4g_m8-*)
>> +       arch=c86-4g-m8
>> +       cpu=c86-4g-m8
>> +       ;;
>>        *)
>>         arch=pentiumpro
>>         cpu=generic
>> @@ -4123,6 +4127,10 @@ case ${target} in
>>         arch=c86-4g-m7
>>         cpu=c86-4g-m7
>>         ;;
>> +      c86_4g_m8-*)
>> +       arch=c86-4g-m8
>> +       cpu=c86-4g-m8
>> +       ;;
>>        *)
>>         arch=x86-64
>>         cpu=generic
>> diff --git a/gcc/config/i386/c86-4g-m7.md b/gcc/config/i386/c86-4g-m7m8.md
>> similarity index 84%
>> rename from gcc/config/i386/c86-4g-m7.md
>> rename to gcc/config/i386/c86-4g-m7m8.md
>> index 9c7cfc25c37..0be1680df82 100644
>> --- a/gcc/config/i386/c86-4g-m7.md
>> +++ b/gcc/config/i386/c86-4g-m7m8.md
>> @@ -17,7 +17,7 @@
>>  ;; <http://www.gnu.org/licenses/>.
>>  ;;
>>
>> -;; HYGON c86-4g-m7 Scheduling
>> +;; HYGON c86-4g-m7/m8 Scheduling
>>  ;; Modeling automatons for decoders, integer execution pipes,
>>  ;; AGU pipes, branch, floating point execution, fp store units,
>>  ;; integer and floating point dividers.  Split fpu1 and fpu3
>> @@ -112,15 +112,18 @@ (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x15" 
>> "(c86-4g-m7-fp1fdiv1x4,c86
>>  (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x18" 
>> "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*18)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*18)")
>>
>>  ;; IMOV/IMOVX
>> +
>> +;; Some reservations keep the historical "m7" naming, while their CPU
>> +;; attributes include both m7 and m8.
>>  (define_insn_reservation "c86_4g_m7_imov_xchg" 1
>> -                       (and (eq_attr "cpu" "c86_4g_m7")
>> +                       (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
>>                              (and (eq_attr "type" "imov")
>>                                   (and (eq_attr "c86_decode" "vector")
>>                                        (eq_attr "memory" "none"))))
>>                          "c86-4g-m7-vector")
>>
>>  (define_insn_reservation "c86_4g_m7_imov_xchg_load" 5
>> -                       (and (eq_attr "cpu" "c86_4g_m7")
>> +                       (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
>>                              (and (eq_attr "type" "imov")
>>                                   (and (eq_attr "c86_decode" "vector")
>>                                        (eq_attr "memory" "!none"))))
>> @@ -133,22 +136,29 @@ (define_insn_reservation "c86_4g_m7_imovx_cwde" 2
>>                                        (eq_attr "memory" "none"))))
>>                          "c86-4g-m7-direct,c86-4g-m7-ieu")
>>
>> +(define_insn_reservation "c86_4g_m8_imov_cwde" 1
> 
> Should this new reservation be named "..._imovx_cwde" as is the case
> with "c86_4g_m7_imovx_cwde"?

Yes, thanks for catching!

BR,
Kewen

Reply via email to