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, testsuite] Fix for PR47440 - Use LCM for vzeroupper insertion


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]