Commit Graph

185573 Commits

Author SHA1 Message Date
Jakub Jelinek f1c777f40a tree-optimization: Improve spaceship_replacement [PR94589]
On Wed, May 19, 2021 at 01:30:31PM -0400, Jason Merrill via Gcc-patches wrote:
> Here, when genericizing lexicographical_compare_three_way, we haven't yet
> walked the operands, so (a == a) still sees ADDR_EXPR <a>, but this is after
> we've changed the type of a to REFERENCE_TYPE.  When we try to fold (a == a)
> by constexpr evaluation, the constexpr code doesn't understand trying to
> take the address of a reference, and we end up crashing.
>
> Fixed by avoiding constexpr evaluation in genericize_spaceship, by using
> fold_build2 instead of build_new_op on scalar operands.  Class operands
> should have been expanded during parsing.

Unfortunately this slightly changed the IL and spaceship_replacement no
longer pattern matches it.

Here are 3 improvements that make it match:

1) as mentioned in the comment above spaceship_replacement, for
   strong_ordering, we are pattern matching something like:
   x == y ? 0 : x < y ? -1 : 1;
   and for partial_ordering
   x == y ? 0 : x < y ? -1 : x > y ? 1 : 2;
   but given the == comparison done first and the other comparisons only
   if == was false, we actually don't care if the other comparisons
   are < vs. <= (or > vs. >=), provided the operands of the comparison
   are the same; we know == is false when doing those and < vs. <= or
   > vs. >= have the same behavior for NaNs too
2) when y is an integral constant, we should treat x < 5 equivalently
   to x <= 4 etc.
3) the code punted if cond2_phi_edge wasn't a EDGE_TRUE_VALUE edge, but
   as the new IL shows, that isn't really needed; given 1) that
   > and >= are equivalent in the code, any of swapping the comparison
   operands, changing L[TE]_EXPR to G[TE]_EXPR or vice versa or
   swapping the EDGE_TRUE_VALUE / EDGE_FALSE_VALUE bits on the edges
   reverses one of the two comparisons

2021-05-21  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/94589
	* tree-ssa-phiopt.c (spaceship_replacement): For integral rhs1 and
	rhs2, treat x <= 4 equivalently to x < 5 etc.  In cmp1 and cmp2 (if
	not the same as cmp3) treat <= the same as < and >= the same as >.
	Don't require that cond2_phi_edge is true edge, instead take
	false/true edges into account based on cmp1/cmp2 comparison kinds.
2021-05-21 10:39:50 +02:00
Eric Botcazou f53aff92ac Fix spurious No_Elaboration violation for Size attribute
We optimize the associated range check but nevertheless flag a violation.

gcc/ada/
	* gcc-interface/trans.c (Call_to_gnu): Minor tweaks.
	(gnat_to_gnu_external): Likewise.
	(Raise_Error_to_gnu): Return an empty statement list if there is a
	condition and it is always false.
	(gnat_to_gnu): Do not check for elaboration code a priori during the
	translation but a posteriori instead.
2021-05-21 10:34:48 +02:00
Eric Botcazou b1cd7461ec Fix incorrect SLOC on instruction
This puts the missing SLOC on a statement generated by a return.

gcc/ada/
	* gcc-interface/trans.c (gnat_to_gnu) <N_Simple_Return_Statement>:
	Put a SLOC on the assignment from the return value to the return
	object in the copy-in/copy-out case.
2021-05-21 10:26:50 +02:00
Eric Botcazou e5bfda0204 Use EXACT_DIV_EXPR as much as possible
...when the division is exact, typically dividing TYPE_SIZE by BITS_PER_UNIT.

gcc/ada/
	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Replace
	CEIL_DIV_EXPR with EXACT_DIV_EXPR.
	* gcc-interface/misc.c (gnat_type_max_size): Likewise.
	* gcc-interface/utils.c (maybe_pad_type): Likewise.
	(finish_record_type): Likewise.  And always compute the unit size.
2021-05-21 10:21:09 +02:00
Uros Bizjak dcde81134c i386: Add minmax and abs patterns for 4-byte vectors [PR100637]
2021-05-21  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
	PR target/100637
	* config/i386/mmx.md (SMAXMIN_MMXMODEI): New mode iterator.
	(<smaxmin:code><SMAXMIN_MMXMODEI:mode>3): Macroize expander
	from <smaxmin:code>v4hi3> and <smaxmin:code><MMXMODE14:mode>3
	using SMAXMIN_MMXMODEI mode iterator.
	(*<smaxmin:code>v4qi3): New insn pattern.
	(*<smaxmin:code>v2hi3): Ditto.
	(SMAXMIN_VI_32): New mode iterator.
	(<smaxmin:code><SMAXMIN_VI_32>mode3): New expander.

	(UMAXMIN_MMXMODEI): New mode iterator.
	(<umaxmin:code><UMAXMIN_MMXMODEI:mode>3): Macroize expander
	from <umaxmin:code>v8qi3> and <umaxmin:code><MMXMODE24:mode>3
	using UMAXMIN_MMXMODEI mode iterator.
	(*<umaxmin:code>v4qi3): New insn pattern.
	(*<umaxmin:code>v2hi3): Ditto.
	(UMAXMIN_VI_32): New mode iterator.
	(<umaxmin:code><UMAXMIN_VI_32>mode3): New expander.

	(abs<VI_32:mode>2): New insn pattern.
	(ssse3_abs<MMXMODEI:mode>2, abs<MMXMODEI:mode>2): Move from ...
	* config/i386/sse.md: ... here.
2021-05-21 08:02:27 +02:00
Patrick Palka 11784fe27d libstdc++: Implement LWG 3490 change to drop_while_view::begin()
libstdc++-v3/ChangeLog:

	PR libstdc++/100606
	* include/std/ranges (drop_while_view::begin): Assert the
	precondition added by LWG 3490.
2021-05-21 00:05:18 -04:00
Patrick Palka 317a38cd46 libstdc++: Fix access issue in iota_view::_Sentinel [PR100690]
libstdc++-v3/ChangeLog:

	PR libstdc++/100690
	* include/std/ranges (iota_view::_Sentinel::_M_distance_from):
	Split out this member function from ...
	(iota_view::_Sentinel::operator-): ... here, for sake of access
	control.
	* testsuite/std/ranges/iota/iota_view.cc (test05): New test.
2021-05-20 23:39:05 -04:00
GCC Administrator ea34e2edd3 Daily bump. 2021-05-21 00:16:57 +00:00
David Edelsohn 5a3bf28119 aix: collect2 text files in archive
Rust places text files in archives.  AIX ld ignores such files with a
warning.  The collect2 wrapper for ld had been exiting with a fatal
error if it scanned an archive that contained a non-COFF file.

This patch updates collect2.c to issue a warning and ignore the file
member, matching the behavior of AIX ld.  GCC can encounter archives
created by Rust and should not issue a fatal error.  This changes
fatal_error to warning, with an implicit location and no associated
optimization flag.

gcc/ChangeLog:

2021-05-20  Clement Chigot  <clement.chigot@atos.net>
	    David Edelsohn  <dje.gcc@gmail.com>

	* collect2.c (scan_prog_file): Issue non-fatal warning for
	non-COFF files.
2021-05-20 17:21:31 -04:00
Jason Merrill 885035eacb c++: designators in single-element init lists
While looking at PR100489, it occurred to me that places that currently
use an initializer-list with a single element to initialize an object of the
same type shouldn't do that if the element has a designator.

gcc/cp/ChangeLog:

	* call.c (reference_binding): Check for designator.
	(implicit_conversion_1, build_special_member_call): Likewise.
	* decl.c (reshape_init_r): Likewise.
	* pt.c (do_class_deduction): Likewise.
	* typeck2.c (digest_init_r): Likewise.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/desig19.C: New test.
2021-05-20 16:59:17 -04:00
Jason Merrill 84fd1b5dff c++: designated init with anonymous union [PR100489]
My patch for PR98463 added an assert that tripped on this testcase, because
we ended up with a U CONSTRUCTOR with an initializer for a, which is not a
member of U.  We need to wrap the a initializer in another CONSTRUCTOR for
the anonymous union.

There was already support for this in process_init_constructor_record, but
not in process_init_constructor_union.  But since this is about brace
elision, it really belongs under reshape_init rather than digest_init, so
this patch moves the handling to reshape_init_class, which also handles
unions.

	PR c++/100489

gcc/cp/ChangeLog:

	* decl.c (reshape_init_class): Handle designator for
	member of anonymous aggregate here.
	* typeck2.c (process_init_constructor_record): Not here.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/desig18.C: New test.
2021-05-20 16:59:17 -04:00
Jonathan Wakely 64ba45c76e libstdc++: Do not use static_assert without message in C++11
libstdc++-v3/ChangeLog:

	* include/bits/random.tcc (__representable_as_double)
	(__p1_representable_as_double): Add "" to static asserts.
2021-05-20 21:12:15 +01:00
Jonathan Wakely 6b42b5a8a2 libstdc++: Use __builtin_unreachable for constexpr assertions [PR 100676]
The current implementation of compile-time precondition checks causes
compilation to fail by calling a non-constexpr function declared at
block scope. This breaks the CUDA compiler, which wraps some libstdc++
headers in a pragma that declares everything as a __host__ __device__
function, but others are not wrapped and so everything is a __host__
function. The local declaration thus gets redeclared as two different
types of function, which doesn't work.

Just use __builtin_unreachable to make constant evaluation fail, instead
of the local function declaration. Also simplify the assertion macros,
which has the side effect of giving simpler compilation errors when
using Clang.

libstdc++-v3/ChangeLog:

	PR libstdc++/100676
	* include/bits/c++config (__glibcxx_assert_1): Rename to ...
	(__glibcxx_constexpr_assert): ... this.
	(__glibcxx_assert_impl): Use __glibcxx_constexpr_assert.
	(__glibcxx_assert): Define as either __glibcxx_constexpr_assert
	or __glibcxx_assert_impl.
	(__glibcxx_assert_2): Remove
	* include/debug/macros.h (_GLIBCXX_DEBUG_VERIFY_AT_F): Use
	__glibcxx_constexpr_assert instead of __glibcxx_assert_1.
	* testsuite/21_strings/basic_string_view/element_access/char/back_constexpr_neg.cc:
	Adjust expected error.
	* testsuite/21_strings/basic_string_view/element_access/char/constexpr_neg.cc:
	Likewise.
	* testsuite/21_strings/basic_string_view/element_access/char/front_constexpr_neg.cc:
	Likewise.
	Likewise.
	* testsuite/21_strings/basic_string_view/element_access/wchar_t/back_constexpr_neg.cc:
	Likewise.
	* testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr_neg.cc:
	Likewise.
	* testsuite/21_strings/basic_string_view/element_access/wchar_t/front_constexpr_neg.cc:
	Likewise.
	* testsuite/23_containers/span/back_neg.cc: Likewise.
	* testsuite/23_containers/span/front_neg.cc: Likewise.
	* testsuite/23_containers/span/index_op_neg.cc: Likewise.
