Commit Graph

2953 Commits

Author SHA1 Message Date
Jakub Jelinek bd2c62704b re PR translation/79019 (translatable string typo in cif-code.def:141)
PR translation/79019
	PR translation/79020
	* params.def (PARAM_INLINE_MIN_SPEEDUP,
	PARAM_IPA_CP_SINGLE_CALL_PENALTY,
	PARAM_USE_AFTER_SCOPE_DIRECT_EMISSION_THRESHOLD): Fix typos
	in descriptions.
	* config/avr/avr.opt (maccumulate-args): Likewise.
	* config/msp430/msp430.opt (mwarn-mcu): Likewise.
	* common.opt (freport-bug): Likewise.
	* cif-code.def (CIF_FINAL_ERROR): Likewise.
	* doc/invoke.texi (ipa-cp-single-call-penalty): Likewise.
	* config/s390/s390.c (s390_invalid_binary_op): Fix spelling in
	translatable string.
	* config/i386/i386.c (function_value_32): Likewise.
	* config/nios2/nios2.c (nios2_valid_target_attribute_rec): Likewise.
	* config/msp430/msp430.c (msp430_option_override, msp430_attr):
	Likewise.
	* config/msp430/driver-msp430.c (msp430_select_hwmult_lib): Likewise.
	* common/config/msp430/msp430-common.c (msp430_handle_option):
	Likewise.
	* symtab.c (symtab_node::verify_base): Likewise.
	* opts.c (set_debug_level): Likewise.
	* tree.c (verify_type_variant): Likewise.  Fix typo in comment.
	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin): Add
	missing whitespace to translatable strings.
	* config/avr/avr.md (bswapsi2): Fix typo in comment.
	* config/sh/superh.h: Likewise.
	* config/i386/xopintrin.h: Likewise.
	* config/i386/znver1.md: Likewise.
	* config/rs6000/rs6000.c (struct rs6000_opt_mask): Likewise.
	* ipa-inline-analysis.c (compute_inline_parameters): Likewise.
	* double-int.h (struct double_int): Likewise.
	* double-int.c (div_and_round_double): Likewise.
	* wide-int.cc: Likewise.
	* tree-ssa.c (non_rewritable_mem_ref_base): Likewise.
	* tree-ssa-sccvn.c (vn_reference_lookup_3): Likewise.
	* cfgcleanup.c (crossjumps_occured): Renamed to ...
	(crossjumps_occurred): ... this.
	(try_crossjump_bb, try_head_merge_bb, try_optimize_cfg, cleanup_cfg):
	Adjust all uses.
cp/
	* semantics.c (finish_omp_clauses): Add missing whitespace to
	translatable strings.
	* cp-cilkplus.c (cpp_validate_cilk_plus_loop_aux): Fix comment typo.
lto/
	* lto-symtab.c (lto_symtab_merge_symbols): Fix comment typo.
fortran/
	* decl.c (attr_decl1): Fix spelling in translatable string.
	* intrinsic.texi: Fix spelling - invokation -> invocation.
	* lang.opt (faggressive-function-elimination, gfc_convert): Fix
	typos in descriptions.
	* openmp.c (resolve_omp_clauses): Add missing whitespace to
	translatable strings.
c-family/
	* c.opt (Wnormalized=): Fix typo in description.
testsuite/
	* c-c++-common/goacc/host_data-2.c (f): Adjust expected spelling of
	diagnostics.
	* gfortran.dg/initialization_17.f90: Likewise.

From-SVN: r244245
2017-01-09 22:48:33 +01:00
David Malcolm 51b861137e Introduce RTL function reader
This is the combination of these patches:
- [8a/9] Introduce class function_reader (v8)
- Add ASSERT_RTX_PTR_EQ
- [8b/9] Add target-independent selftests of RTL function reader (v2)
- [8c/9] Add aarch64-specific selftests for RTL function reader (v2)
- [8d/9] Add x86_64-specific selftests for RTL function reader (v2)

gcc/ChangeLog:
	* Makefile.in (OBJS): Add read-md.o, read-rtl.o,
	read-rtl-function.o, and selftest-rtl.o.
	* config/aarch64/aarch64.c: Include selftest.h and
	selftest-rtl.h.
	(selftest::aarch64_test_loading_full_dump): New function.
	(selftest::aarch64_run_selftests): New function.
	(TARGET_RUN_TARGET_SELFTESTS): Wire it up to
	selftest::aarch64_run_selftests.
	* config/i386/i386.c
	(selftest::ix86_test_loading_dump_fragment_1): New function.
	(selftest::ix86_test_loading_call_insn): New function.
	(selftest::ix86_test_loading_full_dump): New function.
	(selftest::ix86_test_loading_unspec): New function.
	(selftest::ix86_run_selftests): Call the new functions.
	* emit-rtl.c (maybe_set_max_label_num): New function.
	* emit-rtl.h (maybe_set_max_label_num): New decl.
	* function.c (instantiate_decls): Guard call to
	instantiate_decls_1 with if (DECL_INITIAL (fndecl)).
	* function-tests.c (selftest::verify_three_block_rtl_cfg): Remove
	"static".
	* gensupport.c (gen_reader::gen_reader): Pass "false"
	for new "compact" param of rtx_reader.
	* print-rtl.c (rtx_writer::print_rtx_operand): Print "(nil)"
	rather than an empty string for NULL strings.
	* read-md.c: Potentially include config.h rather than bconfig.h.
	Wrap include of errors.h with #ifdef GENERATOR_FILE.
	(have_error): New global, copied from errors.c.
	(md_reader::read_name): Rename to...
	(md_reader::read_name_1): ...this, adding "out_loc" param,
	and converting "missing name or number" to returning false, rather
	than failing.
	(md_reader::read_name): Reimplement in terms of read_name_1.
	(md_reader::read_name_or_nil): New function.
	(md_reader::read_string): Handle "(nil)" by returning NULL.
	(md_reader::md_reader): Add new param "compact".
	(md_reader::read_md_files): Wrap with #ifdef GENERATOR_FILE.
	(md_reader::read_file): New method.
	* read-md.h (md_reader::md_reader): Add new param "compact".
	(md_reader::read_file): New method.
	(md_reader::is_compact): New accessor.
	(md_reader::read_name): Convert return type from void to
	file_location.
	(md_reader::read_name_or_nil): New decl.
	(md_reader::read_name_1): New decl.
	(md_reader::m_compact): New field.
	(noop_reader::noop_reader): Pass "false" for new "compact" param
	of rtx_reader.
	(rtx_reader::rtx_reader): Add new "compact" param.
	(rtx_reader::read_rtx_operand): Make virtual and convert return
	type from void to rtx.
	(rtx_reader::read_until): New decl.
	(rtx_reader::handle_any_trailing_information): New virtual
	function.
	(rtx_reader::postprocess): New virtual function.
	(rtx_reader::finalize_string): New virtual function.
	(rtx_reader::m_in_call_function_usage): New field.
	(rtx_reader::m_reuse_rtx_by_id): New field.
	* read-rtl-function.c: New file.
	* selftest-rtl.c (selftest::assert_rtx_ptr_eq_at): New function.
	* selftest-rtl.h (ASSERT_RTX_PTR_EQ): New macro.
	(selftest::verify_three_block_rtl_cfg): New decl.
	* read-rtl-function.h: New file.
	* read-rtl.c: Potentially include config.h rather than bconfig.h.
	For host, include function.h, memmodel.h, and emit-rtl.h.
	(one_time_initialization): New function.
	(struct compact_insn_name): New struct.
	(compact_insn_names): New array.
	(find_code): Handle insn codes in compact dumps.
	(apply_subst_iterator): Wrap with #ifdef GENERATOR_FILE.
	(bind_subst_iter_and_attr): Likewise.
	(add_condition_to_string): Likewise.
	(add_condition_to_rtx): Likewise.
	(apply_attribute_uses): Likewise.
	(add_current_iterators): Likewise.
	(apply_iterators): Likewise.
	(initialize_iterators): Guard usage of apply_subst_iterator with
	#ifdef GENERATOR_FILE.
	(read_conditions): Wrap with #ifdef GENERATOR_FILE.
	(md_reader::read_mapping): Likewise.
	(add_define_attr_for_define_subst): Likewise.
	(add_define_subst_attr): Likewise.
	(read_subst_mapping): Likewise.
	(check_code_iterator): Likewise.
	(rtx_reader::read_rtx): Likewise.  Move one-time initialization
	logic to...
	(one_time_initialization): New function.
	(rtx_reader::read_until): New method.
	(read_flags): New function.
	(parse_reg_note_name): New function.
	(rtx_reader::read_rtx_code): Initialize "iterator" to NULL.
	Handle reuse_rtx ids.
	Wrap iterator lookup within #ifdef GENERATOR_FILE.
	Add parsing support for RTL dumps, mirroring the special-cases in
	print_rtx, by calling read_flags, reading REG_NOTE names, INSN_UID
	values, and calling handle_any_trailing_information.
	(rtx_reader::read_rtx_operand): Convert return type from void
	to rtx, returning return_rtx.  Handle case 'e'.  Call
	finalize_string on XSTR and XTMPL fields.
	(rtx_reader::read_nested_rtx):  Handle dumps in which trailing
	 "(nil)" values were omitted.  Call the postprocess vfunc on the
	return_rtx.
	(rtx_reader::rtx_reader): Add new "compact" param and pass to base
	class ctor.  Initialize m_in_call_function_usage.  Call
	one_time_initialization.
	* rtl-tests.c (selftest::test_uncond_jump): Call
	set_new_first_and_last_insn.
	* rtl.h (read_rtx): Wrap decl with #ifdef GENERATOR_FILE.
	* selftest-rtl.c: New file.
	* selftest-rtl.h (class selftest::rtl_dump_test): New class.
	(selftest::get_insn_by_uid): New decl.
	* selftest-run-tests.c (selftest::run_tests): Call
	read_rtl_function_c_tests.
	* selftest.h  (selftest::read_rtl_function_c_tests): New decl.
	* tree-dfa.c (ssa_default_def): Return NULL_TREE for rtl function
	dumps.

gcc/testsuite/ChangeLog:
	* selftests/asr_div1.rtl: New file.
	* selftests/aarch64: New subdirectory.
	* selftests/aarch64/times-two.rtl: New file.
	* selftests/bb-index.rtl: New file.
	* selftests/cfg-test.rtl: New file.
	* selftests/const-int.rtl: New file.
	* selftests/example-labels.rtl: New file.
	* selftests/insn-with-mode.rtl: New file.
	* selftests/jump-to-label-ref.rtl: New file.
	* selftests/jump-to-return.rtl: New file.
	* selftests/jump-to-simple-return.rtl: New file.
	* selftests/mem.rtl: New file.
	* selftests/note-insn-deleted.rtl: New file.
	* selftests/note_insn_basic_block.rtl: New file.
	* selftests/simple-cse.rtl: New file.
	* selftests/symbol-ref.rtl: New file.
	* selftests/x86_64: New subdirectory.
	* selftests/x86_64/call-insn.rtl: New file.
	* selftests/x86_64/copy-hard-reg-into-frame.rtl: New file.
	* selftests/x86_64/times-two.rtl: New file.
	* selftests/x86_64/unspec.rtl: New file.

From-SVN: r244110
2017-01-05 19:32:09 +00:00
Jakub Jelinek cbe34bb5ed Update copyright years.
From-SVN: r243994
2017-01-01 13:07:43 +01:00
Uros Bizjak 1b5d6ccdcf i386.c (ix86_secondary_reload): Require QImode intermediate for QImode mask register spill only for...
* config/i386/i386.c (ix86_secondary_reload): Require QImode
	intermediate for QImode mask register spill only for !TARGET_AVX512DQ.
	Always use true_regnum to determine operand regno.

From-SVN: r243945
2016-12-27 22:25:09 +01:00
Uros Bizjak ecb1129654 re PR target/78904 (zero-extracts are not effective)
PR target/78904
	* config/i386/i386.md (addqi_ext_1): Canonicalize insn pattern w.r.t.
	zero_extract RTXes.
	(*addqi_ext_2): Ditto.
	(testqi_ext_ccno_0): Canonicalize expander w.r.t. zero_extract RTXes.
	(testqi_ext_1_ccno): Rename from testqi_ext_ccno_0.
	(*testqi_ext_0): Merge with *testqi_ext_1.
	(*testqi_ext_1): Canonicalize insn pattern w.r.t. zero_extract RTXes.
	Update corresponding splitter.
	(*testqi_ext_2): Canonicalize insn pattern w.r.t. zero_extract RTXes.
	(*andqi_ext_0): Merge with *andqi_ext_1.
	(andqi_ext_1): Canonicalize insn pattern w.r.t. zero_extract RTXes.
	Rename from *andqi_ext_1.  Update corresponding splitter and
	peephole2 patterns.
	(*andqi_ext_1_cc): Rename from *andqi_ext_0_cc.
	(*andqi_ext_2): Canonicalize insn pattern w.r.t. zero_extract RTXes.
	(*<any_or:code>qi_ext_0): Merge with *andqi_ext_1.
	(*<any_or:code>qi_ext_1): Canonicalize insn pattern w.r.t.
	zero_extract RTXes.  Update corresponding splitter.
	(*<any_or:code>qi_ext_2): Canonicalize insn pattern w.r.t.
	zero_extract RTXes.
	(xorqi_cc_ext_1): Canonicalize expander w.r.t. zero_extract RTXes.
	(xorqi_ext_1_cc): Rename from xorqi_cc_ext_1.
	(*xorqi_cc_ext_1): Canonicalize insn pattern w.r.t. zero_extract RTXes.
	Update corresponding splitter.
	(*xorqi_ext_1_cc): Rename from *xorqi_cc_ext_1.
	(isinfxf2): Update calls to renamed expanders.
	(isinf<mode>2): Ditto.
	* config/i386/i386.c (ix86_expand_fp_compare): Ditto.
	(ix86_emit_fp_unordered_jump): Ditto.
	(ix86_emit_i387_round): Ditto.

testsuite/ChangeLog:

	PR target/78904
	* gcc.target/i386/pr78904.c: New test.

From-SVN: r243929
2016-12-26 20:00:47 +01:00
Jakub Jelinek 8000827901 re PR target/78791 (ACATS cxf2001 failure)
PR target/78791
	* config/i386/i386.h (enum ix86_stack_slot): Add SLOT_STV_TEMP.
	* config/i386/i386.c (dimode_scalar_chain::make_vector_copies,
	dimode_scalar_chain::convert_reg): Use SLOT_STV_TEMP instead of
	SLOT_TEMP.

	* gcc.c-torture/execute/pr78791.c: New test.
	* gcc.target/i386/pr78791.c: New test.

From-SVN: r243671
2016-12-14 22:39:51 +01:00
Uros Bizjak cc99421ec4 re PR target/59874 (Missing builtin (__builtin_clzs) when compiling with g++)
PR target/59874
	* config/i386/i386-builtin.def: Add __builtin_clzs and __builtin_ctzs.
	(ix86_fold_builtin): Handle IX86_BUILTIN_CTZS and IX86_BUILTIN_CLZS.
	* config/i386/i386.md (*ctzhi2): New insn_and_split pattern.
	(*clzhi2): Ditto.

testsuite/ChangeLog

	PR target/59874
	* gcc.target/i386/pr59874-1.c: New test.
	* gcc.target/i386/pr59874-2.c: Ditto.

From-SVN: r243668
2016-12-14 21:27:06 +01:00
Uros Bizjak 80e66af3c8 re PR target/78794 (We noticed ~9% regression in 32-bit mode for 462.libquntum on Avoton after r243202)
PR target/78794
	* config/i386/i386.c (dimode_scalar_chain::compute_convert_gain):
	Calculate additional gain for andnot for targets without BMI.

testsuite/ChangeLog:

	PR target/78794
	* gcc.target/i386/pr78794.c: New test.

From-SVN: r243615
2016-12-13 18:15:35 +01:00
Uros Bizjak 8c7cc1a98f re PR target/70799 (STV pass does not convert DImode shifts)
PR target/70799
	* config/i386/i386.c (dimode_scalar_to_vector_candidate_p)
	<case ASHIFT, case LSHIFTRT>: Consider all constant shifts.
	Add FIXME comment.
	(dimode_scalar_chain::compute_convert_gain): Reduce gain for
	constant shifts larger or equal than 32.

testsuite/ChangeLog:

	PR target/70799
	* gcc.target/i386/pr70799-3.c: New test.

From-SVN: r243530
2016-12-11 19:59:07 +01:00
David Malcolm fd1c9a07d4 Fix x86_64-ism in selftest (PR bootstrap/78705)
In r243317 I accidentally introduced an assumption in a selftest
in i386.c that Pmode == DImode.  This patch conditionalizes the
overzealous string comparison to avoid breaking the build on
32-bit i386.c targets.

gcc/ChangeLog:
	PR bootstrap/78705
	* config/i386/i386.c (selftest::ix86_test_dumping_memory_blockage):
	Conditionalize the string comparison on Pmode == DImode.

From-SVN: r243332
2016-12-07 01:28:13 +00:00
David Malcolm 00439aef2d print_rtx: implement support for reuse IDs (v2)
gcc/ChangeLog:
	* config/i386/i386.c: Include print-rtl.h.
	(selftest::ix86_test_dumping_memory_blockage): New function.
	(selftest::ix86_run_selftests): Call it.
	* print-rtl-function.c (print_rtx_function): Create an
	rtx_reuse_manager and use it.
	* print-rtl.c: Include "rtl-iter.h".
	(rtx_writer::rtx_writer): Add reuse_manager param.
	(rtx_reuse_manager::rtx_reuse_manager): New ctor.
	(uses_rtx_reuse_p): New function.
	(rtx_reuse_manager::preprocess): New function.
	(rtx_reuse_manager::has_reuse_id): New function.
	(rtx_reuse_manager::seen_def_p): New function.
	(rtx_reuse_manager::set_seen_def): New function.
	(rtx_writer::print_rtx): If "in_rtx" has a reuse ID, print it as a
	prefix the first time in_rtx is seen, and print reuse_rtx
	subsequently.
	(print_inline_rtx): Supply NULL for new reuse_manager param.
	(debug_rtx): Likewise.
	(print_rtl): Likewise.
	(print_rtl_single): Likewise.
	(rtx_writer::print_rtl_single_with_indent): Likewise.
	* print-rtl.h: Include bitmap.h when building for host.
	(rtx_writer::rtx_writer): Add reuse_manager param.
	(rtx_writer::m_rtx_reuse_manager): New field.
	(class rtx_reuse_manager): New class.
	* rtl-tests.c (selftest::assert_rtl_dump_eq): Add reuse_manager
	param and use it when constructing rtx_writer.
	(selftest::test_dumping_rtx_reuse): New function.
	(selftest::rtl_tests_c_tests): Call it.
	* selftest-rtl.h (class rtx_reuse_manager): New forward decl.
	(selftest::assert_rtl_dump_eq): Add reuse_manager param.
	(ASSERT_RTL_DUMP_EQ): Supply NULL for reuse_manager param.
	(ASSERT_RTL_DUMP_EQ_WITH_REUSE): New macro.

From-SVN: r243317
2016-12-06 21:03:33 +00:00
Andrew Senkevich 6901ea625b Add AVX512 k-mask intrinsics
gcc/

2016-12-05  Andrew Senkevich  <andrew.senkevich@intel.com>

	* config/i386/avx512bwintrin.h: Add new k-mask intrinsics.
	* config/i386/avx512dqintrin.h: Ditto.
	* config/i386/avx512fintrin.h: Ditto.
	* config/i386/i386-builtin-types.def (UCHAR_FTYPE_UQI_UQI_PUCHAR,
	UCHAR_FTYPE_UHI_UHI_PUCHAR, UCHAR_FTYPE_USI_USI_PUCHAR,
	UCHAR_FTYPE_UDI_UDI_PUCHAR, UCHAR_FTYPE_UQI_UQI, UCHAR_FTYPE_UHI_UHI,
	UCHAR_FTYPE_USI_USI, UCHAR_FTYPE_UDI_UDI, UQI_FTYPE_UQI_INT,
	UHI_FTYPE_UHI_INT, USI_FTYPE_USI_INT, UDI_FTYPE_UDI_INT,
	UQI_FTYPE_UQI, USI_FTYPE_USI, UDI_FTYPE_UDI, UQI_FTYPE_UQI_UQI): New
	function types.
	* config/i386/i386-builtin.def (__builtin_ia32_knotqi,
	__builtin_ia32_knotsi, __builtin_ia32_knotdi,
	__builtin_ia32_korqi, __builtin_ia32_korsi, __builtin_ia32_kordi,
	__builtin_ia32_kxnorqi, __builtin_ia32_kxnorsi,
	__builtin_ia32_kxnordi, __builtin_ia32_kxorqi, __builtin_ia32_kxorsi,
	__builtin_ia32_kxordi, __builtin_ia32_kandqi,
	__builtin_ia32_kandsi, __builtin_ia32_kanddi, __builtin_ia32_kandnqi,
	__builtin_ia32_kandnsi, __builtin_ia32_kandndi): New.
	* config/i386/i386.c (ix86_expand_args_builtin): Handle new types.

gcc/testsuite/

2016-12-05  Andrew Senkevich  <andrew.senkevich@intel.com>

	* gcc.target/i386/avx512bw-kandd-1.c: New.
	* gcc.target/i386/avx512bw-kandnd-1.c: Ditto.
	* gcc.target/i386/avx512bw-kandnq-1.c: Ditto.
	* gcc.target/i386/avx512bw-kandq-1.c: Ditto.
	* gcc.target/i386/avx512bw-knotd-1.c: Ditto.
	* gcc.target/i386/avx512bw-knotq-1.c: Ditto.
	* gcc.target/i386/avx512bw-kord-1.c: Ditto.
	* gcc.target/i386/avx512bw-korq-1.c: Ditto.
	* gcc.target/i386/avx512bw-kunpckdq-3.c: Ditto.
	* gcc.target/i386/avx512bw-kunpckwd-3.c: Ditto.
	* gcc.target/i386/avx512bw-kxnord-1.c: Ditto.
	* gcc.target/i386/avx512bw-kxnorq-1.c: Ditto.
	* gcc.target/i386/avx512bw-kxord-1.c: Ditto.
	* gcc.target/i386/avx512bw-kxorq-1.c: Ditto.
	* gcc.target/i386/avx512dq-kandb-1.c: Ditto.
	* gcc.target/i386/avx512dq-kandnb-1.c: Ditto.
	* gcc.target/i386/avx512dq-knotb-1.c: Ditto.
	* gcc.target/i386/avx512dq-korb-1.c: Ditto.
	* gcc.target/i386/avx512dq-kxnorb-1.c: Ditto.
	* gcc.target/i386/avx512dq-kxorb-1.c: Ditto.
	* gcc.target/i386/avx512f-kunpckbw-3.c: Ditto.
	* gcc.target/i386/avx512f-kandnw-1.c: Removed unneeded check.

From-SVN: r243265
2016-12-05 09:18:42 -08:00
Uros Bizjak 6b7d845323 re PR target/70322 (STV doesn't optimize andn)
PR target/70322
	* config/i386/i386.c (dimode_scalar_to_vector_candidate_p): Handle NEG.
	(dimode_scalar_chain::compute_convert_gain): Ditto.
	(dimode_scalar_chain::convert_insn): Ditto.

testsuite/ChangeLog:

	PR target/70322
	* gcc.target/i386/pr70322-4.c: New test.

From-SVN: r243228
2016-12-04 15:38:05 +01:00
Jakub Jelinek 17c69eff82 re PR target/70322 (STV doesn't optimize andn)
PR target/70322
	* config/i386/i386.c (dimode_scalar_to_vector_candidate_p): Handle
	NOT.
	(dimode_scalar_chain::compute_convert_gain): Likewise.
	(dimode_scalar_chain::convert_insn): Likewise.
	* config/i386/i386.md (*one_cmpldi2_doubleword): New
	define_insn_and_split.
	(one_cmpl<mode>2): Use SWIM1248x iterator instead of SWIM.

	* gcc.target/i386/pr70322-1.c: New test.
	* gcc.target/i386/pr70322-2.c: New test.
	* gcc.target/i386/pr70322-3.c: New test.

From-SVN: r243195
2016-12-02 17:28:41 +01:00
Jakub Jelinek 60ebe8ce1d re PR rtl-optimization/78547 (ICE: in loc_cmp, at var-tracking.c:3417 with -Os -g -mstringop-strategy=libcall -freorder-blocks-algorithm=simple)
PR rtl-optimization/78547
	* emit-rtl.c (unshare_all_rtl): Make sure DECL_RTL and
	DECL_INCOMING_RTL is not shared.
	* config/i386/i386.c (convert_scalars_to_vectors): If any
	insns have been converted, adjust all parameter's DEC_RTL and
	DECL_INCOMING_RTL back from V1TImode to TImode if the parameters have
	TImode.

	* gcc.dg/pr78547.c: New test.

From-SVN: r243165
2016-12-02 09:44:42 +01:00
Jakub Jelinek a717444986 re PR rtl-optimization/78575 (ICE: in trunc_int_for_mode, at explow.c:55 with -O2 -g)
PR rtl-optimization/78575
	* config/i386/i386.c (timode_scalar_chain::fix_debug_reg_uses): Use
	DF infrastructure to wrap all V1TImode reg uses into TImode subreg
	if not already wrapped in a subreg.  Make sure df_insn_rescan does not
	affect further iterations.

	* gcc.dg/pr78575.c: New test.

From-SVN: r243164
2016-12-02 09:42:12 +01:00
Jakub Jelinek 7bbc950b36 i386.c (dimode_scalar_chain::convert_op): Avoid sharing the SUBREG rtx between move and following insn.
* config/i386/i386.c (dimode_scalar_chain::convert_op): Avoid
	sharing the SUBREG rtx between move and following insn.

From-SVN: r243018
2016-11-30 14:02:07 +01:00
Iain Sandoe 03f82a6a63 [Darwin] Fix PR57438 by avoiding empty function bodies and trailing labels.
A.
Empty function bodies causes two problems for Darwin's linker (i) zero-length
FDEs and (ii) coincident label addresses that might point to items of
differing weakness.

B.
Trailing local labels can be problematic when they end a function because
similarly they might apparently point to a following weak function, leading
to the linker concluding that there's a pointer-diff to a weak symbol
(which is not allowed).

Both conditions arise from __builtin_unreachable() lowering to a barrier.

The solution for both is to emit some finite amount of code; in the case of A
a trap is emitted, in the case of B a nop.

gcc/

2016-11-27  Iain Sandoe  <iain@codesourcery.com>

	PR target/57438
	* config/i386/i386.c (ix86_code_end): Note that we emitted code
	where the function might otherwise appear empty for picbase thunks.
	(ix86_output_function_epilogue): If we find a zero-sized function
	assume that reaching it is UB and trap.  If we find a trailing label
	append a nop.
	* config/rs6000/rs6000.c (rs6000_output_function_epilogue): If we
	find a zero-sized function assume that reaching it is UB and trap.
	If we find a trailing label, append a nop.

gcc/testsuite/

2016-11-27  Iain Sandoe  <iain@codesourcery.com>

	PR target/57438
	* gcc.dg/pr57438-1.c: New Test.
	* gcc.dg/pr57438-2.c: New Test.

From-SVN: r242897
2016-11-27 14:50:58 +00:00
Iain Sandoe 794fa8a6ab [Darwin] Fix PR71767 - adjust the sections used where necessary.
(much) Older Darwin linkers needed separate sections marked "coalesce" to
 allow for weak symbol coalescing.  This has not been needed for some time
 and is now deprecated, newer assemblers warn if the old coalesced sections
 are used.
 
 
gcc/

2016-11-27  Iain Sandoe  <iain@codesourcery.com>

	PR target/71767
	* config/darwin-sections.def (picbase_thunk_section): New.
	* config/darwin.c (darwin_init_sections): Set up picbase thunk
	section. (darwin_rodata_section, darwin_objc2_section,
	machopic_select_section, darwin_asm_declare_constant_name,
	darwin_emit_weak_or_comdat, darwin_function_section): Don’t use
	coalesced with newer linkers.
	(darwin_override_options): Decide on usage of coalesed sections
	on the basis of the target linker version.
	* config/darwin.h (MIN_LD64_NO_COAL_SECTS): New.
	* config/darwin.opt  (mtarget-linker): New.
	* config/i386/i386.c (ix86_code_end): Do not force the thunks into
	a coalesced section, instead use a thunks section.

From-SVN: r242895
2016-11-27 14:34:54 +00:00
James Greenhalgh 2dbe91cff1 [Patch i386] PR78509 - TARGET_C_EXCESS_PRECISION should not return
"unpredictable" for EXCESS_PRECISION_TYPE_STANDARD

gcc/

	PR target/78509
	* config/i386/i386.c (i386_excess_precision): Do not return
	FLT_EVAL_METHOD_UNPREDICTABLE when "type" is
	EXCESS_PRECISION_TYPE_STANDARD.
	* target.def (excess_precision): Document that targets should
	not return FLT_EVAL_METHOD_UNPREDICTABLE when "type" is
	EXCESS_PRECISION_TYPE_STANDARD or EXCESS_PRECISION_TYPE_FAST.
	Fix typo in first sentence.
	* doc/tm.texi: Regenerate.

From-SVN: r242866
2016-11-25 09:25:31 +00:00
Bernd Schmidt 7998af1f4b re PR rtl-optimization/78120 (If conversion no longer performed)
PR rtl-optimization/78120
	* config/i386/i386.c (ix86_rtx_costs): Fully handle SETs.

From-SVN: r242832
2016-11-24 12:16:47 +00:00
James Greenhalgh e97dfd54b7 [Patch 2/17] Implement TARGET_C_EXCESS_PRECISION for i386
gcc/
	* config/i386/i386.c (ix86_excess_precision): New.
	(TARGET_C_EXCESS_PRECISION): Define.

From-SVN: r242772
2016-11-23 17:15:17 +00:00
Martin Liska 4987b1e033 i386.c: Initialize function pointer to NULL to prevent
* config/i386/i386.c: Initialize function pointer to NULL.

From-SVN: r242752
2016-11-23 13:32:15 +00:00
Trevor Saunders d8485bdb18 use rtx_insn * more places where it is obvious
gcc/ChangeLog:

2016-11-21  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* config/arm/arm.c (legitimize_pic_address): Change to use
	rtx_insn * as the type of variables.
	(arm_pic_static_addr): Likewise.
	(arm_emit_movpair): Likewise.
	* config/c6x/c6x.c (reorg_split_calls): Likewise.
	* config/darwin.c (machopic_legitimize_pic_address): Likewise.
	* config/frv/frv.c (frv_optimize_membar_local): Likewise.
	* config/frv/frv.md: Likewise.
	* config/i386/i386-protos.h: Likewise.
	* config/i386/i386.c (ix86_expand_split_stack_prologue):
	Likewise.
	(ix86_split_fp_branch): Likewise.
	(predict_jump): Likewise.
	* config/ia64/ia64.c: Likewise.
	* config/mcore/mcore.c: Likewise.
	* config/rs6000/rs6000.c (rs6000_legitimize_tls_address):
	Likewise.
	* config/s390/s390.c: Likewise.
	* config/s390/s390.md: Likewise.
	* config/spu/spu.md: Likewise.
	* config/tilegx/tilegx.c (tilegx_legitimize_tls_address):
	Likewise.
	* lower-subreg.c (resolve_simple_move): Likewise.

From-SVN: r242649
2016-11-21 06:14:52 +00:00
Jakub Jelinek 90b47c5174 i386.c (ix86_can_inline_p): Use || instead of & when checking if callee's isa flags are subset of caller's...
* config/i386/i386.c (ix86_can_inline_p): Use || instead of &
	when checking if callee's isa flags are subset of caller's isa flags.
	Fix comment wording.

From-SVN: r242628
2016-11-19 19:57:56 +01:00
Jakub Jelinek ed8b3aba44 i386.c (ix86_valid_target_attribute_tree): Don't clear opts->x_ix86_isa_flags...
* config/i386/i386.c (ix86_valid_target_attribute_tree): Don't
	clear opts->x_ix86_isa_flags, clear opts->x_ix86_isa_flags2
	instead and using = 0 instead of &= 0.

From-SVN: r242627
2016-11-19 19:57:26 +01:00
Jakub Jelinek 253a20de71 i386.c (def_builtin, [...]): Formatting fixes.
* config/i386/i386.c (def_builtin, def_builtin2, def_builtin_const2,
	ix86_add_new_builtins): Formatting fixes.
	(ix86_expand_builtin): Use || instead of && for isa vs. isa2.
	(ix86_get_builtin): Likewise.

From-SVN: r242626
2016-11-19 19:56:47 +01:00
Jakub Jelinek c1b7577391 i386.c (ix86_expand_builtin): Remove msk_mov variable...
* config/i386/i386.c (ix86_expand_builtin): Remove msk_mov variable,
	don't initialize it, don't use it for the case where it isn't
	provable %{z} nor using the same argument, instead move merge
	argument into a new pseudo and use that as target.  Formatting fixes.

From-SVN: r242625
2016-11-19 19:56:16 +01:00
H.J. Lu 9775c1a5ea Add avx5124vnniw/avx5124fmaps to target attributes
gcc/

2016-11-17  Andrew Senkevich <andrew.senkevich@intel.com>

	* config/i386/i386.c (processor_features): Add F_AVX5124VNNIW,
	F_AVX5124FMAPS.
	(isa_names_table): Handle new features.

gcc/testsuite/

2016-11-17  Andrew Senkevich <andrew.senkevich@intel.com>

	* gcc.target/i386/builtin_target.c: Handle new "avx5124vnniw",
	"avx5124fmaps".
	* gcc.target/i386/funcspec-56.inc: Test new attributes.

libgcc/

2016-11-17  Andrew Senkevich <andrew.senkevich@intel.com>

	* config/i386/cpuinfo.c (processor_features): Add
	FEATURE_AVX5124VNNIW, FEATURE_AVX5124FMAPS.

From-SVN: r242570
2016-11-17 14:18:23 -08:00
Kirill Yukhin 5fbb13a720 Enable AVX512_4FMAPS and AVX512_4VNNIW instructions
This requires additional patch for register allocator from Vladimir
Makarov.

gcc/

2016-11-17  Kirill Yukhin  <kirill.yukhin@gmail.com>
	    Andrew Senkevich <andrew.senkevich@intel.com>

	* common/config/i386/i386-common.c
	(OPTION_MASK_ISA_AVX5124FMAPS_SET,
	OPTION_MASK_ISA_AVX5124FMAPS_UNSET,
	OPTION_MASK_ISA_AVX5124VNNIW_SET,
	OPTION_MASK_ISA_AVX5124VNNIW_UNSET): New.
	(ix86_handle_option): Handle OPT_mavx5124fmaps,
	OPT_mavx5124vnniw.
	* config.gcc: Add avx5124fmapsintrin.h, avx5124vnniwintrin.h.
	* config/i386/avx5124fmapsintrin.h: New file.
	* config/i386/avx5124vnniwintrin.h: Ditto.
	* config/i386/constraints.md (h): New constraint.
	* config/i386/cpuid.h: (bit_AVX5124VNNIW,
	bit_AVX5124FMAPS): New.
	* config/i386/driver-i386.c (host_detect_local_cpu):
	Detect avx5124fmaps, avx5124vnniw.
	* config/i386/i386-builtin-types.def: Add types
	V16SF_FTYPE_V16SF_V16SF_V16SF_V16SF_V16SF_PCV4SF_V16SF_UHI,
	V16SF_FTYPE_V16SF_V16SF_V16SF_V16SF_V16SF_PCV4SF,
	V4SF_FTYPE_V4SF_V4SF_V4SF_V4SF_V4SF_PCV4SF,
	V4SF_FTYPE_V4SF_V4SF_V4SF_V4SF_V4SF_PCV4SF_V4SF_UQI,
	V16SI_FTYPE_V16SI_V16SI_V16SI_V16SI_V16SI_PCV4SI,
	V16SI_FTYPE_V16SI_V16SI_V16SI_V16SI_V16SI_PCV4SI_V16SI_UHI.
	* config/i386/i386-builtin.def (__builtin_ia32_4fmaddps_mask,
	__builtin_ia32_4fmaddps, __builtin_ia32_4fmaddss,
	__builtin_ia32_4fmaddss_mask, __builtin_ia32_4fnmaddps_mask,
	__builtin_ia32_4fnmaddps, __builtin_ia32_4fnmaddss,
	__builtin_ia32_4fnmaddss_mask, __builtin_ia32_vp4dpwssd,
	__builtin_ia32_vp4dpwssd_mask, __builtin_ia32_vp4dpwssds,
	__builtin_ia32_vp4dpwssds_mask): New.
	* config/i386/i386-c.c (ix86_target_macros_internal):
	Define __AVX5124FMAPS__, __AVX5124VNNIW__.
	* config/i386/i386-modes.def: Fixed comment typos, added new
	modes (VECTOR_MODES (FLOAT, 256), VECTOR_MODE (INT, SI, 64)).
	* config/i386/i386.c (ix86_target_string): Add -mavx5124fmaps,
	-mavx5124vnniw.
	(PTA_AVX5124FMAPS, PTA_AVX5124VNNIW): Define.
	(ix86_option_override_internal): Handle new options.
	(ix86_valid_target_attribute_inner_p): Add avx5124fmaps,
	avx5124vnniw.
	(ix86_expand_builtin): Handle new builtins.
	(ix86_additional_allocno_class_p): New.
	* config/i386/i386.h (TARGET_AVX5124FMAPS,
	TARGET_AVX5124FMAPS_P,
	TARGET_AVX5124VNNIW,
	TARGET_AVX5124VNNIW_P): Define.
	(reg_class): Add MOD4_SSE_REGS.
	(MOD4_SSE_REG_P, MOD4_SSE_REGNO_P): New.
	* config/i386/i386.opt: Add mavx5124fmaps, mavx5124vnniw.
	* config/i386/immintrin.h: Include avx5124fmapsintrin.h,
	avx5124vnniwintrin.h.
	* config/i386/sse.md (unspec): Add UNSPEC_VP4FMADD,
	UNSPEC_VP4FNMADD,
	UNSPEC_VP4DPWSSD, UNSPEC_VP4DPWSSDS.
	(define_mode_iterator IMOD4): New.
	(define_mode_attr imod4_narrow): Ditto.
	(define_insn "mov<mode>"): Ditto.
	(define_insn "avx5124fmaddps_4fmaddps"): Ditto.
	(define_insn "avx5124fmaddps_4fmaddps_mask"): Ditto.
	(define_insn "avx5124fmaddps_4fmaddps_maskz"): Ditto.
	(define_insn "avx5124fmaddps_4fmaddss"): Ditto.
	(define_insn "avx5124fmaddps_4fmaddss_mask"): Ditto.
	(define_insn "avx5124fmaddps_4fmaddss_maskz"): Ditto.
	(define_insn "avx5124fmaddps_4fnmaddps"): Ditto.
	(define_insn "avx5124fmaddps_4fnmaddps_mask"): Ditto.
	(define_insn "avx5124fmaddps_4fnmaddps_maskz"): Ditto.
	(define_insn "avx5124fmaddps_4fnmaddss"): Ditto.
	(define_insn "avx5124fmaddps_4fnmaddss_mask"): Ditto.
	(define_insn "avx5124fmaddps_4fnmaddss_maskz"): Ditto.
	(define_insn "avx5124vnniw_vp4dpwssd"): Ditto.
	(define_insn "avx5124vnniw_vp4dpwssd_mask"): Ditto.
	(define_insn "avx5124vnniw_vp4dpwssd_maskz"): Ditto.
	(define_insn "avx5124vnniw_vp4dpwssds"): Ditto.
	(define_insn "avx5124vnniw_vp4dpwssds_mask"): Ditto.
	(define_insn "avx5124vnniw_vp4dpwssds_maskz"): Ditto.
	* init-regs.c (initialize_uninitialized_regs): Add emit_clobber call.
	* genmodes.c (mode_size_inline): Extend return type.
	* machmode.h (mode_size, mode_base_align): Extend type.

gcc/testsuite/

2016-11-17  Kirill Yukhin  <kirill.yukhin@gmail.com>
	    Andrew Senkevich <andrew.senkevich@intel.com>

	* gcc.target/i386/avx5124fmadd-v4fmaddps-1.c: New test.
	* gcc.target/i386/avx5124fmadd-v4fmaddps-2.c: Ditto.
	* gcc.target/i386/avx5124fmadd-v4fmaddss-1.c: Ditto.
	* gcc.target/i386/avx5124fmadd-v4fnmaddps-1.c: Ditto.
	* gcc.target/i386/avx5124fmadd-v4fnmaddps-2.c: Ditto.
	* gcc.target/i386/avx5124fmadd-v4fnmaddss-1.c: Ditto.
	* gcc.target/i386/avx5124fmaps-check.h: Ditto.
	* gcc.target/i386/avx5124vnniw-check.h: Ditto.
	* gcc.target/i386/avx5124vnniw-vp4dpwssd-1.c: Ditto.
	* gcc.target/i386/avx5124vnniw-vp4dpwssd-2.c: Ditto.
	* gcc.target/i386/avx5124vnniw-vp4dpwssds-1.c: Ditto.
	* gcc.target/i386/avx5124vnniw-vp4dpwssds-2.c: Ditto.
	* gcc.target/i386/avx512f-helper.h: Add avx5124fmaps-check.h,
	avx5124vnniw-check.h.
	* gcc.target/i386/i386.exp (check_effective_target_avx5124fmaps,
	check_effective_target_avx5124vnniw): New.
	* gcc.target/i386/m128-check.h (ESP_FLOAT, ESP_DOUBLE):
	Set under ifndef.
	* gcc.target/i386/sse-12.c: Add -mavx5124fmaps, -mavx5124vnniw.
	* gcc.target/i386/sse-13.c: Ditto.
	* g++.dg/other/i386-2.C: Ditto.
	* g++.dg/other/i386-3.C: Ditto.
	* gcc.target/i386/sse-22.c: Ditto.
	* gcc.target/i386/sse-23.c: Ditto.

From-SVN: r242569
2016-11-17 14:11:21 -08:00
Uros Bizjak 90a2ffc01a re PR target/70799 (STV pass does not convert DImode shifts)
PR target/70799
	* config/i386/i386.c (dimode_scalar_to_vector_candidate_p):
	Handle ASHIFT and LSHIFTRT.
	(dimode_scalar_chain::compute_convert_gain): Ditto.
	(dimode_scalar_chain::convert_insn): Ditto.

testsuite/ChangeLog:

	PR target/70799
	* gcc.target/i386/pr70799-2.c: New test.

From-SVN: r241974
2016-11-08 20:06:54 +01:00
Jakub Jelinek 4ab71abd26 re PR target/78229 (ICE in redirect_eh_edge_1, at tree-eh.c:2305)
PR target/78229
	* config/i386/i386.c (ix86_gimple_fold_builtin): Do not adjust                                                                             
	EH info even for bzhi and pdep/pext.

From-SVN: r241942
2016-11-07 23:35:43 +01:00
Jakub Jelinek 60cee85e0a re PR target/78227 (ICE: unrecognizable insn: in extract_insn, at recog.c:2311 with -mavx512bw and vector comare)
PR target/78227
	* config/i386/i386.c (ix86_expand_sse_cmp): Force dest into
	cmp_mode argument even for -O0 if cmp_mode != mode and maskcmp.

	* gcc.target/i386/pr78227-1.c: New test.
	* gcc.target/i386/pr78227-2.c: New test.

From-SVN: r241916
2016-11-07 18:33:27 +01:00
Richard Biener e8ab5cb19b re PR target/78229 (ICE in redirect_eh_edge_1, at tree-eh.c:2305)
2016-11-07  Richard Biener  <rguenther@suse.de>

	PR target/78229
	* config/i386/i386.c (ix86_gimple_fold_builtin): Do not adjust
	EH info.

	* g++.dg/pr78229.C: New testcase.

From-SVN: r241901
2016-11-07 12:26:48 +00:00
David Malcolm 40af589485 Start adding target-specific selftests
gcc/ChangeLog:
	* config/i386/i386.c: Include "selftest.h" and "selftest-rtl.h".
	(selftest::ix86_test_dumping_hard_regs): New function.
	(selftest::ix86_run_selftests): New function.
	(TARGET_RUN_TARGET_SELFTESTS): When CHECKING_P, wire this up to
	selftest::ix86_run_selftests.
	* doc/tm.texi.in (TARGET_RUN_TARGET_SELFTESTS): New.
	* doc/tm.texi: Regenerate
	* selftest-rtl.h: New file.
	* rtl-tests.c: Include "selftest-rtl.h".
	(selftest::assert_rtl_dump_eq): Make non-static.
	(ASSERT_RTL_DUMP_EQ): Move to selftest-rtl.h.
	(selftest::test_dumping_regs): Update comment.
	* selftest-run-tests.c: Include "target.h".
	(selftest::run_tests): If non-NULL, call
	targetm.run_target_selftests.
	* target.def (run_target_selftests): New hook.

From-SVN: r241851
2016-11-04 17:05:38 +00:00
Uros Bizjak 7ce53bd943 i386.c (ix86_init_libfuncs): New.
* config/i386/i386.c (ix86_init_libfuncs): New.  Call
	darwin_rename_builtins here.
	(ix86_expand_divmod_libfunc): New.
	(TARGET_INIT_LIBFUNCS): Unconditionally define to ix86_init_libfuncs.
	(TARGET_EXPAND_DIVMOD_LIBFUNC): Define.

From-SVN: r241805
2016-11-02 23:25:44 +01:00
Trevor Saunders 9b2ea071ab use rtx_insn * in various places where it is obvious
gcc/ChangeLog:

2016-11-01  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* config/arc/arc.c (arc_emit_call_tls_get_addr): Make the type
	of variables rtx_insn *.
	* config/arm/arm.c (arm_call_tls_get_addr): Likewise.
	(legitimize_tls_address): Likewise.
	* config/bfin/bfin.c (hwloop_optimize): Likewise.
	(bfin_gen_bundles): Likewise.
	* config/c6x/c6x.c (reorg_split_calls): Likewise.
	(c6x_reorg): Likewise.
	* config/frv/frv.c (frv_reorder_packet): Likewise.
	* config/i386/i386.c (ix86_split_idivmod): Likewise.
	* config/ia64/ia64.c (ia64_expand_compare): Likewise.
	* config/m32c/m32c.c (m32c_prepare_shift): Likewise.
	* config/mn10300/mn10300.c: Likewise.
	* config/rl78/rl78.c: Likewise.
	* config/s390/s390.c (s390_fix_long_loop_prediction): Likewise.
	* config/sh/sh-mem.cc (sh_expand_cmpstr): Likewise.
	(sh_expand_cmpnstr): Likewise.
	(sh_expand_strlen): Likewise.
	(sh_expand_setmem): Likewise.
	* config/sh/sh.md: Likewise.
	* emit-rtl.c (emit_pattern_before): Likewise.
	* except.c: Likewise.
	* final.c: Likewise.
	* jump.c: Likewise.

From-SVN: r241768
2016-11-02 03:44:50 +00:00
Jakub Jelinek 4467029544 i386.c (ix86_in_large_data_p, [...]): Use VAR_P (x) instead of TREE_CODE (x) == VAR_DECL.
* config/i386/i386.c (ix86_in_large_data_p, ix86_expand_builtin): Use
	VAR_P (x) instead of TREE_CODE (x) == VAR_DECL.

From-SVN: r241481
2016-10-24 18:04:37 +02:00
Jakub Jelinek fb027a4235 i386.c (ix86_fold_builtin): Handle IX86_BUILTIN_BEXTR{,I}{32,64}...
* config/i386/i386.c (ix86_fold_builtin): Handle
	IX86_BUILTIN_BEXTR{,I}{32,64}, IX86_BUILTIN_BZHI{32,64},
	IX86_BUILTIN_PDEP{32,64} and IX86_BUILTIN_PEXT{32,64}.
	(ix86_gimple_fold_builtin): Handle IX86_BUILTIN_BZHI{32,64},
	IX86_BUILTIN_PDEP{32,64} and IX86_BUILTIN_PEXT{32,64}.

	* gcc.target/i386/bmi2-pext-1.c: New test.
	* gcc.target/i386/bmi2-pdep-1.c: New test.
	* gcc.target/i386/bmi2-bzhi-3.c: New test.
	* gcc.target/i386/tbm-bextri-1.c: New test.
	* gcc.target/i386/bmi-bextr-6.c: New test.

From-SVN: r241465
2016-10-24 10:29:42 +02:00
Jakub Jelinek 9c4c8b7bbb re PR target/78057 (FAIL: gcc.target/i386/bmi-{4,5,6}.c)
PR target/78057
	* config/i386/i386.c: Include fold-const-call.h, tree-vrp.h
	and tree-ssanames.h.
	(ix86_fold_builtin): Fold IX86_BUILTIN_[LT]ZCNT{16,32,64}
	with INTEGER_CST argument.
	(ix86_gimple_fold_builtin): New function.
	(TARGET_GIMPLE_FOLD_BUILTIN): Define.

	* gcc.target/i386/pr78057.c: New test.

From-SVN: r241411
2016-10-21 17:39:25 +02:00
Uros Bizjak a7cfe83677 i386.c (ix86_fold_builtin): Handle IX86_BUILTIN_INFQ and IX86_BUILTIN_HUGE_VALQ here ...
* config/i386/i386.c (ix86_fold_builtin): Handle IX86_BUILTIN_INFQ
	and IX86_BUILTIN_HUGE_VALQ here ...
	(ix86_expand_builtin): ... not here.

From-SVN: r241387
2016-10-21 00:57:11 +02:00
Uros Bizjak f56ea76ecb re PR target/78037 (Incorrect code generated at optimization level -O2 for tzcnt and binary and)
PR target/78037
	* config/i386/bmiintrin.h (__tzcnt_u16): Call __builtin_ia32_tzcnt_u16.
	(__tzcnt_u32, _tzcnt_u32): Call __builtin_ia32_tzcnt_u32.
	(__tzcnt_u64, _tzcnt_u64): Call __builtin_ia32_tzcnt_u64.
	* config/i386/lzcntintrin.h (__lzcnt_u16): Call
	__builtin_ia32_lzcnt_u16.
	(__lzcnt_u32, _lzcnt_u32): Call __builtin_ia32_lzcnt_u32.
	(__lzcnt_u64, _lzcnt_u64): Call __builtin_ia32_lzcnt_u64.
	* config/i386/i386.md (UNSPEC_LZCNT, UNSPEC_TZCNT): New unspecs.
	(ctz<mode>2, *ctz<mode>2): Use SWI48 mode iterator.
	(bmi_tzcnt_<mode>): New expander.
	(*bmi_tzcnt_<mode>_falsedep_1): New define_insn_and_split pattern.
	(*bmi_tzcnt_<mode>_falsedep, *bmi_tzcnt_<mode>): New insn patterns.
	(clz<mode>2_lzcnt, *clz<mode>2_lzcnt): Use SWI48 mode iterator.
	(lzcnt_<mode>): New expander.
	(*lzcnt_<mode>_falsedep_1): New define_insn_and_split pattern.
	(*lzcnt_<mode>_falsedep, *lzcnt_<mode>): New insn patterns.
	* config/i386/i386-builtin-types.def (UINT_FTYPE_UINT): New.
	(UINT64_FTYPE_UINT64): New.
	* config/i386/i386-builtin.def (__builtin_clzs): Remove description.
	(__builtin_ia32_lzcnt_u16): New description.
	(__builtin_ia32_lzcnt_u32): Ditto.
	(__builtin_ia32_lzcnt_u64): Ditto.
	(__builtin_ctzs): Remove description.
	(__builtin_ia32_tzcnt_u16): New description.
	(__builtin_ia32_tzcnt_u32): Ditto.
	(__builtin_ia32_tzcnt_u64): Ditto.
	* config/i386/i386.c (ix86_expand_args_builtin): Handle
	UINT_FTYPE_UINT and UINT64_FTYPE_UINT64.

testsuite/ChangeLog:

	PR target/78037
	* gcc.target/i386/pr78037.c: New test.

From-SVN: r241381
2016-10-20 19:53:10 +02:00
Uros Bizjak 5cb96b6a87 re PR target/77991 (ICE on x32 in plus_constant, at explow.c:87)
PR target/77991
	* config/i386/i386.c (legitimize_tls_address)
	<case TLS_MODEL_INITIAL_EXEC>: For TARGET_64BIT || TARGET_ANY_GNU_TLS
	convert dest to Pmode if different than Pmode.

testsuite/ChangeLog:

	PR target/77991
	* gcc.target/i386/pr77991.c: New test.

From-SVN: r241308
2016-10-18 16:39:39 +02:00
Eric Botcazou 86f980870a i386.h (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): Move to...
* config/i386/i386.h (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): Move to...
	* config/i386/i386.c (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): ...here.
	* config/ia64/ia64.h (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): Move to...
	* config/ia64/ia64.c (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): ...here.
	* config/rs6000/rs6000.h (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): Move to.
	* config/rs6000/rs6000.c (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): ...here.
	(rs6000_option_override_internal): Clear it if ABI_AIX.
	* config/sparc/sparc.h (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): Move to...
	* config/sparc/sparc.c (TARGET_CUSTOM_FUNCTION_DESCRIPTORS): ... here.

From-SVN: r241285
2016-10-17 22:34:53 +00:00
Jakub Jelinek 1202f33e5e re PR target/77957 (Undefined .LCTOC0 with -fstack-protector-strong -mminimal-toc -O0 on ppc64)
PR target/77957
	* hooks.h (hook_tree_void_null): Declare.
	* hooks.c (hook_tree_void_null): New function.
	* langhooks.c (lhd_return_null_tree_v): Remove.
	* langhooks-def.h (lhd_return_null_tree_v): Remove.
	* cfgexpand.c (stack_protect_prologue): If guard_decl is NULL,
	set y to const0_rtx.
	* function.c (stack_protect_epilogue): Likewise.
	* config/tilepro/tilepro.c (TARGET_STACK_PROTECT_GUARD): Redefine
	if TARGET_THREAD_SSP_OFFSET is defined.
	* config/s390/s390.c (TARGET_STACK_PROTECT_GUARD): Likewise.
	* config/sparc/sparc.c (TARGET_STACK_PROTECT_GUARD): Likewise.
	* config/tilegx/tilegx.c (TARGET_STACK_PROTECT_GUARD): Likewise.
	* config/rs6000/rs6000.c (TARGET_STACK_PROTECT_GUARD): Likewise.
	* config/i386/i386.c (TARGET_STACK_PROTECT_GUARD): Likewise.
	(ix86_stack_protect_guard): New function.
c/
	* c-objc-common.h (LANG_HOOKS_GETDECLS): Use hook_tree_void_null
	instead of lhd_return_null_tree_v.
ada/
	* gcc-interface/misc.c (LANG_HOOKS_GETDECLS): Use hook_tree_void_null
	instead of lhd_return_null_tree_v.

From-SVN: r241087
2016-10-13 10:29:03 +02:00
Jakub Jelinek 478167be62 gen-pass-instances.awk: Rewritten.
* gen-pass-instances.awk: Rewritten.
	* Makefile.in (pass-instances.def): Depend on $(PASSES_EXTRA), pass
	$(PASSES_EXTRA) after passes.def to the script.
	* config/i386/t-i386 (PASSES_EXTRA): Add i386-passes.def.
	* config/i386/i386-passes.def: New file.
	* config/i386/i386-protos.h (make_pass_insert_vzeroupper,
	make_pass_stv): Declare.
	* config/i386/i386.c (pass_stv::pass_stv): Initialize timode_p to
	false.
	(pass_stv::gate): Depending on timode_p member require TARGET_64BIT
	or !TARGET_64BIT.
	(pass_stv::clone, pass_stv::set_pass_param): New methods.
	(pass_stv::timode_p): New non-static data member.
	(ix86_option_override): Don't register passes here.

From-SVN: r240887
2016-10-08 14:04:37 +02:00
Uros Bizjak 63656b8da2 * config/i386/i386.c (ix86_add_stmt_cost): Simplify condition.
From-SVN: r240835
2016-10-06 16:57:41 +02:00
Andrew Senkevich eee8f0b07f Delete x86 deprecated pcommit instruction support
Delete x86 pcommit instruction support, which has been deprecated:

https://software.intel.com/en-us/blogs/2016/09/12/deprecate-pcommit-instruction

gcc/

	* common/config/i386/i386-common.c (OPTION_MASK_ISA_PCOMMIT_UNSET,
	OPTION_MASK_ISA_PCOMMIT_SET): Deleted definitions.
	(ix86_handle_option): Deleted handle of OPT_mpcommit.
	* config.gcc: Deleted pcommitintrin.h
	* config/i386/pcommitintrin.h: Deleted file.
	* config/i386/cpuid.h (bit_PCOMMIT): Deleted.
	* config/i386/driver-i386.c (host_detect_local_cpu): Deleted pcommit
	detection.
	* config/i386/i386-c.c (ix86_target_macros_internal): Deleted define
	__PCOMMIT__.
	* config/i386/i386.c (ix86_target_string): Deleted -mpcommit.
	(PTA_PCOMMIT): Deleted define.
	(ix86_option_override_internal): Deleted handle of option.
	(ix86_valid_target_attribute_inner_p): Deleted pcommit.
	* config/i386/i386-builtin.def (IX86_BUILTIN_PCOMMIT,
	__builtin_ia32_pcommit): Deleted.
	* config/i386/i386.h (TARGET_PCOMMIT, TARGET_PCOMMIT_P): Deleted.
	* config/i386/i386.md (unspecv): Deleted UNSPECV_PCOMMIT.
	(pcommit): Deleted instruction.
	* config/i386/i386.opt: Mention -mpcommit deprecation.
	* config/i386/x86intrin.h: Deleted inclusion of pcommitintrin.h.

gcc/testsuite/

	* gcc.target/i386/pcommit-1.c: Deleted.
	* gcc.target/i386/sse-12.c: Deleted -pcommit option.
	* gcc.target/i386/sse-13.c: Ditto.
	* gcc.target/i386/sse-14.c: Ditto.
	* gcc.target/i386/sse-22.c: Ditto.
	* gcc.target/i386/sse-23.c: Ditto.
	* g++.dg/other/i386-2.C: Ditto.

From-SVN: r240816
2016-10-05 15:08:48 -07:00
Uros Bizjak 9f06db14fa x86-tune.def (X86_TUNE_VECTORIZE_DOUBLE): Remove.
* config/i386/x86-tune.def (X86_TUNE_VECTORIZE_DOUBLE): Remove.
	* config/i386/i386.h (TARGET_VECTORIZE_DOUBLE): Remove.
	* config/i386/i386.c (ix86_add_stmt_cost): Use TARGET_BONNEL instead
	of !TARGET_VECTORIZE_DOUBLE when penalizing DFmode vector ops.

From-SVN: r240748
2016-10-04 16:50:35 +02:00
Jakub Jelinek 6a245c05be combine.c (simplify_comparison): Add canonical FALLTHROUGH comments.
* combine.c (simplify_comparison): Add canonical FALLTHROUGH comments.
	* config/i386/i386.c (ix86_dep_by_shift_count_body): Add FALLTHROUGH
	comments.  Remove break after return.
	(ix86_fp_compare_code_to_integer, has_dispatch,
	ix86_simd_clone_usable): Remove break after return.

From-SVN: r240523
2016-09-27 10:15:26 +02:00