Add an abstract incremental hash data type

Some files in gcc, like lto or tree, do large scale incremential hashing.
The current jhash implementation of this could be likely improved
by using an incremential hash that does not do a full rehashing
for every new value added.

This patch adds a new "inchash" class that abstracts the internal
state of the hash. This makes it easier to plug in new hashes
and also cleans up the code a bit.

Right now it is just implemented in the same way as the old
iterative hash in tree.c. The previous iterative hash code
from tree.c moved into a new separate file. Also I fixed up all
users to include the new header.

It should not really significantly change any hashing by itself,
it's mostly a cleanup at this point.

v2: Remove begin. Add commutative interface.
Add merge hash interface.  Add add_flag.

gcc/:

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

	* Makefile.in (OBJS): Add inchash.o.
	(PLUGIN_HEADERS): Add inchash.h.
	* ipa-devirt.c: Include inchash.h.
	* lto-streamer-out.c: Dito.
	* tree-ssa-dom.c: Dito.
	* tree-ssa-pre.c: Dito.
	* tree-ssa-sccvn.c: Dito.
	* tree-ssa-tail-merge.c: Dito.
	* asan.c: Dito.
	* tree.c (iterative_hash_hashval_t): Move to ...
	(iterative_hash_host_wide_int): Move to ...
	* inchash.c: Here. New file.
	* tree.h (iterative_hash_hashval_t): Move to ...
	(iterative_hash_host_wide_int): Move to ...
	* inchash.h: Here. New file.

gcc/lto/:

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

	* lto.c: Include inchash.h

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213054 138bc75d-0d04-0410-961f-82ee72b054a4
Convert LTO type hashing to the new inchash interface

Should not really change any behavior, it's just a more abstract
interface, but uses the same underlying hash functions.

gcc/lto/:

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

	* lto.c (hash_canonical_type): Convert to inchash.
	(iterative_hash_canonical_type): Dito.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213055 138bc75d-0d04-0410-961f-82ee72b054a4
Convert the tree.c type hashing over to inchash

v2: Use commutative interface. Be much nearer to the old
code.

gcc/:

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

	* tree.c (build_type_attribute_qual_variant): Use inchash.
	(type_hash_list): Dito.
	(attribute_hash_list): Dito
	(iterative_hstate_expr): Dito.
	(iterative_hash_expr): Dito.
	(build_range_type_1): Dito.
	(build_array_type_1): Dito.
	(build_function_type): Dito.
	(build_method_type_directly): Dito.
	(build_offset_type): Dito.
	(build_complex_type): Dito.
	(make_vector_type): Dito.
	* tree.h (iterative_hash_expr): Add compat wrapper.
	(iterative_hstate_expr): Add.

gcc/lto/:

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

	* lto.c (hash_canonical_type): Call iterative_hstate_expr.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213056 138bc75d-0d04-0410-961f-82ee72b054a4
Convert lto streamer out hashing to inchash

No substantial changes, although the hash values will be slightly
different.

v2: add_flag moved to inchash. Some minor changes.

gcc/:

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

	* lto-streamer-out.c (hash_tree): Convert to inchash.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213057 138bc75d-0d04-0410-961f-82ee72b054a4
	* libgcov-driver.c (set_gcov_dump_complete,
	reset_gcov_dump_complete, get_gcov_dump_complete): Remove global
	functions polluting user's namespace.
	(gcov_exit): Set variable directly.
	(gcov_clear): Reset variable directly.
	* libgcov-interface.c (get_gcov_dymp_complete,
	reset_gov_dump_complete): Remove declarations.
	(__gcov_reset, __gcov_dump): Don't call them.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213058 138bc75d-0d04-0410-961f-82ee72b054a4
	* lto-streamer-out.c (struct sccs): Turn to ...
	(class DFS): ... this one; refactor the DFS walk so it can
	be re-done on per-SCC basis.
	(DFS::DFS): New constructor.
	(DFS::~DFS): New destructor.
	(hash_tree): Add new MAP argument holding in-SCC hash values;
	remove POINTER_TYPE hashing hack.
	(scc_entry_compare): Rename to ...
	(DFS::scc_entry_compare): ... this one.
	(hash_scc): Rename to ...
	(DFS::hash_scc): ... this one; pass output_block instead
	of streamer_cache; work harder to get unique and stable SCC
	hashes.
	(DFS_write_tree): Rename to ...
	(DFS::DFS_write_tree): ... this one; add SINGLE_P parameter.
	(lto_output_tree): Update.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213059 138bc75d-0d04-0410-961f-82ee72b054a4
2014-07-25  Tobias Burnus  <burnus@net-b.de>

        * simplify.c (gfc_simplify_storage_size): Use proper
        integer kind for the returned value.

2014-07-25  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/storage_size_5.f90: New.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213060 138bc75d-0d04-0410-961f-82ee72b054a4
cp/

2014-07-25  Edward Smith-Rowland  <3dw4rd@verizon.net>

	Implement N4051 - Allow typename in a template template parameter
	* parser.c (cp_parser_type_parameter_key): New funtion;
	(cp_parser_token_is_type_parameter_key): Ditto;
	(cp_parser_type_parameter): Look for type-parameter-key for all versions
	but pedwarn for less than cxx1z.


