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] |
Hi, I've prepared a patch for http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47440. It introduces a new phase which implements optimal replacing vzerouppers and vzeroall instructions using LCM technique. ChangeLog 2011-05-17 ?Vladimir Yakovlev vladimir.b.yakovlev@intel.com ? ? ? ?* gcc/config/i386/i386.c (block_info_def): Changed typedef. ? ? ? ?(FIRST_AVX256): New define. ? ? ? ?(LAST_AVX256): New define. ? ? ? ?(ANTIC_VZEROUPPER): New define. ? ? ? ?(AVAIL_VZEROUPPER): New define. ? ? ? ?(ANTIC_VZEROALL): New define. ? ? ? ?(AVAIL_VZEROALL): New define. ? ? ? ?(ENTRY_FAKE_VZEROUPPER): New define. ? ? ? ?(dead_vzeroupper): Added to enum call_avx256_state. ? ? ? ?(move_or_delete_vzeroupper_2): Deleted. ? ? ? ?(move_or_delete_vzeroupper_1): Deleted. ? ? ? ?(move_or_delete_vzeroupper): Deleted. ? ? ? ?(ix86_pre_alloc_aux_for_blocks): New routine. ? ? ? ?(ix86_pre_free_aux_for_blocks): New routine. ? ? ? ?(get_call_avx256_state): ?New routine. ? ? ? ?(set_call_avx256_state): New routine. ? ? ? ?(ix86_run_pre2): New routine. ? ? ? ?(ix86_can_be_csed): New routine. ? ? ? ?(pre_delete_insn): New routine. ? ? ? ?(pre_is_untic_insn): New routine. ? ? ? ?(pre_is_avail_insn): New routine. ? ? ? ?(ix86_pre_record_last_set_info): New routine. ? ? ? ?(pre_create_fake_vzeroupper): New routine. ? ? ? ?(ix86_pre_hash_scan_target): New routine. ? ? ? ?(ix86_pre_hash_scan_call): New routine. ? ? ? ?(ix86_pre_hash_entry_additional_scan): New routine. ? ? ? ?(ix86_pre_insert_fake_entry_vzeroupper): New routine. ? ? ? ?(ix86_pre_hash_exit_additional_scan): New routine. ? ? ? ?(ix86_pre_compute_transp): New routine. ? ? ? ?(ix86_pre_specific_deletion): New routine. ? ? ? ?(ix86_pre_occr_cleanup): New routine. ? ? ? ?(ix86_pre_process_insert_insn): New routine. ? ? ? ?(init_cumulative_args): Added initialization of new flags. ? ? ? ?(ix86_expand_epilogue): Changed condition of emitting vzeroupper. ? ? ? ?(ix86_split_call_vzeroupper): Added switch. ? ? ? ?(ix86_reorg): Removed call of move_or_delete_vzeroupper. ? ? ? ?(TARGET_RUN_PRE2_P): New define. ? ? ? ?(TARGET_CAN_BE_CSED_P): New define. ? ? ? ?(TARGET_PRE_ALLOC_AUX_FOR_BLOCKS_P): New define. ? ? ? ?(TARGET_PRE_FREE_AUX_FOR_BLOCKS_P): New define. ? ? ? ?(TARGET_HASH_SCAN_TARGET_P): New define. ? ? ? ?(TARGET_RECORD_LAST_SET_INFO_P): New define. ? ? ? ?(TARGET_HASH_SCAN_CALL_P): New define. ? ? ? ?(TARGET_HASH_ENTRY_ADDITIONAL_SCAN_P): New define. ? ? ? ?(TARGET_INSERT_FAKE_ENTRY_VZEROUPPER_P): New define. ? ? ? ?(TARGET_HASH_EXIT_ADDITIONAL_SCAN_P): New define. ? ? ? ?(TARGET_COMPUTE_TRANSP_P): New define. ? ? ? ?(TARGET_PRE_SPECIFIC_DELETION_P): New define. ? ? ? ?(TARGET_PRE_OCCR_CLEANUP_P): New define. ? ? ? ?(TARGET_PROCESS_INSERT_INSN_P): New define. ? ? ? ?* gcc/doc/tm.texi (TARGET_RUN_PRE2_P): New. ? ? ? ?(TARGET_CAN_BE_CSED_P): New. ? ? ? ?(TARGET_PRE_ALLOC_AUX_FOR_BLOCKS_P): New. ? ? ? ?(TARGET_PRE_FREE_AUX_FOR_BLOCKS_P): New. ? ? ? (TARGET_HASH_SCAN_TARGET_P): New. ? ? ? ?(TARGET_RECORD_LAST_SET_INFO_P): New. ? ? ? ?(TARGET_HASH_SCAN_CALL_P): New. ? ? ? ?(TARGET_HASH_ENTRY_ADDITIONAL_SCAN_P): New. ? ? ? ?(TARGET_INSERT_FAKE_ENTRY_VZEROUPPER_P): New. ? ? ? ?(TARGET_HASH_EXIT_ADDITIONAL_SCAN_P): New. ? ? ? ?(TARGET_COMPUTE_TRANSP_P): New. ? ? ? ?(TARGET_PRE_SPECIFIC_DELETION_P): New. ? ? ? ?(TARGET_PRE_OCCR_CLEANUP_P): New. ? ? ? ?(TARGET_PROCESS_INSERT_INSN_P): New. ? ? ? ?* gcc/doc/tm.texi.in (TARGET_RUN_PRE2_P): New. ? ? ? ?(TARGET_CAN_BE_CSED_P): New. ? ? ? ?(TARGET_PRE_ALLOC_AUX_FOR_BLOCKS_P): New. ? ? ? ?(TARGET_PRE_FREE_AUX_FOR_BLOCKS_P): New. ? ? ? ?(TARGET_HASH_SCAN_TARGET_P): New. ? ? ? ?(TARGET_RECORD_LAST_SET_INFO_P): New. ? ? ? ?(TARGET_HASH_SCAN_CALL_P): New. ? ? ? ?(TARGET_HASH_ENTRY_ADDITIONAL_SCAN_P): New. ? ? ? ?(TARGET_INSERT_FAKE_ENTRY_VZEROUPPER_P): New. ? ? ? ?(TARGET_HASH_EXIT_ADDITIONAL_SCAN_P): New. ? ? ? ?(TARGET_COMPUTE_TRANSP_P): New. ? ? ? ?(TARGET_PRE_SPECIFIC_DELETION_P): New. ? ? ? ?(TARGET_PRE_OCCR_CLEANUP_P): New. ? ? ? ?(TARGET_PROCESS_INSERT_INSN_P): New. ? ? ? ?* a/gcc/gcse.c (alloc_gcse_mem): Added code to run in PRE2. ? ? ? (free_gcse_mem): Likewise. ? ? ? ?(hash_scan_call): Likewise. ? ? ? ?(hash_scan_insn): Likewisei. ? ? ? ?(compute_hash_table_work): Likewise. ? ? ? ?(compute_transp): Likewise. ? ? ? ?(process_insert_insn): Likewise. ? ? ? ?(pre_edge_insert): Likewise. ? ? ? ?(pre_insert_copies): Likewise. ? ? ? ?(pre_delete): Likewise. ? ? ? ?(one_pre_gcse_pass): Changed n_basic_blocks check. ? ? ? ?(gate_rtl_pre2): New. ? ? ? ?(pass_rtl_pre2):Likewise. ? ? ? ?* gcc/passes.c (init_optimization_passes): Added new pass pass_rtl_pre2. ? ? ? ?* gcc/target.def (run_pre2_p): New. ? ? ? ?(can_be_csed_p): New. ? ? ? ?(pre_alloc_aux_for_blocks_p): New. ? ? ? ?(pre_free_aux_for_blocks_p): New. ? ? ? ?(hash_scan_target_p): New. ? ? ? ?(record_last_set_info_p): New. ? ? ? ?(hash_scan_call_p): New. ? ? ? ?(hash_entry_additional_scan_p): New. ? ? ? ?(insert_fake_entry_vzeroupper_p): New. ? ? ? ?(hash_exit_additional_scan_p): New. ? ? ? ?(compute_transp_p): New. ? ? ? ?(pre_specific_deletion_p): New. ? ? ? ?(pre_occr_cleanup_p): New. ? ? ? ?(process_insert_insn_p): New. ? ? ? ?* gcc/targhooks.c (default_bool_void): New. ? ? ? ?(default_can_be_csed_p): New. ? ? ? ?(default_hash_scan_target): New. ? ? ? ?(default_record_last_set_info): New. ? ? ? ?(default_hash_scan_call): New. ? ? ? ?(default_hash_entry_additional_scan): New. ? ? ? ?(default_hash_exit_additional_scan): New. ? ? ? ?(default_insert_fake_entry_vzeroupper): New. ? ? ? ?(default_compute_transp): New. ? ? ? ?(default_pre_specific_deletion): New. ? ? ? ?(default_pre_occr_cleanup): New. ? ? ? ?(default_process_insert_insn): New. ? ? ? ?* gcc/targhooks.h (default_bool_void): New routine declaration. ? ? ? ?(default_bool_void): Likewise. ? ? ? ?(default_can_be_csed_p): Likewise. ? ? ? ?(default_hash_scan_target): Likewise. ? ? ? ?(default_record_last_set_info): Likewise. ? ? ? ?(default_hash_scan_call): Likewise. ? ? ? ?(default_hash_entry_additional_scan): Likewise. ? ? ? ?(default_hash_exit_additional_scan): Likewise. ? ? ? ?(default_insert_fake_entry_vzeroupper): Likewise. ? ? ? ?(default_compute_transp): Likewise. ? ? ? ?(default_pre_specific_deletion): Likewise. ? ? ? ?(default_pre_occr_cleanup): Likewise. ? ? ? ?(default_process_insert_insn): Likewise. ? ? ? ?* gcc/timevar.def (TV_PRE2): New. ? ? ? ?* gcc/tree-pass.h (pass_rtl_pre2): New. testsuite/ChangeLog 2011-05-17 ?Vladimir Yakovlev vladimir.b.yakovlev@intel.com ? ? ? ?* gcc/testsuite/gcc.target/i386/avx-vzeroupper-4.c: Changed -O0 to -O2. ? ? ? ?* testsuite/gcc.target/i386/avx-vzeroupper-5.c: Likewise. ? ? ? ?* gcc/testsuite/gcc.target/i386/avx-vzeroupper-6.c: Likewise. ? ? ? ?* gcc/testsuite/gcc.target/i386/avx-vzeroupper-7.c: Likewise. ? ? ? ?* gcc/testsuite/gcc.target/i386/avx-vzeroupper-8.c: Likewise. ? ? ? ?* gcc/testsuite/gcc.target/i386/avx-vzeroupper-9.c: Likewise. ? ? ? ?* gcc/testsuite/gcc.target/i386/avx-vzeroupper-10.c: Likewise. ? ? ? ?* gcc/testsuite/gcc.target/i386/avx-vzeroupper-11.c: Likewise. ? ? ? ?* gcc/testsuite/gcc.target/i386/avx-vzeroupper-12.c: Likewise. ? ? ? ?* gcc/testsuite/gcc.target/i386/avx-vzeroupper-27.c: New. Bootstap and make check was performed. No new fails. Ok for trunk? Thanks, Vladimir
Attachment:
pr47440.gcc.patch
Description: Binary data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |