This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch] [x86_64] znver1 enablement


Hi Maintainers,

The attached patch enables -march=znver1 (AMD family 17h Zen processor).  

Costs and tunings are copied from bdver4,  but we will be adjusting them later for znver1. 
Also a basic scheduler description for znver1 is added and we will update this as we get more information.   

Testing : 
GCC bootstrap and gcc regression passes on x86_64-pc-linux-gnu.
GCC bootstrap passed with  "make BOOT_CFLAGS= -O2 -g -march=znver1 -mno-adx -mno-mwaitx -mno-clzero -mno-sha -mno-clflushopt -mno-rdseed" on x86_64-pc-linux-gnu .

Built SPEC2006 benchmarks with -march=znver1 and ran it on bdver4 machine.  

Wrf and Calculix failed to compile but looks like a general register allocation issue not restricted to -march=znver1.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67717

ChangeLog:
                * config.gcc (i[34567]86-*-linux* | ...): Add znver1.
                (case ${target}): Add znver1.
                * config/i386/cpuid.h(bit_CLZERO):  Define.
                * config/i386/driver-i386.c: (host_detect_local_cpu): Let
                -march=native recognize znver1 processors. 
                * config/i386/i386-c.c (ix86_target_macros_internal): Add
                znver1, clzero def_and_undef. 
                * config/i386/i386.c (struct processor_costs znver1_cost): New.
                (m_znver1): New definition.
                (m_AMD_MULTIPLE): Includes m_znver1.
                (processor_target_table): Add znver1 entry.
                (ix86_target_string) : Add clzero entry.
                (static const char *const cpu_names): Add znver1 entry.
                (ix86_option_override_internal): Add znver1 instruction sets.
                (PTA_CLZERO) :  New definition.
                (ix86_option_override_internal): Handle new clzerooption.
                (ix86_issue_rate): Add znver1.
                (ix86_adjust_cost): Add znver1.                
                (get_builtin_code_for_version): Set priority for PROCESSOR_ZNVER1.  
                (ia32_multipass_dfa_lookahead): Add znver1.
                (enum processor_model): Add M_AMDFAM17H_znver1.
                (struct _arch_names_table): Add M_AMDFAM17H_znver1.
                (has_dispatch): Add znver1.       
                * config/i386/i386.h (TARGET_znver1): New definition. 
                (TARGET_CLZERO): Define.
                (TARGET_CLZERO_P): Define.
                (struct ix86_size_cost): Add TARGET_ZNVER1.
                (enum processor_type): Add PROCESSOR_znver1.
                * config/i386/i386.md (define_attr "cpu"): Add znver1.
                (set_attr znver1_decode): New definitions for znver1.
                * config/i386/i386.opt (flag_dispatch_scheduler): Add znver1.
                (mclzero): New.
                * config/i386/mmx.md (set_attr znver1_decode): New definitions
                for znver1.
                * config/i386/sse.md (set_attr znver1_decode): Likewise.
                * config/i386/x86-tune.def:  Add znver1 tunings.
                * config/i386/znver1.md: Introduce znver1 cpu and include new md file.
                * gcc/doc/extend.texi: Add details about znver1.
                * gcc/doc/invoke.texi: Add details about znver1.

Ok for trunk?
                
Regards,
Venkat.


Attachment: enable.znver1.patch.txt
Description: enable.znver1.patch.txt


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]