testsuite/

2014-07-25  Edward Smith-Rowland  <3dw4rd@verizon.net>

	Implement N4051 - Allow typename in a template template parameter
	* lib/target-supports.exp (check_effective_target_c++1y): Now
	means C++1y and up.
	(check_effective_target_c++1y_down): New.
	(check_effective_target_c++1z_only): New.
	(check_effective_target_c++1z): New.
	* g++.dg/cpp1z/typename-tmpl-tmpl-parm.C: New.
	* g++.dg/cpp1z/typename-tmpl-tmpl-parm-neg.C: New.
	* g++.dg/cpp1z/typename-tmpl-tmpl-parm-.C: New.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213065 138bc75d-0d04-0410-961f-82ee72b054a4
Make FDO more tolerant to source changes

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213068 138bc75d-0d04-0410-961f-82ee72b054a4
Daily bump.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213071 138bc75d-0d04-0410-961f-82ee72b054a4
2014-07-26  Marc Glisse  <marc.glisse@inria.fr>

	PR target/44551
gcc/
	* simplify-rtx.c (simplify_binary_operation_1) <VEC_SELECT>:
	Optimize inverse of a VEC_CONCAT.
gcc/testsuite/
	* gcc.target/i386/pr44551-1.c: New file.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213076 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/
	* rtl.h (tls_referenced_p): Declare.
	* rtlanal.c (tls_referenced_p_1, tls_referenced_p): New functions.
	* config/mips/mips.c (mips_tls_symbol_ref_1): Delete.
	(mips_cannot_force_const_mem): Use tls_referenced_p.
	* config/pa/pa-protos.h (pa_tls_referenced_p): Delete.
	* config/pa/pa.h (CONSTANT_ADDRESS_P): Use tls_referenced_p
	instead of pa_tls_referenced_p.
	* config/pa/pa.c (hppa_legitimize_address, pa_cannot_force_const_mem)
	(pa_emit_move_sequence, pa_emit_move_sequence): Likewise.
	(pa_legitimate_constant_p): Likewise.
	(pa_tls_symbol_ref_1, pa_tls_referenced_p): Delete.
	* config/rs6000/rs6000.c (rs6000_tls_referenced_p): Delete.
	(rs6000_cannot_force_const_mem, rs6000_emit_move)
	(rs6000_address_for_altivec): Use tls_referenced_p instead of
	rs6000_tls_referenced_p.
	(rs6000_tls_symbol_ref_1): Delete.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213077 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/
	* ira-costs.c (find_costs_and_classes): For -O0, use the best class
	as the allocation class if it isn't likely to be spilled.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213078 138bc75d-0d04-0410-961f-82ee72b054a4
2014-07-26  Tobias Burnus  <burnus@net-b.de>

        * check.c (gfc_check_sizeof): Permit for assumed type if and
        only if it has an array descriptor.
        * intrinsic.c (do_ts29113_check): Permit SIZEOF.
        (add_functions): SIZEOF is an Inquiry function.
        * intrinsic.texi (SIZEOF): Add note that only contiguous
        arrays are permitted.
        * trans-expr.c (gfc_conv_intrinsic_to_class): Handle assumed
        rank.
        * trans-intrinsic.c (gfc_conv_intrinsic_sizeof): Handle
        assumed type + array descriptor, CLASS and assumed rank.
        (gfc_conv_intrinsic_storage_size): Handle class arrays.

2014-07-26  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/sizeof_2.f90: Change dg-error.
        * gfortran.dg/sizeof_4.f90: New.
        * gfortran.dg/storage_size_1.f08: Correct expected
        value.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213079 138bc75d-0d04-0410-961f-82ee72b054a4
Minor tweaks.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213080 138bc75d-0d04-0410-961f-82ee72b054a4
	PR target/47230
	* configure.ac (alpha*-*-linux*): Use mh-alpha-linux.
	* configure: Regenerate.

config/ChangeLog:

	PR target/47230
	* mh-alpha-linux: New file.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213081 138bc75d-0d04-0410-961f-82ee72b054a4
	PR c/61077
	* gcc.dg/pr61077.c: Use \[^\n\]* instead of .* in the regexp.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213084 138bc75d-0d04-0410-961f-82ee72b054a4
Follow up to r213079.

2014-07-26  Tobias Burnus  <burnus@net-b.de>

        PR fortran/61881
        PR fortran/61888
        PR fortran/57305
        * intrinsic.texi (SIZEOF): Document changed behavior
        for polymorphic arrays.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213085 138bc75d-0d04-0410-961f-82ee72b054a4
Daily bump.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213089 138bc75d-0d04-0410-961f-82ee72b054a4
2014-07-26  Andrew Pinski  <apinski@cavium.com>

        * config/aarch64/aarch64.md (*extr_insv_lower_reg<mode>): Remove +
        from the read only register.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213090 138bc75d-0d04-0410-961f-82ee72b054a4