Commit Graph

132982 Commits

Author SHA1 Message Date
Andi Kleen ecc81e3312 Add direct support for Linux kernel __fentry__ patching
The Linux kernel dynamically patches in __fentry__ calls in and
out at runtime. This allows using function tracing for debugging
in production kernels without (significant) performance penalty.

For this it needs a table pointing to each __fentry__ call.

The way it is currently implemented is that a special
perl script scans the object file, generates the table in a special
section. When the kernel boots up it nops the calls, and
then later patches in the calls again as needed.

The recordmcount.pl script in the kernel works, but it seems
cleaner and faster to support the code generation of the patch table
directly in gcc.

This also allows to nop the calls directly at code generation
time, which allows to skip a patching step at kernel boot.
I also expect that a patchable production tracing facility is also useful
for other applications.

For example it could be used in ftracer
(https://github.com/andikleen/ftracer)

Having a nop area at the beginning of each function can be also
also useful for other things. For example it can be used to patch
functions at runtime to point to different functions, to do
binary updates without restarting the program (like ksplice or
similar)

This patch implements two new options for the i386 target:

-mrecord-mcount
Generate a __mcount_loc section entry for each __fentry__ or mcount
call. The section is compatible with the kernel convention
and the data is put into a section loaded at runtime.

-mnop-mcount
Generate the mcount/__fentry__ call as 5 byte nop that can be
patched in later. The nop is generated as a single instruction,
as the Linux kernel run time patching relies on this.

Limitations:
- I didn't implement -mnop-mcount for -fPIC. This
would need a good single instruction 6 byte NOP and it seems a
bit pointless, as the patching would prevent text sharing.
- I didn't implement noping for targets that pass a variable
to mcount.
- The facility could be useful on architectures too. Currently
the mcount code is target specific, so I made it a i386 option.

gcc/:

2014-09-25  Andi Kleen  <ak@linux.intel.com>

	* config/i386/i386.c (x86_print_call_or_nop): New function.
	(x86_function_profiler): Support -mnop-mcount and
	-mrecord-mcount.
	* config/i386/i386.opt (-mnop-mcount, -mrecord-mcount): Add
	* doc/invoke.texi: Document -mnop-mcount, -mrecord-mcount.

gcc/testsuite:

2014-09-25  Andi Kleen  <ak@linux.intel.com>

	* gcc.target/i386/nop-mcount.c: New file.
	* gcc.target/i386/record-mcount.c: New file.

From-SVN: r215629
2014-09-26 04:06:40 +00:00
Jan Hubicka 6eb0ae29ec ipa-prop.c (ipa_intraprocedural_devirtualization): Remove.
* ipa-prop.c (ipa_intraprocedural_devirtualization): Remove.
	* ipa-prop.h (ipa_intraprocedural_devirtualization): Remove.
	* tree-ssa-prop.c (eliminate_dom_walker::before_dom_children):
	Remove.

From-SVN: r215628
2014-09-26 01:49:40 +00:00
Sandra Loosemore 9f442ef4a0 pr56933.c: Don't specify "dg-do run" explicitly.
2014-09-25  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/testsuite/
	* gcc.dg/vect/pr56933.c: Don't specify "dg-do run" explicitly.
	* gcc.dg/vect/pr57705.c: Likewise.
	* gcc.dg/vect/pr57741-2.c: Likewise.
	* gcc.dg/vect/pr57741-3.c: Likewise.
	* gcc.dg/vect/pr59591-1.c: Likewise.
	* gcc.dg/vect/pr59591-2.c: Likewise.
	* gcc.dg/vect/pr60196-1.c: Likewise.
	* gcc.dg/vect/pr60196-2.c: Likewise.
	* gcc.dg/vect/pr60276.c: Likewise.
	* gcc.dg/vect/pr61680.c: Likewise.
	* gcc.dg/vect/pr63148.c: Likewise.
	* gcc.dg/vect/pr63189.c: Likewise.
	* gcc.dg/vect/vect-mask-load-1.c: Likewise.
	* gcc.dg/vect/vect-mask-loadstore-1.c: Likewise.
	* gcc.dg/vect/vect-nop-move.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-10.c: Likewise.
	* gcc.dg/vect/vect-simd-clone-12.c: Likewise.

From-SVN: r215627
2014-09-25 20:51:26 -04:00
GCC Administrator 7a49a84dd8 Daily bump.
From-SVN: r215626
2014-09-26 00:16:44 +00:00
Jan Hubicka aa803cc76e ipa-utils.h (subbinfo_with_vtable_at_offset, [...]): Declare.
* ipa-utils.h (subbinfo_with_vtable_at_offset, type_all_derivations_known_p,
	type_known_to_have_no_deriavations_p, types_must_be_same_for_odr,
	types_odr_comparable): Declare.
	(polymorphic_type_binfo_p): Move here from ipa-devirt.c
	* ipa-polymorphic-call.c: New file.
	(contains_polymorphic_type_p, possible_placement_new,
	ipa_polymorphic_call_context::restrict_to_inner_class,
	contains_type_p, decl_maybe_in_construction_p,
	ipa_polymorphic_call_context::stream_out,
	ipa_polymorphic_call_context::debug,
	ipa_polymorphic_call_context::stream_in,
	ipa_polymorphic_call_context::set_by_decl,
	ipa_polymorphic_call_context::set_by_invariant,
	walk_ssa_copies,
	ipa_polymorphic_call_context::ipa_polymorphic_call_context,
	type_change_info, noncall_stmt_may_be_vtbl_ptr_store,
	extr_type_from_vtbl_ptr_store, record_known_type
	check_stmt_for_type_change,
	ipa_polymorphic_call_context::get_dynamic_type): Move here from
	ipa-devirt.c
	* ipa-devirt.c: No longer include data-streamer.h, lto-streamer.h
	and streamer-hooks.h
	(contains_polymorphic_type_p, possible_placement_new,
	ipa_polymorphic_call_context::restrict_to_inner_class,
	contains_type_p, decl_maybe_in_construction_p,
	ipa_polymorphic_call_context::stream_out,
	ipa_polymorphic_call_context::debug,
	ipa_polymorphic_call_context::stream_in,
	ipa_polymorphic_call_context::set_by_decl,
	ipa_polymorphic_call_context::set_by_invariant,
	walk_ssa_copies,
	ipa_polymorphic_call_context::ipa_polymorphic_call_context,
	type_change_info, noncall_stmt_may_be_vtbl_ptr_store,
	extr_type_from_vtbl_ptr_store, record_known_type
	check_stmt_for_type_change,
	ipa_polymorphic_call_context::get_dynamic_type): Move to
	ipa-polymorphic-call.c
	(type_all_derivations_known_p, types_odr_comparable,
	types_must_be_same_for_odr): Export.
	(type_known_to_have_no_deriavations_p): New function.
	* Makefile.in: Add ipa-polymorphic-call.c

From-SVN: r215615
2014-09-25 19:52:20 +00:00
Jan Hubicka 2f28755fbf ipa-devirt.c (polymorphic_call_target_d): Add SPECULATIVE; reorder for better storage.
* ipa-devirt.c (polymorphic_call_target_d): Add SPECULATIVE; reorder
	for better storage.
	(polymorphic_call_target_hasher::hash): Hash SPECULATIVE.
	(possible_polymorphic_call_targets): Instead of computing both
	speculative and non-speculative answers, do just one at a time.
	Replace NONSPECULATIVE_TARGETSP parameter with SPECULATIVE flag.
	(dump_targets): Break out from ...
	(dump_possible_polymorphic_call_targets): ... here; dump both speculative
	and non-speculative lists.
	(ipa_devirt): Update for new possible_polymorphic_call_targets API.
	* ipa-utils.h (possible_polymorphic_call_targets): Update.

	* testsuite/g++.dg/ipa/devirt-34.C: Update template.

From-SVN: r215614
2014-09-25 18:57:44 +00:00
Uros Bizjak 0be35aa0a1 re PR rtl-optimization/63348 (gcc.dg/pr43670.c fail on MIPS)
PR rtl-optimization/63348
	* emit-rtl.c (try_split): Do not emit extra barrier.

From-SVN: r215613
2014-09-25 19:58:35 +02:00
James Greenhalgh cb23a30cc4 [AArch64] Tighten predicates on SIMD shift intrinsics
gcc/

	* config/aarch64/aarch64-protos.h (aarch64_simd_const_bounds): Delete.
	* config/aarch64/aarch64-simd.md (aarch64_<sur>q<r>shl<mode>): Use
	new predicates.
	(aarch64_<sur>shll2_n<mode>): Likewise.
	(aarch64_<sur>shr_n<mode>): Likewise.
	(aarch64_<sur>sra_n<mode>: Likewise.
	(aarch64_<sur>s<lr>i_n<mode>): Likewise.
	(aarch64_<sur>qshl<u>_n<mode>): Likewise.
	* config/aarch64/aarch64.c (aarch64_simd_const_bounds): Delete.
	* config/aarch64/iterators.md (ve_mode): New.
	(offsetlr): Remap to infix text for use in new predicates.
	* config/aarch64/predicates.md (aarch64_simd_shift_imm_qi): New.
	(aarch64_simd_shift_imm_hi): Likewise.
	(aarch64_simd_shift_imm_si): Likewise.
	(aarch64_simd_shift_imm_di): Likewise.
	(aarch64_simd_shift_imm_offset_qi): Likewise.
	(aarch64_simd_shift_imm_offset_hi): Likewise.
	(aarch64_simd_shift_imm_offset_si): Likewise.
	(aarch64_simd_shift_imm_offset_di): Likewise.
	(aarch64_simd_shift_imm_bitsize_qi): Likewise.
	(aarch64_simd_shift_imm_bitsize_hi): Likewise.
	(aarch64_simd_shift_imm_bitsize_si): Likewise.
	(aarch64_simd_shift_imm_bitsize_di): Likewise.

gcc/testsuite/

	* gcc.target/aarch64/simd/vqshlb_1.c: New.

From-SVN: r215612
2014-09-25 16:54:38 +00:00
Jiong Wang d0d9aad78a Improve live-in calculation for splitted block
gcc/
    * shrink-wrap.c (move_insn_for_shrink_wrap): Initialize the live-in of new
    created BB as the intersection of live-in from "old_dest" and live-out from
    "bb".

  gcc/testsuite/
    * gcc.target/i386/shrink_wrap_1.c: New test.

From-SVN: r215611
2014-09-25 16:39:49 +00:00
Felix Yang 0e9e0a218b lra.c (lra_set_insn_recog_data): Fix typo in comment.
* lra.c (lra_set_insn_recog_data): Fix typo in comment.
        * genautomata.c (merge_states): Ditto.

From-SVN: r215610
2014-09-25 10:34:03 -06:00
Oleg Endo ad19968eae re PR target/62218 (gcc produces invalid SH instruction (stc r2,sr) when building libgcc)
gcc/
	PR target/62218
	* config/sh/sync.md (atomic_test_and_set_soft_imask): Fix typo
	in instruction sequence.

From-SVN: r215607
2014-09-25 15:50:38 +00:00
Jonathan Wakely e51cf2f559 DR 1339
DR 1339
	* doc/xml/manual/status_cxx2011.xml: Update.
	* include/bits/stl_uninitialized.h (uninitialized_fill_n): Return
	an iterator.
	(__uninitialized_fill_n_a, __uninitialized_default_n_a): Likewise.
	* include/bits/stl_vector.h (vector::_M_fill_initialize,
	vector::_M_default_initialize): Use returned iterator.
	* include/bits/vector.tcc (vector::_M_fill_assign,
	vector::_M_fill_insert, vector::_M_default_append): Likewise.
	* testsuite/20_util/specialized_algorithms/uninitialized_fill_n/
	16505.cc: Adjust return type.
	* testsuite/20_util/specialized_algorithms/uninitialized_fill_n/
	dr1339.cc: New.

From-SVN: r215606
2014-09-25 16:27:18 +01:00
Nick Clifton 72b497da48 re PR target/62218 (gcc produces invalid SH instruction (stc r2,sr) when building libgcc)
PR target/62218
	* config/sh/sync.md (atomic_fetch_nand<mode>_soft_imask): Fix typo
	in instruction sequence.

From-SVN: r215602
2014-09-25 15:01:46 +00:00
Bill Schmidt eb1f7a0a3d re PR target/63335 (GCC:failures for vector double on calls to bif vec_[all|any]_[nge|nle])
[gcc]

2014-09-25  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	PR target/63335
	* config/rs6000/rs6000-c.c (altivec_build_resolved_builtin):
	Exclude VSX_BUILTIN_XVCMPGEDP_P from special handling.

[gcc/testsuite]

2014-09-25  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	PR target/63335
	* gcc.target/powerpc/pr63335.c: New test.

From-SVN: r215599
2014-09-25 14:06:09 +00:00
Marek Polacek 6597738a3a re PR c++/61945 (tree check fail with -Woverloaded-virtual)
PR c++/61945
	* class.c (warn_hidden): Check for FUNCTION_DECL.

	* g++.dg/warn/pr61945.C: New test.

From-SVN: r215597
2014-09-25 12:56:57 +00:00
Jonathan Wakely c5b2614754 * include/bits/vector.tcc (vector::_M_fill_assign): Use _M_swap_data.
From-SVN: r215596
2014-09-25 13:14:15 +01:00
Jonathan Wakely 755176105f * testsuite/27_io/basic_ios/conv/bool_neg.cc: Add dg-do compile.
From-SVN: r215593
2014-09-25 11:50:31 +01:00
Jonathan Wakely 7569cc5753 bool_neg.cc: New.
* testsuite/27_io/basic_ios/conv/bool_neg.cc: New.
	* testsuite/27_io/basic_ios/conv/bool.cc: New.
	* testsuite/27_io/basic_ios/conv/voidptr.cc: New.

From-SVN: r215592
2014-09-25 11:22:51 +01:00
Alexander Ivchenko e2a2165dea AVX-512. Extend `perm' insn patterns.
gcc/
	* config/i386/sse.md
	(define_expand "<avx2_avx512f>_perm<mode>"): Rename to ...
	(define_expand "<avx2_avx512>_perm<mode>"): ... this.
	(define_expand "avx512f_perm<mode>_mask"): Rename to ...
	(define_expand "<avx512>_perm<mode>_mask"): ... this.
	Use VI8F_256_512 mode iterator.
	(define_insn "<avx2_avx512f>_perm<mode>_1<mask_name>"): Rename to ...
	(define_insn "<avx2_avx512>_perm<mode>_1<mask_name>"): ... this.


Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com>
Co-Authored-By: Anna Tikhonova <anna.tikhonova@intel.com>
Co-Authored-By: Ilya Tocar <ilya.tocar@intel.com>
Co-Authored-By: Ilya Verbin <ilya.verbin@intel.com>
Co-Authored-By: Kirill Yukhin <kirill.yukhin@intel.com>
Co-Authored-By: Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Co-Authored-By: Michael Zolotukhin <michael.v.zolotukhin@intel.com>

From-SVN: r215590
2014-09-25 08:25:56 +00:00
Alexander Ivchenko 6eacd27c13 AVX-512. Add mov[dlh]dup insns support.
gcc/
	* config/i386/sse.md
	(define_insn "avx_movshdup256<mask_name>"): Add masking.
	(define_insn "sse3_movshdup<mask_name>"): Ditto.
	(define_insn "avx_movsldup256<mask_name>"): Ditto.
	(define_insn "sse3_movsldup<mask_name>"): Ditto.
	(define_insn "vec_dupv2df<mask_name>"): Ditto.
	(define_insn "*vec_concatv2df"): Add EVEX version.

Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com>
Co-Authored-By: Anna Tikhonova <anna.tikhonova@intel.com>
Co-Authored-By: Ilya Tocar <ilya.tocar@intel.com>
Co-Authored-By: Ilya Verbin <ilya.verbin@intel.com>
Co-Authored-By: Kirill Yukhin <kirill.yukhin@intel.com>
Co-Authored-By: Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Co-Authored-By: Michael Zolotukhin <michael.v.zolotukhin@intel.com>

From-SVN: r215589
2014-09-25 08:21:17 +00:00
Alexander Ivchenko deb90bb564 AVX-512. Update vec_set<mode>_0 pattern.
gcc/
	* config/i386/sse.md
	(define_insn "vec_set<mode>_0"): Add EVEX version.

Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com>
Co-Authored-By: Anna Tikhonova <anna.tikhonova@intel.com>
Co-Authored-By: Ilya Tocar <ilya.tocar@intel.com>
Co-Authored-By: Ilya Verbin <ilya.verbin@intel.com>
Co-Authored-By: Kirill Yukhin <kirill.yukhin@intel.com>
Co-Authored-By: Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Co-Authored-By: Michael Zolotukhin <michael.v.zolotukhin@intel.com>

From-SVN: r215588
2014-09-25 08:19:39 +00:00
Alexander Ivchenko 1bdf255a6b AVX-512. Add convert ps2pd and ps2dq.
gcc/
	* config/i386/sse.md
	(define_insn
	"<fixsuffix>fix_trunc<mode><sselongvecmodelower>2<mask_name><round_saeonly_name>"):
	New.
	(define_insn "<fixsuffix>fix_truncv2sfv2di2<mask_name>"): Ditto.
	(define_insn "ufix_trunc<mode><sseintvecmodelower>2<mask_name>"): Ditto.
	(define_insn "sse2_cvtss2sd<round_saeonly_name>"): Change
	"nonimmediate_operand" to "<round_saeonly_nimm_predicate>".
	(define_insn "avx_cvtpd2ps256<mask_name>"): Add masking.
	(define_expand "sse2_cvtpd2ps_mask): New.
	(define_insn "*sse2_cvtpd2ps<mask_name>"): Add masking.
	(define_insn "sse2_cvtps2pd<mask_name>"): Add masking.

Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com>
Co-Authored-By: Anna Tikhonova <anna.tikhonova@intel.com>
Co-Authored-By: Ilya Tocar <ilya.tocar@intel.com>
Co-Authored-By: Ilya Verbin <ilya.verbin@intel.com>
Co-Authored-By: Kirill Yukhin <kirill.yukhin@intel.com>
Co-Authored-By: Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Co-Authored-By: Michael Zolotukhin <michael.v.zolotukhin@intel.com>

From-SVN: r215586
2014-09-25 08:18:14 +00:00
Alexander Ivchenko 42815c486a AVX-512. Add pd2dq and dq2pd converts.
gcc/
	* config/i386/i386.c
	(avx512f_ufix_notruncv8dfv8si_mask_round): Rename to ...
	(ufix_notruncv8dfv8si2_mask_round): ... this.
	* config/i386/sse.md
	(define_insn "avx512f_cvtdq2pd512_2): Update TARGET check.
	(define_insn "avx_cvtdq2pd256_2"): Add EVEX version.
	(define_insn "sse2_cvtdq2pd<mask_name>"): Add masking.
	(define_insn "avx_cvtpd2dq256<mask_name>"): Ditto.
	(define_expand "sse2_cvtpd2dq"): Delete.
	(define_insn "sse2_cvtpd2dq<mask_name>"): Add masking and
	make 2nd operand const0 vector.
	(define_insn "avx512f_ufix_notruncv8dfv8si<mask_name><round_name>"):
	Delete.
	(define_mode_attr pd2udqsuff): New.
	(define_insn
	"ufix_notrunc<mode><si2dfmodelower>2<mask_name><round_name>"): Ditto.
	(define_insn "ufix_notruncv2dfv2si2<mask_name>"): Ditto.
	(define_insn "*avx_cvttpd2dq256_2"): Delete.
	(define_expand "sse2_cvttpd2dq"): Ditto.
	(define_insn "sse2_cvttpd2dq<mask_name>"): Add masking and
	make 2nd operand const0 vector.

Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com>
Co-Authored-By: Anna Tikhonova <anna.tikhonova@intel.com>
Co-Authored-By: Ilya Tocar <ilya.tocar@intel.com>
Co-Authored-By: Ilya Verbin <ilya.verbin@intel.com>
Co-Authored-By: Kirill Yukhin <kirill.yukhin@intel.com>
Co-Authored-By: Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Co-Authored-By: Michael Zolotukhin <michael.v.zolotukhin@intel.com>

From-SVN: r215584
2014-09-25 08:15:30 +00:00
Jakub Jelinek 356bbc4c20 re PR tree-optimization/63341 (Vectorization miscompilation with -mcpu=power7)
PR tree-optimization/63341
	* tree-vectorizer.h (vect_create_data_ref_ptr,
	vect_create_addr_base_for_vector_ref): Add another tree argument
	defaulting to NULL_TREE.
	* tree-vect-data-refs.c (vect_create_data_ref_ptr): Add byte_offset
	argument, pass it down to vect_create_addr_base_for_vector_ref.
	(vect_create_addr_base_for_vector_ref): Add byte_offset argument,
	add that to base_offset too if non-NULL.
	* tree-vect-stmts.c (vectorizable_load): Add byte_offset variable,
	for dr_explicit_realign_optimized set it to vector byte size
	- 1 instead of setting offset, pass byte_offset down to
	vect_create_data_ref_ptr.

	* gcc.dg/vect/pr63341-1.c: New test.
	* gcc.dg/vect/pr63341-2.c: New test.

From-SVN: r215583
2014-09-25 10:12:49 +02:00
Andreas Krebbel abdc17f814 [multiple changes]
2014-09-25  Andreas Arnez  <arnez@linux.vnet.ibm.com>

	PR 63300/debug
	* tree.c (check_base_type): New.
	(check_qualified_type): Exploit new helper function above.
	* tree.h (check_base_type): New prototype.
	* dwarf2out.c (get_nearest_type_subqualifiers): New.
	(modified_type_die): Fix handling for qualifiers.  Qualifiers to
	"peel off" are now determined using get_nearest_type_subqualifiers.

2014-09-25  Mark Wielaard  <mjw@redhat.com>

	PR 63300/debug
	* gcc.dg/debug/dwarf2/stacked-qualified-types-1.c: New testcase.
	* gcc.dg/debug/dwarf2/stacked-qualified-types-2.c: Likewise.
	* gcc.dg/guality/pr63300-const-volatile.c: New testcase.

From-SVN: r215582
2014-09-25 07:37:36 +00:00
Jakub Jelinek d90c0a5980 re PR c++/63249 ([OpenMP] Spurious »set but not used« warnings when actually used in OpenMP target's array section's lower-bound and length)
PR c++/63249
	* semantics.c (handle_omp_array_sections_1): Call mark_rvalue_use
	on low_bound and length.

	* g++.dg/gomp/pr63249.C: New test.
	* c-c++-common/gomp/pr63249.c: New test.

2014-09-25  Thomas Schwinge  <thomas@codesourcery.com>

	PR c++/63249
	* c-parser.c (c_parser_omp_variable_list): Call mark_exp_read
	on low_bound and length.

From-SVN: r215580
2014-09-25 08:47:43 +02:00
Tobias Burnus a16ee37946 check.c (check_co_collective): Renamed from
2014-09-25  Tobias Burnus  <burnus@net-b.de>

gcc/fortran
        * check.c (check_co_collective): Renamed from
        * check_co_minmaxsum,
        handle co_reduce.
        (gfc_check_co_minmax, gfc_check_co_sum): Update call.
        (gfc_check_co_broadcast, gfc_check_co_reduce): New.
        * gfortran.h (gfc_isym_id): Add GFC_ISYM_CO_BROADCAST and
        GFC_ISYM_CO_REDUCE.
        * intrinsic.c (add_subroutines): Add co_reduce and co_broadcast.
        * intrinsic.h (gfc_check_co_broadcast, gfc_check_co_reduce): Add
        proto types.
        * intrinsic.texi (CO_BROADCAST): Add.
        * trans.h (gfor_fndecl_co_broadcast): New.
        * trans-decl.c (gfor_fndecl_co_broadcast): Ditto.
        (gfc_build_builtin_function_decls): Add decl for it,
        * trans-intrinsic.c (conv_co_collective): Renamed from
        conv_co_minmaxsum. Handle co_reduce.
        (gfc_conv_intrinsic_subroutine): Handle co_reduce.

gcc/testsuite/
        * gfortran.dg/coarray/collectives_3.f90: New.
        * gfortran.dg/coarray_collectives_9.f90: New.
        * gfortran.dg/coarray_collectives_10.f90: New.
        * gfortran.dg/coarray_collectives_11.f90: New.
        * gfortran.dg/coarray_collectives_12.f90: New.

libgfortran/
        * caf/libcaf.h (_gfortran_caf_co_broadcast): New prototype.
        * caf/single.c (_gfortran_caf_co_broadcast): New.

From-SVN: r215579
2014-09-25 08:07:15 +02:00
Tim Shen 2bde8cac37 re PR libstdc++/63199 (Inserting std::wregex to std::vector loses some std::wregex values)
PR libstdc++/63199
	* include/bits/regex.h (basic_regex::basic_regex, basic_regex::assign,
	basic_regex::imbue, basic_regex::getloc, basic_regex::swap): Add
	_M_loc for basic_regex.
	* include/bits/regex_automaton.h: Add _M_traits for _NFA.
	* include/bits/regex_compiler.h (_Compiler::_M_get_nfa, __compile_nfa):
	Make _Compiler::_M_nfa heap allocated.
	* include/bits/regex_compiler.tcc (_Compiler::_Compiler): Make
	_Compiler::_M_nfa heap allocated.
	* include/bits/regex_executor.h (_Executor::_M_is_word):
	Fix accessing _M_traits.
	* include/bits/regex_executor.tcc (_Executor::_M_dfs):
	Fix accessing _M_traits.
	* testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/63199.cc:
	New testcase.

From-SVN: r215578
2014-09-25 04:43:19 +00:00
Jan Hubicka 21a9ce6e0e ipa-devirt.c (possible_polymorphic_call_targets): Remove forgotten debug output; canonicalize querries more wtih LTO.
* ipa-devirt.c (possible_polymorphic_call_targets): Remove
	forgotten debug output; canonicalize querries more wtih LTO.

From-SVN: r215577
2014-09-25 03:37:31 +00:00
Jan Hubicka 00d31d5e9f Fix previous commit.
From-SVN: r215576
2014-09-25 02:11:13 +00:00
Jan Hubicka ba3923391e cgraph.h (class ipa_polymorphic_call_context): Move here from ipa-utils.h; add stream_int and stream_out methods.
* cgraph.h (class ipa_polymorphic_call_context): Move here from
	ipa-utils.h; add stream_int and stream_out methods.
	(cgraph_indirect_call_info): Remove SPECILATIVE_OFFSET,
	OUTER_TYPE, SPECULATIVE_OUTER_TYPE, MAYBE_IN_CONSTRUCTION
	MAYBE_DERIVED_TYPE and SPECULATIEVE_MAYBE_DERIVED_TYPE;
	add CONTEXT.
	(ipa_polymorphic_call_context::ipa_polymorphic_call_context,
	ipa_polymorphic_call_context::ipa_polymorphic_call_context,
	ipa_polymorphic_call_context::clear_speculation,
	ipa_polymorphic_call_context::clear_outer_type): Move here from
	ipa-utils.h
	* ipa-utils.h (class ipa_polymorphic_call_context): Move to cgraph.h
	(ipa_polymorphic_call_context::ipa_polymorphic_call_context,
	ipa_polymorphic_call_context::ipa_polymorphic_call_context,
	ipa_polymorphic_call_context::clear_speculation,
	ipa_polymorphic_call_context::clear_outer_type): Likewise.
	* ipa-devirt.c: Include data-streamer.h, lto-streamer.h and
	streamer-hooks.h
	(ipa_polymorphic_call_context::stream_out): New method.
	(ipa_polymorphic_call_context::stream_in): New method.
	(noncall_stmt_may_be_vtbl_ptr_store): Add forgotten static.
	* ipa-prop.c (ipa_analyze_indirect_call_uses): Do not care about
	OUTER_TYPE.
	(ipa_analyze_call_uses): Simplify.
	(update_indirect_edges_after_inlining): Do not care about outer_type.
	(ipa_write_indirect_edge_info): Update.
	(ipa_write_indirect_edge_info): Likewise.
	* cgraph.c (cgraph_node::create_indirect_edge): Simplify.
	(dump_edge_flags): Break out from ...
	(cgraph_node::dump): ... here; dump indirect edges.

From-SVN: r215575
2014-09-25 01:48:34 +00:00
GCC Administrator 20149bd284 Daily bump.
From-SVN: r215574
2014-09-25 00:16:48 +00:00
Jonathan Wakely 2d57872662 re PR libstdc++/56193 (ios_base should replace operator void* with explicit operator bool in C++11 onwards.)
PR libstdc++/56193
	* config/abi/pre/gnu.ver: Add new exports.
	* include/bits/basic_ios.h (basic_ios::operator bool): Define.
	* src/c++98/ios_locale.cc (basic_ios::operator void*): Instantiate.

From-SVN: r215571
2014-09-24 23:13:35 +01:00
Jonathan Wakely 407f9471cd gnu.ver: Make GLIBCXX_3.4 patterns stricter so the new GLIBCXX_3.4.21 symbols don't...
* config/abi/pre/gnu.ver: Make GLIBCXX_3.4 patterns stricter so the
	new GLIBCXX_3.4.21 symbols don't match them.

From-SVN: r215570
2014-09-24 23:13:29 +01:00
Jan Hubicka a198145843 ipa-utils.h (polymorphic_call_context): Add metdhos dump, debug and clear_outer_type.
* ipa-utils.h (polymorphic_call_context): Add
	metdhos dump, debug and clear_outer_type.
	(ipa_polymorphic_call_context::ipa_polymorphic_call_context): Simplify.
	(ipa_polymorphic_call_context::clear_outer_type): New method.
	* ipa-prop.c (ipa_analyze_call_uses): Do not overwrite offset.
	* ipa-devirt.c (types_odr_comparable): New function.
	(types_must_be_same_for_odr): New function.
	(odr_subtypes_equivalent_p): Simplify.
	(possible_placement_new): Break out from ...
	(ipa_polymorphic_call_context::restrict_to_inner_type): ... here;
	be more cuatious about returning false in cases the context may be
	valid in derived type or via placement new.
	(contains_type_p): Clear maybe_derived_type
	(ipa_polymorphic_call_context::dump): New method.
	(ipa_polymorphic_call_context::debug): New method.
	(ipa_polymorphic_call_context::set_by_decl): Cleanup comment.
	(ipa_polymorphic_call_context::set_by_invariant): Simplify.
	(ipa_polymorphic_call_context::ipa_polymorphic_call_context): Simplify.
	(possible_polymorphic_call_targets): Trust context.restrict_to_inner_class
	to suceed on all valid cases; remove confused sanity check.
	(dump_possible_polymorphic_call_targets): Simplify.

From-SVN: r215569
2014-09-24 20:30:21 +00:00
François Dumont c6195f588b re PR libstdc++/29988 (More stl_tree.h enhancements: improving operator=)
2014-09-24  François Dumont  <fdumont@gcc.gnu.org>

	PR libstdc++/29988
	* include/bits/stl_tree.h (_Rb_tree_reuse_or_alloc_node<>): New.
	(_Rb_tree_alloc_node<>): New.
	(_Rb_tree<>::operator=(_Rb_tree<>&&)): New.
	(_Rb_tree<>::_M_assign_unique): New.
	(_Rb_tree<>::_M_assign_equal): New.
	(_Rb_tree<>): Adapt to reuse allocated nodes as much as possible.
	* include/bits/stl_map.h
	(std::map<>::operator=(std::map<>&&)): Default implementation.
	(std::map<>::operator=(initializer_list<>)): Adapt to use
	_Rb_tree::_M_assign_unique.
	* include/bits/stl_multimap.h
	(std::multimap<>::operator=(std::multimap<>&&)): Default implementation.
	(std::multimap<>::operator=(initializer_list<>)): Adapt to use
	_Rb_tree::_M_assign_equal.
	* include/bits/stl_set.h
	(std::set<>::operator=(std::set<>&&)): Default implementation.
	(std::set<>::operator=(initializer_list<>)): Adapt to use
	_Rb_tree::_M_assign_unique.
	* include/bits/stl_multiset.h
	(std::multiset<>::operator=(std::multiset<>&&)): Default implementation.
	(std::multiset<>::operator=(initializer_list<>)): Adapt to use
	_Rb_tree::_M_assign_equal.
	* testsuite/23_containers/map/allocator/copy_assign.cc (test03): New.
	* testsuite/23_containers/map/allocator/init-list.cc: New.
	* testsuite/23_containers/map/allocator/move_assign.cc (test03): New.
	* testsuite/23_containers/multimap/allocator/copy_assign.cc
	(test03): New.
	* testsuite/23_containers/multimap/allocator/init-list.cc: New.
	* testsuite/23_containers/multimap/allocator/move_assign.cc
	(test03): New.
	* testsuite/23_containers/multiset/allocator/copy_assign.cc
	(test03): New.
	* testsuite/23_containers/multiset/allocator/init-list.cc: New.
	* testsuite/23_containers/multiset/allocator/move_assign.cc
	(test03): New.
	* testsuite/23_containers/set/allocator/copy_assign.cc (test03): New.
	* testsuite/23_containers/set/allocator/init-list.cc: New.
	* testsuite/23_containers/set/allocator/move_assign.cc (test03): New.

From-SVN: r215568
2014-09-24 19:55:35 +00:00
Aldy Hernandez 00de328a7a cgraph.h, [...]: Rename all instances of DECL_ABSTRACT to DECL_ABSTRACT_P.
* cgraph.h, dbxout.c, dwarfout2.c, gimple-fold.c,
    	lto-streamer-out.c, print-tree.c, symtab.c, tree-inline.c,
    	tree-streamer-in.c, tree-streamer-out.c, tree.c, tree.h,
    	varpool.c: Rename all instances of DECL_ABSTRACT to
    	DECL_ABSTRACT_P.

    cp/
    	* class.c, decl.c, optimize.c: Rename all instances of
    	DECL_ABSTRACT to DECL_ABSTRACT_P.

    lto/
    	* lto-symtab.c, lto.c: Rename all instances of DECL_ABSTRACT to
    	DECL_ABSTRACT_P.

From-SVN: r215567
2014-09-24 19:50:24 +00:00
Bill Schmidt 7606cbaeff rs6000.c (insn_is_swappable_p): Don't provide special handling for stores whose SET_SRC is an UNSPEC (such as...
[gcc]

2014-09-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* config/rs6000/rs6000.c (insn_is_swappable_p): Don't provide
	special handling for stores whose SET_SRC is an UNSPEC (such as
	UNSPEC_STVE).


[gcc/testsuite]

2014-09-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* gcc.target/powerpc/swaps-p8-17.c: New test.

From-SVN: r215564
2014-09-24 18:35:33 +00:00
Jiong Wang 2b63a3acfa Improve prepare_shrink_wrap to sink more instructions
gcc/
    * shrink-wrap.c (move_insn_for_shrink_wrap): Add further check when
    !REG_P (src) to release more instruction sink opportunities.

  gcc/testsuite/
    * gcc.target/aarch64/shrink_wrap_symbol_ref_1.c: New testcase.

From-SVN: r215563
2014-09-24 18:30:34 +00:00
Wilco Dijkstra 8919453c16 [AArch64] Improve regmove_costs for 128-bit types.
2014-09-24  Wilco Dijkstra <wdijkstr@arm.com>

  gcc/
    * config/aarch64/aarch64.c (aarch64_register_move_cost): Add register move
    costs for 128-bit types.

From-SVN: r215562
2014-09-24 18:22:50 +00:00
Martin Jambor 6fe4595534 ipa-prop.c (ipa_edge_duplication_hook): Update controlled_use_count when duplicating a PASS_THROUGH jump function when...
2014-09-24  Martin Jambor  <mjambor@suse.cz>

	* ipa-prop.c (ipa_edge_duplication_hook): Update controlled_use_count
	when duplicating a PASS_THROUGH jump function when creating a
	speculative edge.

From-SVN: r215560
2014-09-24 19:49:16 +02:00
Marek Polacek 083e891e69 re PR c/61405 (Not emitting "enumeration value not handled in switch" warning for bit-field enums)
PR c/61405
	PR c/53874
gcc/
	* asan.c (maybe_instrument_call): Add default case.
	* ipa-pure-const.c (special_builtin_state): Likewise.
	* predict.c (expr_expected_value_1): Likewise.
	* lto-streamer-out.c (write_symbol): Initialize variable.
gcc/c-family/
	* c-common.h (struct c_common_resword): Don't define CPP_KEYWORD.
gcc/c/
	* c-parser.c: Don't define CPP_KEYWORD.
	(c_parser_switch_statement): Pass original type to c_finish_case.
	* c-tree.h (c_finish_case): Update declaration.
	* c-typeck.c (c_finish_case): Add TYPE parameter.  Pass it
	conditionally to c_do_switch_warnings.
gcc/cp/
	* semantics.c (finish_switch_cond): Call unlowered_expr_type.
	* tree.c (bot_manip): Add default case.
	* parser.c (cp_parser_primary_expression): Cast the controlling
	expression of a switch to an int.
	(cp_parser_unqualified_id): Likewise.
gcc/testsuite/
	* c-c++-common/pr53874.c: New test.
	* c-c++-common/pr61405.c: New test.
libcpp/
	* include/cpplib.h (enum cpp_ttype): Define CPP_KEYWORD.

From-SVN: r215559
2014-09-24 17:23:56 +00:00
Kyrylo Tkachov dc9c1b91e6 [AArch64] Use __aarch64_vget_lane* macros for getting the lane in some lane multiply intrinsics.
* config/aarch64/arm_neon.h (vmuld_lane_f64): Use macro for getting
	the lane.
	(vmuld_laneq_f64): Likewise.
	(vmuls_lane_f32): Likewise.
	(vmuls_laneq_f32): Likewise.

	* gcc.target/aarch64/simd/vmul_lane_const_lane_1.c: New test.

From-SVN: r215553
2014-09-24 12:47:59 +00:00
Kirill Yukhin 0f549a6781 re PR bootstrap/63235 (building fails with --disable-bootstrap)
PR bootstrap/63235

gcc/
	* varpool.c (varpool_node::add): Pass decl attributes
	to lookup_attribute.

From-SVN: r215552
2014-09-24 12:27:30 +00:00
Jonathan Wakely 8d6b3c1632 re PR libstdc++/63353 (libstdc++-v3/src/c++11/ios.cc:232: possible typo ?)
PR libstdc++/63353
	* src/c++11/ios.cc (ios_base::_M_swap): Fix typo.

From-SVN: r215549
2014-09-24 10:40:10 +01:00
Jakub Jelinek acf816a3ac re PR sanitizer/63316 (False asan positive)
PR sanitizer/63316
	* asan.c (asan_expand_check_ifn): Fix up align >= 8 optimization.

	* c-c++-common/asan/pr63316.c: New test.

From-SVN: r215547
2014-09-24 11:14:17 +02:00
Thomas Preud'homme aa29ea0cd4 re PR tree-optimization/63266 (Test regression: gcc.target/sh/pr53568-1.c)
2014-09-24  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    PR tree-optimization/63266
    * tree-ssa-math-opts.c (struct symbolic_number): Add comment about
    marker for unknown byte value.
    (MARKER_MASK): New macro.
    (MARKER_BYTE_UNKNOWN): New macro.
    (HEAD_MARKER): New macro.
    (do_shift_rotate): Mark bytes with unknown values due to sign
    extension when doing an arithmetic right shift. Replace hardcoded
    mask for marker by new MARKER_MASK macro.
    (find_bswap_or_nop_1): Likewise and adjust ORing of two symbolic
    numbers accordingly.

    gcc/testsuite/
    PR tree-optimization/63266
    * gcc.dg/optimize-bswapsi-1.c (swap32_d): New bswap pass test.

From-SVN: r215546
2014-09-24 08:27:21 +00:00
Alexander Ivchenko 415ebad0b3 AVX-512. Add cvtps2 insn patterns.
gcc/
	* config/i386/sse.md
	(define_insn
	"<sse2_avx_avx512f>_fix_notrunc<sf2simodelower><mode><mask_name>"):
	Add masking.
	(define_insn "fix_truncv8sfv8si2<mask_name>"): Ditto.
	(define_insn "fix_truncv4sfv4si2<mask_name>"): Ditto.


Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com>
Co-Authored-By: Anna Tikhonova <anna.tikhonova@intel.com>
Co-Authored-By: Ilya Tocar <ilya.tocar@intel.com>
Co-Authored-By: Ilya Verbin <ilya.verbin@intel.com>
Co-Authored-By: Kirill Yukhin <kirill.yukhin@intel.com>
Co-Authored-By: Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Co-Authored-By: Michael Zolotukhin <michael.v.zolotukhin@intel.com>

From-SVN: r215545
2014-09-24 08:06:30 +00:00
Alexander Ivchenko 41755b527c AVX-512. Add vpshuf[lh]w insn patterns.
gcc/
	* config/i386/sse.md
	(define_c_enum "unspec"): Add UNSPEC_PSHUFHW, UNSPEC_PSHUFLW.
	(define_insn "<mask_codefor>avx512bw_pshuflwv32hi<mask_name>"): New.
	(define_expand "avx512vl_pshuflwv3_mask"): Ditto.
	(define_insn "avx2_pshuflw_1<mask_name>"): Add masking.
	(define_expand "avx512vl_pshuflw_mask"): New.
	(define_insn "sse2_pshuflw_1<mask_name>"): Add masking.
	(define_insn "<mask_codefor>avx512bw_pshufhwv32hi<mask_name>"): New.
	(define_expand "avx512vl_pshufhwv3_mask"): Ditto.
	(define_insn "avx2_pshufhw_1<mask_name>"): Add masking.
	(define_expand "avx512vl_pshufhw_mask"): New.
	(define_insn "sse2_pshufhw_1<mask_name>"): Add masking.


Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com>
Co-Authored-By: Anna Tikhonova <anna.tikhonova@intel.com>
Co-Authored-By: Ilya Tocar <ilya.tocar@intel.com>
Co-Authored-By: Ilya Verbin <ilya.verbin@intel.com>
Co-Authored-By: Kirill Yukhin <kirill.yukhin@intel.com>
Co-Authored-By: Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Co-Authored-By: Michael Zolotukhin <michael.v.zolotukhin@intel.com>

From-SVN: r215544
2014-09-24 08:05:17 +00:00
Alexander Ivchenko d286410b07 AVX-512. Add shuffles (pd, 32x4, etc.).
gcc/
	* config/i386/i386.c
	(ix86_expand_args_builtin): Handle CODE_FOR_sse2_shufpd,
	CODE_FOR_sse2_sse2_shufpd_mask, CODE_FOR_sse2_avx512dq_shuf_f64x2_mask,
	CODE_FOR_sse2_avx512dq_shuf_i64x2_mask,
	CODE_FOR_sse2_avx512vl_shuf_i32x4_mask and
	CODE_FOR_sse2_avx512vl_shuf_f32x4_mask.
	* config/i386/sse.md
	(define_expand "avx512dq_shuf_<shuffletype>64x2_mask"): New.
	(define_insn
	"<mask_codefor>avx512dq_shuf_<shuffletype>64x2_1<mask_name>"): Ditto.
	(define_expand "avx512vl_shuf_<shuffletype>32x4_mask"): Ditto.
	(define_insn
	"<mask_codefor>avx512vl_shuf_<shuffletype>32x4_1<mask_name>"): Ditto.
	(define_expand "avx512vl_pshufdv3_mask"): Ditto.
	(define_insn "avx2_pshufd_1<mask_name>"): Add masking.
	(define_expand "avx512vl_pshufd_mask"): New.
	(define_insn "sse2_pshufd_1<mask_name>"): Add masking.


Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com>
Co-Authored-By: Anna Tikhonova <anna.tikhonova@intel.com>
Co-Authored-By: Ilya Tocar <ilya.tocar@intel.com>
Co-Authored-By: Ilya Verbin <ilya.verbin@intel.com>
Co-Authored-By: Kirill Yukhin <kirill.yukhin@intel.com>
Co-Authored-By: Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Co-Authored-By: Michael Zolotukhin <michael.v.zolotukhin@intel.com>

From-SVN: r215543
2014-09-24 08:04:04 +00:00