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] |
Commited branch revision: 143950 This is the first step optimization for Atom, based on optimization guide http://download.intel.com/design/processor/manuals/248966.pdf Changes are mainly in following aspects: - Atom instruction selection. For example, using lea or add for add/sub operation. - Atom pipeline description, mostly in atom.md - X86_TUNE flags tuning for Atom 32-bits performance experiment on Atom box showed following ATOM_OPT/BASE_OPT speedup: CPU2000 INT: 1.03 (which means ATOM_OPT is 3% faster than BASE_OPT) CPU2000 FP: 1.06 EEMBC 1.1: 1.06 EEMBC 2.0 Consumer: 1.09 BASE_OPT=-m32 -O2 -mfpmath=sse -ffast-math -mssse3 ATOM_OPT=-m32 -O2 -mfpmath=sse -ffast-math -march=atom Passed all test. Based on trunk revision: 143853 There are two approaches to enable Atom specific optimizations. One is to use command line option -march=atom or -mtune=atom. Another is to use config option --with-arch=atom --with-cpu=atom to enable Atom as default. Thanks - Joey 2009-02-05 Joey Ye <joey.ye@intel.com> Xuepeng Guo <xuepeng.guo@intel.com> H.J. Lu <hongjiu.lu@intel.com> Atom pipeline model, tuning and insn selection. * rtlanal.c (reg_mentioned_by_mem_p_1): New function. (reg_mentioned_by_mem_p): New function. (reg_dep_by_addr_p): New function. * rtl.h (reg_mentioned_by_mem_p): Declare new function. (reg_dep_by_addr_p): Likewise. * config.gcc (atom): Add atom config options and target. * config/i386/i386.h (TARGET_ATOM): New target macro. (X86_TUNE_OPT_AGU): New tuning flag. (TARGET_OPT_AGU): New target option. (TARGET_CPU_DEFAULT_atom): New CPU default. (PROCESSOR_ATOM): New processor. * config/i386/i386-c.c (ix86_target_macros_internal): New case PROCESSOR_ATOM. (ix86_target_macros_internal): Likewise. * config/i386/i386-protos.h (ix86_lea_for_add_ok): Declare new function. (ix86_dep_by_shift_count): Likewise. (ix86_agi_dependent): Likewise. * config/i386/i386.c (atom_cost): New cost. (m_ATOM): New macro flag. (initial_ix86_tune_fe): Set m_ATOM. (x86_accumulate_outgoing_args): Likewise. (x86_arch_always_fancy_math_387): Likewise. (processor_target): Add Atom cost. (cpu_names): Add Atom cpu name. (override_options): Set Atom ISA. (LEA_SEARCH_THRESHOLD): New macro. (distance_non_agu_define): New function. (distance_agu_use): Likewise. (ix86_lea_for_add_ok): Likewise. (ix86_dep_by_shift_count): Likewise. (ix86_issue_rate): New case PROCESSOR_ATOM. (ix86_adjust_cost): Likewise. (ix86_agi_dependent): Discard attr_type argument. * config/i386/i386.md (cpu): Add new value "atom". (atom.md): Include atom.md. (use_carry, movu): New attr. (adddi3_carry_rex64): Set attr "use_carry". (addqi3_carry): Likewise. (addhi3_carry): Likewise. (addsi3_carry): Likewise. (*addsi3_carry_zext): Likewise. (subdi3_carry_rex64): Likewise. (subqi3_carry): Likewise. (subhi3_carry): Likewise. (subsi3_carry): Likewise. (x86_movdicc_0_m1_rex64): Likewise. (*x86_movdicc_0_m1_se): Likewise. (x86_movsicc_0_m1): Likewise. (*x86_movsicc_0_m1_se): Likewise. (*adddi_1_rex64): Emit add insn as much as possible. (*addsi_1): Likewise. (return_internal): Set atom_unit. (return_internal_long): Likewise. (return_pop_internal): Likewise. (*rcpsf2_sse): Set atom_sse_attr attr. (*qrt<mode>2_sse): Likewise. (*prefetch_sse): Likewise. * config/i386/sse.md (cpu): Set attr "atom_sse_attr". (*prefetch_sse_rex): Likewise. (sse_rcpv4sf2): Likewise. (sse_vmrcpv4sf2): Likewise. (sse_sqrtv4sf2): Likewise. (<sse>_vmsqrt<mode>2): Likewise. (sse_ldmxcsr): Likewise. (sse_stmxcsr): Likewise. (*sse_sfence): Likewise. (sse2_clflush): Likewise. (*sse2_mfence): Likewise. (*sse2_lfence): Likewise. (avx_movup<avxmodesuffixf2c><avxmodesuffix>): Set attr "movu". (<sse>_movup<ssemodesuffixf2c>): Likewise. (avx_movdqu<avxmodesuffix>): Likewise. (avx_lddqu<avxmodesuffix>): Likewise. (sse2_movntv2di): Change attr "type" to "ssemov". (sse2_movntsi): Likewise. (rsqrtv8sf2): Change attr "type" to "sseadd". (sse3_addsubv2df3): Set attr "atom_unit". (sse3_h<plusminus_insn>v4sf3): Likewise. (*sse2_pmaddwd): Likewise. (*vec_extractv2di_1_rex64): Likewise. (*vec_extractv2di_1_avx): Likewise. (sse2_psadbw): Likewise. (ssse3_phaddwv8hi3): Likewise. (ssse3_phaddwv4hi3): Likewise. (ssse3_phadddv4si3): Likewise. (ssse3_phadddv2si3): Likewise. (ssse3_phaddswv8hi3): Likewise. (ssse3_phaddswv4hi3): Likewise. (ssse3_phsubwv8hi3): Likewise. (ssse3_phsubwv4hi3): Likewise. (ssse3_phsubdv4si3): Likewise. (ssse3_phsubdv2si3): Likewise. (ssse3_phsubswv8hi3): Likewise. (ssse3_phsubswv4hi3): Likewise. (ssse3_pmaddubsw128): Likewise. (sse3_pmaddubsw: Likewise. (ssse3_palignrti): Likewise. (ssse3_palignrdi): Likewise. * config/i386/atom.md: New machine description for Atom. (atom_other): New insn reservation. (atom_other_2): Likewise. (atom_multi): Likewise. (atom_alu): Likewise. (atom_alu_mem): Likewise. (atom_alu_carry): Likewise. (atom_alu_carry_mem): Likewise. (atom_alu1): Likewise. (atom_alu1_mem): Likewise. (atom_negnot): Likewise. (atom_negnot_mem): Likewise. (atom_imov): Likewise. (atom_imov_mem): Likewise. (atom_imovx): Likewise. (atom_imovx_2): Likewise. (atom_imovx_3): Likewise. (atom_imovx_mem): Likewise. (atom_imovx_2_mem): Likewise. (atom_lea): Likewise. (atom_lea_2): Likewise. (atom_incdec): Likewise. (atom_incdec_mem): Likewise. (atom_ishift): Likewise. (atom_ishift_mem): Likewise. (atom_ishift_3): Likewise. (atom_ishift1): Likewise. (atom_ishift1_mem): Likewise. (atom_rotate): Likewise. (atom_rotate_mem): Likewise. (atom_rotate1): Likewise. (atom_rotate1_mem): Likewise. (atom_imul): Likewise. (atom_imul_mem): Likewise. (atom_imul_3): Likewise. (atom_idiv): Likewise. (atom_icmp): Likewise. (atom_icmp_mem): Likewise. (atom_test): Likewise. (atom_test_mem): Likewise. (atom_ibr): Likewise. (atom_ibr_2): Likewise. (atom_setcc): Likewise. (atom_setcc_2): Likewise. (atom_icmov): Likewise. (atom_icmov_mem): Likewise. (atom_push): Likewise. (atom_pop): Likewise. (atom_pop_2): Likewise. (atom_call): Likewise. (atom_callv): Likewise. (atom_leave): Likewise. (atom_str): Likewise. (atom_sselog): Likewise. (atom_sselog_mem): Likewise. (atom_sselog1): Likewise. (atom_sselog1_mem): Likewise. (atom_sseiadd): Likewise. (atom_sseiadd_2): Likewise. (atom_sseiadd_3): Likewise. (atom_sseiadd_4): Likewise. (atom_sseishft): Likewise. (atom_sseishft_2): Likewise. (atom_sseishft_3): Likewise. (atom_sseimul): Likewise. (atom_sse): Likewise. (atom_sse_2): Likewise. (atom_sse_3): Likewise. (atom_sse_4): Likewise. (atom_sse_5): Likewise. (atom_ssemov): Likewise. (atom_ssemov_2): Likewise. (atom_ssemov_3): Likewise. (atom_ssemov_4): Likewise. (atom_ssemov_5): Likewise. (atom_sseadd): Likewise. (atom_sseadd_mem): Likewise. (atom_sseadd_3): Likewise. (atom_ssemul): Likewise. (atom_ssemul_2): Likewise. (atom_ssecmp): Likewise. (atom_ssecomi): Likewise. (atom_ssecvt): Likewise. (atom_ssecvt_2): Likewise. (atom_ssecvt_3): Likewise. (atom_sseicvt): Likewise. (atom_sseicvt_2): Likewise. (atom_ssediv): Likewise. (atom_fmov): Likewise. (atom_fmov_mem): Likewise.
Attachment:
perf.txt
Description: perf.txt
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |