gcc.git
4 years agoc++: Small tweak to can_convert_eh [PR81660]
Marek Polacek [Fri, 6 Nov 2020 02:46:06 +0000 (21:46 -0500)]
c++: Small tweak to can_convert_eh [PR81660]

While messing with check_handlers_1, I spotted this bug report which
complains that we don't warn about the case when we have two duplicated
handlers of type int.  can_convert_eh implements [except.handle] and
that says: A handler is a match for an exception object of type E if
 - The handler is of type cv T or cv T& and E and T are the same type
   (ignoring the top-level cv-qualifiers), or [...]

but we don't implement this bullet properly for non-class types.  The
fix therefore seems pretty obvious.  Also change the return type to
bool when we're only returning yes/no.

gcc/cp/ChangeLog:

PR c++/81660
* except.c (can_convert_eh): Change the return type to bool.  If
the type TO and FROM are the same, return true.

gcc/testsuite/ChangeLog:

PR c++/81660
* g++.dg/warn/Wexceptions3.C: New test.
* g++.dg/eh/pr42859.C: Add dg-warning.
* g++.dg/torture/pr81659.C: Likewise.

4 years agoImprove uninitialized warning with value range info
Bin Cheng [Fri, 6 Nov 2020 21:19:40 +0000 (16:19 -0500)]
Improve uninitialized warning with value range info

Function use_pred_not_overlap_with_undef_path_pred of
pass_late_warn_uninitialized
checks if predicate of variable use overlaps with predicate of undefined
control flow path.
For now, it only checks ssa_var comparing against constant, this can be
improved where
ssa_var compares against another ssa_var with value range info, as described in
comment:

+         /* Check value range info of rhs, do following transforms:
+              flag_var < [min, max]  ->  flag_var < max
+              flag_var > [min, max]  ->  flag_var > min
+
+            We can also transform LE_EXPR/GE_EXPR to LT_EXPR/GT_EXPR:
+              flag_var <= [min, max] ->  flag_var < [min, max+1]
+              flag_var >= [min, max] ->  flag_var > [min-1, max]
+            if no overflow/wrap.  */

gcc/

* tree-ssa-uninit.c (find_var_cmp_const): New function.
(use_pred_not_overlap_with_undef_path_pred): Call above.

4 years agolibstdc++: Fix symbol version conflict in linker script
Jonathan Wakely [Fri, 6 Nov 2020 19:53:36 +0000 (19:53 +0000)]
libstdc++: Fix symbol version conflict in linker script

The change in r11-4748-50b840ac5e1d6534e345c3fee9a97ae45ced6bc7 causes
a build error on Solaris, due to the new explicit instantiation matching
patterns for two different symbol versions.

libstdc++-v3/ChangeLog:

* config/abi/pre/gnu.ver (GLIBCXX_3.4.21): Tighten up patterns
for basic_stringbuf that refer to __xfer_bufptrs.

4 years agoObjective-C/C++ : Allow visibility prefix attributes on interfaces.
Iain Sandoe [Sun, 25 Oct 2020 17:34:29 +0000 (17:34 +0000)]
Objective-C/C++ : Allow visibility prefix attributes on interfaces.

This passes visibiliy through without warning (so that, for example,
__attribute__((__visibility("default"))) does not result in any
diagnostic).

gcc/objc/ChangeLog:

* objc-act.c (start_class): Accept visibility attributes
without warning.

4 years agoObjective-C/C++ (parsers) : Update @property attribute parsing.
Iain Sandoe [Sat, 31 Oct 2020 20:53:34 +0000 (20:53 +0000)]
Objective-C/C++ (parsers) : Update @property attribute parsing.

At present, we are missing parsing and checking for around
half of the property attributes in use.  The existing ad hoc scheme
for the parser's communication with the Objective C validation
is not suitable for extending to cover all the missing cases.

Additionally:

1/ We were declaring errors in two cases that the reference
   implementation warns (or is silent).

   I've elected to warn for both those cases, (Wattributes) it
   could be that we should implement Wobjc-xxx-property warning
   masks (TODO).

2/ We were emitting spurious complaints about missing property
   attributes when these were not being parsed because we gave
   up on the first syntax error.

3/ The quality of the diagnostic locations was poor (that's
   true for much of Objective-C, we will have to improve it as
   we modernise areas).

We continue to attempt to keep the code, warning and error output
similar (preferably identical output) between the C and C++ front
ends.

The interface to the Objective-C-specific parts of the parsing is
simplified to a vector of parsed (but not fully-checked) property
attributes, this will simplify the addition of new attributes.

gcc/c-family/ChangeLog:

* c-objc.h (enum objc_property_attribute_group): New
(enum objc_property_attribute_kind): New.
(OBJC_PROPATTR_GROUP_MASK): New.
(struct property_attribute_info): Small class encapsulating
parser output from property attributes.
(objc_prop_attr_kind_for_rid): New
(objc_add_property_declaration): Simplify interface.
* stub-objc.c (enum rid): Dummy type.
(objc_add_property_declaration): Simplify interface.
(objc_prop_attr_kind_for_rid): New.

gcc/c/ChangeLog:

* c-parser.c (c_parser_objc_at_property_declaration):
Improve parsing fidelity. Associate better location info
with @property attributes.  Clean up the interface to
objc_add_property_declaration ().

gcc/cp/ChangeLog:

* parser.c (cp_parser_objc_at_property_declaration):
Improve parsing fidelity. Associate better location info
with @property attributes.  Clean up the interface to
objc_add_property_declaration ().

gcc/objc/ChangeLog:

* objc-act.c (objc_prop_attr_kind_for_rid): New.
(objc_add_property_declaration): Adjust to consume the
parser output using a vector of parsed attributes.

gcc/testsuite/ChangeLog:

* obj-c++.dg/property/at-property-1.mm: Adjust expected
diagnostics.
* obj-c++.dg/property/at-property-29.mm: Likewise.
* obj-c++.dg/property/at-property-4.mm: Likewise.
* obj-c++.dg/property/property-neg-2.mm: Likewise.
* objc.dg/property/at-property-1.m: Likewise.
* objc.dg/property/at-property-29.m: Likewise.
* objc.dg/property/at-property-4.m: Likewise.
* objc.dg/property/at-property-5.m: Likewise.
* objc.dg/property/property-neg-2.m: Likewise.

4 years agoc++: Propagate attributes to clones in duplicate_decls [PR67453]
Jakub Jelinek [Fri, 6 Nov 2020 19:33:39 +0000 (20:33 +0100)]
c++: Propagate attributes to clones in duplicate_decls [PR67453]

On the following testcase where the cdtor attributes aren't on the
in-class declaration but on an out-of-class definition, the cdtors
have their clones created from the in-class declaration, and later on
duplicate_decls updates attributes on the abstract cdtors, but nothing
propagates them to the clones.

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

PR c++/67453
* decl.c (duplicate_decls): Propagate DECL_ATTRIBUTES and
DECL_PRESERVE_P from olddecl to its clones if any.

* g++.dg/ext/attr-used-2.C: New test.

4 years agoDarwin: Darwin 20 is to be macOS 11 (Big Sur).
Iain Sandoe [Fri, 31 Jul 2020 20:05:28 +0000 (21:05 +0100)]
Darwin: Darwin 20 is to be macOS 11 (Big Sur).

As per Nigel Tufnel's assertion "... this one goes to 11".

The various parts of the code that deal with mapping Darwin versions
to macOS (X) versions need updating to deal with  a major version of
11.

So now we have, for example:

Darwin  4 => macOS (X) 10.0

Darwin 14 => macOS (X) 10.10
...
Darwin 19 => macOS (X) 10.15

Darwin 20 => macOS  11.0

Because of the historical duplication of the "10" in macOSX 10.xx and
the number of tools that expect this, it is likely that system tools will
allow macos11.0 and/or macosx11.0 (despite that the latter makes little
sense).

Update the link test to cover Catalina (Darwin19/10.15) and
Big Sur (Darwin20/11.0).

gcc/ChangeLog:

* config/darwin-c.c: Allow for Darwin20 to correspond to macOS 11.
* config/darwin-driver.c: Likewise.

gcc/testsuite/ChangeLog:

* gcc.dg/darwin-minversion-link.c: Allow for Darwin19 (macOS 10.15)
and Darwin20 (macOS 11.0).

4 years agorework PRE PHI translation cache
Richard Biener [Fri, 6 Nov 2020 15:57:05 +0000 (16:57 +0100)]
rework PRE PHI translation cache

Turns out its size and time requirements can be stripped down
dramatically.

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

* tree-ssa-pre.c (expr_pred_trans_d): Modify so elements
are embedded rather than allocated.  Remove hashval member,
make all members integers.
(phi_trans_add): Adjust accordingly.
(phi_translate): Likewise.  Deal with re-allocation
of the table.

4 years agoCombine new calculated ranges with existing range.
Andrew MacLeod [Fri, 6 Nov 2020 19:14:46 +0000 (14:14 -0500)]
Combine new calculated ranges with existing range.

When a range is recalculated, retain what was previously known as IL changes
can produce different results from un-executed code.   This also paves
the way for external injection of ranges.

gcc/
PR tree-optimization/97737
PR tree-optimization/97741
* gimple-range.cc: (gimple_ranger::range_of_stmt): Intersect newly
calculated ranges with the existing known global range.
gcc/testsuite/
* gcc.dg/pr97737.c: New.
* gcc.dg/pr97741.c: New.

4 years agoAdd PC as control register
Darius Galis [Fri, 6 Nov 2020 18:54:20 +0000 (11:54 -0700)]
Add PC as control register

gcc/
* config/rx/rx.md (CTRLREG_PC): Add.
* config/rx/rx.c (CTRLREG_PC): Add
(rx_expand_builtin_mvtc): Add warning: PC register cannot
be used as dest.

4 years agocore: Rename DECL_IS_BUILTIN -> DECL_IS_UNDECLARED_BUILTIN
Nathan Sidwell [Fri, 6 Nov 2020 17:59:21 +0000 (09:59 -0800)]
core: Rename DECL_IS_BUILTIN -> DECL_IS_UNDECLARED_BUILTIN

In cleaning up C++'s handling of hidden decls, I renamed its
DECL_BUILTIN_P, which checks for loc == BUILTINS_LOCATION to
DECL_UNDECLARED_BUILTIN_P, because the location gets updated, if user
source declares the builtin, and the predicate no longer holds.  The
original name was confusing me.  (The builtin may still retain builtin
properties in the redeclaration, and other predicates can still detect
that.)

I discovered that tree.h had its own variant 'DECL_IS_BUILTIN', which
behaves in (almost) the same manner.  And therefore has the same
mutating behaviour.

This patch deletes the C++ one, and renames tree.h's to
DECL_IS_UNDECLARED_BUILTIN, to emphasize its non-constantness.  I
guess _IS_ wins over _P

gcc/
* tree.h (DECL_IS_BUILTIN): Rename to ...
(DECL_IS_UNDECLARED_BUILTIN): ... here.  No need to use SOURCE_LOCUS.
* calls.c (maybe_warn_alloc_args_overflow): Adjust for rename.
* cfgexpand.c (pass_expand::execute): Likewise.
* dwarf2out.c (base_type_die, is_naming_typedef_decl): Likewise.
* godump.c (go_decl, go_type_decl): Likewise.
* print-tree.c (print_decl_identifier): Likewise.
* tree-pretty-print.c (dump_generic_node): Likewise.
* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Likewise.
* xcoffout.c (xcoff_assign_fundamental_type_number): Likewise.
gcc/c-family/
* c-ada-spec.c (collect_ada_nodes): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
(collect_ada_node): Likewise.
(dump_forward_type): Likewise.
* c-common.c (set_underlying_type): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
(user_facing_original_type, c_common_finalize_early_debug): Likewise.
gcc/c/
* c-decl.c (diagnose_mismatched_decls): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
(warn_if_shadowing, implicitly_declare, names_builtin_p)
(collect_source_refs): Likewise.
* c-typeck.c (inform_declaration, inform_for_arg)
(convert_for_assignment): Likewise.
gcc/cp/
* cp-tree.h (DECL_UNDECLARED_BUILTIN_P): Delete.
* cp-objcp-common.c (names_bultin_p): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
* decl.c (decls_match): Likewise.  Replace
DECL_UNDECLARED_BUILTIN_P with DECL_IS_UNDECLARED_BUILTIN.
(duplicate_decls): Likewise.
* decl2.c (collect_source_refs): Likewise.
* name-lookup.c (anticipated_builtin_p, print_binding_level)
(do_nonmember_using_decl): Likewise.
* pt.c (builtin_pack_fn_p): Likewise.
* typeck.c (error_args_num): Likewise.
gcc/lto/
* lto-symtab.c (lto_symtab_merge_decls_1): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
gcc/go/
* go-gcc.cc (Gcc_backend::call_expression): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
libcc1/
* libcc1plugin.cc (address_rewriter): Rename
DECL_IS_BUILTIN->DECL_IS_UNDECLARED_BUILTIN.
* libcp1plugin.cc (supplement_binding): Likewise.

4 years agoaarch64: Use intrinsics for upper saturating shift right
David Candler [Fri, 6 Nov 2020 17:53:03 +0000 (17:53 +0000)]
aarch64: Use intrinsics for upper saturating shift right

The use of vqshrn_high_n_s32 was triggering an unneeded register move, because
sqshrn2 is destructive but was declared as inline assembly in arm_neon.h. This
patch implements sqshrn2 and uqshrn2 as actual intrinsics which do not trigger
the unnecessary move, along with new tests to cover them.

gcc/ChangeLog

2020-11-06  David Candler  <david.candler@arm.com>

* config/aarch64/aarch64-builtins.c
(TYPES_SHIFT2IMM): Add define.
(TYPES_SHIFT2IMM_UUSS): Add define.
(TYPES_USHIFT2IMM): Add define.
* config/aarch64/aarch64-simd.md
(aarch64_<sur>q<r>shr<u>n2_n<mode>): Add new insn for upper saturating shift right.
* config/aarch64/aarch64-simd-builtins.def: Add intrinsics.
* config/aarch64/arm_neon.h:
(vqrshrn_high_n_s16): Expand using intrinsic rather than inline asm.
(vqrshrn_high_n_s32): Likewise.
(vqrshrn_high_n_s64): Likewise.
(vqrshrn_high_n_u16): Likewise.
(vqrshrn_high_n_u32): Likewise.
(vqrshrn_high_n_u64): Likewise.
(vqrshrun_high_n_s16): Likewise.
(vqrshrun_high_n_s32): Likewise.
(vqrshrun_high_n_s64): Likewise.
(vqshrn_high_n_s16): Likewise.
(vqshrn_high_n_s32): Likewise.
(vqshrn_high_n_s64): Likewise.
(vqshrn_high_n_u16): Likewise.
(vqshrn_high_n_u32): Likewise.
(vqshrn_high_n_u64): Likewise.
(vqshrun_high_n_s16): Likewise.
(vqshrun_high_n_s32): Likewise.
(vqshrun_high_n_s64): Likewise.

gcc/testsuite/ChangeLog

2020-11-06  David Candler  <david.candler@arm.com>

* gcc.target/aarch64/advsimd-intrinsics/vqrshrn_high_n.c: New testcase.
* gcc.target/aarch64/advsimd-intrinsics/vqrshrun_high_n.c: Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vqshrn_high_n.c: Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vqshrun_high_n.c: Likewise.
* gcc.target/aarch64/narrow_high-intrinsics.c: Update expected assembler
for sqshrun2, sqrshrun2, sqshrn2, uqshrn2, sqrshrn2 and uqrshrn2.

4 years agolibcpp: Provide date routine
Nathan Sidwell [Fri, 6 Nov 2020 16:53:31 +0000 (08:53 -0800)]
libcpp: Provide date routine

Joseph pointed me at cb_get_source_date_epoch, which allows repeatable
builds and solves a FIXME I had on the modules branch.  Unfortunately
it's used exclusively to generate __DATE__ and __TIME__ values, which
fallback to using a time(2) call.  It'd be nicer if the preprocessor
made whatever time value it determined available to the rest of the
compiler.  So this patch adds a new cpp_get_date function, which
abstracts the call to the get_source_date_epoch hook, or uses time
directly.  The value is cached.  Thus the timestamp I end up putting
on CMI files matches __DATE__ and __TIME__ expansions.  That seems
worthwhile.

libcpp/
* include/cpplib.h (enum class CPP_time_kind): New.
(cpp_get_date): Declare.
* internal.h (struct cpp_reader): Replace source_date_epoch with
time_stamp and time_stamp_kind.
* init.c (cpp_create_reader): Initialize them.
* macro.c (_cpp_builtin_macro_text): Use cpp_get_date.
(cpp_get_date): Broken out from _cpp_builtin_macro_text and
genericized.

4 years agoaarch64: Support permutes on unpacked SVE vectors
Richard Sandiford [Fri, 6 Nov 2020 16:49:28 +0000 (16:49 +0000)]
aarch64: Support permutes on unpacked SVE vectors

This patch adds support for permuting unpacked SVE vectors using:

- DUP
- EXT
- REV[BHW]
- REV
- TRN[12]
- UZP[12]
- ZIP[12]

This involves rewriting the REV[BHW] permute code so that the inputs
and outputs of the insn pattern have the same mode as the vectors
being permuted.  This is different from the ACLE form, where the
reversal happens within individual elements rather than within
groups of multiple elements.

The patch does not add a conditional version of REV[BHW].  I'll come
back to that once we have partial-vector comparisons and selects.

The patch is really just enablement, adding an extra tool to the
toolbox.  It doesn't bring any significant vectorisation opportunities
on its own.  However, the patch does have one artificial example that
is now vectorised in a better way than before.

gcc/
* config/aarch64/aarch64-modes.def (VNx2BF, VNx4BF): Adjust nunits
and alignment based on the current VG.
* config/aarch64/iterators.md (SVE_ALL, SVE_24, SVE_2, SVE_4): Add
partial SVE BF modes.
(UNSPEC_REVBHW): New unspec.
(Vetype, Vesize, Vctype, VEL, Vel, vwcore, V_INT_CONTAINER)
(v_int_container, VPRED, vpred): Handle partial SVE BF modes.
(container_bits, Vcwtype): New mode attributes.
* config/aarch64/aarch64-sve.md
(@aarch64_sve_revbhw_<SVE_ALL:mode><PRED_HSD:mode>): New pattern.
(@aarch64_sve_dup_lane<mode>): Extended from SVE_FULL to SVE_ALL.
(@aarch64_sve_rev<mode>, @aarch64_sve_<perm_insn><mode>): Likewise.
(@aarch64_sve_ext<mode>): Likewise.
* config/aarch64/aarch64.c (aarch64_classify_vector_mode): Handle
E_VNx2BFmode and E_VNx4BFmode.
(aarch64_evpc_rev_local): Base the analysis on the container size
instead of the element size.  Use the new aarch64_sve_revbhw
patterns for SVE.
(aarch64_evpc_dup): Handle partial SVE data modes.  Use the
container size instead of the element size when applying the
SVE immediate limit.  Fix a previously incorrect bounds check.
(aarch64_expand_vec_perm_const_1): Handle partial SVE data modes.

gcc/testsuite/
* gcc.target/aarch64/sve/dup_lane_2.c: New test.
* gcc.target/aarch64/sve/dup_lane_3.c: Likewise.
* gcc.target/aarch64/sve/ext_4.c: Likewise.
* gcc.target/aarch64/sve/rev_2.c: Likewise.
* gcc.target/aarch64/sve/revhw_1.c: Likewise.
* gcc.target/aarch64/sve/revhw_2.c: Likewise.
* gcc.target/aarch64/sve/slp_perm_8.c: Likewise.
* gcc.target/aarch64/sve/trn1_2.c: Likewise.
* gcc.target/aarch64/sve/trn2_2.c: Likewise.
* gcc.target/aarch64/sve/uzp1_2.c: Likewise.
* gcc.target/aarch64/sve/uzp2_2.c: Likewise.
* gcc.target/aarch64/sve/zip1_2.c: Likewise.
* gcc.target/aarch64/sve/zip2_2.c: Likewise.

4 years agoAdd -fbit-tests option.
Martin Liska [Fri, 2 Oct 2020 12:12:06 +0000 (14:12 +0200)]
Add -fbit-tests option.

gcc/ChangeLog:

* common.opt: Add new -fbit-tests option.
* doc/invoke.texi: Document the option.
* tree-switch-conversion.c (bit_test_cluster::find_bit_tests):
Use the option.
* tree-switch-conversion.h (is_enabled): New function.

gcc/testsuite/ChangeLog:

* gcc.dg/tree-ssa/switch-4.c: New test.

4 years agomake PRE constant value IDs negative
Richard Biener [Fri, 6 Nov 2020 14:13:56 +0000 (15:13 +0100)]
make PRE constant value IDs negative

This separates constant and non-constant value-ids to allow for
a more efficient constant_value_id_p and for more efficient bit-packing
inside the bitmap sets which never contain any constant values.

There's further optimization opportunities but at this stage
I'll do small refactorings.

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

* tree-ssa-sccvn.h (get_max_constant_value_id): Declare.
(get_next_constant_value_id): Likewise.
(value_id_constant_p): Inline and simplify.
* tree-ssa-sccvn.c (constant_value_ids): Remove.
(next_constant_value_id): Add.
(get_or_alloc_constant_value_id): Adjust.
(value_id_constant_p): Remove definition.
(get_max_constant_value_id): Define.
(get_next_value_id): Add assert for overflow.
(get_next_constant_value_id): Define.
(run_rpo_vn): Adjust.
(free_rpo_vn): Likewise.
(do_rpo_vn): Initialize next_constant_value_id.
* tree-ssa-pre.c (constant_value_expressions): New.
(add_to_value): Split into constant/non-constant value
handling.  Avoid exact re-allocation.
(vn_valnum_from_value_id): Adjust.
(phi_translate_1): Remove spurious exact re-allocation.
(bitmap_find_leader): Adjust.  Make sure we return
a CONSTANT value for a constant value id.
(do_pre_regular_insertion): Use 2 auto-elements for avail.
(do_pre_partial_partial_insertion): Likewise.
(init_pre): Allocate constant_value_expressions.
(fini_pre): Release constant_value_expressions.

4 years agotree-optimization/97706 - handle PHIs in pattern recog mask precison
Richard Biener [Thu, 5 Nov 2020 11:34:42 +0000 (12:34 +0100)]
tree-optimization/97706 - handle PHIs in pattern recog mask precison

This adds handling of PHIs to mask precision compute which is
eventually needed to detect a bool pattern when the def chain
contains such a PHI node.

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

PR tree-optimization/97706
* tree-vect-patterns.c (possible_vector_mask_operation_p):
PHIs are possible mask operations.
(vect_determine_mask_precision): Handle PHIs.
(vect_determine_precisions): Walk PHIs in BB analysis.

* gcc.dg/vect/bb-slp-pr97706.c: New testcase.

4 years agoc++: Parser tweaks
Nathan Sidwell [Fri, 6 Nov 2020 13:57:34 +0000 (05:57 -0800)]
c++: Parser tweaks

We need to adjust the wording for 'export'.  Between c++11 and c++20
it is deprecated.  Outside those ranges it is unsupported (at the
moment).  While here, there's also an unneeded setting of a bool --
it's inside an if block that just checked it was true.

gcc/cp/
* parser.c (cp_parser_template_declaration): Adjust 'export' warning.
(cp_parser_explicit_specialization): Remove unneeded bool setting.

4 years agotestsuite: fix malloc alignment in test
Kewen Lin [Fri, 6 Nov 2020 13:45:06 +0000 (14:45 +0100)]
testsuite: fix malloc alignment in test

gcc/testsuite/ChangeLog:

PR gcov-profile/97461
* gcc.dg/tree-prof/pr97461.c: Return aligned memory.

4 years ago[Fortran] Remove OpenACC 'loop' inside 'parallel' special-case code
Thomas Schwinge [Tue, 27 Oct 2020 09:43:27 +0000 (10:43 +0100)]
[Fortran] Remove OpenACC 'loop' inside 'parallel' special-case code

Instead, use the generic middle-end code, like already used for Fortran OpenACC
'loop' inside other compute constructs, orphaned 'loop' constructs, and C, C++
generally.

gcc/fortran/
* openmp.c (oacc_is_parallel, resolve_oacc_params_in_parallel):
Remove.
(resolve_oacc_loop_blocks): Don't call the former.
gcc/testsuite/
* gfortran.dg/goacc/loop-2-parallel-3.f95: Adjust.

4 years agoRemove 'gfortran.dg/goacc/loop-6.f95'
Thomas Schwinge [Tue, 27 Oct 2020 06:26:24 +0000 (07:26 +0100)]
Remove 'gfortran.dg/goacc/loop-6.f95'

What it's testing is adequately covered in other
'gfortran.dg/goacc/loop-2-parallel-*.f95' testcases.

gcc/testsuite/
* gfortran.dg/goacc/loop-6.f95: Remove.

4 years agoRemove 'gfortran.dg/goacc/loop-5.f95'
Thomas Schwinge [Tue, 27 Oct 2020 09:16:29 +0000 (10:16 +0100)]
Remove 'gfortran.dg/goacc/loop-5.f95'

What it's testing is adequately covered in other
'gfortran.dg/goacc/loop-2-*-tile.f95' testcases.

gcc/testsuite/
* gfortran.dg/goacc/loop-5.f95: Remove.

4 years agogcc-changelog: prevent double cherry-pick line
Martin Liska [Thu, 5 Nov 2020 11:33:25 +0000 (12:33 +0100)]
gcc-changelog: prevent double cherry-pick line

contrib/ChangeLog:

* gcc-changelog/git_commit.py: Add new check.
* gcc-changelog/test_email.py: Test it.
* gcc-changelog/test_patches.txt: Add new patch.

4 years agorefactor SLP analysis
Richard Biener [Fri, 6 Nov 2020 11:44:47 +0000 (12:44 +0100)]
refactor SLP analysis

This passes down the graph entry kind down to vect_analyze_slp_instance
which simplifies it and makes it a shallow wrapper around
vect_build_slp_instance.

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

* tree-vect-slp.c (vect_analyze_slp): Pass down the
SLP graph entry kind.
(vect_analyze_slp_instance): Simplify.
(vect_build_slp_instance): Adjust.
(vect_slp_check_for_constructors): Perform more
eligibility checks here.

4 years agoMove ipa-refs from ggc to heap.
Jan Hubicka [Fri, 6 Nov 2020 12:30:39 +0000 (13:30 +0100)]
Move ipa-refs from ggc to heap.

gcc/ChangeLog:

* ipa-ref.h (enum ipa_ref_use): Remove GTY marker.
(struct ipa_ref): Remove GTY marker; reorder for better packing.
(struct ipa_ref_list): Remove GTY marker; turn references
nad referring to va_heap, vl_ptr vectors; update accesors.
* cgraph.h (symtab_node::iterate_reference): Update.
* ipa-ref.c (ipa_ref::remove_reference): Update.
* symtab.c (symtab_node::create_reference): Update.
(symtab_node::remove_all_references): Update.
(symtab_node::resolve_alias): Update.

gcc/cp/ChangeLog:

* tree.c (cp_fix_function_decl_p): Do not access ipa_ref_list dirrectly.

4 years agoipa-modref: Fix comment typos
Jakub Jelinek [Fri, 6 Nov 2020 12:20:51 +0000 (13:20 +0100)]
ipa-modref: Fix comment typos

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

* ipa-modref-tree.h: Fix comment typos.
* ipa-modref.c: Likewise.

4 years agoIBM Z: Remove override of inline params
Andreas Krebbel [Fri, 6 Nov 2020 11:58:59 +0000 (12:58 +0100)]
IBM Z: Remove override of inline params

We have pretty aggressive values for inline-min-speedup and
max-inline-insns-auto. This unfortunately made more maybe
uninitialized warnings to appear when building on Z.

With the patch we go back to the default values.

gcc/ChangeLog:

* config/s390/s390.c (s390_option_override_internal): Remove
override of inline params.

4 years agotree-optimization/97706 - part one, refactor vect_determine_mask_precision
Richard Biener [Fri, 6 Nov 2020 10:11:42 +0000 (11:11 +0100)]
tree-optimization/97706 - part one, refactor vect_determine_mask_precision

This computes vect_determine_mask_precision in a RPO forward walk
rather than in a backward walk and using a worklist.  It will make
fixing PR97706 easier but for bisecting I wanted it to be separate.

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

PR tree-optimization/97706
* tree-vect-patterns.c (vect_determine_mask_precision):
Remove worklist operation.
(vect_determine_stmt_precisions): Do not call
vect_determine_mask_precision here.
(vect_determine_precisions): Compute mask precision
in a forward walk.

4 years agoOpenACC/Fortran: Reject '!$acc atomic update capture'
Tobias Burnus [Fri, 6 Nov 2020 11:30:20 +0000 (12:30 +0100)]
OpenACC/Fortran: Reject '!$acc atomic update capture'

gcc/fortran/ChangeLog:

* openmp.c (gfc_match_oacc_atomic): No longer accept 'update capture'.

gcc/testsuite/ChangeLog:

* gfortran.dg/goacc-gomp/goacc-gomp.exp: New.
* gfortran.dg/goacc-gomp/atomic.f90: New test.
* gfortran.dg/goacc/atomic.f90: New test.

4 years agoOpenACC (C/C++): Fix 'acc atomic' parsing
Tobias Burnus [Fri, 6 Nov 2020 10:13:47 +0000 (11:13 +0100)]
OpenACC (C/C++): Fix 'acc atomic' parsing

gcc/c/ChangeLog:

* c-parser.c (c_parser_omp_atomic): Add openacc parameter and update
OpenACC matching.
(c_parser_omp_construct): Update call.

gcc/cp/ChangeLog:

* parser.c (cp_parser_omp_atomic): Add openacc parameter and update
OpenACC matching.
(cp_parser_omp_construct): Update call.

gcc/testsuite/ChangeLog:

* c-c++-common/goacc-gomp/atomic.c: New test.
* c-c++-common/goacc/atomic.c: New test.

4 years agotree-optimization/97732 - fix init of SLP induction vectorization
Richard Biener [Fri, 6 Nov 2020 08:35:27 +0000 (09:35 +0100)]
tree-optimization/97732 - fix init of SLP induction vectorization

This PR exposes two issues - one that the vector builder treats
&x as eligible for VECTOR_CST elements and one that SLP induction
vectorization forgets to convert init elements to the vector
component type which makes a difference for pointer vs. integer.

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

PR tree-optimization/97732
* tree-vect-loop.c (vectorizable_induction): Convert the
init elements to the vector component type.
* gimple-fold.c (gimple_build_vector): Use CONSTANT_CLASS_P
rather than TREE_CONSTANT to determine if elements are
eligible for VECTOR_CSTs.

* gcc.dg/vect/bb-slp-pr97732.c: New testcase.

4 years agoAdd dg-require-profiling directives to gcc.target/i386 tests
Olivier Hainque [Fri, 28 Feb 2020 10:57:20 +0000 (10:57 +0000)]
Add dg-require-profiling directives to gcc.target/i386 tests

This patch adds /* { dg-require-profiling "-pg" } */
to a few tests in gcc.target/i386 that use -pg explicitly, to
prevent them from failing during runs for VxWorks targets.

2020-10-29  Olivier Hainque  <hainque@adacore.com>

gcc/testsuite/
* gcc.target/i386/fentryname1.c: Add dg-require-profiling.
* gcc.target/i386/fentryname2.c: Likewise.
* gcc.target/i386/fentryname3.c: Likewise.
* gcc.target/i386/returninst1.c: Likewise.
* gcc.target/i386/returninst2.c: Likewise.
* gcc.target/i386/returninst3.c: Likewise.

4 years agoAdd dg-require-effective-target fpic to g++ tests
Olivier Hainque [Wed, 26 Feb 2020 17:55:09 +0000 (17:55 +0000)]
Add dg-require-effective-target fpic to g++ tests

Add missing dg-require-effective-target fpic to few
g++.dg tests.

2020-11-02  Olivier Hainque  <hainque@adacore.com>

gcc/testsuite/
* g++.dg/pr57878.C: Add dg-require-effective-target fpic.
* g++.dg/pr65032.C: Likewise.
* g++.dg/pr84279.C: Likewise.
* g++.dg/inherit/thunk8.C: Likewise.
* g++.dg/opt/pr64411.C: Likewise.

4 years agoAdd fnspec handling to ipa mode of ipa-modef.
Jan Hubicka [Fri, 6 Nov 2020 09:23:58 +0000 (10:23 +0100)]
Add fnspec handling to ipa mode of ipa-modef.

gcc/:

* attr-fnspec.h (attr_fnspec::get_str): New accessor
* ipa-fnsummary.c (read_ipa_call_summary): Store also parm info
for builtins.
* ipa-modref.c (class fnspec_summary): New type.
(class fnspec_summaries_t): New type.
(modref_summary::modref_summary): Initialize writes_errno.
(struct modref_summary_lto): Add writes_errno.
(modref_summary_lto::modref_summary_lto): Initialize writes_errno.
(modref_summary::dump): Check for NULL pointers.
(modref_summary_lto::dump): Dump writes_errno.
(collapse_loads): Move up in source file.
(collapse_stores): New function.
(process_fnspec): Handle also internal calls.
(analyze_call): Likewise.
(analyze_stmt): Store fnspec string if needed.
(analyze_function): Initialize fnspec_sumarries.
(modref_summaries_lto::duplicate): Copy writes_errno.
(modref_write): Store writes_errno and fnspec summaries.
(read_section): Read writes_errno and fnspec summaries.
(modref_read): Initialize fnspec summaries.
(update_signature): Fix formating.
(compute_parm_map): Return true if sucessful.
(get_parm_type): New function.
(get_access_for_fnspec): New function.
(propagate_unknown_call): New function.
(modref_propagate_in_scc): Use it.
(pass_ipa_modref::execute): Delete fnspec_summaries.
(ipa_modref_c_finalize): Delete fnspec_summaries.
* ipa-prop.c: Include attr-fnspec.h.
(ipa_compute_jump_functions_for_bb):  Also compute jump functions
for functions with fnspecs.
(ipa_read_edge_info): Read jump functions for builtins.

gcc/testsuite/ChangeLog:

* gcc.dg/ipa/modref-2.c: New test.
* gcc.dg/lto/modref-2_0.c: New test.

4 years agoMove size time tables from GGC to heap
Jan Hubicka [Fri, 6 Nov 2020 09:05:11 +0000 (10:05 +0100)]
Move size time tables from GGC to heap

this patch moves size time tables out of ggc allocated memory.  This makes
sources bit cleaner and saves about 60MB of GGC memory that turns to about 45MB
of heap memory for cc1plus LTO build.

* ipa-fnsummary.h (class size_time_entry): Do not GTY annotate.
(class ipa_fnsummary): Turn size_time_table to auto_vec and
call_size_time_table to effecient vec; update constructors.
* ipa-fnsummary.c (ipa_fn_summary::account_size_time): Update.
(ipa_fn_summary::~ipa_fn_summary): Update.
(ipa_fn_summary_t::duplicate): Update.
(ipa_dump_fn_summary): Update.
(set_switch_stmt_execution_predicate): Update.
(analyze_function_body): Update.
(estimate_calls_size_and_time): Update.
(ipa_call_context::estimate_size_and_time): Update.
(ipa_merge_fn_summary_after_inlining): Update.
(ipa_update_overall_fn_summary): Update.
(inline_read_section): Update.
(ipa_fn_summary_write): Update.

4 years agoc-common: Remove DEBUG_FUNCTION from verify_sequence_points
Jakub Jelinek [Fri, 6 Nov 2020 08:52:59 +0000 (09:52 +0100)]
c-common: Remove DEBUG_FUNCTION from verify_sequence_points

While perhaps the function name might suggest that it is a verification/debugging
only routine, it is actually implementation of the -Wsequence-point warning
and so doesn't need the DEBUG_FUNCTION macro on it.

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

* c-common.c (verify_sequence_points): Remove DEBUG_FUNCTION.

4 years agotree-optimization/97733 - fix SLP of reductions with zero relevant
Richard Biener [Fri, 6 Nov 2020 07:34:16 +0000 (08:34 +0100)]
tree-optimization/97733 - fix SLP of reductions with zero relevant

This adds a missing check.

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

PR tree-optimization/97733
* tree-vect-slp.c (vect_analyze_slp_instance): If less
than two reductions were relevant or live do nothing.

4 years agoFortran: Fix type-decl for PDT / wrong-code pdt_14.f03 issue [PR97652]
Tobias Burnus [Fri, 6 Nov 2020 07:26:51 +0000 (08:26 +0100)]
Fortran: Fix type-decl for PDT / wrong-code pdt_14.f03 issue [PR97652]

Parameterized derived types are handled in a special way and start with 'Pdt'.
If the 'P' is not uppercase, gfc_get_derived_type (which calls
gfc_get_module_backend_decl) does not find the existing declaration and
builds a new type. The middle end then sees those types as being different
and nonalising, creating an endless loop for pdt_14.f03.

gcc/fortran/ChangeLog:

PR fortran/97652
* module.c (mio_symbol): Fix symbol name for pdt_type.

4 years agoImprove overflow check
Jeff Law [Fri, 6 Nov 2020 03:42:17 +0000 (20:42 -0700)]
Improve overflow check

Convert
x < (short) ((unsigned short)x + const)
to
x <= SHORT_MAX – const
(and similarly for other integral types) if const is not 0.

gcc/
PR tree-optimization/97223
* match.pd (overflow detection and optimization): Handle conversions.

gcc/testsuite/

* gcc.dg/no-strict-overflow-4.c: Adjust expected output.

4 years agoSimplify x >> x to 0. This fixes PR96701.
Eugene Rozenfeld [Fri, 6 Nov 2020 03:35:45 +0000 (20:35 -0700)]
Simplify x >> x to 0. This fixes PR96701.

gcc/
* match.pd (x >> x): New pattern.

gcc/testsuite

* gcc.dg/self-right-shift.c: New test.

4 years agoRISC-V: Mark non-export symbol static and const in riscv-common.c
Kito Cheng [Fri, 6 Nov 2020 03:05:50 +0000 (11:05 +0800)]
RISC-V: Mark non-export symbol static and const in riscv-common.c

gcc/ChangeLog:

* common/config/riscv/riscv-common.c (riscv_implied_info):
Add static and const.
(riscv_subset_list::handle_implied_ext): Add const due to
riscv_implied_info changed to const.

4 years agoPR target/96307: Fix KASAN option checking.
Kito Cheng [Mon, 5 Oct 2020 06:01:04 +0000 (14:01 +0800)]
PR target/96307: Fix KASAN option checking.

 - Disable kasan if target is unsupported and -fasan-shadow-offset= is not
   given, no matter `--param asan-stack=1` is given or not.

 - Moving KASAN option checking testcase to gcc.dg, those testcase could be
   useful for all other target which not support asan.

 - Verifed on riscv and x86.

gcc/ChangeLog:

PR target/96307
* toplev.c (process_options): Remove param_asan_stack checking for kasan
option checking.

gcc/testsuite/ChangeLog:

PR target/96307
* gcc.dg/pr96307.c: New.
* gcc.target/riscv/pr96260.c: Move this test case from here to ...
* gcc.dg/pr96260.c: ... here.
* gcc.target/riscv/pr91441.c: Move this test case from here to ...
* gcc.dg/pr91441.c: ... here.
* lib/target-supports.exp (check_effective_target_no_fsanitize_address):
New proc.

4 years agoMAINTAINERS: Add myself for write after approval.
liuhongt [Fri, 6 Nov 2020 01:27:10 +0000 (09:27 +0800)]
MAINTAINERS: Add myself for write after approval.

ChangeLog:

2019-03-17  Hongtao Liu  <hongtao.liu@intel.com>

* MAINTAINERS (Write After Approval): Add myself.

4 years agoDaily bump.
GCC Administrator [Fri, 6 Nov 2020 00:16:34 +0000 (00:16 +0000)]
Daily bump.

4 years agoc++: Add auto_diagnostic_group to check_handlers_1.
Marek Polacek [Thu, 5 Nov 2020 23:23:56 +0000 (18:23 -0500)]
c++: Add auto_diagnostic_group to check_handlers_1.

This was missing.

gcc/cp/ChangeLog:

* except.c (check_handlers_1): Add auto_diagnostic_group.

4 years agoc++: Fix decltype(auto) deduction with rvalue ref [PR78209]
Marek Polacek [Tue, 3 Nov 2020 20:10:31 +0000 (15:10 -0500)]
c++: Fix decltype(auto) deduction with rvalue ref [PR78209]

Here's a small deficiency in decltype(auto).  [dcl.type.auto.deduct]/5:
If the placeholder-type-specifier is of the form decltype(auto), [...]
the type deduced for T is determined [...] as though E had been the operand
of the decltype.  So:

  int &&i = 0;
  decltype(auto) j = i; // should behave like int &&j = i; error

We deduce j's type in do_auto_deduction via finish_decltype_type which
takes an 'id' argument.  Currently we compute 'id' as false, because
stripped_init is *i (a REFERENCE_REF_P).  But it seems to me we should
rather set 'id' to true here, by looking through the REFERENCE_REF_P,
so that finish_decltype_type DTRT.

gcc/cp/ChangeLog:

PR c++/78209
* pt.c (do_auto_deduction): If init is REFERENCE_REF_P, use its
first operand.

gcc/testsuite/ChangeLog:

PR c++/78209
* g++.dg/cpp1y/decltype-auto1.C: New test.

4 years agoc++: Add -Wexceptions warning option [PR97675]
Marek Polacek [Tue, 3 Nov 2020 22:46:23 +0000 (17:46 -0500)]
c++: Add -Wexceptions warning option [PR97675]

This PR asks that we add a warning option for an existing (very old)
warning, so that it can be disabled selectively.  clang++ uses
-Wexceptions for this, so I added this new option rather than using
e.g. -Wnoexcept.

gcc/c-family/ChangeLog:

PR c++/97675
* c.opt (Wexceptions): New option.

gcc/cp/ChangeLog:

PR c++/97675
* except.c (check_handlers_1): Use OPT_Wexceptions for the
warning.  Use inform for the second part of the warning.

gcc/ChangeLog:

PR c++/97675
* doc/invoke.texi: Document -Wexceptions.

gcc/testsuite/ChangeLog:

PR c++/97675
* g++.old-deja/g++.eh/catch10.C: Adjust dg-warning.
* g++.dg/warn/Wexceptions1.C: New test.
* g++.dg/warn/Wexceptions2.C: New test.

4 years agoc++: Implement -Wvexing-parse [PR25814]
Marek Polacek [Fri, 2 Oct 2020 13:46:30 +0000 (09:46 -0400)]
c++: Implement -Wvexing-parse [PR25814]

This patch implements the -Wvexing-parse warning to warn about the
sneaky most vexing parse rule in C++: the cases when a declaration
looks like a variable definition, but the C++ language requires it
to be interpreted as a function declaration.  This warning is on by
default (like clang++).  From the docs:

  void f(double a) {
    int i();        // extern int i (void);
    int n(int(a));  // extern int n (int);
  }

  Another example:

  struct S { S(int); };
  void f(double a) {
    S x(int(a));   // extern struct S x (int);
    S y(int());    // extern struct S y (int (*) (void));
    S z();         // extern struct S z (void);
  }

You can find more on this in [dcl.ambig.res].

I spent a fair amount of time on fix-it hints so that GCC can recommend
various ways to resolve such an ambiguity.  Sometimes that's tricky.
E.g., suggesting default-initialization when the class doesn't have
a default constructor would not be optimal.  Suggesting {}-init is also
not trivial because it can use an initializer-list constructor if no
default constructor is available (which ()-init wouldn't do).  And of
course, pre-C++11, we shouldn't be recommending {}-init at all.

I also uncovered a bug in cp_parser_declarator, where we were setting
*parenthesized_p to true despite the comment saying the exact opposite.

gcc/c-family/ChangeLog:

PR c++/25814
* c.opt (Wvexing-parse): New option.

gcc/cp/ChangeLog:

PR c++/25814
* cp-tree.h (enum cp_tree_index): Add CPTI_EXPLICIT_VOID_LIST.
(explicit_void_list_node): Define.
(PARENTHESIZED_LIST_P): New macro.
(struct cp_declarator): Add function::parens_loc.
* decl.c (cxx_init_decl_processing): Initialize explicit_void_list_node.
(grokparms): Also break when explicit_void_list_node.
* parser.c (make_call_declarator): New location_t parameter.  Use it
to set declarator->u.function.parens_loc.
(cp_parser_lambda_declarator_opt): Pass UNKNOWN_LOCATION to
make_call_declarator.
(warn_about_ambiguous_parse): New function.
(cp_parser_init_declarator): Call warn_about_ambiguous_parse.
(cp_parser_declarator): Set *parenthesized_p to false rather than to
true.
(cp_parser_direct_declarator): Create a location for the function's
parentheses and pass it to make_call_declarator.
(cp_parser_parameter_declaration_clause): Return explicit_void_list_node
for (void).
(cp_parser_parameter_declaration_list): Set PARENTHESIZED_LIST_P
in the parameters tree.

gcc/ChangeLog:

PR c++/25814
* doc/invoke.texi: Document -Wvexing-parse.

gcc/testsuite/ChangeLog:

PR c++/25814
* g++.dg/cpp2a/fn-template16.C: Add a dg-warning.
* g++.dg/cpp2a/fn-template7.C: Likewise.
* g++.dg/lookup/pr80891-5.C: Likewise.
* g++.dg/lto/pr79050_0.C: Add extern.
* g++.dg/lto/pr84805_0.C: Likewise.
* g++.dg/parse/pr58898.C: Add a dg-warning.
* g++.dg/template/scope5.C: Likewise.
* g++.old-deja/g++.brendan/recurse.C: Likewise.
* g++.old-deja/g++.jason/template4.C: Likewise.
* g++.old-deja/g++.law/arm4.C: Likewise.
* g++.old-deja/g++.mike/for2.C: Likewise.
* g++.old-deja/g++.other/local4.C: Likewise.
* g++.old-deja/g++.pt/crash3.C: Likewise.
* g++.dg/warn/Wvexing-parse.C: New test.
* g++.dg/warn/Wvexing-parse2.C: New test.
* g++.dg/warn/Wvexing-parse3.C: New test.
* g++.dg/warn/Wvexing-parse4.C: New test.
* g++.dg/warn/Wvexing-parse5.C: New test.
* g++.dg/warn/Wvexing-parse6.C: New test.
* g++.dg/warn/Wvexing-parse7.C: New test.

libstdc++-v3/ChangeLog:

PR c++/25814
* testsuite/20_util/reference_wrapper/lwg2993.cc: Add a dg-warning.
* testsuite/25_algorithms/generate_n/87982_neg.cc: Likewise.

4 years agoPass multi-range from range_query::value_* routines
Andrew MacLeod [Thu, 5 Nov 2020 18:59:45 +0000 (13:59 -0500)]
Pass multi-range from range_query::value_*  routines

fix range-ops equal/not_equal to not reuse the result range as intermediary.
value_query::value routines should pasa multi-range in as some other rangeop
routines build into this result, so we may need better precision.

gcc/
PR tree-optimization/97725
* range-op.cc (operator_equal::fold_range): Use new tmp value.
(operator_not_equal::fold_range): Ditto.
* value-query.cc (range_query::value_of_expr): Use int_range_max
not a value_range.
(range_query::value_on_edge): Ditto.
(range_query::value_of_stmt): Ditto.
gcc/testsuite/
* gcc.dg/pr97725.c: New.

4 years agolibstdc++: Fix typo in ChangeLog entry
Jonathan Wakely [Thu, 5 Nov 2020 19:35:34 +0000 (19:35 +0000)]
libstdc++: Fix typo in ChangeLog entry

4 years agolibstdc++: Fix constraints on std::optional comparisons [PR 96269]
Jonathan Wakely [Thu, 5 Nov 2020 18:36:19 +0000 (18:36 +0000)]
libstdc++: Fix constraints on std::optional comparisons [PR 96269]

The relational operators for std::optional were using the wrong types
in the declval expressions used to constrain them. Instead of using
const lvalues they were using non-const rvalues, which meant that a type
might satisfy the constraints but then give an error when the function
body was instantiated.

libstdc++-v3/ChangeLog:

PR libstdc++/96269
* include/std/optional (operator==, operator!=, operator<)
(operator>, operator<=, operator>=): Fix types used in
SFINAE constraints.
* testsuite/20_util/optional/relops/96269.cc: New test.

4 years agoopenmp: Mark deprecated symbols in OpenMP 5.0
Kwok Cheung Yeung [Thu, 5 Nov 2020 18:11:23 +0000 (10:11 -0800)]
openmp: Mark deprecated symbols in OpenMP 5.0

2020-11-05  Ulrich Drepper  <drepper@redhat.com>
    Kwok Cheung Yeung  <kcy@codesourcery.com>

libgomp/
* Makefile.am (%.mod): Add -cpp and -fopenmp to compile flags.
* Makefile.in: Regenerate.
* fortran.c: Wrap uses of omp_set_nested and omp_get_nested with
pragmas to ignore -Wdeprecated-declarations warnings.
* icv.c: Likewise.
* omp.h.in (__GOMP_DEPRECATED_5_0): Define.
Mark omp_lock_hint_* enum values, omp_lock_hint_t, omp_set_nested,
and omp_get_nested with __GOMP_DEPRECATED_5_0.
* omp_lib.f90.in: Mark omp_get_nested and omp_set_nested as
deprecated.
* testsuite/libgomp.c++/affinity-1.C: Add -Wno-deprecated-declarations
to test options.
* testsuite/libgomp.c/affinity-1.c: Likewise.
* testsuite/libgomp.c/affinity-2.c: Likewise.
* testsuite/libgomp.c/appendix-a/a.15.1.c: Likewise.
* testsuite/libgomp.c/lib-1.c: Likewise.
* testsuite/libgomp.c/nested-1.c: Likewise.
* testsuite/libgomp.c/nested-2.c: Likewise.
* testsuite/libgomp.c/nested-3.c: Likewise.
* testsuite/libgomp.c/pr32362-1.c: Likewise.
* testsuite/libgomp.c/pr32362-2.c: Likewise.
* testsuite/libgomp.c/pr32362-3.c: Likewise.
* testsuite/libgomp.c/pr35549.c: Likewise.
* testsuite/libgomp.c/pr42942.c: Likewise.
* testsuite/libgomp.c/pr61200.c: Likewise.
* testsuite/libgomp.c/sort-1.c: Likewise.
* testsuite/libgomp.c/target-5.c: Likewise.
* testsuite/libgomp.c/target-6.c: Likewise.
* testsuite/libgomp.c/teams-1.c: Likewise.
* testsuite/libgomp.c/thread-limit-1.c: Likewise.
* testsuite/libgomp.c/thread-limit-2.c: Likewise.
* testsuite/libgomp.c/thread-limit-4.c: Likewise.
* testsuite/libgomp.fortran/affinity1.f90: Likewise.
* testsuite/libgomp.fortran/lib1.f90: Likewise.
* testsuite/libgomp.fortran/lib2.f: Likewise.
* testsuite/libgomp.fortran/nested1.f90: Likewise.
* testsuite/libgomp.fortran/teams1.f90: Likewise.

4 years agoHandle use of r18 as a TCB pointer on aarch64-vxworks
Olivier Hainque [Wed, 4 Nov 2020 08:05:06 +0000 (08:05 +0000)]
Handle use of r18 as a TCB pointer on aarch64-vxworks

Pick an alternate static chain regnum and document that
the port needs to be configured to issue -ffixed-r18 by
default.  The current definition of TARGET_OS_USES_R18 is
not honored by the common part of the back-end.

2020-11-04  Olivier Hainque  <hainque@adacore.com>

gcc/
* config/aarch64/aarch64-vxworks.h (TARGET_OS_USES_R18):
Remove definition.
(STATIC_CHAIN_REGNUM): Redefine to 9.

4 years agolibstdc++: Use non-throwing increment in recursive_directory_iterator [PR 97731]
Jonathan Wakely [Thu, 5 Nov 2020 17:26:13 +0000 (17:26 +0000)]
libstdc++: Use non-throwing increment in recursive_directory_iterator [PR 97731]

As described in the PR, the recursive_directory_iterator constructor
calls advance(ec), but ec is a pointer so it calls _Dir::advance(bool).
The intention was to either call advance() or advance(*ec) depending
whether the pointer is null or not.

This fixes the bug and renames the parameter to ecptr to make similar
mistakes less likely in future.

libstdc++-v3/ChangeLog:

PR libstdc++/97731
* src/filesystem/dir.cc (recursive_directory_iterator): Call the
right overload of _Dir::advance.
* testsuite/experimental/filesystem/iterators/97731.cc: New test.

4 years agolibstdc++: Fix multiple definitions of std::exception_ptr functions [PR 97729]
Jonathan Wakely [Thu, 5 Nov 2020 16:19:15 +0000 (16:19 +0000)]
libstdc++: Fix multiple definitions of std::exception_ptr functions [PR 97729]

This fixes some multiple definition errors caused by the changes for
PR libstdc++/90295. The previous solution for inlining the members of
std::exception_ptr but still exporting them from the library was to
suppress the 'inline' keyword on those functions when compiling
libsupc++/eh_ptr.cc, so they get defined in that file. That produces ODR
violations though, because there are now both inline and non-inline
definitions in the library, due to the use of std::exception_ptr in
other files sucg as src/c++11/future.cc.

The new solution is to define all the relevant members as 'inline'
unconditionally, but use __attribute__((used)) to cause definitions to
be emitted in libsupc++/eh_ptr.cc as before. This doesn't quite work
however, because PR c++/67453 means the attribute is ignored on
constructors and destructors. As a workaround, the old solution
(conditionally inline) is still used for those members, but they are
given the always_inline attribute so that they aren't emitted in
src/c++11/future.o as inline definitions.

libstdc++-v3/ChangeLog:

PR libstdc++/97729
* include/std/future (__basic_future::_M_get_result): Use
nullptr for null pointer constant.
* libsupc++/eh_ptr.cc (operator==, operator!=): Remove
definitions.
* libsupc++/exception_ptr.h (_GLIBCXX_EH_PTR_USED): Define
macro to conditionally add __attribute__((__used__)).
(operator==, operator!=, exception_ptr::exception_ptr())
(exception_ptr::exception_ptr(const exception_ptr&))
(exception_ptr::~exception_ptr())
(exception_ptr::operator=(const exception_ptr&))
(exception_ptr::swap(exception_ptr&)): Always define as
inline. Add macro to be conditionally "used".

4 years agolibstdc++: Export basic_stringbuf constructor [PR 97729]
Jonathan Wakely [Thu, 5 Nov 2020 13:41:40 +0000 (13:41 +0000)]
libstdc++: Export basic_stringbuf constructor [PR 97729]

libstdc++-v3/ChangeLog:

PR libstdc++/97729
* config/abi/pre/gnu.ver (GLIBCXX_3.4.29): Add exports.
* src/c++20/sstream-inst.cc (basic_stringbuf): Instantiate
private constructor taking __xfer_bufptrs.

4 years agoAdd dg-require-effective-target fpic to gcc.dg test
Olivier Hainque [Tue, 7 Jan 2020 16:54:13 +0000 (16:54 +0000)]
Add dg-require-effective-target fpic to gcc.dg test

The test uses -fpic and doesn't query the target support
for that option otherwise, resulting in failure on configurations
not supporting -fpic such as VxWorks for kernel mode.

2020-11-03  Olivier Hainque  <hainque@adacore.com>

gcc/testsuite/
* gcc.dg/sms-12.c: Add dg-require-effective-target fpic.

4 years agoMove and adjust PROBE_STACK reg definitions for aarch64
Olivier Hainque [Fri, 13 Dec 2019 09:09:18 +0000 (09:09 +0000)]
Move and adjust PROBE_STACK reg definitions for aarch64

The change moves the definitions of PROBE_STACK_FIRST_REG
and PROBE_STACK_SECOND_REG to a more appropriate place for such
items (here, in aarch64.md as suggested by Richard), and adjusts
their value from r9/r10 to r10/r11 to free r9 for a possibly
more general purpose (e.g. as a static chain at least on targets
which have a private use of r18, such as Windows or Vxworks).

2020-11-07  Olivier Hainque  <hainque@adacore.com>

gcc/
* config/aarch64/aarch64.md: Define PROBE_STACK_FIRST_REGNUM
and PROBE_STACK_SECOND_REGNUM constants, designating r10/r11.
Replacements for the PROBE_STACK_FIRST/SECOND_REG constants in
aarch64.c.
* config/aarch64/aarch64.c (PROBE_STACK_FIRST_REG): Remove.
(PROBE_STACK_SECOND_REG): Remove.
(aarch64_emit_probe_stack_range): Adjust to the _REG -> _REGNUM
suffix update for PROBE_STACK register numbers.

4 years agoAdd fnspecs for C++ new and delete operators
Jan Hubicka [Thu, 5 Nov 2020 17:19:07 +0000 (18:19 +0100)]
Add fnspecs for C++ new and delete operators

gcc/ChangeLog:

* gimple.c (gimple_call_fnspec): Handle C++ new and delete.
* gimple.h (gimple_call_from_new_or_delete): Constify parameter.

gcc/testsuite/ChangeLog:

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

4 years agomiddle-end: guard slp-11b.c testcase on vec_lanes
Tamar Christina [Thu, 5 Nov 2020 16:59:30 +0000 (16:59 +0000)]
middle-end: guard slp-11b.c testcase on vec_lanes

They say third time is the charm.. It looks like the testcase
disables the cost model and so AArch64 we end up being able to
do the permute but on x86 we can't.  However when analyzing the
testcase I didn't disable the cost model hence the difference.

So I now guard the testcase on vect_load_lanes as there's not a
"can do any permute" test directive and load lanes is what I will
be fixing up next year so this should catch it.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/slp-11b.c: Guard statements.

4 years agoDrop overflow from constants while building ranges in ranger.
Aldy Hernandez [Thu, 5 Nov 2020 11:40:51 +0000 (12:40 +0100)]
Drop overflow from constants while building ranges in ranger.

Sometimes the overflow flag will leak into the IL.  Drop it while
creating ranges.

There are various places we could plug this.  This patch just plugs things
at get_tree_range which is the entry point for ranges from tree expressions.
It fixes the PR, and probably fixes the ranger entirely, but we may need
to revisit this.

For example, I looked to see if there were other places that created
ranges with TREE_OVERFLOW set, and there are various.  For example,
the following code pattern appears multiple times in vr-values.c:

  else if (is_gimple_min_invariant (op0))
    vr0.set (op0);

This can pick up TREE_OVERFLOW from the IL if present.  However, the
ranger won't see them so we're good.

At some point we should audit all this.  Or perhaps just nuke all
TREE_OVERFLOW's at irange::set.

For now, this will do.

gcc/ChangeLog:

PR tree-optimization/97721
* gimple-range.cc (get_tree_range): Drop overflow from constants.

gcc/testsuite/ChangeLog:

* gcc.dg/pr97721.c: New test.

4 years agodiagnostic paths: loosen coupling between path-printing and path_summary
David Malcolm [Thu, 5 Nov 2020 15:00:17 +0000 (10:00 -0500)]
diagnostic paths: loosen coupling between path-printing and path_summary

Doing this makes followup work to add HTML path-printing cleaner.

gcc/ChangeLog:
* tree-diagnostic-path.cc (struct path_summary::event_range): Move
out of path_summary to...
(struct event_range): ...here.
(class path_summary): Convert to...
(struct path_summary): ...this.
(path_summary::m_ranges): Drop "private".
(path_summary::print): Convert to...
(print_path_summary_as_text): ...this, passing in the path_summary
explicitly.
(default_tree_diagnostic_path_printer): Update for above change.
(selftest::test_empty_path): Likewise.
(selftest::test_intraprocedural_path): Likewise.
(selftest::test_interprocedural_path_1): Likewise.
(selftest::test_interprocedural_path_2): Likewise.
(selftest::test_recursion): Likewise.

4 years agoi386: Fix PR97715
qing zhao [Thu, 5 Nov 2020 14:57:46 +0000 (15:57 +0100)]
i386: Fix PR97715

This change fixes a bug in the i386 backend when adding
-fzero-call-used-regs=all on a target that has no x87
registers.

When there is no x87 registers available, we should not
zero stack registers.

gcc/ChangeLog:

PR target/97715
* config/i386/i386.c (zero_all_st_registers): Return
earlier when the FPU is disabled.

gcc/testsuite/ChangeLog:

PR target/97715
* gcc.target/i386/zero-scratch-regs-32.c: New test.

4 years agoanalyzer: fix ICE comparing COMPLEX_CSTs [PR97668]
David Malcolm [Thu, 5 Nov 2020 14:54:58 +0000 (09:54 -0500)]
analyzer: fix ICE comparing COMPLEX_CSTs [PR97668]

gcc/analyzer/ChangeLog:
PR analyzer/97668
* svalue.cc (cmp_cst): Handle COMPLEX_CST.

gcc/testsuite/ChangeLog:
PR analyzer/97668
* gcc.dg/analyzer/pr97668.c: New test.
* gfortran.dg/analyzer/pr97668.f: New test.

4 years agoFix uninitialized memory use in ipa-modref
Jan Hubicka [Thu, 5 Nov 2020 14:25:14 +0000 (15:25 +0100)]
Fix uninitialized memory use in ipa-modref

* ipa-modref.c (parm_map_for_arg): Initialize parm_offset and
parm_offset_knonw.
(read_section): Set writes_errno to false.

4 years agolibstdc++: Fix new <sstream> constructors
Jonathan Wakely [Thu, 5 Nov 2020 12:16:13 +0000 (12:16 +0000)]
libstdc++: Fix new <sstream> constructors

- Add a missing 'explicit' to a basic_stringbuf constructor.
- Set up the get/put area pointers in the constructor from strings using
  different allocator types.
- Remove public basic_stringbuf::__sv_type alias.
- Do not construct temporary basic_string objects with a
  default-constructed allocator.

Also, change which basic_string constructor is used, as a minor
compile-time optimization. Constructing from a basic_string_view
requires more work from the compiler, so just use a pointer and length.

libstdc++-v3/ChangeLog:

* include/std/sstream (basic_stringbuf(const allocator_type&):
Add explicit.
(basic_stringbuf(const basic_string<C,T,SA>&, openmode, const A&)):
Call _M_stringbuf_init. Construct _M_string from pointer and length
to avoid constraint checks for string view.
(basic_stringbuf::view()): Make __sv_type alias local to the
function.
(basic_istringstream(const basic_string<C,T,SA>&, openmode, const A&)):
Pass string to _M_streambuf instead of constructing a temporary
with the wrong allocator.
(basic_ostringstream(const basic_string<C,T,SA>&, openmode, const A&)):
Likewise.
(basic_stringstream(const basic_string<C,T,SA>&, openmode, const A&)):
Likewise.
* src/c++20/sstream-inst.cc: Use string_view and wstring_view
typedefs in explicit instantiations.
* testsuite/27_io/basic_istringstream/cons/char/1.cc: Add more
tests for constructors.
* testsuite/27_io/basic_ostringstream/cons/char/1.cc: Likewise.
* testsuite/27_io/basic_stringbuf/cons/char/1.cc: Likewise.
* testsuite/27_io/basic_stringbuf/cons/char/2.cc: Likewise.
* testsuite/27_io/basic_stringbuf/cons/wchar_t/1.cc: Likewise.
* testsuite/27_io/basic_stringbuf/cons/wchar_t/2.cc: Likewise.
* testsuite/27_io/basic_stringstream/cons/char/1.cc: Likewise.

4 years agolibstdc++: Adjust whitespace in <sstream>
Jonathan Wakely [Wed, 4 Nov 2020 23:55:54 +0000 (23:55 +0000)]
libstdc++: Adjust whitespace in <sstream>

libstdc++-v3/ChangeLog:

* include/std/sstream: Adjust whitespace.

4 years agoFix SLP vectorization of stores from boolean vectors
Richard Biener [Thu, 5 Nov 2020 09:16:53 +0000 (10:16 +0100)]
Fix SLP vectorization of stores from boolean vectors

The following fixes SLP vectorization of stores that were
pattern recognized.  Since in SLP vectorization pattern analysis
happens after dataref group analysis we have to adjust the groups
with the pattern stmts.  This has some effects down the pipeline
and exposes cases where we looked at the wrong pattern/non-pattern
stmts.

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

* tree-vect-data-refs.c (vect_slp_analyze_node_dependences):
Use the original stmts.
(vect_slp_analyze_node_alignment): Use the pattern stmt.
* tree-vect-slp.c (vect_fixup_store_groups_with_patterns):
New function.
(vect_slp_analyze_bb_1): Call it.

* gcc.dg/vect/bb-slp-69.c: New testcase.

4 years agomiddle-end: optimize slp simplify back to back permutes.
Tamar Christina [Thu, 5 Nov 2020 11:46:35 +0000 (11:46 +0000)]
middle-end: optimize slp simplify back to back permutes.

This optimizes sequential permutes. i.e. if there are two permutes back to back
this function applies the permute of the parent to the child and removed the
parent.

This relies on the materialization point calculation in optimize SLP.

This allows us to remove useless permutes such as

ldr     q0, [x0, x3]
ldr     q2, [x1, x3]
trn1    v1.4s, v0.4s, v0.4s
trn2    v0.4s, v0.4s, v0.4s
trn1    v0.4s, v1.4s, v0.4s
mov     v1.16b, v3.16b
fcmla   v1.4s, v0.4s, v2.4s, #0
fcmla   v1.4s, v0.4s, v2.4s, #90
str     q1, [x2, x3]

from the sequence the vectorizer puts out and give

ldr     q0, [x0, x3]
ldr     q2, [x1, x3]
mov     v1.16b, v3.16b
fcmla   v1.4s, v0.4s, v2.4s, #0
fcmla   v1.4s, v0.4s, v2.4s, #90
str     q1, [x2, x3]

instead.

gcc/ChangeLog:

* tree-vect-slp.c (vect_slp_tree_permute_noop_p): New.
(vect_optimize_slp): Optimize permutes.
(vectorizable_slp_permutation): Fix typo.

4 years agotestsuite: disable vect tests that was accidentally enabled on x86
Tamar Christina [Thu, 5 Nov 2020 10:14:17 +0000 (10:14 +0000)]
testsuite: disable vect tests that was accidentally enabled on x86

My previous patch accidentally enabled some tests on x86 because my target
selector foo was weak..  This now properly only runs them on AArch64.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/slp-11b.c: Update testcase.
* gcc.dg/vect/slp-perm-6.c: Update target selector.

4 years agodebug/97718 - fix abstract origin references after last change
Richard Biener [Thu, 5 Nov 2020 08:27:28 +0000 (09:27 +0100)]
debug/97718 - fix abstract origin references after last change

The change to clear the external_die_map slot after creating
the concrete instance DIE broke abstract origin processing which
tried to make sure to have those point to the early abstract instance
and not the concrete instance.  The following restores this by
eventually following the abstract origin link in the concrete instance.

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

PR debug/97718
* dwarf2out.c (add_abstract_origin_attribute): Make sure to
point to the abstract instance.

4 years agomiddle-end: Store and use the SLP instance kind when aborting load/store lanes
Tamar Christina [Thu, 5 Nov 2020 09:02:29 +0000 (09:02 +0000)]
middle-end: Store and use the SLP instance kind when aborting load/store lanes

This patch stores the SLP instance kind in the SLP instance so that we can use
it later when detecting load/store lanes support.

This also changes the load/store lane support check to only check if the SLP
kind is a store.  This means that in order for the load/lanes to work all
instances must be of kind store.

gcc/ChangeLog:

* tree-vect-loop.c (vect_analyze_loop_2): Check kind.
* tree-vect-slp.c (vect_build_slp_instance): New.
(enum slp_instance_kind): Move to...
* tree-vectorizer.h (enum slp_instance_kind): .. Here
(SLP_INSTANCE_KIND): New.

4 years agors6000: Use direct move for char/short vector CTOR [PR96933]
Kewen Lin [Thu, 5 Nov 2020 06:04:10 +0000 (00:04 -0600)]
rs6000: Use direct move for char/short vector CTOR [PR96933]

This patch is to make vector CTOR with char/short leverage direct
move instructions when they are available.  With one constructed
test case, it can speed up 145% for char and 190% for short on P9.

Tested SPEC2017 x264_r at -Ofast on P9, it gets 1.61% speedup
(but based on unexpected SLP see PR96789).

Bootstrapped/regtested on powerpc64{,le}-linux-gnu P8 and
powerpc64le-linux-gnu P9.

gcc/ChangeLog:

PR target/96933
* config/rs6000/rs6000.c (rs6000_expand_vector_init): Use direct move
instructions for vector construction with char/short types.
* config/rs6000/rs6000.md (p8_mtvsrwz_v16qisi2): New define_insn.
(p8_mtvsrd_v16qidi2): Likewise.

gcc/testsuite/ChangeLog:

PR target/96933
* gcc.target/powerpc/pr96933-1.c: New test.
* gcc.target/powerpc/pr96933-2.c: New test.
* gcc.target/powerpc/pr96933-3.c: New test.
* gcc.target/powerpc/pr96933-4.c: New test.
* gcc.target/powerpc/pr96933.h: New test.
* gcc.target/powerpc/pr96933-run.h: New test.

4 years agoDaily bump.
GCC Administrator [Thu, 5 Nov 2020 00:16:36 +0000 (00:16 +0000)]
Daily bump.

4 years agolibstdc++: Fix default mode of new basic_stringstream constructor [PR 97719]
Jonathan Wakely [Wed, 4 Nov 2020 21:44:05 +0000 (21:44 +0000)]
libstdc++: Fix default mode of new basic_stringstream constructor [PR 97719]

libstdc++-v3/ChangeLog:

PR libstdc++/97719
* include/std/sstream (basic_stringstream(string_type&&, openmode)):
Fix default argument.
* testsuite/27_io/basic_stringstream/cons/char/97719.cc: New test.

4 years agomiddle-end: Move load/store-lanes check till late.
Tamar Christina [Wed, 4 Nov 2020 22:33:11 +0000 (22:33 +0000)]
middle-end: Move load/store-lanes check till late.

This moves the code that checks for load/store lanes further in the pipeline and
places it after slp_optimize.  This would allow us to perform optimizations on
the SLP tree and only bail out if we really have a permute.

With this change it allows us to handle permutes such as {1,1,1,1} which should
be handled by a load and replicate.

This change however makes it all or nothing. Either all instances can be handled
or none at all.  This is why some of the test cases have been adjusted.

gcc/ChangeLog:

* tree-vect-slp.c (vect_analyze_slp_instance): Moved load/store lanes
check to ...
* tree-vect-loop.c (vect_analyze_loop_2): ..Here

gcc/testsuite/ChangeLog:

* gcc.dg/vect/slp-11b.c: Update output scan.
* gcc.dg/vect/slp-perm-6.c: Likewise.

4 years agoIBM Z: Unhardcode NR_C_MODES
Ilya Leoshkevich [Wed, 21 Oct 2020 11:48:07 +0000 (13:48 +0200)]
IBM Z: Unhardcode NR_C_MODES

gcc/ChangeLog:

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

* config/s390/s390.c (NR_C_MODES): Unhardcode.
(s390_alloc_pool): Use size_t for iterating from 0 to
NR_C_MODES.
(s390_add_constant): Likewise.
(s390_find_constant): Likewise.
(s390_dump_pool): Likewise.
(s390_free_pool): Likewise.

4 years agoIBM Z: Remove unused RRe and RXe mode_attrs
Ilya Leoshkevich [Wed, 21 Oct 2020 11:46:04 +0000 (13:46 +0200)]
IBM Z: Remove unused RRe and RXe mode_attrs

gcc/ChangeLog:

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

* config/s390/s390.md (RRe): Remove.
(RXe): Remove.

4 years agogo: disable -fipa-icf-functions by default in Go frontend
Ian Lance Taylor [Wed, 4 Nov 2020 20:02:31 +0000 (12:02 -0800)]
go: disable -fipa-icf-functions by default in Go frontend

Go programs expect to be able to get reliable backtrace information
with correct file/line information, but -fipa-icf-functions breaks
that because it merges together distinct functions which should have
distinct file/line info.

* go-lang.c (go_langhook_post_options): Disable
-fipa-icf-functions if it was not explicitly enabled.

4 years agoAdd Ranger temporal cache
Andrew MacLeod [Wed, 4 Nov 2020 17:59:15 +0000 (12:59 -0500)]
Add Ranger temporal cache

Add a timestamp to supplement the global range cache to detect when a value
may become stale.

gcc/
PR tree-optimization/97515
* gimple-range-cache.h (class ranger_cache): New prototypes plus
temporal cache pointer.
* gimple-range-cache.cc (struct range_timestamp): New.
(class temporal_cache): New.
(temporal_cache::temporal_cache): New.
(temporal_cache::~temporal_cache): New.
(temporal_cache::get_timestamp): New.
(temporal_cache::set_dependency): New.
(temporal_cache::temporal_value): New.
(temporal_cache::current_p): New.
(temporal_cache::set_timestamp): New.
(temporal_cache::set_always_current): New.
(ranger_cache::ranger_cache): Allocate the temporal cache.
(ranger_cache::~ranger_cache): Free temporal cache.
(ranger_cache::get_non_stale_global_range): New.
(ranger_cache::set_global_range): Add a timestamp.
(ranger_cache::register_dependency): New.  Add timestamp dependency.
* gimple-range.cc (gimple_ranger::range_of_range_op): Add operand
dependencies.
(gimple_ranger::range_of_phi): Ditto.
(gimple_ranger::range_of_stmt): Check if global range is stale, and
recalculate if so.
gcc/testsuite/
* gcc.dg/pr97515.c: Check listing for folding of entire function.

4 years agolibstdc++: Fix test failure with --disable-linux-futex
Jonathan Wakely [Wed, 4 Nov 2020 15:24:47 +0000 (15:24 +0000)]
libstdc++: Fix test failure with --disable-linux-futex

As noted in PR 96817 this new test fails if the library is built without
futexes. That's expected of course, but we might as well fail more
obviously than a deadlock that eventually times out.

libstdc++-v3/ChangeLog:

* testsuite/18_support/96817.cc: Fail fail if the library is
configured to not use futexes.

4 years agolibstdc++: Define new C++17 std::search overload for Parallel Mode [PR 94971]
Jonathan Wakely [Wed, 4 Nov 2020 13:36:32 +0000 (13:36 +0000)]
libstdc++: Define new C++17 std::search overload for Parallel Mode [PR 94971]

libstdc++-v3/ChangeLog:

PR libstdc++/94971
* include/bits/stl_algo.h (search(FIter, FIter, const Searcher):
Adjust #if condition.
* include/parallel/algo.h (search(FIter, FIter, const Searcher&):
Define new overload for C++17.

4 years agotarghooks.c: Fix -fzero-call-used-regs 'sorry' typo
Tobias Burnus [Wed, 4 Nov 2020 13:31:34 +0000 (14:31 +0100)]
targhooks.c: Fix -fzero-call-used-regs 'sorry' typo

gcc/ChangeLog:

* targhooks.c (default_zero_call_used_regs): Fix flag-name typo
in sorry.

4 years agolibstdc++: Document istreambuf_iterator base class change [PR 92285]
Jonathan Wakely [Wed, 4 Nov 2020 12:45:32 +0000 (12:45 +0000)]
libstdc++: Document istreambuf_iterator base class change [PR 92285]

libstdc++-v3/ChangeLog:

PR libstdc++/92285
* doc/xml/manual/evolution.xml: Document change to base class.
* doc/html/manual/api.html: Regenerate.

4 years agoadd costing to SLP vectorized PHIs
Richard Biener [Wed, 4 Nov 2020 10:37:52 +0000 (11:37 +0100)]
add costing to SLP vectorized PHIs

I forgot to cost vectorized PHIs.  Scalar PHIs are just costed
as scalar_stmt so the following costs vector PHIs as vector_stmt.

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

* tree-vectorizer.h (vectorizable_phi): Adjust prototype.
* tree-vect-stmts.c (vect_transform_stmt): Adjust.
(vect_analyze_stmt): Pass cost_vec to vectorizable_phi.
* tree-vect-loop.c (vectorizable_phi): Do costing.

4 years agotree-optimization/97709 - set abnormal flag when vectorizing live lanes
Richard Biener [Wed, 4 Nov 2020 10:20:17 +0000 (11:20 +0100)]
tree-optimization/97709 - set abnormal flag when vectorizing live lanes

This properly sets the abnormal flag when vectorizing live lanes
when the original scalar was live across an abnormal edge.

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

PR tree-optimization/97709
* tree-vect-loop.c (vectorizable_live_operation): Set
SSA_NAME_OCCURS_IN_ABNORMAL_PHI when necessary.

* gcc.dg/vect/bb-slp-pr97709.c: New testcase.

4 years agophiopt: Optimize x ? 1024 : 0 to (int) x << 10 [PR97690]
Jakub Jelinek [Wed, 4 Nov 2020 10:55:29 +0000 (11:55 +0100)]
phiopt: Optimize x ? 1024 : 0 to (int) x << 10 [PR97690]

The following patch generalizes the x ? 1 : 0 -> (int) x optimization
to handle also left shifts by constant.

During x86_64-linux and i686-linux bootstraps + regtests it triggered
in 1514 unique non-LTO -m64 cases (sort -u on log mentioning
filename, function name and shift count) and 1866 -m32 cases.

Unfortunately, the patch regresses (before the tests have been adjusted):
+FAIL: gcc.dg/tree-ssa/ssa-ccp-11.c scan-tree-dump-times optimized "if " 0
+FAIL: gcc.dg/vect/bb-slp-pattern-2.c -flto -ffat-lto-objects  scan-tree-dump-times slp1 "optimized: basic block" 1
+FAIL: gcc.dg/vect/bb-slp-pattern-2.c scan-tree-dump-times slp1 "optimized: basic block" 1
and in both cases it actually results in worse code.

> > We'd need some optimization that would go through all PHI edges and
> > compute if some use of the phi results don't actually compute a constant
> > across all the PHI edges - 1 & 0 and 0 & 1 is always 0.

> PRE should do this, IMHO only optimizing it at -O2 is fine.

> > Similarly, in the slp vectorization test there is:
> >      a[0] = b[0] ? 1 : 7;

> note this, carefully avoiding the already "optimized" b[0] ? 1 : 0 ...

> So the option is to put : 7 in the 2, 4 an 8 case as well.  The testcase
> wasn't added for any real-world case but is artificial I guess for
> COND_EXPR handling of invariants.

> But yeah, for things like SLP it means we eventually have to
> implement reverse transforms for all of this to make the lanes
> matching.  But that's true anyway for things like x + 1 vs. x + 0
> or x / 3 vs. x / 2 or other simplifications we do.

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

PR tree-optimization/97690
* tree-ssa-phiopt.c (conditional_replacement): Also optimize
cond ? pow2p_cst : 0 as ((type) cond) << cst.

* gcc.dg/tree-ssa/phi-opt-22.c: New test.
* gcc.dg/tree-ssa/ssa-ccp-11.c: Use -O2 instead of -O1.
* gcc.dg/vect/bb-slp-pattern-2.c (foo): Use ? 2 : 7, ? 4 : 7 and
? 8 : 7 instead of ? 2 : 0, ? 4 : 0, ? 8 : 0.

4 years agolibstdc++: Fix constant expressions in std::uniform_int_distribution
Jonathan Wakely [Wed, 4 Nov 2020 10:36:45 +0000 (10:36 +0000)]
libstdc++: Fix constant expressions in std::uniform_int_distribution

Clang and EDG say the class member access expressions __urng.min() and
__urng.max() are not constant expressions, because the object expression
__urng is not usable in a constant expresion. Use a qualified-id to call
those static member functions instead.

Co-authored-by: Stephan Bergmann <sbergman@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/uniform_int_dist.h (uniform_int_distribution::_S_nd):
Use qualified-id to refer to static member functions.

4 years agogcc-changelog: Change parse_git_revisions strict argument to True.
Martin Liska [Wed, 4 Nov 2020 09:57:28 +0000 (10:57 +0100)]
gcc-changelog: Change parse_git_revisions strict argument to True.

Change the default that is used by GIT server hook and also
by git_update_version.py. Both should use True now.

contrib/ChangeLog:

* gcc-changelog/git_repository.py: Set strict=True
for parse_git_revisions as a default.

4 years agoRe-instantiate SLP induction IV CSE
Richard Biener [Wed, 4 Nov 2020 08:41:48 +0000 (09:41 +0100)]
Re-instantiate SLP induction IV CSE

This re-instantiates the previously removed CSE, fixing the
FAIL of gcc.dg/vect/costmodel/x86_64/costmodel-pr30843.c
It turns out the previous approach still works.

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

* tree-vect-loop.c (vectorizable_induction): Re-instantiate
previously removed CSE of SLP IVs.

4 years agotestsuite: fix arm/pure-code/no-literal-pool-* tests
Christophe Lyon [Wed, 4 Nov 2020 09:33:42 +0000 (09:33 +0000)]
testsuite: fix arm/pure-code/no-literal-pool-* tests

Add -mfloat-abi=soft and skip the tests if -mfloat-abi=hard is
supplied.

This avoids failures when testing with overridden flags such as
mthumb/-mcpu=cortex-m4/-mfloat-abi=hard

2020-11-04  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/testsuite/
* gcc.target/arm/pure-code/no-literal-pool-m0.c: Add dg-skip-if
and -mfloat-abi=soft option.
* gcc.target/arm/pure-code/no-literal-pool-m23.c: Likewise.

4 years agogcc-changelog/git_commit.py: Check for missing description
Tobias Burnus [Wed, 4 Nov 2020 09:35:54 +0000 (10:35 +0100)]
gcc-changelog/git_commit.py: Check for missing description

Especially when using mklog.py, it is simply to forget to fill in
the entries after the '\t* file.c (section):' or '\t(section):'.

contrib/ChangeLog:

* gcc-changelog/git_commit.py (item_parenthesis_empty_regex,
item_parenthesis_regex): Add.
(check_for_empty_description): Use them.
* gcc-changelog/test_email.py (test_emptry_entry_desc,
test_emptry_entry_desc_2): Add.
* gcc-changelog/test_patches.txt: Add two testcases for it.

4 years agoi386: Fix Intel MCU psABI comment w.r.t DEFAULT_PCC_STRUCT_RETURN
Uros Bizjak [Wed, 4 Nov 2020 08:59:39 +0000 (09:59 +0100)]
i386: Fix Intel MCU psABI comment w.r.t DEFAULT_PCC_STRUCT_RETURN

2020-11-04  Uroš Bizjak  <ubizjak@gmail.com>

gcc/

* config/i386/i386-options.c (ix86_recompute_optlev_based_flags):
Fix Intel MCU psABI comment w.r.t DEFAULT_PCC_STRUCT_RETURN.

4 years agoopenmp: allocate clause vs. *reduction array sections [PR97670]
Jakub Jelinek [Wed, 4 Nov 2020 08:37:22 +0000 (09:37 +0100)]
openmp: allocate clause vs. *reduction array sections [PR97670]

This patch finds the base expression of reduction array sections and uses it
in checks whether allocate clause lists only variables that have been privatized.
Also fixes a pasto that caused an ICE.

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

PR c++/97670
gcc/c-family/
* c-omp.c (c_omp_split_clauses): Look through array reductions to find
underlying decl to clear in the allocate_head bitmap.
gcc/c/
* c-typeck.c (c_finish_omp_clauses): Look through array reductions to
find underlying decl to clear in the aligned_head bitmap.
gcc/cp/
* semantics.c (finish_omp_clauses): Look through array reductions to
find underlying decl to clear in the aligned_head bitmap.  Use
DECL_UID (t) instead of DECL_UID (OMP_CLAUSE_DECL (c)) when clearing
in the bitmap.  Only diagnose errors about allocate vars not being
privatized on the same construct on allocate clause if it has
a DECL_P OMP_CLAUSE_DECL.
gcc/testsuite/
* c-c++-common/gomp/allocate-4.c: New test.
* g++.dg/gomp/allocate-2.C: New test.
* g++.dg/gomp/allocate-3.C: New test.

4 years agoFix duplicate ChangeLog entries.
Martin Liska [Wed, 4 Nov 2020 08:42:27 +0000 (09:42 +0100)]
Fix duplicate ChangeLog entries.

4 years agobootstrap/97666 - really fix sizeof (bool) issue
Richard Biener [Wed, 4 Nov 2020 08:36:05 +0000 (09:36 +0100)]
bootstrap/97666 - really fix sizeof (bool) issue

Pastoed the previous fix too quickly, the following fixes the
correct spot - the memset, not the allocation.

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

PR bootstrap/97666
* tree-vect-slp.c (vect_build_slp_tree_2): Revert previous
fix and instead adjust the memset.

4 years agoi386: Cleanup i386/i386elf.h and align it's return convention with the SVR4 ABI
Pat Bernardi [Wed, 4 Nov 2020 08:12:13 +0000 (09:12 +0100)]
i386: Cleanup i386/i386elf.h and align it's return convention with the SVR4 ABI

While i386elf.h was originally derived from sysv4.h it has not been kept
up to date with the development of the compiler. Two changes are made:

* The return convention now follows the i386 and x86_64 SVR4 ABIs again.

* The more efficient default version of ASM_OUTPUT_ASCII in elfos.h is used.

2020-11-04  Pat Bernardi  <bernardi@adacore.com>

gcc/ChangeLog

* config/i386/i386elf.h (SUBTARGET_RETURN_IN_MEMORY): Remove.
(ASM_OUTPUT_ASCII): Likewise.
(DEFAULT_PCC_STRUCT_RETURN): Define.
* config/i386/i386.c (ix86_return_in_memory): Remove
SUBTARGET_RETURN_IN_MEMORY.

4 years agoObjective-C++ : Fix ICE in potential_constant_expression_1.
Iain Sandoe [Sat, 31 Oct 2020 09:25:47 +0000 (09:25 +0000)]
Objective-C++ : Fix ICE in potential_constant_expression_1.

We cannot, as things stand, handle Objective-C tree codes in
the switch and deal with this by calling out to a function that
has a dummy version when Objective-C is not enabled.

Because of the way the logic works (with a fall through to a
'sorry' in case of unhandled expressions), the function reports
cases that are known to be unsuitable for constant exprs. The
dummy function always reports 'false' and thus will fall through
to the 'sorry'.

gcc/c-family/ChangeLog:

* c-objc.h (objc_non_constant_expr_p): New.
* stub-objc.c (objc_non_constant_expr_p): New.

gcc/cp/ChangeLog:

* constexpr.c (potential_constant_expression_1): Handle
expressions known to be non-constant for Objective-C.

gcc/objc/ChangeLog:

* objc-act.c (objc_non_constant_expr_p): New.

4 years agoc: Implement C2x nodiscard attribute
Joseph Myers [Wed, 4 Nov 2020 06:48:46 +0000 (06:48 +0000)]
c: Implement C2x nodiscard attribute

C2x adds the nodiscard standard attribute, with an optional string
argument, as in C++; implement it for C.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/c/
2020-11-04  Joseph Myers  <joseph@codesourcery.com>

* c-decl.c (handle_nodiscard_attribute): New.
(std_attribute_table): Add nodiscard.
* c-parser.c (c_parser_std_attribute): Expect argument to
nodiscard attribute to be a string.  Do not special-case ignoring
nodiscard.
* c-typeck.c (maybe_warn_nodiscard): New.
(build_compound_expr, emit_side_effect_warnings): Call
maybe_warn_nodiscard.
(c_process_expr_stmt, c_finish_stmt_expr): Also call
emit_side_effect_warnings if warn_unused_result.

gcc/testsuite/
2020-11-04  Joseph Myers  <joseph@codesourcery.com>

* gcc.dg/c2x-attr-nodiscard-1.c, gcc.dg/c2x-attr-nodiscard-2.c,
gcc.dg/c2x-attr-nodiscard-3.c, gcc.dg/c2x-attr-nodiscard-4.c: New
tests.
* gcc.dg/c2x-attr-syntax-5.c: Remove nodiscard test.

4 years agoDon't extract memory from operand for normal memory constraint.
liuhongt [Mon, 26 Oct 2020 12:46:42 +0000 (20:46 +0800)]
Don't extract memory from operand for normal memory constraint.

gcc/ChangeLog
PR target/97540
* ira.c: (ira_setup_alts): Extract memory from operand only
for special memory constraint.
* recog.c (asm_operand_ok): Ditto.
* lra-constraints.c (process_alt_operands): MEM_P is
required for normal memory constraint.

gcc/testsuite/ChangeLog
* gcc.target/i386/pr97540.c: New test.