Commit Graph

181287 Commits

Author SHA1 Message Date
Andreas Krebbel 5d9ade39b8 IBM Z: Fix PR97326: Enable fp compares in vec_cmp
gcc/ChangeLog:

	PR target/97326
	* config/s390/vector.md: Support vector floating point modes in
	vec_cmp.
2020-11-12 08:36:37 +01:00
Andreas Krebbel 7ea19dcafb IBM Z: Rename mode attr tointvec to TOINTVEC
Just a preparation to add a lower-case tointvec.

gcc/ChangeLog:

	* config/s390/vector.md: Rename tointvec to TOINTVEC.
	* config/s390/vx-builtins.md: Likewise.
2020-11-12 08:32:59 +01:00
Jason Merrill 87b7d45e35 dwarf2: Set DW_AT_declaration for undefined fns [PR97060]
If DECL_INITIAL isn't set, we can't emit anything about the body of the
function, so add the declaration attribute.

gcc/ChangeLog:

	PR debug/97060
	* dwarf2out.c (gen_subprogram_die): It's a declaration
	if DECL_INITIAL isn't set.

gcc/testsuite/ChangeLog:

	PR debug/97060
	* gcc.dg/debug/dwarf2/pr97060.c: New test.
2020-11-12 00:58:04 -05:00
Kewen Lin d33bc98f5b testsuite: Adjust pr96789.c by disabling loop vect
New test gcc.dg/tree-ssa/pr96789.c fails on
arm-none-linux-gnueabihf since loop vectorizer is able to optimize
the two loops which operate on array tmp with load_lanes feature
support, it make dse3 fail to find expected inputs.

As Richard suggested, this patch is to replace option
-ftree-vectorize to -ftree-slp-vectorize -fno-tree-loop-vectorize.

gcc/testsuite/ChangeLog:

	* gcc.dg/tree-ssa/pr96789.c: Adjusted by disabling loop
	vectorization.
2020-11-11 21:25:08 -06:00
David Malcolm 8069928d5c analyzer: precision-of-wording for -Wanalyzer-stale-setjmp-buffer
This patch adds a custom event to paths emitted by
-Wanalyzer-stale-setjmp-buffer highlighting the place where the
pertinent stack frame is popped, and updates the final event in
the path to reference this.

gcc/analyzer/ChangeLog:
	* checker-path.h (checker_event::get_id_ptr): New.
	* diagnostic-manager.cc (path_builder::path_builder): Add "sd"
	param and use it to initialize new field "m_sd".
	(path_builder::get_pending_diagnostic): New.
	(path_builder::m_sd): New field.
	(diagnostic_manager::emit_saved_diagnostic): Pass sd to
	path_builder ctor.
	(diagnostic_manager::add_events_for_superedge): Call new
	maybe_add_custom_events_for_superedge vfunc.
	* engine.cc (stale_jmp_buf::stale_jmp_buf): Add "setjmp_point"
	param and use it to initialize new field "m_setjmp_point".
	Initialize new field "m_stack_pop_event".
	(stale_jmp_buf::maybe_add_custom_events_for_superedge): New vfunc
	implementation.
	(stale_jmp_buf::describe_final_event): New vfunc implementation.
	(stale_jmp_buf::m_setjmp_point): New field.
	(stale_jmp_buf::m_stack_pop_event): New field.
	(exploded_node::on_longjmp): Pass setjmp_point to stale_jmp_buf
	ctor.
	* pending-diagnostic.h
	(pending_diagnostic::maybe_add_custom_events_for_superedge): New
	vfunc.

gcc/testsuite/ChangeLog:
	* gcc.dg/analyzer/setjmp-5.c: Update expected path output to show
	an event where the pertinent stack frame is popped.  Update
	expected message from final event to reference this event.
2020-11-11 21:18:59 -05:00
David Malcolm 5e00ad3ffb analyzer: warn on invalid shift counts [PR97424]
This patch implements -Wanalyzer-shift-count-negative
and -Wanalyzer-shift-count-overflow, analogous to the C/C++
warnings -Wshift-count-negative and -Wshift-count-overflow, but
implemented via interprocedural path analysis rather than via parsing
in a front end, and thus capable of detecting interprocedural cases that the
warnings implemented in the front ends can miss.

gcc/analyzer/ChangeLog:
	PR tree-optimization/97424
	* analyzer.opt (Wanalyzer-shift-count-negative): New.
	(Wanalyzer-shift-count-overflow): New.
	* region-model.cc (class shift_count_negative_diagnostic): New.
	(class shift_count_overflow_diagnostic): New.
	(region_model::get_gassign_result): Complain about shift counts that
	are negative or are >= the operand's type's width.

gcc/ChangeLog:
	PR tree-optimization/97424
	* doc/invoke.texi (Static Analyzer Options): Add
	-Wno-analyzer-shift-count-negative and
	-Wno-analyzer-shift-count-overflow.
	(-Wno-analyzer-shift-count-negative): New.
	(-Wno-analyzer-shift-count-overflow): New.

gcc/testsuite/ChangeLog:
	PR tree-optimization/97424
	* gcc.dg/analyzer/invalid-shift-1.c: New test.
2020-11-11 21:16:45 -05:00
GCC Administrator 0f5f9ed5e5 Daily bump. 2020-11-12 00:16:39 +00:00
Iain Sandoe 5d46ec3db2 CFI-handling : Add a hook to allow target-specific Personality and LSDA indirections.
At present, the output of .cfi_personality and .cfi_lsda assumes
ELF semantics for indirections.  This isn't suitable for all targets
and is one blocker to moving Darwin to use .cfi_xxxx.

The patch adds a target hook that allows non-ELF targets to use
indirections appropriate to their needs.

gcc/ChangeLog:

	* config/darwin-protos.h (darwin_make_eh_symbol_indirect): New.
	* config/darwin.c (darwin_make_eh_symbol_indirect): New. Use
	Mach-O semantics for personality and ldsa indirections.
	* config/darwin.h (TARGET_ASM_MAKE_EH_SYMBOL_INDIRECT): New.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in: Add TARGET_ASM_MAKE_EH_SYMBOL_INDIRECT hook.
	* dwarf2out.c (dwarf2out_do_cfi_startproc): If the target defines
	a hook for indirecting personality and ldsa references, use that
	otherwise default to ELF semantics.
	* target.def (make_eh_symbol_indirect): New target hook.
2020-11-11 20:44:02 +00:00
Iain Sandoe 9227f81db7 Objective-C++ : Allow prefix attrs on linkage specs.
For Objective-C++, this combines prefix attributes from before and
after top level linkage specs.  The "reference implementation" for
Objective-C++ allows this, and system headers depend on it.

e.g.

__attribute__((__deprecated__))
extern "C" __attribute__((__visibility__("default")))
@interface MyClass
...
@end

Would consider the list of prefix attributes to the interface for
MyClass to include both the visibility and deprecated ones.

When we are compiling regular C++, this emits a warning and discards
any prefix attributes before a linkage spec.

gcc/cp/ChangeLog:

	* parser.c (cp_parser_declaration): Unless we are compiling for
	Ojective-C++, warn about and discard any attributes that prefix
	a linkage specification.
2020-11-11 20:43:31 +00:00
Patrick Palka b1c9b3c340 c++: Change the mangling of __alignof__ [PR88115]
This patch changes the mangling of __alignof__ to v111__alignof__,
making its mangling distinct from that of alignof(type) and
alignof(expr).

How we mangle ALIGNOF_EXPR now depends on its ALIGNOF_EXPR_STD_P flag,
which after the previous patch gets consistently set for alignof(type)
as well as alignof(expr).

gcc/c-family/ChangeLog:

	PR c++/88115
	* c-opts.c (c_common_post_options): Update latest_abi_version.

gcc/ChangeLog:

	PR c++/88115
	* common.opt (-fabi-version): Document =15.
	* doc/invoke.texi (C++ Dialect Options): Likewise.

gcc/cp/ChangeLog:

	PR c++/88115
	* mangle.c (write_expression): Mangle __alignof_ differently
	from alignof when the ABI version is at least 15.

libiberty/ChangeLog:

	PR c++/88115
	* cp-demangle.c (d_print_comp_inner)
	<case DEMANGLE_COMPONENT_EXTENDED_OPERATOR>: Don't print the
	"operator " prefix for __alignof__.
	<case DEMANGLE_COMPONENT_UNARY>: Always print parens around the
	operand of __alignof__.
	* testsuite/demangle-expected: Test demangling for __alignof__.

gcc/testsuite/ChangeLog:

	PR c++/88115
	* g++.dg/abi/macro0.C: Adjust.
	* g++.dg/cpp0x/alignof7.C: New test.
	* g++.dg/cpp0x/alignof8.C: New test.
2020-11-11 15:11:23 -05:00
Patrick Palka 61827d5d9a c++: Correct the handling of alignof(expr) [PR88115]
We're currently neglecting to set the ALIGNOF_EXPR_STD_P flag on an
ALIGNOF_EXPR when its operand is an expression.  This leads to us
handling alignof(expr) as if it were written __alignof__(expr), and
returning the preferred alignment instead of the ABI alignment.  In the
testcase below, this causes the first and third static_assert to fail on
x86.

gcc/cp/ChangeLog:

	PR c++/88115
	* cp-tree.h (cxx_sizeof_or_alignof_expr): Add bool parameter.
	* decl.c (fold_sizeof_expr): Pass false to
	cxx_sizeof_or_alignof_expr.
	* parser.c (cp_parser_unary_expression): Pass std_alignof to
	cxx_sizeof_or_alignof_expr.
	* pt.c (tsubst_copy): Pass false to cxx_sizeof_or_alignof_expr.
	(tsubst_copy_and_build): Pass std_alignof to
	cxx_sizeof_or_alignof_expr.
	* typeck.c (cxx_alignof_expr): Add std_alignof bool parameter
	and pass it to cxx_sizeof_or_alignof_type.  Set ALIGNOF_EXPR_STD_P
	appropriately.
	(cxx_sizeof_or_alignof_expr): Add std_alignof bool parameter
	and pass it to cxx_alignof_expr.  Assert op is either
	SIZEOF_EXPR or ALIGNOF_EXPR.

libcc1/ChangeLog:

	PR c++/88115
	* libcp1plugin.cc (plugin_build_unary_expr): Pass true to
	cxx_sizeof_or_alignof_expr.

gcc/testsuite/ChangeLog:

	PR c++/88115
	* g++.dg/cpp0x/alignof6.C: New test.
2020-11-11 14:43:38 -05:00
Marek Polacek d6e5745a9a c++: Tweak tsubst_qualified_id location.
Retain the location when tsubstituting a qualified-id so that our
static_assert diagnostic can benefit.  Don't create useless location
wrappers for temporary variables.

gcc/ChangeLog:

	PR c++/97518
	* tree.c (maybe_wrap_with_location): Don't add a location
	wrapper around an artificial and ignored decl.

gcc/cp/ChangeLog:

	PR c++/97518
	* pt.c (tsubst_qualified_id): Use EXPR_LOCATION of the qualified-id.
	Use it to maybe_wrap_with_location the final expression.

gcc/testsuite/ChangeLog:

	PR c++/97518
	* g++.dg/diagnostic/static_assert3.C: New test.
2020-11-11 12:36:52 -05:00
Richard Biener 2e8b368c3d Fix PRE NEW_SETS guarding
Accesses to NEW_SETS should be properly guarded.  Committed
as obvious.

2020-11-11  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97623
	* tree-ssa-pre.c (create_expression_by_pieces): Guard
	NEW_SETS access.
	(insert_into_preds_of_block): Likewise.
2020-11-11 18:17:00 +01:00
Jonathan Yong 505ea90904 libstdc++: Exclude cygwin and mingw from linker relro support
PE format does not have ELF style relro linker support, exclude
from checking. If the host linker supports ELF format, configure
may get confused.

libstdc++-v3/ChangeLog:

	* acinclude.m4 (GLIBCXX_CHECK_LINKER_FEATURES): Exclude
	cygwin and mingw from relro linker test.
	* configure: Regenerate.
2020-11-11 15:36:05 +00:00
Richard Biener 86cca5cc14 Fix PRE topological expression set sorting
This fixes sorted_array_from_bitmap_set to do a topological sort
as required by re-using what PHI-translation does, namely a DFS
walk with the help of bitmap_find_leader.  The proper result
is verified by extra checking in clean () (which would have tripped
before) and for the testcase I'm working at during the last
patches (PR97623) it is neutral in compile-time cost.

2020-11-11  Richard Biener  <rguenther@suse.de>

	* tree-ssa-pre.c (pre_expr_DFS): New function.
	(sorted_array_from_bitmap_set): Use it to properly
	topologically sort the expression set.
	(clean): Verify we've cleaned everything we should.
2020-11-11 16:13:10 +01:00
Jakub Jelinek 364ad1d44b testsuite: Fix up scan-tree-dump-times regexps for 64-bit targets
The added (?:_ull) match on 32-bit targets, but are equivalent to just
adding _ull into the strings, i.e. require the _ull substrings, while
the intent is that they are optional, so we should use (?:_ull)? instead.

2020-11-11  Jakub Jelinek  <jakub@redhat.com>

	* gfortran.dg/gomp/workshare-reduction-3.f90: Use (?:_ull)? instead
	of (?:_ull) in the scan-tree-dump-times directives.
	* gfortran.dg/gomp/workshare-reduction-26.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-27.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-28.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-36.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-37.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-38.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-39.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-40.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-41.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-42.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-43.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-44.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-45.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-46.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-47.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-56.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-57.f90: Likewise.
2020-11-11 16:11:17 +01:00
Eric Botcazou ce2d0ce293 Remove superfluous call to Base_Type
gcc/ada/ChangeLog:
	* gcc-interface/gigi.h: Remove ^L characters throughout.
	* gcc-interface/decl.c: Likewise.
	* gcc-interface/utils.c: Likewise.
	* gcc-interface/utils2.c: Likewise.
	* gcc-interface/trans.c (gnat_to_gnu) <N_Allocator>: Do not explicitly
	go to the base type for the Has_Constrained_Partial_View flag.
2020-11-11 15:24:28 +01:00
Eric Botcazou 4e1a215870 Fix biased integer arithmetic
The Ada compiler uses a biased representation when a size clause reserves
fewer bits than normal either for the lower or for the upper bound.

gcc/ada/ChangeLog:
	* gcc-interface/trans.c (build_binary_op_trapv): Convert operands
	to the result type before doing generic overflow checking.

gcc/testsuite/ChangeLog:
	* gnat.dg/bias2.adb: New test.
2020-11-11 15:08:16 +01:00
Eric Botcazou ec1b871194 Fix segfault on elaboration of empty 1-element array at -O
This is a rather obscure case where the elaboration of an empty array
whose base type is an array type of length at most 1 goes awry when
the code is compiled with optimization.

gcc/ada/ChangeLog:
	* gcc-interface/trans.c (can_be_lower_p): Remove.
	(Regular_Loop_to_gnu): Add ENTRY_COND unconditionally if
	BOTTOM_COND is non-zero.

gcc/testsuite/ChangeLog:
	* gnat.dg/opt89.adb: New test.
2020-11-11 14:52:45 +01:00
Eric Botcazou 1c91516aeb Fix internal error on chain of constants with -gnatc
gcc/ada/ChangeLog:
	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Constant>: In case
	the constant is not being defined, get the expression in type
	annotation mode only if its type is elementary.
2020-11-11 14:39:32 +01:00
Eric Botcazou 1f8fc1f458 Fix internal error with Shift_Right operator on signed type
This is a regression present on the mainline and 10 branch in the form
of an ICE with a shift operator applied to a variable of a signed type,
and which is caused by a type mismatch.

gcc/ada/ChangeLog:
	* gcc-interface/trans.c (gnat_to_gnu) <N_Op_Shift>: Also convert
	GNU_MAX_SHIFT if the type of the operation has been changed.
	* gcc-interface/utils.c (can_materialize_object_renaming_p): Add
	pair of missing parentheses.

gcc/testsuite/ChangeLog:
	* gnat.dg/shift1.adb: New test.
2020-11-11 13:55:09 +01:00
Richard Biener 4ac93608d7 testsuite/97797 - adjust GIMPLE tests for sizetype
Tested on x86_64-unknown-linux-gnu, pushed.

2020-11-11  Richard Biener  <rguenther@suse.de>

	PR testsuite/97797
	* gcc.dg/torture/ssa-fre-5.c: Use __SIZETYPE__ where
	appropriate.
	* gcc.dg/torture/ssa-fre-6.c: Likewise.
2020-11-11 12:51:40 +01:00
Richard Biener bd87cc14eb tree-optimization/97623 - Avoid PRE hoist insertion iteration
The recent previous change in this area limited hoist insertion
iteration via a param but the following is IMHO better since
we are not really interested in PRE opportunities exposed by
hoisting but only the other way around.  So this moves hoist
insertion after PRE iteration finished and removes hoist
insertion iteration alltogether.

2020-11-11  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97623
	* params.opt (-param=max-pre-hoist-insert-iterations): Remove
	again.
	* doc/invoke.texi (max-pre-hoist-insert-iterations): Likewise.
	* tree-ssa-pre.c (insert): Move hoist insertion after PRE
	insertion iteration and do not iterate it.

	* gcc.dg/tree-ssa/ssa-hoist-3.c: Adjust.
	* gcc.dg/tree-ssa/ssa-hoist-7.c: Likewise.
	* gcc.dg/tree-ssa/ssa-pre-30.c: Likewise.
2020-11-11 12:51:40 +01:00
Richard Sandiford 46c705e70e aarch64: Support SVE comparisons for unpacked integers
This patch adds support for comparing unpacked SVE integer vectors,
such as byte elements stored in the bottom bytes of halfword
containers.  It also adds support for selects between unpacked
SVE vectors (both integer and floating-point), since selects and
compares are closely tied via the vcond optab interface.

gcc/
	* config/aarch64/aarch64-sve.md (@vcond_mask_<mode><vpred>): Extend
	from SVE_FULL to SVE_ALL.
	(*vcond_mask_<mode><vpred>): Likewise.
	(@aarch64_sel_dup<mode>): Likewise.
	(vcond<SVE_FULL:mode><v_int_equiv>): Extend to...
	(vcond<SVE_ALL:mode><SVE_I:mode>): ...this, but requiring the
	sizes of the container modes to match.
	(vcondu<SVE_FULL:mode><v_int_equiv>): Extend to...
	(vcondu<SVE_ALL:mode><SVE_I:mode>): ...this.
	(vec_cmp<SVE_FULL_I:mode><vpred>): Extend to...
	(vec_cmp<SVE_I:mode><vpred>): ...this.
	(vec_cmpu<SVE_FULL_I:mode><vpred>): Extend to...
	(vec_cmpu<SVE_I:mode><vpred>): ...this.
	(@aarch64_pred_cmp<cmp_op><SVE_FULL_I:mode>): Extend to...
	(@aarch64_pred_cmp<cmp_op><SVE_I:mode>): ...this.
	(*cmp<cmp_op><SVE_FULL_I:mode>_cc): Extend to...
	(*cmp<cmp_op><SVE_I:mode>_cc): ...this.
	(*cmp<cmp_op><SVE_FULL_I:mode>_ptest): Extend to...
	(*cmp<cmp_op><SVE_I:mode>_ptest): ...this.
	(*cmp<cmp_op><SVE_FULL_I:mode>_and): Extend to...
	(*cmp<cmp_op><SVE_I:mode>_and): ...this.

gcc/testsuite/
	* gcc.target/aarch64/sve/cmp_1.c: New test.
	* gcc.target/aarch64/sve/cmp_2.c: Likewise.
	* gcc.target/aarch64/sve/cond_arith_1.c: Add --param
	aarch64-sve-compare-costs=0
	* gcc.target/aarch64/sve/cond_arith_1_run.c: Likewise.
	* gcc.target/aarch64/sve/cond_arith_3.c: Likewise.
	* gcc.target/aarch64/sve/cond_arith_3_run.c: Likewise.
	* gcc.target/aarch64/sve/mask_gather_load_7.c: Likewise.
	* gcc.target/aarch64/sve/mask_load_slp_1.c: Likewise.
	* gcc.target/aarch64/sve/vcond_11.c: Likewise.
	* gcc.target/aarch64/sve/vcond_11_run.c: Likewise.
2020-11-11 11:42:46 +00:00
Richard Sandiford e29dd0eb73 vect: Allow vconds between different vector sizes
The vcond code requires the compared vectors and the selected
vectors to have both the same size and the same number of elements
as each other.  But the operation makes logical sense even for
different vector sizes.  E.g. you could compare two V4SIs and
use the result to select between two V4DIs.

The underlying optab already allows the compared mode and the selected
mode to be specified separately.  Since the vectoriser now also
supports mixed vector sizes, I think we can simply remove the
equal-size check and just keep the equal-lanes check.  It's then
up to the target to decide which (if any) mixtures of sizes it
supports.

gcc/
	* optabs-tree.c (expand_vec_cond_expr_p): Allow the compared values
	and the selected values to have different mode sizes.
	* gimple-isel.cc (gimple_expand_vec_cond_expr): Likewise.
2020-11-11 11:42:45 +00:00
Paul Scharnofske 0ebaea3b66 libstdc++: Assigning to a joinable std::jthread calls std::terminate
Move assigning to a std::jthread that represents a thread of execution
needs to send a stop request and join that running thread. Otherwise the
std::thread data member will terminate in its assignment operator.

Co-authored-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* include/std/thread (jthread::operator=(jthread&&)): Transfer
	any existing state to a temporary that will request a stop and
	then join.
	* testsuite/30_threads/jthread/jthread.cc: Test move assignment.
2020-11-11 11:13:31 +00:00
Jonathan Wakely 43f9e5aff0 libstdc++: Use helper type for checking thread ID
This encapsulates the storing and checking of the thread ID into a class
type, so that the macro _GLIBCXX_HAS_GTHREADS is only checked in one
place. The code doing the checks just calls member functions of the new
type, without caring whether that really does any work or not.

libstdc++-v3/ChangeLog:

	* include/std/stop_token (_Stop_state_t::_M_requester): Define
	new struct with members to store and check the thread ID.
	(_Stop_state_t::_M_request_stop()): Use _M_requester._M_set().
	(_Stop_state_t::_M_remove_callback(_Stop_cb*)): Use
	_M_requester._M_is_current_thread().
2020-11-11 11:13:31 +00:00
liuhongt ca813880dc Support Intel AVX VNNI
2020-10-13  Hongtao Liu  <hongtao.liu@intel.com>
	    Hongyu Wang  <hongyu.wang@intel.com>

gcc/
	* common/config/i386/cpuinfo.h (get_available_features):
	Detect AVXVNNI.
	* common/config/i386/i386-common.c
	(OPTION_MASK_ISA2_AVXVNNI_SET,
	OPTION_MASK_ISA2_AVXVNNI_UNSET): New.
	(OPTION_MASK_ISA2_AVX2_UNSET): Add AVXVNNI.
	(ix86_hanlde_option): Handle -mavxvnni, unset avxvnni when
	avx2 is disabled.
	* common/config/i386/i386-cpuinfo.h (enum processor_features):
	Add FEATURE_AVXVNNI.
	* common/config/i386/i386-isas.h: Add ISA_NAMES_TABLE_ENTRY
	for avxvnni.
	* config.gcc: Add avxvnniintrin.h.
	* config/i386/avx512vnnivlintrin.h: Reimplement 128/256 bit non-mask
	intrinsics with macros to support unified interface.
	* config/i386/avxvnniintrin.h: New header file.
	* config/i386/cpuid.h (bit_AVXVNNI): New.
	* config/i386/i386-builtins.c (def_builtin): Handle AVXVNNI mask
	for unified builtin.
	* config/i386/i386-builtin.def (BDESC): Adjust AVX512VNNI
	builtins for AVXVNNI.
	* config/i386/i386-c.c (ix86_target_macros_internal): Define
	__AVXVNNI__.
	* config/i386/i386-expand.c (ix86_expand_builtin): Handle bisa
	for AVXVNNI to support unified intrinsic name, since there is no
	dependency between AVX512VNNI and AVXVNNI.
	* config/i386/i386-options.c (isa2_opts): Add -mavxvnni.
	(ix86_valid_target_attribute_inner_p): Handle avxnnni.
	(ix86_option_override_internal): Ditto.
	* config/i386/i386.h (TARGET_AVXVNNI, TARGET_AVXVNNI_P,
	TARGET_AVXVNNI_P, PTA_AVXVNNI): New.
	(PTA_SAPPHIRERAPIDS): Add AVX_VNNI.
	(PTA_ALDERLAKE): Likewise.
	* config/i386/i386.md ("isa"): Add avxvnni, avx512vnnivl.
	("enabled"): Adjust for avxvnni and avx512vnnivl.
	* config/i386/i386.opt: Add option -mavxvnni.
	* config/i386/immintrin.h: Include avxvnniintrin.h.
	* config/i386/sse.md (vpdpbusd_<mode>): Adjust for AVXVNNI.
	(vpdpbusds_<mode>): Likewise.
	(vpdpwssd_<mode>): Likewise.
	(vpdpwssds_<mode>): Likewise.
	(vpdpbusd_v16si): New.
	(vpdpbusds_v16si): Likewise.
	(vpdpwssd_v16si): Likewise.
	(vpdpwssds_v16si): Likewise.
	* doc/invoke.texi: Document -mavxvnni.
	* doc/extend.texi: Document avxvnni.
	* doc/sourcebuild.texi: Document target avxvnni.

gcc/testsuite/

	* gcc.target/i386/avx512vl-vnni-1.c: Rename..
	* gcc.target/i386/avx512vl-vnni-1a.c: To This.
	* gcc.target/i386/avx512vl-vnni-1b.c: New test.
	* gcc.target/i386/avx512vl-vnni-2.c: Ditto.
	* gcc.target/i386/avx512vl-vnni-3.c: Ditto.
	* gcc.target/i386/avx-vnni-1.c: Ditto.
	* gcc.target/i386/avx-vnni-2.c: Ditto.
	* gcc.target/i386/avx-vnni-3.c: Ditto.
	* gcc.target/i386/avx-vnni-4.c: Ditto.
	* gcc.target/i386/avx-vnni-5.c: Ditto.
	* gcc.target/i386/avx-vnni-6.c: Ditto.
	* gcc.target/i386/avx-vpdpbusd-2.c: Ditto.
	* gcc.target/i386/avx-vpdpbusds-2.c: Ditto.
	* gcc.target/i386/avx-vpdpwssd-2.c: Ditto.
	* gcc.target/i386/avx-vpdpwssds-2.c: Ditto.
	* gcc.target/i386/vnni_inline_error.c: Ditto.
	* gcc.target/i386/avx512vnnivl-builtin.c: Ditto.
	* gcc.target/i386/avxvnni-builtin.c: Ditto.
	* gcc.target/i386/funcspec-56.inc: Add new target attribute.
	* gcc.target/i386/sse-12.c: Add -mavxvnni.
	* gcc.target/i386/sse-13.c: Ditto.
	* gcc.target/i386/sse-14.c: Ditto.
	* gcc.target/i386/sse-22.c: Ditto.
	* gcc.target/i386/sse-23.c: Ditto.
	* g++.dg/other/i386-2.C: Ditto.
	* g++.dg/other/i386-3.C: Ditto.
	* lib/target-supports.exp (check_effective_target_avxvnni):
	New proc.
2020-11-11 19:09:50 +08:00
Martin Liska fbb3e275ab Fix spelling.
gcc/ChangeLog:

	* tree.c (copy_node): Fix spelling.
2020-11-11 11:59:02 +01:00
Richard Biener 57f076655e Drop topological sort for PRE phi-translation
The topological sort sorted_array_from_bitmap_set is supposed to
provide isn't one since quite some time since value_ids are
assigned first to SSA names in the order of SSA_NAME_VERSION
and then to hashtable entries in the order they appear in the
table.  One can even argue that expression-ids provide a closer
approximation of a topological sort since those are assigned
during AVAIL_OUT computation which is done in a dominator walk.

Now - phi-translation is not even depending on topological sorting
but it essentially does a DFS walk, phi-translating expressions
it depends on and relying on phi-translation caching to avoid
doing redundant work.

So this patch drops the use of sorted_array_from_bitmap_set from
phi_translate_set because this function is quite expensive.

2020-11-11  Richard Biener  <rguenther@suse.de>

	* tree-ssa-pre.c (phi_translate_set): Do not sort the
	expression set topologically.
2020-11-11 11:50:17 +01:00
Aldy Hernandez c76c23a0da Early exit on VR_VARYING from irange::set.
gcc/ChangeLog:

	* value-range.cc (irange::set): Early exit on VR_VARYING.
2020-11-11 11:45:36 +01:00
zhengnannan 7a9a5d1a61 AArch64: Add FLAG for arithmetic operation intrinsics [PR94442]
2020-11-11  Zhiheng Xie  <xiezhiheng@huawei.com>
	    Nannan Zheng  <zhengnannan@huawei.com>

gcc/ChangeLog:

	* config/aarch64/aarch64-simd-builtins.def: Add proper FLAG
	for arithmetic operation intrinsics.
2020-11-11 10:37:20 +00:00
Tobias Burnus 1644ab9917 gfortran.dg/gomp/workshare-reduction-*.f90: Fix dumps for -m32
gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/workshare-reduction-26.f90: Add (?:_ull) to
	scan-tree-dump-times regex for -m32.
	* gfortran.dg/gomp/workshare-reduction-27.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-28.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-3.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-36.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-37.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-38.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-39.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-40.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-41.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-42.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-43.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-44.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-45.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-46.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-47.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-56.f90: Likewise.
	* gfortran.dg/gomp/workshare-reduction-57.f90: Likewise.
2020-11-11 09:23:07 +01:00
Jakub Jelinek 8137261827 fortran: Fix up gfc_typename CHARACTER length handling [PR97768]
The first testcase below ICEs when f951 is 32-bit (or 64-bit big-endian).
The problem is that ex->ts.u.cl && ex->ts.u.cl->length are both non-NULL,
but ex->ts.u.cl->length->expr_type is not EXPR_CONSTANT, but EXPR_FUNCTION.
value.function.actual and value.function.name are in that case pointers,
but value._mp_alloc and value._mp_size are 4 byte integers no matter what.
So, in 64-bit little-endian the function returns most of the time incorrect
CHARACTER(0) because the most significant 32 bits of the
value.function.actual pointer are likely 0.
Anyway, the following patch is an attempt to get all the cases right.
Uses ex->value.character.length only for ex->expr_type == EXPR_CONSTANT
(i.e. CHARACTER literals), handles the deferred lengths, assumed lengths,
known constant lengths and finally if the length is something other,
just doesn't print it, i.e. prints just CHARACTER (for default kind)
or CHARACTER(KIND=4) (for e.g. kind 4).

2020-11-11  Jakub Jelinek  <jakub@redhat.com>

	PR fortran/97768
gcc/fortran/
	* misc.c (gfc_typename): Use ex->value.character.length only if
	ex->expr_type == EXPR_CONSTANT.  If ex->ts.deferred, print : instead
	of length.  If ex->ts.u.cl && ex->ts.u.cl->length == NULL, print *
	instead of length.  Otherwise if character length is non-constant,
	print just CHARACTER or CHARACTER(KIND=N).
gcc/testsuite/
	* gfortran.dg/pr97768_1.f90: New test.
	* gfortran.dg/pr97768_2.f90: New test.
2020-11-11 08:29:17 +01:00
Alan Modra 693a79a355 Re: Refactor copying decl section names
* go-gcc.cc (Gcc_backend::global_variable_set_init): Cast NULL to
	avoid ambiguous overloaded call.
2020-11-11 15:39:08 +10:30
Strager Neds 4656461585 Improve efficiency of copying section from another tree
gcc/
	* cgraph.h (symtab_node::set_section_for_node): Declare new
	overload.
	(symtab_node::set_section_from_string): Rename from set_section.
	(symtab_node::set_section_from_node): Declare.
	* symtab.c (symtab_node::set_section_for_node): Define new
	overload.
	(symtab_node::set_section_from_string): Rename from set_section.
	(symtab_node::set_section_from_node): Define.
	(symtab_node::set_section): Call renamed set_section_from_string.
	(symtab_node::set_section): Call new set_section_from_node.
2020-11-10 20:59:01 -07:00
Strager Neds e79de0682e Refactor section name ref counting
gcc/

	* symtab.c (symtab_node::set_section_for_node): Extract reference
	counting logic into ...
	(retain_section_hash_entry): ... here (new function) and ...
	(release_section_hash_entry): ... here (new function).