2021-05-20 20:49:57 +01:00
Jonathan Wakely ee336ecb2a c++: Add new warning options for C++ language mismatches
This adds new warning flags, enabled by default: -Wc++11-extensions,
-Wc++14-extensions, -Wc++17-extensions, -Wc++20-extensions, and
-Wc++23-extensions. The names of the flags are copied from Clang, which
already has similar options.

No new diagnostics are added, but the new OPT_Wxxx variables are used to
control existing pedwarns about occurences of new C++ constructs in code
using an old C++ standard dialect. This allows several existing warnings
that cannot currently be disabled to be controlled by the appropriate
-Wno-xxx flag. For example, it will now be possible to disable warnings
about using variadic templates in C++98 code, by using the new
-Wno-c++11-extensions option. This will allow libstdc++ headers to
disable those warnings unconditionally by using diagnostic pragmas, so
that they are not emitted even if -Wsystem-headers is used.

Some of the affected diagnostics are currently only given when
-Wpedantic is used. Now that we have a more specific warning flag, we
could consider making them not depend on -Wpedantic, and only on the new
flag. This patch does not do that, as it intends to make no changes to
what is accepted/rejected by default. The only effect should be that
the new option is shown when -fdiagnostics-show-option is active, and
that some warnings can be disabled by using the new flags (and for the
warnings that previously only dependend on -Wpedantic, it will now be
possible to disable just those warnings while still using -Wpedantic for
its other benefits).

gcc/c-family/ChangeLog:

	* c.opt (Wc++11-extensions, Wc++14-extensions)
	(Wc++17-extensions, Wc++20-extensions, Wc++23-extensions): New
	options.

gcc/cp/ChangeLog:

	* call.c (maybe_warn_array_conv): Use new warning option.
	* decl.c (mark_inline_variable, grokdeclarator): Likewise.
	* error.c (maybe_warn_cpp0x): Likewise.
	* parser.c (cp_parser_primary_expression)
	(cp_parser_unqualified_id)
	(cp_parser_pseudo_destructor_name)
	(cp_parser_lambda_introducer)
	(cp_parser_lambda_declarator_opt)
	(cp_parser_selection_statement)
	(cp_parser_init_statement)
	(cp_parser_decomposition_declaration)
	(cp_parser_function_specifier_opt)
	(cp_parser_static_assert)
	(cp_parser_namespace_definition)
	(cp_parser_using_declaration)
	(cp_parser_asm_definition)
	(cp_parser_ctor_initializer_opt_and_function_body)
	(cp_parser_initializer_list)
	(cp_parser_type_parameter_key)
	(cp_parser_member_declaration)
	(cp_parser_try_block)
	(cp_parser_std_attribute_spec): Likewise.
	* pt.c (check_template_variable): Likewise.

gcc/ChangeLog:

	* doc/invoke.texi (-Wno-c++11-extensions)
	(-Wno-c++14-extensions, -Wno-c++17-extensions)
	(-Wno-c++20-extensions, -Wno-c++23-extensions): Document
	new options.
2021-05-20 20:47:49 +01:00
Indu Bhagat 66168f96f0 dwarf: new dwarf_debuginfo_p predicate
This patch introduces a dwarf_debuginfo_p predicate that abstracts and
replaces complex checks on write_symbols.

gcc/c-family/ChangeLog:

	* c-lex.c (init_c_lex): Use dwarf_debuginfo_p.

gcc/ChangeLog:

	* config/c6x/c6x.c (c6x_output_file_unwind): Use dwarf_debuginfo_p.
	* config/darwin.c (darwin_override_options): Likewise.
	* config/i386/cygming.h (DBX_REGISTER_NUMBER): Likewise.
	* config/i386/darwin.h (DBX_REGISTER_NUMBER): Likewise.
	(DWARF2_FRAME_REG_OUT): Likewise.
	* config/mips/mips.c (mips_output_filename): Likewise.
	* config/rs6000/rs6000.c (rs6000_xcoff_declare_function_name):
	Likewise.
	(rs6000_dbx_register_number): Likewise.
	* dbxout.c: Include flags.h.
	* dwarf2cfi.c (cfi_label_required_p): Likewise.
	(dwarf2out_do_frame): Likewise.
	* except.c: Include flags.h.
	* final.c (dwarf2_debug_info_emitted_p): Likewise.
	(final_scan_insn_1): Likewise.
	* flags.h (dwarf_debuginfo_p): New function declaration.
	* opts.c (dwarf_debuginfo_p): New function definition.
	* targhooks.c (default_debug_unwind_info): Use dwarf_debuginfo_p.
	* toplev.c (process_options): Likewise.
2021-05-20 12:39:33 -07:00
Indu Bhagat 459d84e9b6 opts: change write_symbols to support bitmasks
To support multiple debug formats, we need to move away from explicit
enumeration of each individual combination of debug formats.

gcc/c-family/ChangeLog:

	* c-opts.c (c_common_post_options): Adjust access to debug_type_names.
	* c-pch.c (struct c_pch_validity): Use type uint32_t.
	(pch_init): Renamed member.
	(c_common_valid_pch): Adjust access to debug_type_names.

