Commit Graph

151597 Commits

Author SHA1 Message Date
Uros Bizjak a60c335103 i386.h (HARD_REGNO_CALLER_SAVE_MODE): Apply HImode and QImode fixups to general and mask registers only.
* config/i386/i386.h (HARD_REGNO_CALLER_SAVE_MODE): Apply HImode and
	QImode fixups to general and mask registers only.

From-SVN: r244504
2017-01-16 20:58:59 +01:00
Joseph Myers 05c6bc14cb * sv.po: Update.
From-SVN: r244503
2017-01-16 18:20:23 +00:00
David Malcolm 0ef1f9cd8c Fix testcases for PR c/78304
The testcases as written made assumptions about size_t and long
being invalid for use with "%u".

We only need some invalid type, so this patch converts them to
attempt a "const char *" with "%u", which should be invalid for
every target.

gcc/testsuite/ChangeLog:
	PR c/78304
	* gcc.dg/format/pr78304.c: Convert argument from integral type
	to a pointer.
	* gcc.dg/format/pr78304-2.c: Likewise.

From-SVN: r244502
2017-01-16 18:08:45 +00:00
Carl Love 76689ffc1e rs6000-c (altivec_overloaded_builtins): Add support for built-in functions vector signed char vec_nabs (vector signed...
gcc/ChangeLog:

2017-01-16  Carl Love  <cel@us.ibm.com>

	* config/rs6000/rs6000-c (altivec_overloaded_builtins): Add support
	for built-in functions
	vector signed char vec_nabs (vector signed char)
	vector signed short vec_nabs (vector signed short)
	vector signed int vec_nabs (vector signed int)
	vector signed long long vec_nabs (vector signed long long)
	vector float vec_nabs (vector float)
	vector double vec_nabs (vector double)
	* config/rs6000/rs6000-builtin.def: Add definitions for NABS functions
	and NABS overload.
	* config/rs6000/altivec.md: New define_expand nabs<mode>2 types
	* config/rs6000/altivec.h: New define for vec_nabs built-in function.
	* doc/extend.texi: Update the documentation file for the new built-in
	functions.

gcc/testsuite/ChangeLog:

2017-01-16  Carl Love  <cel@us.ibm.com>

	* gcc.target/powerpc/builtins-3.c: New vec_nabs testcase.
	* gcc.target/powerpc/builtins-3-p8.c: New vec_nabs testcase.

From-SVN: r244501
2017-01-16 17:18:05 +00:00
Martin Sebor 1a41367709 gimple-ssa-sprintf.c (format_directive): Correct a typo in a warning message.
gcc/ChangeLog:
	* gimple-ssa-sprintf.c (format_directive): Correct a typo in a warning
	message.

From-SVN: r244500
2017-01-16 10:08:42 -07:00
Carl Love ce12ee9e68 builtins-3-p9.c (test_ne_long()): Change arguments and return type to bool long long.
gcc/testsuite/ChangeLog:

2017-01-16 Carl Love  <cel@us.ibm.com>

	* gcc.target/powerpc/builtins-3-p9.c (test_ne_long()):
	Change arguments and return type to bool long long.

From-SVN: r244499
2017-01-16 17:03:14 +00:00
Jonathan Wakely 83291b8b8c PR66145 use new ABI for std::ios::failure exceptions
PR libstdc++/66145
	* src/c++11/functexcept.cc: Use new ABI for std::ios_base::failure
	exceptions.
	* testsuite/27_io/basic_ios/copyfmt/char/1.cc: Don't override ABI
	for test, so new ios::failure can be caught.
	* testsuite/27_io/basic_ios/exceptions/char/1.cc: Likewise.
	* testsuite/27_io/basic_istream/extractors_arithmetic/char/
	exceptions_failbit.cc: Likewise.
	* testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/
	exceptions_failbit.cc: Likewise.
	* testsuite/27_io/basic_istream/extractors_other/char/
	exceptions_null.cc: Likewise.
	* testsuite/27_io/basic_istream/extractors_other/wchar_t/
	exceptions_null.cc: Likewise.
	* testsuite/27_io/basic_istream/sentry/char/12297.cc: Likewise.
	* testsuite/27_io/basic_istream/sentry/wchar_t/12297.cc: Likewise.
	* testsuite/27_io/basic_ostream/inserters_other/char/
	exceptions_null.cc: Likewise.
	* testsuite/27_io/basic_ostream/inserters_other/wchar_t/
	exceptions_null.cc: Likewise.
	* testsuite/27_io/ios_base/storage/2.cc: Likewise.

From-SVN: r244498
2017-01-16 15:58:06 +00:00
Martin Sebor b336037ddc PR testsuite/79051 - FAIL: gcc.dg/attr-alloc_size-4.c (test for warnings, line 140)
gcc/testsuite/ChangeLog:
	* gcc.dg/attr-alloc_size-4.c: Avoid exercising a test case except
	on x86.

From-SVN: r244497
2017-01-16 08:50:47 -07:00
Paolo Carlini 1ddca3f365 revert: re PR c++/71737 (ICE following 2x pack expansion in non-pack with template alias)
/c-family
2017-01-16  Paolo Carlini  <paolo.carlini@oracle.com>

	Revert:
     	2017-01-16  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/71737
	* c-common.c (set_underlying_type): Always set DECL_ORIGINAL_TYPE.

/testsuite
2017-01-16  Paolo Carlini  <paolo.carlini@oracle.com>

	Revert:
        2017-01-16  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/71737
	* g++.dg/cpp0x/pr71737.C: New.

From-SVN: r244496
2017-01-16 15:43:06 +00:00
Bill Schmidt 290687fb4e rs6000.c (rtx_is_swappable_p): Change UNSPEC_VSX__XXSPLTD to require special splat handling.
[gcc]

2017-01-16  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* config/rs6000/rs6000.c (rtx_is_swappable_p): Change
	UNSPEC_VSX__XXSPLTD to require special splat handling.

[gcc/testsuite]

2017-01-16  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

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

From-SVN: r244495
2017-01-16 15:05:35 +00:00
David Malcolm 436afa16af system.h: Poison strndup (PR bootstrap/78616)
gcc/ChangeLog:
	PR bootstrap/78616
	* system.h: Poison strndup.

From-SVN: r244494
2017-01-16 15:03:41 +00:00
Jonathan Wakely b497fbc10a PR78702 fix accessibility of locale::facet::__shim
PR libstdc++/78702
	* include/bits/locale_classes.h (locale::facet::__shim): Change from
	private to protected.
	* src/c++11/cxx11-shim_facets.cc (__shim_accessor): Define helper to
	make locale::facet::__shim accessible.

From-SVN: r244491
2017-01-16 11:41:41 +00:00
Ville Voutilainen 53426b63b3 PR libstdc++/78389 fix backwards size adjustments.
PR libstdc++/78389
* include/bits/list.tcc (merge(list&&)): Fix backwards size adjustments.
(merge(list&&, _StrictWeakOrdering)): Likewise.
* testsuite/23_containers/list/operations/78389.cc: Add
better test for the sizes.

From-SVN: r244490
2017-01-16 13:36:33 +02:00
Alan Modra 7cefdfd5aa Powerpc bootstrap failure due to duplicate case value
PR target/79098
	* config/rs6000/rs6000.c (rs6000_legitimate_combined_insn): Don't
	use a switch.

From-SVN: r244489
2017-01-16 21:42:57 +10:30
Georg-Johann Lay 1bcd0192bf avr.h (BRANCH_COST): Increase by 4.
gcc/
	* config/avr/avr.h (BRANCH_COST) [reload_completed]: Increase by 4.

From-SVN: r244488
2017-01-16 09:48:45 +00:00
Richard Biener a99ce94c8a re PR tree-optimization/77283 (Revision 238005 disables loop unrolling)
2017-01-13  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/77283
	* gimple-ssa-split-paths.c: Include gimple-ssa.h, tree-phinodes.h
	and ssa-iterators.h.
	(is_feasible_trace): Implement a cost model based on joiner
	PHI node uses.

	* gcc.dg/tree-ssa/split-path-7.c: Adjust.
	* gcc.dg/tree-ssa/split-path-8.c: New testcase.
	* gcc.dg/tree-ssa/split-path-9.c: Likewise.

From-SVN: r244487
2017-01-16 09:33:12 +00:00
Paolo Carlini 7d2f3f1d29 re PR c++/71737 (ICE following 2x pack expansion in non-pack with template alias)
/c-family
2017-01-16  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/71737
	* c-common.c (set_underlying_type): Always set DECL_ORIGINAL_TYPE.

/testsuite
2017-01-16  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/71737
	* g++.dg/cpp0x/pr71737.C: New.

From-SVN: r244486
2017-01-16 09:09:30 +00:00
Eric Botcazou d743728f90 opt62.adb: New test.
* gnat.dg/opt62.adb: New test.
	* gnat.dg/opt62_pkg.ads: New helper.

From-SVN: r244485
2017-01-16 08:46:20 +00:00
Ian Lance Taylor a2a7ea4834 runtime: rename siginfo to _siginfo_t
Since the name siginfo winds up in runtime.inc, this avoids a name
    collision on systems that define "struct siginfo" in the system header
    files.
    
    Reviewed-on: https://go-review.googlesource.com/35239

From-SVN: r244484
2017-01-16 01:21:42 +00:00
Ian Lance Taylor 58a3a26bbd libgo: correct golang_org Makefile variables not used on all systems
Patch by Rainer Orth.
    
    Reviewed-on: https://go-review.googlesource.com/35238

From-SVN: r244483
2017-01-16 01:05:10 +00:00
GCC Administrator be65f7a6cc Daily bump.
From-SVN: r244482
2017-01-16 00:16:21 +00:00
Uros Bizjak 9c9a11f60d i386.c (ix86_legitimate_combined_insn): Do not call recog here.
* config/i386/i386.c (ix86_legitimate_combined_insn): Do not
	call recog here.  Assert that INSN_CODE (insn) is non-negative.

From-SVN: r244478
2017-01-15 19:42:29 +01:00
Segher Boessenkool 81e63b637a Make rtl_split_edge work for jumps that fall through (PR72749)
If a jump always falls through but that cannot be optimised away, like
is the case with the PowerPC bdnz insn if its jump target is the same as
the fallthrough, sched gets confused if it schedules some instructions
from before that jump instruction to behind it: it splits the
fallthrough branch, but the jump target isn't updated, and things fall
apart as in the PR.  This patch fixes it.

The second patch fragment makes -fsched-verbose=N work for N>=4; the
currently scheduled fragment can now contain a label.  Everything else
seems to work fine with that.


	PR target/72749
	* cfgrtl.c (rtl_split_edge): Also patch jump insns that jump to the
	fallthrough.
	* haifa-sched.c (dump_insn_stream): Don't crash if there is a label
	in the currently scheduled RTL fragment.

From-SVN: r244477
2017-01-15 18:06:00 +01:00
Segher Boessenkool 32a8d3f66a ifcvt: Don't make invalid insns for a cond trap (PR78751)
As shown in the PR, ifcvt will happily make invalid insns when given the
chance.  This patch teaches it some manners.


	PR rtl-optimization/78751
	* ifcvt.c (find_cond_trap): If we generated a non-existing insn,
	give up.

From-SVN: r244476
2017-01-15 18:03:55 +01:00
Jeff Law 0cb4b758f5 re PR tree-optimization/79090 (DSE wrongly removes store at variable offset)
PR tree-optimization/79090
	* tree-ssa-dse.c (valid_ao_ref_for_dse): Reject zero length and
	variable length stores.
	(compute_trims): Delete dead assignment to *trim_tail.
	(dse_dom_walker::dse_optimize_stmt): Optimize mem* calls with
	zero length.

From-SVN: r244472
2017-01-15 02:34:01 -07:00
GCC Administrator 3d812e26ea Daily bump.
From-SVN: r244471
2017-01-15 00:16:21 +00:00
Joseph Myers 09330605aa * fr.po: Update.
From-SVN: r244468
2017-01-15 00:03:19 +00:00
Bernd Schmidt 90aead2189 re PR rtl-optimization/78626 (ICE in rtl_verify_bb_insns, at cfgrtl.c:2656 (error: flow control insn inside a basic block))
PR rtl-optimization/78626
	PR rtl-optimization/78727
	* cprop.c (one_cprop_pass): Collect unconditional traps in the middle
	of a block, and split such blocks after everything else is finished.

        PR rtl-optimization/78626
        PR rtl-optimization/78727
	* gcc.dg/torture/pr78626.c: New test.
	* gcc.dg/torture/pr78727.c: New test.

From-SVN: r244467
2017-01-14 09:52:18 -07:00
Alan Modra afaecc23b5 Testcase from pr72749
PR target/72749
	* gcc.c-torture/compile/pr72749.c: New test.

From-SVN: r244466
2017-01-14 23:59:29 +10:30
Alan Modra d6b251481d Avoid PR72749 by not using unspecs
Rather than using unspecs in doloop insns to stop combine creating
these insns, use legitimate_combined_insn.

	PR target/72749
	* combine.c (recog_for_combine_1): Set INSN_CODE before calling
	target legitimate_combined_insn.
	* config/rs6000/rs6000.c (TARGET_LEGITIMATE_COMBINED_INSN): Define.
	(rs6000_legitimate_combined_insn): New function.
	* config/rs6000/rs6000.md (UNSPEC_DOLOOP): Delete, and remove
	all uses.
	(ctr<mode>_internal3): Rename from *ctr<mode>_internal5.
	(ctr<mode>_internal4): Rename from *ctr<mode>_internal6.
	(ctr<mode>_internal1, ctr<mode>_internal2): Remove '*' from name.

From-SVN: r244465
2017-01-14 23:54:46 +10:30
Jonathan Wakely ac4664f9da Skip tests that are incompatible with Profile Mode
* testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc:
	Skip test when -D_GLIBCXX_PROFILE mode is included in options.
	* testsuite/23_containers/map/modifiers/extract.cc: Likewise.
	* testsuite/23_containers/map/modifiers/insert_or_assign/1.cc:
	Likewise.
	* testsuite/23_containers/map/modifiers/try_emplace/1.cc: Likewise.
	* testsuite/23_containers/multimap/modifiers/extract.cc: Likewise.
	* testsuite/23_containers/multiset/modifiers/extract.cc: Likewise.
	* testsuite/23_containers/set/modifiers/extract.cc: Likewise.
	* testsuite/23_containers/unordered_map/modifiers/extract.cc:
	Likewise.
	* testsuite/23_containers/unordered_multimap/modifiers/extract.cc::
	Likewise.
	* testsuite/23_containers/unordered_multiset/modifiers/extract.cc::
	Likewise.
	* testsuite/23_containers/unordered_set/modifiers/extract.cc:
	Likewise.
	* testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc:
	Likewise.
	* testsuite/25_algorithms/binary_search/partitioned.cc: Likewise.
	* testsuite/25_algorithms/equal_range/partitioned.cc: Likewise.
	* testsuite/25_algorithms/lexicographical_compare/71545.cc: Likewise.
	* testsuite/25_algorithms/lower_bound/partitioned.cc: Likewise.
	* testsuite/25_algorithms/upper_bound/partitioned.cc: Likewise.
	* testsuite/libstdc++-prettyprinters/cxx11.cc: Likewise.
	* testsuite/libstdc++-prettyprinters/cxx17.cc: Likewise.
	* testsuite/libstdc++-prettyprinters/debug.cc: Likewise.
	* testsuite/libstdc++-prettyprinters/debug_cxx11.cc: Likewise.
	* testsuite/libstdc++-prettyprinters/libfundts.cc: Likewise.
	* testsuite/libstdc++-prettyprinters/simple.cc: Likewise.
	* testsuite/libstdc++-prettyprinters/simple11.cc: Likewise.
	* testsuite/libstdc++-prettyprinters/whatis.cc: Likewise.

From-SVN: r244464
2017-01-14 11:55:22 +00:00
Gerald Pfeifer f2b2206586 * doc/frontends.texi (G++ and GCC): Remove references to Java.
From-SVN: r244463
2017-01-14 08:03:17 +00:00
Jeff Law 39b6ee2406 Fix comment
From-SVN: r244462
2017-01-13 23:20:16 -07:00
Jeff Law 1a15be6865 re PR tree-optimization/33562 (aggregate DSE disabled)
PR tree-optimization/33562
	PR tree-optimization/61912
	PR tree-optimization/77485
	* tree-ssa-dse.c (delete_dead_call): Accept gsi rather than
	a statement.
	(delete_dead_assignment): Likewise.
	(dse_dom_walker::dse_optimize_stmt): Pass in the gsi rather than
	statement to delete_dead_call and delete_dead_assignment.

From-SVN: r244461
2017-01-13 23:16:23 -07:00
Ian Lance Taylor a2bd02aecf compiler: implement type aliases
This is a start of implementing type aliases (`type T1 = T2`) in the
    Go frontend.  This is incomplete, in that the reflection information
    is not updated for an embedded type alias.  It is also not well
    tested.  Finally, the change to the language has not been approved.
    This should be regarded as preliminary work for experimental use.
    
    Update golang/go#18130.
    
    Reviewed-on: https://go-review.googlesource.com/35120

From-SVN: r244460
2017-01-14 01:50:31 +00:00
GCC Administrator 3220ce78c9 Daily bump.
From-SVN: r244459
2017-01-14 00:16:13 +00:00
Ian Lance Taylor c2047754c3 libgo: update to Go 1.8 release candidate 1
Compiler changes:
      * Change map assignment to use mapassign and assign value directly.
      * Change string iteration to use decoderune, faster for ASCII strings.
      * Change makeslice to take int, and use makeslice64 for larger values.
      * Add new noverflow field to hmap struct used for maps.
    
    Unresolved problems, to be fixed later:
      * Commented out test in go/types/sizes_test.go that doesn't compile.
      * Commented out reflect.TestStructOf test for padding after zero-sized field.
    
    Reviewed-on: https://go-review.googlesource.com/35231

gotools/:
	Updates for Go 1.8rc1.
	* Makefile.am (go_cmd_go_files): Add bug.go.
	(s-zdefaultcc): Write defaultPkgConfig.
	* Makefile.in: Rebuild.

From-SVN: r244456
2017-01-14 00:05:42 +00:00
Joe Seymour 829afb8f05 t-msp430 (libmul_none.a, [...]): Filter archived prerequisites.
2017-01-13  Joe Seymour  <joe.s@somniumtech.com>
* config/msp430/t-msp430 (libmul_none.a, libmul_16.a, libmul_32.a,
libmul_f5.a): Filter archived prerequisites.

From-SVN: r244455
2017-01-13 17:18:07 -05:00
Janne Blomqvist c1e9bbcc49 Revert r244448
From-SVN: r244454
2017-01-13 21:53:16 +02:00
David Malcolm be4aa83d6f Don't suppress bogus usage of macros from system headers in -Wformat (PR c/78304)
gcc/ChangeLog:
	PR c/78304
	* substring-locations.c (format_warning_va): Strengthen case 1 so
	that both endpoints of the substring must be within the format
	range for just the substring to be printed.

gcc/testsuite/ChangeLog:
	PR c/78304
	* gcc.dg/format/diagnostic-ranges.c (test_macro): Undef INT_FMT.
	(test_macro_2): New test.
	(test_macro_3): New test.
	(test_macro_4): New test.
	(test_non_contiguous_strings): Convert line number to line offset.
	* gcc.dg/format/pr78304-2.c: New test case.
	* gcc.dg/format/pr78304.c: New test case.

From-SVN: r244453
2017-01-13 19:27:43 +00:00
Uros Bizjak 7cdca3ec8a i386.opt (msgx): Use ix86_isa_flags2 variable.
* config/i386/i386.opt (msgx): Use ix86_isa_flags2 variable.
	* config/i386/i386.c (ix86_target_string): Add missing options
	to isa_opts and reorder options by implied ISAs.  Rename isa_opts2 to
	isa2_opts, ix86_flag_opts to flag2_opts, ix86_target_other to
	flags_other and ix86_target_other to flags2_other.  Display unknown
	isa2 options.
	(ix86_valid_target_attribute_inner_p): Add missing options and
	reorder options by implied ISAs, as in ix86_target_string.

testsuite/ChangeLog:

	* gcc.target/i386/funcspec-56.inc: Add missing options and
	reorder options by implied ISAs, as in ix86_target_string.

From-SVN: r244452
2017-01-13 19:32:44 +01:00
Jonathan Wakely 0fdba3a81c PR65411 don't retry fclose on EINTR
PR libstdc++/65411
	* config/io/basic_file_stdio.cc (__basic_file<char>::close()): Don't
	retry fclose on EINTR.

From-SVN: r244451
2017-01-13 17:52:34 +00:00
Marek Polacek e3017e522a re PR c++/71166 (ICE with nested constexpr/initializer)
PR c++/71166
	* g++.dg/cpp0x/constexpr-array18.C: New test.

From-SVN: r244450
2017-01-13 17:27:54 +00:00
Jonathan Wakely aa1ba96b87 Remove unused include from Profile Mode header
* include/profile/base.h: Remove unused header that leads to header
	cycle in C++17 mode.

From-SVN: r244449
2017-01-13 17:20:23 +00:00
Janne Blomqvist a6ab4e077b PR 78534 Change character length from int to size_t
In order to handle large character lengths on (L)LP64 targets, switch
the GFortran character length from an int to a size_t.

This is an ABI change, as procedures with character arguments take
hidden arguments with the character length.

I also changed the _size member in vtables from int to size_t, as
there were some cases where character lengths and sizes were
apparently mixed up and caused regressions otherwise. Although I
haven't tested, this might enable very large derived types as well.

Also, as there are some places in the frontend were negative character
lengths are used as special flag values, in the frontend the character
length is handled as a signed variable of the same size as a size_t,
although in the runtime library it really is size_t.

I haven't changed the character length variables for the co-array
intrinsics, as this is something that may need to be synchronized with
OpenCoarrays.

This is v4 of the patch. v3 was applied but had to reverted due to
breaking bootstrap. The fix is in resolve.c:resolve_charlen, where
it's necessary to check that an expression is constant before using
mpz_sgn.

Overview of v3 of the patch: All the issues pointed out by FX's review
of v2 have been fixed. In particular, there are now new functions
gfc_mpz_get_hwi and gfc_mpz_set_hwi, similar to the GMP functions
mpz_get_si and mpz_set_si, except that they get/set a HOST_WIDE_INT
instead of a long value. Similarly, gfc_get_int_expr now takes a
HOST_WIDE_INT instead of a long, gfc_extract_long is replaced by
gfc_extract_hwi. Also, the preliminary work to handle
gfc_charlen_type_node being unsigned has been removed.

Regtested on x86_64-pc-linux-gnu and i686-pc-linux-gnu.

frontend:

2017-01-13  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/78534
	PR fortran/66310
	* class.c (gfc_find_derived_vtab): Use gfc_size_kind instead of
	hardcoded kind.
	(find_intrinsic_vtab): Likewise.
	* expr.c (gfc_get_character_expr): Length parameter of type
	gfc_charlen_t.
	(gfc_get_int_expr): Value argument of type HOST_WIDE_INT.
	(gfc_extract_hwi): New function.
	(simplify_const_ref): Make string_len of type gfc_charlen_t.
	(gfc_simplify_expr): Use HOST_WIDE_INT for substring refs.
	* gfortran.h (gfc_mpz_get_hwi): New prototype.
	(gfc_mpz_set_hwi): Likewise.
	(gfc_charlen_t): New typedef.
	(gfc_expr): Use gfc_charlen_t for character lengths.
	(gfc_size_kind): New extern variable.
	(gfc_extract_hwi): New prototype.
	(gfc_get_character_expr): Use gfc_charlen_t for character length.
	(gfc_get_int_expr): Use HOST_WIDE_INT type for value argument.
	* iresolve.c (gfc_resolve_repeat): Pass string length directly without
	temporary, use gfc_charlen_int_kind.
	* match.c (select_intrinsic_set_tmp): Use HOST_WIDE_INT for charlen.
	* misc.c (gfc_mpz_get_hwi): New function.
	(gfc_mpz_set_hwi): New function.
	* module.c (atom_int): Change type from int to HOST_WIDE_INT.
	(parse_integer): Don't complain about large integers.
	(write_atom): Use HOST_WIDE_INT for integers.
	(mio_integer): Handle integer type mismatch.
	(mio_hwi): New function.
	(mio_intrinsic_op): Use HOST_WIDE_INT.
	(mio_array_ref): Likewise.
	(mio_expr): Likewise.
	* resolve.c (resolve_select_type): Use HOST_WIDE_INT for charlen,
	use snprintf.
	(resolve_substring_charlen): Use gfc_charlen_int_kind.
	(resolve_charlen): Use mpz_sgn to determine sign.
	* simplify.c (gfc_simplify_repeat): Use HOST_WIDE_INT/gfc_charlen_t
	instead of long.
	* target-memory.c (size_character): Length argument of type
	gfc_charlen_t.
	(gfc_encode_character): Likewise.
	(gfc_interpret_character): Use gfc_charlen_t.
	* target-memory.h (gfc_encode_character): Modify prototype.
	* trans-array.c (get_array_ctor_var_strlen): Use
	gfc_conv_mpz_to_tree_type.
	* trans-const.c (gfc_conv_mpz_to_tree_type): New function.
	* trans-const.h (gfc_conv_mpz_to_tree_type): New prototype.
	* trans-expr.c (gfc_class_len_or_zero_get): Build const of type
	gfc_charlen_type_node.
	(gfc_conv_intrinsic_to_class): Use gfc_charlen_int_kind instead of
	4, fold_convert to correct type.
	(gfc_conv_class_to_class): Build const of type size_type_node for
	size.
	(gfc_copy_class_to_class): Likewise.
	(gfc_conv_string_length): Use same type in expression.
	(gfc_conv_substring): Likewise, use HOST_WIDE_INT for charlen.
	(gfc_conv_string_tmp): Make sure len is of the right type.
	(gfc_conv_concat_op): Use same type in expression.
	(gfc_conv_procedure_call): Likewise.
	(alloc_scalar_allocatable_for_subcomponent_assignment):
	fold_convert to right type.
	(gfc_trans_subcomponent_assign): Likewise.
	(trans_class_vptr_len_assignment): Build const of correct type.
	(gfc_trans_pointer_assignment): Likewise.
	(alloc_scalar_allocatable_for_assignment): fold_convert to right
	type in expr.
	(trans_class_assignment): Build const of correct type.
	* trans-intrinsic.c (gfc_conv_associated): Likewise.
	(gfc_conv_intrinsic_repeat): Do calculation in sizetype.
	* trans-io.c (gfc_build_io_library_fndecls): Use
	gfc_charlen_type_node for character lengths.
	* trans-stmt.c (gfc_trans_label_assign): Build const of
	gfc_charlen_type_node.
	(gfc_trans_character_select): Likewise.
	(gfc_trans_allocate): Likewise, don't typecast strlen result.
	(gfc_trans_deallocate): Don't typecast strlen result.
	* trans-types.c (gfc_size_kind): New variable.
	(gfc_init_types): Determine gfc_charlen_int_kind and gfc_size_kind
	from size_type_node.

testsuite:

2017-01-13  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/78534
	PR fortran/66310
	* gfortran.dg/repeat_4.f90: Use integers of kind C_SIZE_T.
	* gfortran.dg/repeat_7.f90: New test for PR 66310.
	* gfortran.dg/scan_2.f90: Handle potential cast in assignment.
	* gfortran.dg/string_1.f90: Limit to ilp32 targets.
	* gfortran.dg/string_1_lp64.f90: New test.
	* gfortran.dg/string_3.f90: Limit to ilp32 targets.
	* gfortran.dg/string_3_lp64.f90: New test.

libgfortran:

2017-01-13  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/78534
	* intrinsics/args.c (getarg_i4): Use gfc_charlen_type.
	(get_command_argument_i4): Likewise.
	(get_command_i4): Likewise.
	* intrinsics/chmod.c (chmod_internal): Likewise.
	* intrinsics/env.c (get_environment_variable_i4): Likewise.
	* intrinsics/extends_type_of.c (struct vtype): Use size_t for size
	member.
	* intrinsics/gerror.c (gerror): Use gfc_charlen_type.
	* intrinsics/getlog.c (getlog): Likewise.
	* intrinsics/hostnm.c (hostnm_0): Likewise.
	* intrinsics/string_intrinsics_inc.c (string_len_trim): Rework to
	work if gfc_charlen_type is unsigned.
	(string_scan): Likewise.
	* io/transfer.c (transfer_character): Modify prototype.
	(transfer_character_write): Likewise.
	(transfer_character_wide): Likewise.
	(transfer_character_wide_write): Likewise.
	(transfer_array): Typecast to avoid signed-unsigned comparison.
	* io/unit.c (is_trim_ok): Use gfc_charlen_type.
	* io/write.c (namelist_write): Likewise.
	* libgfortran.h (gfc_charlen_type): Change typedef to size_t.

From-SVN: r244448
2017-01-13 19:05:48 +02:00
Richard Sandiford d3da63e543 Avoid excessively-big hash tables in empty-add cycles
A big source of cache misses when compiling a recent version of
gimple-match.ii was the call to cv_cache.empty () in clear_cv_cache.
The problem was that at one early point the hash table had grown
to 8191 entries (128k on LP64 hosts).  It then stayed at that size
for the rest of the compilation, even though subsequent uses needed
only a small number of entries (usually fewer than ten).  We would
still clear the whole 128k each time clear_cv_cache was called.

empty() already looks for cases where the hash table is very big
and cuts it down.  At the moment it fires when the table is 1M
in size and reduces it to the next selected prime above 1K (so
almost 2K in practice).  One fix would have been to lower the
threshold, but that didn't feel like the right approach.  Reducing
the current limit of 1M by a factor of 8 would be pretty significant
on its own, but I think this cv_cache behaviour would have been a
problem even with 64k or 32k tables.

I think the existing check is really for cases in which even a
well-populated table would need to be shrunk rather than cleared.
Here the problem isn't that the table is excessively big in
absolute terms, more that one outlier has made the table much
too big for the general case.

traverse() already shrinks the table if it's "too empty",
which is taken to be if:

      no. elements * 8 < capacity && capacity > 32

So an alternative would be to apply the same test (and the same choice
of shrunken size) to empty_slow too.  The patch below does this.
It gives a 2.5% improvement in gimple-match.ii compile time at -O0 -g
and doesn't seem to adversely affect any other tests I've tried.

Of course, there's a theoretical risk of a table alternating between
one large element count and one small element count.  If there was a
factor of eight difference between the two, we could shrink the table
on seeing each small element count, then grow it again when adding the
large number of elements.  That seems pretty unlikely in practice
though.

Also, empty_slow() does involve a traversal if some form of manual
gc is needed on active elements, so trying to recover from an outlier
should have even more benefit there.  (cv_cache uses automatic gc and so
the traversal gets optimised away.)

The calculation of the existing 1M threshold was assuming that each
entry was pointer-sized.  This patch makes it use the actual size of the
entry instead.

Tested on aarch64-linux-gnu and x86_64-linux-gnu.

gcc/
	* hash-table.h (hash_table::too_empty_p): New function.
	(hash_table::expand): Use it.
	(hash_table::traverse): Likewise.
	(hash_table::empty_slot): Use sizeof (value_type) instead of
	sizeof (PTR) to convert bytes to elements.  Shrink the table
	if the current size is excessive for the current number of
	elements.

From-SVN: r244447
2017-01-13 16:00:26 +00:00
Richard Sandiford 3d8e492088 Short-circuit alt_fail case in record_reg_classes
record_reg_classes is often the hottest function when generating
unoptimised output.  It seems typical for over 60% of the instructions
it handles to be moves, and of course moves tend to be the instructions
with the longest constraint strings.

Maybe we should avoid using move constraints to set costs in unoptimised
output and instead use the "natural" class for the mode being moved.
That's too invasive for stage 3 though.

However, seeing so many moves means that we see many "failing"
alternatives, usually because of '*' or because of hard registers
in function call sequences.  The frequency of alternatives that are
detected as failures after the first operand tends again to be more
than 60%.  Previously we would continue to process the other operands
of the alternative regardless.  This patch instead adds a short-cut.

As well as avoiding unnecessary work, it means that the alt_fail
variable can be jump-threaded away.

Tested on aach64-linux-gnu and x86_64-linux-gnu.  It reduces compile
time by about 1% on some tests with "-g -O0".

gcc/
	* ira-costs.c (record_reg_classes): Break from the inner loop
	early once alt_fail is known to be true.  Update outer loop
	handling accordingly.

From-SVN: r244446
2017-01-13 15:56:04 +00:00
Jonathan Wakely 92daf2dedd Add string_view support to COW std::string
PR libstdc++/79075
	* include/bits/basic_string.h [_GLIBCXX_USE_CXX11_ABI] (basic_string):
	Make _If_sv private.
	[!_GLIBCXX_USE_CXX11_ABI] (basic_string): Add member functions taking
	basic_string_view arguments.

From-SVN: r244445
2017-01-13 15:53:07 +00:00
Jeff Law 7c9560a578 tree-ssa-dse.c (decrement_count): New function.
* tree-ssa-dse.c (decrement_count): New function.
	(increment_start_addr, maybe_trim_memstar_call): Likewise.
	(dse_dom_walker::optimize_stmt): Call maybe_trim_memstar_call directly
	when we know the partially dead statement is a mem* function.

	* gcc.dg/tree-ssa/ssa-dse-25.c: New test.

From-SVN: r244444
2017-01-13 08:50:11 -07:00
Jeff Law 9e59e99a60 re PR middle-end/61912 (Missed (partial) dead store elimination for structures on GIMPLE)
PR tree-optimization/61912
	PR tree-optimization/77485
	* tree-ssa-dse.c: Include expr.h.
	(maybe_trim_constructor_store): New function.
	(maybe_trim_partially_dead_store): Call maybe_trim_constructor_store.

	PR tree-optimization/61912
	PR tree-optimization/77485
	* g++.dg/tree-ssa/ssa-dse-1.C: New test.
	* gcc.dg/tree-ssa/pr30375: Adjust expected output.
	* gcc.dg/tree-ssa/ssa-dse-24.c: New test.

From-SVN: r244443
2017-01-13 08:46:22 -07:00