2020-11-10 20:53:14 -07:00
liuhongt 6b797b651f Formatting, there should be a space between PTA_* and (.
gcc/ChangeLog
	* config/i386/i386.h (PTA_MOVDIRI, PTA_MOVDIR64B,
	PTA_AMX_TILE, PTA_AMX_INT8, PTA_AMX_BF16, PTA_HRESET):
	Formatting.
2020-11-11 10:35:04 +08:00
Nagaraju Mekala 9179d9da39 Update MicroBlaze strings test
gcc/testsuite

	* gcc.target/microblaze/others/strings1.c: Update
	to include $LC label.
2020-11-10 17:24:29 -07:00
David Edelsohn 96fc91785e testsuite: skip zero-scratch-regs on powerpc.
These tests are unsupported on PowerPC.

gcc/testsuite/ChangeLog:

	* c-c++-common/zero-scratch-regs-10.c: Skip on powerpc*-*-*.
	* c-c++-common/zero-scratch-regs-11.c: Skip on powerpc*-*-*.
	* c-c++-common/zero-scratch-regs-5.c: Skip on powerpc*-*-aix*.
	* c-c++-common/zero-scratch-regs-8.c: Skip on powerpc*-*-*.
	* c-c++-common/zero-scratch-regs-9.c: Skip on powerpc*-*-*.
2020-11-10 19:21:51 -05:00
Jonathan Wakely ecba8547dd libstdc++: Implement std::emit_on_flush etc.
This adds the manipulators for use with basic_osyncstream. In order to
detect when an arbitrary basic_ostream<C,T> is the base class of a
basic_syncbuf<C,T,A> object, introduce a new intermediate base class
that stores the data members. The new base class stores a pointer and
two bools, which wastes (sizeof(void*) - 2) bytes of padding. It would
be possible to use the two least significant bits of the pointer for the
two bools, at least for targets where alignof(basic_streambuf) > 2, but
that's left as a possible change for a future date.

Also define basic_syncbuf::overflow to override the virtual function in
the base class, so that single characters can be inserted into the
stream buffer. Previously the default basic_streambuf::overflow
implementation was used, which drops the character on the floor.

libstdc++-v3/ChangeLog:

	* include/std/ostream (__syncbuf_base): New class template.
	(emit_on_flush, noemit_on_flush, flush_emit): New manipulators.
	* include/std/syncstream (basic_syncbuf): Derive from
	__syncbuf_base instead of basic_streambuf.
	(basic_syncbuf::operator=): Remove self-assignment check.
	(basic_syncbuf::swap): Remove self-swap check.
	(basic_syncbuf::emit): Do not skip pubsync() call if sequence
	is empty.
	(basic_syncbuf::sync): Remove no-op pubsync on stringbuf.
	(basic_syncbuf::overflow): Define override.
	* testsuite/27_io/basic_syncstream/basic_ops/1.cc: Test
	basic_osyncstream::put(char_type).
	* testsuite/27_io/basic_ostream/emit/1.cc: New test.
2020-11-11 00:19:40 +00:00
GCC Administrator bb6226419f Daily bump. 2020-11-11 00:16:36 +00:00
Ilya Leoshkevich 778087e0f5 IBM Z: Fix bootstrap breakage due to HAVE_TF macro
Commit e627cda568 ("IBM Z: Store long doubles in vector registers
when possible") introduced HAVE_TF macro which expands to a logical
"or" of HAVE_ constants.  Not all of these constants are available in
GENERATOR_FILE context, so a hack was used: simply expand to true in
this case, because the actual value matters only during compiler
runtime and not during generation.

However, one aspect of this value matters during generation after all:
whether or not it's a constant, which in this case it appears to be.
This results in incorrect values in insn-flags.h and broken bootstrap
for some configurations.

Fix by using a dummy value that is not a constant.

gcc/ChangeLog:

2020-11-10  Ilya Leoshkevich  <iii@linux.ibm.com>

	* config/s390/s390.h (HAVE_TF): Use opaque value when
	GENERATOR_FILE is defined.
2020-11-11 01:00:32 +01:00
Jonathan Wakely 5dfbc52264 libstdc++: Avoid bad_alloc exceptions when changing locales
For the --enable-clocale=generic configuration, the current code can
fail with a bad_alloc exception. This patch uses the nothrow version of
operator new and reports allocation failures by setting failbit in the
iostate variable.

	* config/locale/generic/c_locale.cc (__set_C_locale()): New function
	to set the "C" locale and return the name of the previous locale.
	(__convert_to_v<float>, __convert_to_v<double>)
	(__convert_to_v<long double>): Use __set_C_locale and set failbit on
	error.
2020-11-10 20:33:29 +00:00
Marek Polacek 8c0c83feb0 c++: Improve static_assert diagnostic [PR97518]
Currently, when a static_assert fails, we only say "static assertion failed".
It would be more useful if we could also print the expression that
evaluated to false; this is especially useful when the condition uses
template parameters.  Consider the motivating example, in which we have
this line:

  static_assert(is_same<X, Y>::value);

if this fails, the user has to play dirty games to get the compiler to
print the template arguments.  With this patch, we say:

  error: static assertion failed
  note: 'is_same<int*, int>::value' evaluates to false

which I think is much better.  However, always printing the condition that
evaluated to 'false' wouldn't be very useful: e.g. noexcept(fn) is
always parsed to true/false, so we would say "'false' evaluates to false"
which doesn't help.  So I wound up only printing the condition when it was
instantiation-dependent, that is, we called finish_static_assert from
tsubst_expr.

Moreover, this patch also improves the diagnostic when the condition
consists of a logical AND.  Say you have something like this:

  static_assert(fn1() && fn2() && fn3() && fn4() && fn5());

where fn4() evaluates to false and the other ones to true.  Highlighting
the whole thing is not that helpful because it won't say which clause
evaluated to false.  With the find_failing_clause tweak in this patch
we emit:

  error: static assertion failed
    6 | static_assert(fn1() && fn2() && fn3() && fn4() && fn5());
      |                                          ~~~^~

so you know right away what's going on.  Unfortunately, when you combine
both things, that is, have an instantiation-dependent expr and && in
a static_assert, we can't yet quite point to the clause that failed.  It
is because when we tsubstitute something like is_same<X, Y>::value, we
generate a VAR_DECL that doesn't have any location.  It would be awesome
if we could wrap it with a location wrapper, but I didn't see anything
obvious.

In passing, I've cleaned up some things:
* use iloc_sentinel when appropriate,
* it's nicer to call contextual_conv_bool instead of the rather verbose
  perform_implicit_conversion_flags,
* no need to check for INTEGER_CST before calling integer_zerop.

gcc/cp/ChangeLog:

	PR c++/97518
	* cp-tree.h (finish_static_assert): Adjust declaration.
	* parser.c (cp_parser_static_assert): Pass false to
	finish_static_assert.
	* pt.c (tsubst_expr): Pass true to finish_static_assert.
	* semantics.c (find_failing_clause_r): New function.
	(find_failing_clause): New function.
	(finish_static_assert): Add a bool parameter.  Use
	iloc_sentinel.  Call contextual_conv_bool instead of
	perform_implicit_conversion_flags.  Don't check for INTEGER_CST before
	calling integer_zerop.  Call find_failing_clause and maybe use its
	location.  Print the original condition or the failing clause if
	SHOW_EXPR_P.

gcc/testsuite/ChangeLog:

	PR c++/97518
	* g++.dg/diagnostic/pr87386.C: Adjust expected output.
	* g++.dg/diagnostic/static_assert1.C: New test.
	* g++.dg/diagnostic/static_assert2.C: New test.

libcc1/ChangeLog:

	PR c++/97518
	* libcp1plugin.cc (plugin_add_static_assert): Pass false to
	finish_static_assert.
2020-11-10 15:08:06 -05:00
Marek Polacek a210d404d0 c++: Add 5 unfixed tests.
A couple of dg-ice tests.

gcc/testsuite/ChangeLog:

	PR c++/52830
	PR c++/88982
	PR c++/90799
	PR c++/87765
	PR c++/89565
	* g++.dg/cpp0x/constexpr-52830.C: New test.
	* g++.dg/cpp0x/vt-88982.C: New test.
	* g++.dg/cpp1z/class-deduction76.C: New test.
	* g++.dg/cpp1z/constexpr-lambda26.C: New test.
	* g++.dg/cpp2a/nontype-class39.C: New test.
2020-11-10 15:02:51 -05:00
Jonathan Wakely f7c41c572b libstdc++: Reorder constructors in <sstream>
This groups all the constructors together, consistent with the synopses
in the C++20 standard.

libstdc++-v3/ChangeLog:

	* include/std/sstream (basic_stringbug, basic_istringstream)
	(basic_ostringstream, basic_stringstream): Reorder C++20
	constructors to be declared next to other constructors.
2020-11-10 19:22:48 +00:00
Jonathan Wakely 95cb0fc8c5 libstdc++: Add remaining C++20 additions to <sstream> [P0408R7]
This adds the new overloads of basic_stringbuf::str, and the
corresponding overloads to basic_istringstream, basic_ostringstream and
basic_stringstream.

libstdc++-v3/ChangeLog:

	* config/abi/pre/gnu.ver (GLIBCXX_3.4.21): Tighten patterns.
	(GLIBCXX_3.4.29): Export new symbols.
	* include/bits/alloc_traits.h (__allocator_like): New concept.
	* include/std/sstream (basic_stringbuf::swap): Add exception
	specification.
	(basic_stringbuf::str() const): Add ref-qualifier. Use new
	_M_high_mark function.
	(basic_stringbuf::str(const SAlloc&) const): Define new function.
	(basic_stringbuf::str() &&): Likewise.
	(basic_stringbuf::str(const basic_string<C,T,SAlloc>&)):
	Likewise.
	(basic_stringbuf::str(basic_string<C,T,Alloc>&&)): Likewise.
	(basic_stringbuf::view() const): Use _M_high_mark.
	(basic_istringstream::str, basic_ostringstream::str)
	(basic_stringstream::str): Define new overloads.
	* src/c++20/sstream-inst.cc (basic_stringbuf::str)
	(basic_istringstream::str, basic_ostringstream::str)
	(basic_stringstream::str): Explicit instantiation definitions
	for new overloads.
	* testsuite/27_io/basic_istringstream/view/char/1.cc: Add more
	checks.
	* testsuite/27_io/basic_istringstream/view/wchar_t/1.cc:
	Likewise.
	* testsuite/27_io/basic_ostringstream/view/char/1.cc:
	Likewise.
	* testsuite/27_io/basic_ostringstream/view/wchar_t/1.cc:
	Likewise.
	* testsuite/27_io/basic_stringstream/view/char/1.cc:
	Likewise.
	* testsuite/27_io/basic_stringstream/view/wchar_t/1.cc:
	Likewise.
	* testsuite/27_io/basic_istringstream/str/char/2.cc: New test.
	* testsuite/27_io/basic_istringstream/str/wchar_t/2.cc: New test.
	* testsuite/27_io/basic_ostringstream/str/char/3.cc: New test.
	* testsuite/27_io/basic_ostringstream/str/wchar_t/3.cc: New test.
	* testsuite/27_io/basic_stringbuf/str/char/4.cc: New test.
	* testsuite/27_io/basic_stringbuf/str/wchar_t/4.cc: New test.
	* testsuite/27_io/basic_stringstream/str/char/5.cc: New test.
	* testsuite/27_io/basic_stringstream/str/wchar_t/5.cc.cc: New test.
2020-11-10 19:22:47 +00:00
Jonathan Wakely ced70ebaa3 libstdc++: Fix more unspecified comparisons to null pointer [PR 97415]
This adds some more null checks to avoid a relational comparison with a
null pointer, similar to 78198b6021.

libstdc++-v3/ChangeLog:

	PR libstdc++/97415
	* include/std/sstream (basic_stringbuf::_M_update_egptr)
	(basic_stringbuf::__xfer_bufptrs::__xfer_bufptrs): Check for
	null before comparing pointers.
2020-11-10 19:21:55 +00:00
Strager Neds 8b9a92f794 Refactor copying decl section names
gcc/

	* cgraph.h (symtab_node::get_section): Constify.
	(symtab_node::set_section): Declare new overload.
	* symtab.c (symtab_node::set_section): Define new overload.
	(symtab_node::copy_visibility_from): Use new overload of
	symtab_node::set_section.
	(symtab_node::resolve_alias): Same.
	* tree.h (set_decl_section_name): Declare new overload.
	* tree.c (set_decl_section_name): Define new overload.
	* tree-emutls.c (get_emutls_init_templ_addr): Same.
	* cgraphclones.c (cgraph_node::create_virtual_clone): Use new
	overload of symtab_node::set_section.
	(cgraph_node::create_version_clone_with_body): Same.
	* trans-mem.c (ipa_tm_create_version): Same.

gcc/c
	* c-decl.c (merge_decls): Use new overload of
	set_decl_section_name.

gcc/cp
	* decl.c (duplicate_decls): Use new overload of
	set_decl_section_name.
	* method.c (use_thunk): Same.
	* optimize.c (maybe_clone_body): Same.
	* coroutines.cc (act_des_fn): Same.

gcc/d
	* decl.cc (finish_thunk): Use new overload of
	set_decl_section_name
2020-11-10 11:44:15 -07:00