gcc/ChangeLog:

	* common.opt: Change type to support bitmasks.
	* flag-types.h (enum debug_info_type): Rename enumerator constants.
	(NO_DEBUG): New bitmask.
	(DBX_DEBUG): Likewise.
	(DWARF2_DEBUG): Likewise.
	(XCOFF_DEBUG): Likewise.
	(VMS_DEBUG): Likewise.
	(VMS_AND_DWARF2_DEBUG): Likewise.
	* flags.h (debug_set_to_format): New function declaration.
	(debug_set_count): Likewise.
	(debug_set_names): Likewise.
	* opts.c (debug_type_masks): Array of bitmasks for debug formats.
	(debug_set_to_format): New function definition.
	(debug_set_count): Likewise.
	(debug_set_names): Likewise.
	(set_debug_level): Update access to debug_type_names.
	* toplev.c: Likewise.

gcc/objc/ChangeLog:

	* objc-act.c (synth_module_prologue): Use uint32_t instead of enum
	debug_info_type.

gcc/testsuite/ChangeLog:

	* gcc.dg/pch/valid-1.c: Adjust diagnostic message in testcase.
	* lib/dg-pch.exp: Adjust diagnostic message.
2021-05-20 12:39:33 -07:00
Martin Sebor 9480491a64 PR middle-end/100684 - spurious -Wnonnull with -O1 on a C++ lambda
gcc/ChangeLog:

	PR middle-end/100684
	* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Handle C++ lambda.

gcc/testsuite/ChangeLog:

	PR middle-end/100684
	* g++.dg/warn/Wnonnull13.C: New test.
	* g++.dg/warn/Wnonnull14.C: New test.
	* g++.dg/warn/Wnonnull15.C: New test.
2021-05-20 13:15:58 -06:00
Bernd Edlinger 4f4a2f199b Fix a test failure in g++.dg/modules/omp-1_c.C
Adjust the line number due to previous commit,
which added a line for dg-require-effective-target.

2021-05-20  Bernd Edlinger  <bernd.edlinger@hotmail.de>

	* g++.dg/modules/omp-1_c.C: Fix testcase.
2021-05-20 20:25:57 +02:00
Patrick Palka d5cbe0f0d4 libstdc++: Implement missing P0896R4 changes to reverse_iterator [PR100639]
This implements the P0896R4 changes to reverse_iterator's member types
value_type, difference_type and reference in C++20 mode, which fixes
taking the reverse_iterator of an iterator with a non-integral
difference_type (such as iota_view<long long>).

libstdc++-v3/ChangeLog:

	PR libstdc++/100639
	* include/bits/stl_iterator.h (reverse_iterator::difference_type):
	In C++20 mode, define in terms of iter_difference_t as per P0896R4.
	(reverse_iterator::reference): Likewise, but with iter_reference_t.
	(reverse_iterator::value_type): Likewise, but with iter_value_t.
	* testsuite/std/ranges/adaptors/reverse.cc (test08): New test.
	* testsuite/24_iterators/reverse_iterator/100639.cc: New test.
2021-05-20 14:08:17 -04:00
Uros Bizjak a71f55c482 i386: Avoid integer logic insns for 32bit and 64bit vector modes [PR100701]
Integer logic instructions clobber flags, do not use them for
32bit and 64bit vector modes.

2021-05-20  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
	PR target/100701
	* config/i386/i386.md (isa): Remove x64_bmi.
	(enabled): Remove x64_bmi.
	* config/i386/mmx.md (mmx_andnot<MMXMODEI:mode>3):
	Remove general register alternative.
	(*andnot<VI_32:mode>3): Ditto.
	(*mmx_<any_logic:code><MMXMODEI:mode>3): Ditto.
	(*<any_logic:code><VI_32:mode>3): Ditto.

gcc/testsuite/

	PR target/100701
	* gcc.target/i386/pr100701.c: New test.
2021-05-20 18:50:28 +02:00
Marcel Vollweiler cdcec2f850 Fortran/OpenMP: Add support for 'close' in map clause
gcc/fortran/ChangeLog:

	* openmp.c (gfc_match_omp_clauses): Support map-type-modifier 'close'.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/map-6.f90: New test.
	* gfortran.dg/gomp/map-7.f90: New test.
	* gfortran.dg/gomp/map-8.f90: New test.
2021-05-20 08:54:18 -07:00
Eric Botcazou 325bb08025 Fix gnat.dg spurious failures on PowerPC64 LE
gcc/testsuite
	PR testsuite/96488
	* gnat.dg/unchecked_convert5.adb: Do not run on PowerPC64 LE.
	* gnat.dg/unchecked_convert6.adb: Likewise.
2021-05-20 17:22:00 +02:00
Joern Rennecke 66c5f24788 libstdc++: Disable floating_to_chars.cc on 16 bit targets
This patch conditionally disables the compilation of floating_to_chars.cc
on 16 bit targets, thus fixing a build failure for these targets as
the POW10_SPLIT_2 array exceeds the maximum object size.

libstdc++-v3/
	PR libstdc++/100361
	* include/std/charconv (to_chars): Hide the overloads for
	floating-point types for 16 bit targets.
	* src/c++17/floating_to_chars.cc: Don't compile for 16 bit targets.
	* testsuite/20_util/to_chars/double.cc: Run this test only on
	size32plus targets.
	* testsuite/20_util/to_chars/float.cc: Likewise.
	* testsuite/20_util/to_chars/long_double.cc: Likewise.
2021-05-20 13:21:41 +01:00
Kewen Lin 928e4ff1ae arm: Fix build failure by adding includes
Commit r12-939 missed to add the required include files for
the newly used type loop_vec_info.  This patch is to add
the include file "tree-vectorizer.h" which defines
loop_vec_info and its required include file "cfgloop.h".

gcc/ChangeLog:

	* config/arm/arm.c: Include head files tree-vectorizer.h and
	cfgloop.h.
2021-05-20 05:34:37 -05:00
Uros Bizjak 507359e1d4 i386: Add mult-high and shift patterns for 4-byte vectors [PR100637]
2021-05-20  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
	PR target/100637
	* config/i386/mmx.md (Yv_Yw): Revert adding V4QI and V2HI modes.
	(*<plusminus:insn><VI_32:mode>3): Use Yw instad of <Yv_Yw> constrint.
	(<s>mulv4hi3_highpart): New expander.
	(*<s>mulv2hi3_highpart): New insn pattern.
	(<s>mulv2hi3_higpart): New expander.
	(*<any_shift:insn>v2hi3): New insn pattern.
	(<any_shift:insn>v2hi3): New expander.
	* config/i386/sse.md (smulhrsv2hi3): New expander.
	(*smulhrsv2hi3): New insn pattern.

gcc/testsuite/

	PR target/100637
	* gcc.target/i386/pr100637-1w.c (shl, ashr, lshr): New tests.
2021-05-20 11:12:31 +02:00
Kewen Lin 9c5bd1e981 vect: Replace hardcoded inner loop cost factor
This patch is to replace the current hardcoded weight factor
50, which is applied by the loop vectorizer to the cost of
statements in an inner loop relative to the loop being
vectorized, with one newly added member inner_loop_cost_factor
in loop vinfo.  It also introduces one parameter
vect-inner-loop-cost-factor whose default value is 50, and
is used to initialize the inner_loop_cost_factor member.

The motivation here is that: if targets want to have one
unique function to gather some information in each add_stmt_cost
call, no matter that it's put before or after the cost tweaking
part for inner loop, it may have the need to adjust (expand or
shrink) the gathered data as the factor.  Now the factor is
hardcoded, it's not easily maintained.

Bootstrapped/regtested on powerpc64le-linux-gnu P9,
x86_64-redhat-linux and aarch64-linux-gnu.

gcc/ChangeLog:

	* doc/invoke.texi (vect-inner-loop-cost-factor): Document new
	parameter.
	* params.opt (vect-inner-loop-cost-factor): New.
	* targhooks.c (default_add_stmt_cost): Replace hardcoded factor
	50 with LOOP_VINFO_INNER_LOOP_COST_FACTOR, include head file
	tree-vectorizer.h and its required ones.
	* config/aarch64/aarch64.c (aarch64_add_stmt_cost): Replace
	hardcoded factor 50 with LOOP_VINFO_INNER_LOOP_COST_FACTOR.
	* config/arm/arm.c (arm_add_stmt_cost): Likewise.
	* config/i386/i386.c (ix86_add_stmt_cost): Likewise.
	* config/rs6000/rs6000.c (rs6000_add_stmt_cost): Likewise.
	* tree-vect-loop.c (vect_compute_single_scalar_iteration_cost):
	Likewise.
	(_loop_vec_info::_loop_vec_info): Init inner_loop_cost_factor.
	* tree-vectorizer.h (_loop_vec_info): Add inner_loop_cost_factor.
	(LOOP_VINFO_INNER_LOOP_COST_FACTOR): New macro.
2021-05-20 03:46:47 -05:00
Christophe Lyon 1a9b3f04c1 c: Add support for __FILE_NAME__ macro (PR c/42579)
The toolchain provided by ST for stm32 has had support for
__FILENAME__ for a while, but clang/llvm has recently implemented
support for __FILE_NAME__, so it seems better to use the same macro
name in GCC.

It happens that the ST patch is similar to the one proposed in PR
c/42579.

Given these input files:
::::::::::::::
mydir/myinc.h
::::::::::::::
char* mystringh_file = __FILE__;
char* mystringh_filename = __FILE_NAME__;
char* mystringh_base_file = __BASE_FILE__;
::::::::::::::
mydir/mysrc.c
::::::::::::::

char* mystring_file = __FILE__;
char* mystring_filename = __FILE_NAME__;
char* mystring_base_file = __BASE_FILE__;

we produce:
$ gcc mydir/mysrc.c -I . -E
char* mystringh_file = "./mydir/myinc.h";
char* mystringh_filename = "myinc.h";
char* mystringh_base_file = "mydir/mysrc.c";

char* mystring_file = "mydir/mysrc.c";
char* mystring_filename = "mysrc.c";
char* mystring_base_file = "mydir/mysrc.c";

2021-05-20  Christophe Lyon  <christophe.lyon@linaro.org>
	    Torbjörn Svensson  <torbjorn.svensson@st.com>

	PR c/42579
	libcpp/
	* include/cpplib.h (cpp_builtin_type): Add BT_FILE_NAME entry.
	* init.c (builtin_array): Likewise.
	* macro.c (_cpp_builtin_macro_text): Add support for BT_FILE_NAME.

	gcc/
	* doc/cpp.texi (Common Predefined Macros): Document __FILE_NAME__.

	gcc/testsuite/
	* c-c++-common/spellcheck-reserved.c: Add tests for __FILE_NAME__.
	* c-c++-common/cpp/file-name-1.c: New test.
2021-05-20 08:12:41 +00:00
Tobias Burnus 9e0a5e3ea3 Testsuite/Fortran: gfortran.dg/pr96711.f90 - fix expected value for PowerPC [PR96983]
gcc/testsuite/ChangeLog:

	PR fortran/96983
	* gfortran.dg/pr96711.f90: Use 2**digit(x) instead of a hard-coded value;
	add comments regarding what the code does.
2021-05-20 09:52:31 +02:00
Jakub Jelinek 94fa4c67b9 openmp: Handle explicit linear clause properly in combined constructs with target [PR99928]
linear clause should have the effect of firstprivate+lastprivate (or for IVs
not declared in the construct lastprivate) on outer constructs and eventually
map(tofrom:) on target when combined with it.

2021-05-20  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/99928
	* gimplify.c (gimplify_scan_omp_clauses) <case OMP_CLAUSE_LINEAR>: For
	explicit linear clause when combined with target, make it map(tofrom:)
	instead of no clause or firstprivate.

	* c-c++-common/gomp/pr99928-4.c: Remove all xfails.
	* c-c++-common/gomp/pr99928-5.c: Likewise.
2021-05-20 09:17:40 +02:00
Jakub Jelinek 2b536797f7 phiopt: Simplify (X & Y) == X -> (X & ~Y) == 0 even in presence of integral conversions [PR94589]
On Wed, May 19, 2021 at 10:15:53AM +0200, Christophe Lyon via Gcc-patches wrote:
> After this update, the test fails on arm and aarch64: according to the
> logs, the optimization is still performed 14 times.

Seems this is because
              if (change
                  && !flag_syntax_only
                  && (load_extend_op (TYPE_MODE (TREE_TYPE (and0)))
                      == ZERO_EXTEND))
                {
                  tree uns = unsigned_type_for (TREE_TYPE (and0));
                  and0 = fold_convert_loc (loc, uns, and0);
                  and1 = fold_convert_loc (loc, uns, and1);
                }
in fold-const.c adds on these targets extra casts that prevent the
optimizations.

2021-05-20  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/94589
	* match.pd ((X & Y) == X -> (X & ~Y) == 0): Simplify even in presence
	of integral conversions.
2021-05-20 09:10:38 +02:00
Jakub Jelinek d15a2d261b libcpp: Fix up -fdirectives-only handling of // comments on last line not terminated with newline [PR100646]
As can be seen on the testcases, before the -fdirectives-only preprocessing
rewrite the preprocessor would assume // comments are terminated by the
end of file even when newline wasn't there, but now we error out.
The following patch restores the previous behavior.

2021-05-20  Jakub Jelinek  <jakub@redhat.com>

	PR preprocessor/100646
	* lex.c (cpp_directive_only_process): Treat end of file as termination
	for !is_block comments.

	* gcc.dg/cpp/pr100646-1.c: New test.
	* gcc.dg/cpp/pr100646-2.c: New test.
2021-05-20 09:09:07 +02:00
Jason Merrill 75ab8b4829 c++: _Complex template parameter [PR100634]
We were crashing because invalid_nontype_parm_type_p allowed _Complex
template parms, but convert_nontype_argument didn't know what to do for
them.  Let's just disallow it, people can and should use std::complex
instead.

	PR c++/100634

gcc/cp/ChangeLog:

	* pt.c (invalid_nontype_parm_type_p): Return true for COMPLEX_TYPE.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/nontype-complex1.C: New test.
2021-05-19 23:10:53 -04:00
Jason Merrill fe9a6614a1 c++: ICE with using and enum [PR100659]
Here the code for 'using enum' is confused by the combination of a
using-decl and an enum that are not from 'using enum'; this CONST_DECL is
from the normal unscoped enum scoping.

	PR c++/100659

gcc/cp/ChangeLog:

	* cp-tree.h (CONST_DECL_USING_P): Check for null TREE_TYPE.

gcc/testsuite/ChangeLog:

	* g++.dg/parse/access13.C: New test.
2021-05-19 23:10:28 -04:00
GCC Administrator 65f32e5d6b Daily bump. 2021-05-20 00:16:40 +00:00
Martin Sebor eb2a917fa0 PR c/100619 - ICE on a VLA parameter with too many dimensions
gcc/c-family/ChangeLog:

	PR c/100619
	* c-attribs.c (build_attr_access_from_parms): Handle arbitrarily many
	bounds.

gcc/testsuite/ChangeLog:

	PR c/100619
	* gcc.dg/pr100619.c: New test.
2021-05-19 16:13:13 -06:00
Andrew MacLeod dc6758f03e Split gimple range folding with ranges into a stand alone class.
Introduces fold_using_range which folds any kind of gimple statement by
querying argument ranges thru a generic range_query.
This pulls all the statement processing into a client neutral location.

	* gimple-range.cc (fur_source::get_operand): New.
	(gimple_range_fold): Delete.
	(fold_using_range::fold_stmt): Move from gimple_ranger::calc_stmt.
	(fold_using_range::range_of_range_op): Move from gimple_ranger.
	(fold_using_range::range_of_address): Ditto.
	(fold_using_range::range_of_phi): Ditto.
	(fold_using_range::range_of_call): Ditto.
	(fold_using_range::range_of_builtin_ubsan_call): Move from
	range_of_builtin_ubsan_call.
	(fold_using_range::range_of_builtin_call): Move from
	range_of_builtin_call.
	(gimple_ranger::range_of_builtin_call): Delete.
	(fold_using_range::range_of_cond_expr): Move from gimple_ranger.
	(gimple_ranger::fold_range_internal): New.
	(gimple_ranger::range_of_stmt): Use new fold_using_range API.
	(fold_using_range::range_of_ssa_name_with_loop_info): Move from
	gimple_ranger.  Improve ranges of SSA_NAMES when possible.
	* gimple-range.h (gimple_ranger): Remove various range_of routines.
	(class fur_source): New.
	(class fold_using_range): New.
	(fur_source::fur_source): New.
	(fold_range): New.
	* vr-values.c (vr_values::extract_range_basic): Use fold_using_range
	instead of range_of_builtin_call.
2021-05-19 16:22:13 -04:00
Jason Merrill cd67343703 c++: ICE with <=> fallback [PR100367]
Here, when genericizing lexicographical_compare_three_way, we haven't yet
walked the operands, so (a == a) still sees ADDR_EXPR <a>, but this is after
we've changed the type of a to REFERENCE_TYPE.  When we try to fold (a == a)
by constexpr evaluation, the constexpr code doesn't understand trying to
take the address of a reference, and we end up crashing.

Fixed by avoiding constexpr evaluation in genericize_spaceship, by using
fold_build2 instead of build_new_op on scalar operands.  Class operands
should have been expanded during parsing.

	PR c++/100367
	PR c++/96299

gcc/cp/ChangeLog:

	* method.c (genericize_spaceship): Use fold_build2 for scalar
	operands.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/spaceship-fallback1.C: New test.
2021-05-19 15:43:07 -04:00
Jonathan Wakely 9b50282b0d doc: Update description of __GXX_EXPERIMENTAL_CXX0X__
This macro has been obsolete for years, and C++0x features are no longer
experimental or liable to be removed.

gcc/ChangeLog:

	* doc/cpp.texi (Common Predefined Macros): Update documentation
	for the __GXX_EXPERIMENTAL_CXX0X__ macro.
2021-05-19 18:51:44 +01:00
Jason Merrill 873c5188fd c++: implicit deduction guides, protected access
Jonathan raised this issue with CWG, and there seems to be general agreement
that a deduction guide generated from a constructor should have access to
the same names that the constructor has access to.  That seems to be as easy
as setting DECL_CONTEXT.

gcc/cp/ChangeLog:

	* pt.c (build_deduction_guide): Treat the implicit deduction guide
	as a member of the class.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/class-deduction-access1.C: New test.
	* g++.dg/cpp1z/class-deduction-access2.C: New test.
2021-05-19 13:29:13 -04:00
Marek Polacek adcb497bdb c++: Relax attribute on friend declaration checking [PR100596]
It turned out that there are codebases that profusely use GNU attributes
on friend declarations, so we have to dial back our checking and allow
them.  And for C++11 attributes let's just warn instead of giving
errors.

	PR c++/100596

gcc/cp/ChangeLog:

	* cp-tree.h (any_non_type_attribute_p): Remove.
	* decl.c (grokdeclarator): Turn an error into a warning and only
	warn for standard attributes.
	* decl2.c (any_non_type_attribute_p): Remove.
	* parser.c (cp_parser_elaborated_type_specifier): Turn an error
	into a warning and only warn for standard attributes.
	(cp_parser_member_declaration): Likewise.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/friend7.C: Turn a few dg-warnings into dg-errors.
	Remove dg-errors for GNU attributes.
	* g++.dg/ext/attrib63.C: Remove dg-error.
	* g++.dg/cpp0x/friend8.C: New test.
2021-05-19 13:10:15 -04:00
Kito Cheng a911287e13 testuite: Check pthread for omp module testing
gcc/testsuite/ChangeLog:

	* g++.dg/modules/omp-1_a.C: Check pthread is available.
	* g++.dg/modules/omp-1_b.C: Ditto.
	* g++.dg/modules/omp-1_c.C: Ditto.
	* g++.dg/modules/omp-2_a.C: Ditto.
	* g++.dg/modules/omp-2_b.C: Ditto.
2021-05-19 22:56:01 +08:00
Alex Coplan 5b953740da arm: Fix ICE with CMSE nonsecure calls on Armv8.1-M [PR100333]
As the PR shows, we ICE shortly after expanding nonsecure calls for Armv8.1-M.
For Armv8.1-M, we have TARGET_HAVE_FPCXT_CMSE. As it stands, the expander
(arm.md:nonsecure_call_internal) moves the callee's address to a register (with
copy_to_suggested_reg) only if !TARGET_HAVE_FPCXT_CMSE.

However, looking at the pattern which the insn appears to be intended to
match (thumb2.md:*nonsecure_call_reg_thumb2_fpcxt), it requires the
callee's address to be in a register.

This patch therefore just forces the callee's address into a register in
the expander.

gcc/ChangeLog:

	PR target/100333
	* config/arm/arm.md (nonsecure_call_internal): Always ensure
	callee's address is in a register.

gcc/testsuite/ChangeLog:

	PR target/100333
	* gcc.target/arm/cmse/pr100333.c: New test.
2021-05-19 15:52:45 +01:00
Christophe Lyon beeb01541a arm/testsuite: Fix testcase for PR99977
Some targets (eg arm-none-uclinuxfdpiceabi) do not support Thumb-1,
and since the testcase forces -march=armv8-m.base, we need to check
whether this option is actually supported.

Using dg-add-options arm_arch_v8m_base ensure that we pass -mthumb as
needed too.

2021-05-19  Christophe Lyon  <christophe.lyon@linaro.org>

	PR target/99977
	gcc/testsuite/
	* gcc.target/arm/pr99977.c: Require arm_arch_v8m_base.
2021-05-19 14:45:54 +00:00
Geng Qi 1e66480764 RISC-V: Properly parse the letter 'p' in '-march'.
gcc/ChangeLog:
	* common/config/riscv/riscv-common.c
	(riscv_subset_list::parsing_subset_version): Properly parse the letter
	'p' in '-march'.
	(riscv_subset_list::parse_std_ext,
	 riscv_subset_list::parse_multiletter_ext): To handle errors generated
	in riscv_subset_list::parsing_subset_version.

gcc/testsuite/ChangeLog:
	* gcc.target/riscv/arch-12.c: New.
	* gcc.target/riscv/attribute-19.c: New.
2021-05-19 22:39:50 +08:00
Jonathan Wright 4536433820 aarch64: Use correct type attributes for RTL generating XTN(2)
Use the correct "neon_move_narrow_q" type attribute in RTL patterns
that generate XTN/XTN2 instructions.

This makes a material difference because these instructions can be
executed on both SIMD pipes in the Cortex-A57 core model, whereas the
"neon_shift_imm_narrow_q" attribute (in use until now) would suggest
to the scheduler that they could only execute on one of the two
pipes.

gcc/ChangeLog:

2021-05-18  Jonathan Wright  <jonathan.wright@arm.com>

	* config/aarch64/aarch64-simd.md: Use "neon_move_narrow_q"
	type attribute in patterns generating XTN(2).
2021-05-19 14:45:31 +01:00
Jonathan Wright 577d5819e0 aarch64: Use an expander for quad-word vec_pack_trunc pattern
The existing vec_pack_trunc RTL pattern emits an opaque two-
instruction assembly code sequence that prevents proper instruction
scheduling. This commit changes the pattern to an expander that emits
individual xtn and xtn2 instructions.

This commit also consolidates the duplicate truncation patterns.

gcc/ChangeLog:

2021-05-17  Jonathan Wright  <jonathan.wright@arm.com>

	* config/aarch64/aarch64-simd.md (aarch64_simd_vec_pack_trunc_<mode>):
	Remove as duplicate of...
	(aarch64_xtn<mode>): This.
	(aarch64_xtn2<mode>_le): Move position in file.
	(aarch64_xtn2<mode>_be): Move position in file.
	(aarch64_xtn2<mode>): Move position in file.
	(vec_pack_trunc_<mode>): Define as an expander.
2021-05-19 14:45:17 +01:00
Jonathan Wright a680be25aa testsuite: aarch64: Add tests for high-half narrowing instructions
Add tests to confirm that a *2 (write to high-half) Neon instruction
is generated from vcombine* of a narrowing intrinsic sequence.

gcc/testsuite/ChangeLog:

2021-05-14  Jonathan Wright  <jonathan.wright@arm.com>

	* gcc.target/aarch64/narrow_high_combine.c: New test.
2021-05-19 14:44:57 +01:00
Jonathan Wright ddbdb9a384 aarch64: Refactor aarch64_<sur>q<r>shr<u>n_n<mode> RTL pattern
Split the aarch64_<sur>q<r>shr<u>n_n<mode> pattern into separate
scalar and vector variants. Further split the vector pattern into
big/little endian variants that model the zero-high-half semantics
of the underlying instruction - allowing for more combinations with
the write-to-high-half variant (aarch64_<sur>q<r>shr<u>n2_n<mode>.)

gcc/ChangeLog:

2021-05-14  Jonathan Wright  <jonathan.wright@arm.com>

	* config/aarch64/aarch64-simd-builtins.def: Split builtin
	generation for aarch64_<sur>q<r>shr<u>n_n<mode> pattern into
	separate scalar and vector generators.
	* config/aarch64/aarch64-simd.md
	(aarch64_<sur>q<r>shr<u>n_n<mode>): Define as an expander and
	split into...
	(aarch64_<sur>q<r>shr<u>n_n<mode>_insn_le): This and...
	(aarch64_<sur>q<r>shr<u>n_n<mode>_insn_be): This.
	* config/aarch64/iterators.md: Define SD_HSDI iterator.
2021-05-19 14:44:39 +01:00
Jonathan Wright 778ac63fe2 aarch64: Relax aarch64_sqxtun2<mode> RTL pattern
Use UNSPEC_SQXTUN instead of UNSPEC_SQXTUN2 in aarch64_sqxtun2<mode>
patterns. This allows for more more aggressive combinations and
ultimately better code generation. The now redundant UNSPEC_SQXTUN2
is removed.

gcc/ChangeLog:

2021-05-14  Jonathn Wright  <jonathan.wright@arm.com>

	* config/aarch64/aarch64-simd.md: Use UNSPEC_SQXTUN instead
	of UNSPEC_SQXTUN2.
	* config/aarch64/iterators.md: Remove UNSPEC_SQXTUN2.
2021-05-19 14:44:26 +01:00
Jonathan Wright 4e26303e0b aarch64: Relax aarch64_<sur>q<r>shr<u>n2_n<mode> RTL pattern
Implement saturating right-shift and narrow high Neon intrinsic RTL
patterns using a vec_concat of a register_operand and a VQSHRN_N
unspec - instead of just a VQSHRN_N unspec. This more relaxed pattern
allows for more aggressive combinations and ultimately better code
generation.

gcc/ChangeLog:

2021-03-04  Jonathan Wright  <jonathan.wright@arm.com>

	* config/aarch64/aarch64-simd.md (aarch64_<sur>q<r>shr<u>n2_n<mode>):
	Implement as an expand emitting a big/little endian
	instruction pattern.
	(aarch64_<sur>q<r>shr<u>n2_n<mode>_insn_le): Define.
	(aarch64_<sur>q<r>shr<u>n2_n<mode>_insn_be): Define.
2021-05-19 14:44:10 +01:00