platform/upstream/gcc.git
3 years agoc++: explicit() ignored on deduction guide [PR100065]
Marek Polacek [Mon, 7 Jun 2021 20:06:00 +0000 (16:06 -0400)]
c++: explicit() ignored on deduction guide [PR100065]

When we have explicit() with a value-dependent argument, we can't
evaluate it at parsing time, so cp_parser_function_specifier_opt stashes
the argument into the decl-specifiers and grokdeclarator then stores it
into explicit_specifier_map, which is then used when substituting the
function decl.  grokdeclarator stores it for constructors and conversion
functions, but we also need to do it for deduction guides, otherwise
we'll forget that we've seen an explicit-specifier as in the attached
test.

PR c++/100065

gcc/cp/ChangeLog:

* decl.c (grokdeclarator): Store a value-dependent
explicit-specifier even for deduction guides.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/explicit18.C: New test.

3 years agoImprove match_simplify_replacement in phi-opt
Andrew Pinski [Tue, 1 Jun 2021 06:48:05 +0000 (06:48 +0000)]
Improve match_simplify_replacement in phi-opt

This improves match_simplify_replace in phi-opt to handle the
case where there is one cheap (non-call) preparation statement in the
middle basic block similar to xor_replacement and others.
This allows to remove xor_replacement which it does too.

OK?  Bootstrapped and tested on x86_64-linux-gnu with no regressions.

Thanks,
Andrew Pinski

Changes since v1:
v3 - Just minor changes to using gimple_assign_lhs
instead of gimple_lhs and fixing a comment.
v2 - change the check on the preparation statement to
allow only assignments and no calls and only assignments
that feed into the phi.

gcc/ChangeLog:

PR tree-optimization/25290
* tree-ssa-phiopt.c (xor_replacement): Delete.
(tree_ssa_phiopt_worker): Delete use of xor_replacement.
(match_simplify_replacement): Allow one cheap preparation
statement that can be moved to before the if.

gcc/testsuite/ChangeLog:

* gcc.dg/tree-ssa/pr96928-1.c: Fix testcase for now that ~
happens on the outside of the bit_xor.

3 years agoc++: update diagnostic messages
Jason Merrill [Tue, 8 Jun 2021 21:48:26 +0000 (17:48 -0400)]
c++: update diagnostic messages

These tests needed updating for the diagnostic change in r12-1306.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/pr60209-neg.C: Update diagnostic.
* g++.dg/diagnostic/string-literal-concat.C: Likewise.
* g++.dg/ext/utf-badconcat.C: Likewise.
* g++.dg/ext/utf-badconcat2.C: Likewise.

3 years agoFix bootstrap2 breakage due to re-use of obj-c checksum
Bernd Edlinger [Tue, 8 Jun 2021 20:14:52 +0000 (22:14 +0200)]
Fix bootstrap2 breakage due to re-use of obj-c checksum

gcc/objc:
2021-06-08  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* Make-lang.in (cc1-obj-checksum.c): Check previous
stage checksum exists.

gcc/objcp:
2021-06-08  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* Make-lang.in (cc1objplus-checksum.c): Check previous
stage checksum exists.

3 years agoc++: Test for mixed string literal concatenation
Jason Merrill [Tue, 8 Jun 2021 18:38:42 +0000 (14:38 -0400)]
c++: Test for mixed string literal concatenation

From wg21.link/p2201r1

gcc/cp/ChangeLog:

* parser.c (cp_parser_string_literal): Adjust diagnostic.

gcc/testsuite/ChangeLog:

* g++.dg/cpp23/mixed-concat1.C: New test.

3 years agoc++: Test for whitespace and line splice
Jason Merrill [Tue, 8 Jun 2021 18:32:42 +0000 (14:32 -0400)]
c++: Test for whitespace and line splice

From wg21.link/P2223R2

gcc/testsuite/ChangeLog:

* g++.dg/cpp23/whitespace-splice1.C: New test.

3 years agoc++: Add test for C++23 narrowing conv to bool
Jason Merrill [Tue, 8 Jun 2021 18:24:16 +0000 (14:24 -0400)]
c++: Add test for C++23 narrowing conv to bool

From wg21.link/P1401R5.

gcc/testsuite/ChangeLog:

* g++.dg/cpp23/narrowing-bool1.C: New test.

3 years agoanalyzer: bitfield fixes [PR99212]
David Malcolm [Tue, 8 Jun 2021 18:45:57 +0000 (14:45 -0400)]
analyzer: bitfield fixes [PR99212]

This patch verifies the previous fix for bitfield sizes by implementing
enough support for bitfields in the analyzer to get the test cases to pass.

The patch implements support in the analyzer for reading from a
BIT_FIELD_REF, and support for folding BIT_AND_EXPR of a mask, to handle
the cases generated in tests.

The existing bitfields tests in data-model-1.c turned out to rely on
undefined behavior, in that they were assigning values to a signed
bitfield that were outside of the valid range of values.  I believe that
that's why we were seeing target-specific differences in the test
results (PR analyzer/99212).  The patch updates the test to remove the
undefined behaviors.

gcc/analyzer/ChangeLog:
PR analyzer/99212
* region-model-manager.cc
(region_model_manager::maybe_fold_binop): Add support for folding
BIT_AND_EXPR of compound_svalue and a mask constant.
* region-model.cc (region_model::get_rvalue_1): Implement
BIT_FIELD_REF in terms of...
(region_model::get_rvalue_for_bits): New function.
* region-model.h (region_model::get_rvalue_for_bits): New decl.
* store.cc (bit_range::from_mask): New function.
(selftest::test_bit_range_intersects_p): New selftest.
(selftest::assert_bit_range_from_mask_eq): New.
(ASSERT_BIT_RANGE_FROM_MASK_EQ): New macro.
(selftest::assert_no_bit_range_from_mask_eq): New.
(ASSERT_NO_BIT_RANGE_FROM_MASK): New macro.
(selftest::test_bit_range_from_mask): New selftest.
(selftest::analyzer_store_cc_tests): Call the new selftests.
* store.h (bit_range::intersects_p): New.
(bit_range::from_mask): New decl.
(concrete_binding::get_bit_range): New accessor.
(store_manager::get_concrete_binding): New overload taking
const bit_range &.

gcc/testsuite/ChangeLog:
PR analyzer/99212
* gcc.dg/analyzer/bitfields-1.c: New test.
* gcc.dg/analyzer/data-model-1.c (struct sbits): Make bitfields
explicitly signed.
(test_44): Update test values assigned to the bits to ones that
fit in the range of the bitfield type.  Remove xfails.
(test_45): Remove xfails.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
3 years agoanalyzer: fix region::get_bit_size for bitfields
David Malcolm [Tue, 8 Jun 2021 18:45:07 +0000 (14:45 -0400)]
analyzer: fix region::get_bit_size for bitfields

gcc/analyzer/ChangeLog:
* analyzer.h (int_size_in_bits): New decl.
* region.cc (int_size_in_bits): New function.
(region::get_bit_size): Reimplement in terms of the above.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
3 years agoanalyzer: split out struct bit_range from class concrete_binding
David Malcolm [Tue, 8 Jun 2021 18:43:48 +0000 (14:43 -0400)]
analyzer: split out struct bit_range from class concrete_binding

gcc/analyzer/ChangeLog:
* store.cc (concrete_binding::dump_to_pp): Move bulk of
implementation to...
(bit_range::dump_to_pp): ...this new function.
(bit_range::cmp): New.
(concrete_binding::overlaps_p): Update for use of bit_range.
(concrete_binding::cmp_ptr_ptr): Likewise.
* store.h (struct bit_range): New.
(class concrete_binding): Replace fields m_start_bit_offset and
m_size_in_bits with new field m_bit_range.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
3 years agoanalyzer: remove redundant typedef
David Malcolm [Tue, 8 Jun 2021 18:42:48 +0000 (14:42 -0400)]
analyzer: remove redundant typedef

Delete an overzealous copy&paste.

gcc/analyzer/ChangeLog:
* svalue.h (conjured_svalue::iterator_t): Delete.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
3 years agoc++: braced-list overload resolution [PR100963]
Jason Merrill [Tue, 8 Jun 2021 13:19:58 +0000 (09:19 -0400)]
c++: braced-list overload resolution [PR100963]

My PR969626 patch made us ignore template candidates when there's a perfect
non-template candidate.  In this case, we were considering B(int) a perfect
match for B({0}), but the brace elision makes it imperfect.

PR c++/100963

gcc/cp/ChangeLog:

* call.c (perfect_conversion_p): Check check_narrowing.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/initlist124.C: New test.

3 years agoUpdate Power10 scheduling description for new fused instruction types.
Pat Haugen [Tue, 8 Jun 2021 16:41:55 +0000 (11:41 -0500)]
Update Power10 scheduling description for new fused instruction types.

gcc/ChangeLog:

* config/rs6000/power10.md (power10-fused-load, power10-fused-store,
power10-fused_alu, power10-fused-vec, power10-fused-branch): New.

3 years agoFurther improve redundant test/compare removal on the H8
Jeff Law [Tue, 8 Jun 2021 14:10:23 +0000 (10:10 -0400)]
Further improve redundant test/compare removal on the H8

gcc/
* config/h8300/logical.md (andqi3_1): Move BCLR case into define_insn_and_split.
Create length attribute on define_insn_and_split.  Only split for cases which we
know will use AND.
(andqi3_1<cczn>): Renamed from andqi3_1_clobber_flags.  Only handle AND here and
fix length computation.
(b<code><mode>msx): Combine QImode and HImode H8/SX patterns using iterator.

3 years agolibstdc++: Finish implementing LWG 3413 for propagate_const
Jonathan Wakely [Tue, 8 Jun 2021 13:56:57 +0000 (14:56 +0100)]
libstdc++: Finish implementing LWG 3413 for propagate_const

We already have conditional noexcept so this just constrains the
non-member swap overload.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/experimental/propagate_const (swap): Constrain.
* testsuite/experimental/propagate_const/swap/lwg3413.cc: New test.

3 years agotree-optimization/100923 - fix alias-ref construction wrt availability
Richard Biener [Tue, 8 Jun 2021 10:52:12 +0000 (12:52 +0200)]
tree-optimization/100923 - fix alias-ref construction wrt availability

This PR shows that building an ao_ref from value-numbers is prone to
expose bogus contextual alias info to the oracle.  The following makes
sure to construct ao_refs from SSA names available at the program point
only.

On the way it modifies the awkward valueize_refs[_1] API.

2021-06-08  Richard Biener  <rguenther@suse.de>

PR tree-optimization/100923
* tree-ssa-sccvn.c (valueize_refs_1): Take a pointer to
the operand vector to be valueized.
(valueize_refs): Likewise.
(valueize_shared_reference_ops_from_ref): Adjust.
(valueize_shared_reference_ops_from_call): Likewise.
(vn_reference_lookup_3): Likewise.
(vn_reference_lookup_pieces): Likewise.  Re-valueize
with honoring availability when we are about to create
the ao_ref and valueized before.
(vn_reference_lookup): Likewise.
(vn_reference_insert_pieces): Adjust.

* gcc.dg/torture/pr100923.c: New testcase.

3 years agoMake SLP root stmt a vector
Richard Biener [Wed, 2 Jun 2021 11:25:59 +0000 (13:25 +0200)]
Make SLP root stmt a vector

This fixes a TODO noticed when adding vectorization of
BIT_INSERT_EXPRs and what's now useful for vectorization of
BB reductions.

2021-06-08  Richard Biener  <rguenther@suse.de>

* tree-vectorizer.h (_slp_instance::root_stmt): Change to...
(_slp_instance::root_stmts): ... a vector.
(SLP_INSTANCE_ROOT_STMT): Rename to ...
(SLP_INSTANCE_ROOT_STMTS): ... this.
(slp_root::root): Change to...
(slp_root::roots): ... a vector.
(slp_root::slp_root): Adjust.
* tree-vect-slp.c (_slp_instance::location): Adjust.
(vect_free_slp_instance): Release the root stmt vector.
(vect_build_slp_instance): Adjust.
(vect_analyze_slp): Likewise.
(_bb_vec_info::~_bb_vec_info): Likewise.
(vect_slp_analyze_operations): Likewise.
(vect_bb_vectorization_profitable_p): Likewise.  Adjust
costs for the root stmt.
(vect_slp_check_for_constructors): Gather all BIT_INSERT_EXPRs
as root stmts.
(vect_slp_analyze_bb_1): Simplify by marking all root stmts
as pure_slp.
(vectorize_slp_instance_root_stmt): Adjust.
(vect_schedule_slp): Likewise.

3 years agoImplement a context aware pointer equivalency class for use in evrp.
Aldy Hernandez [Fri, 4 Jun 2021 18:25:20 +0000 (20:25 +0200)]
Implement a context aware pointer equivalency class for use in evrp.

The substitute_and_fold_engine which evrp uses is expecting symbolics
from value_of_expr / value_on_edge / etc, which ranger does not provide.
In some cases, these provide important folding cues, as in the case of
aliases for pointers.  For example, legacy evrp may return [&foo, &foo]
for the value of "bar" where bar is on an edge where bar == &foo, or
when bar has been globally set to &foo.  This information is then used
by the subst & fold engine to propagate the known value of bar.

Currently this is a major source of discrepancies between evrp and
ranger.  Of the 284 cases legacy evrp is getting over ranger, 237 are
for pointer equality as discussed above.

This patch implements a context aware pointer equivalency class which
ranger-evrp can use to query what an SSA pointer is currently
equivalent to.  With it, we reduce the 284 cases legacy evrp is getting
to 47.

The API for the pointer equivalency analyzer is the following:

class pointer_equiv_analyzer
{
public:
  pointer_equiv_analyzer (gimple_ranger *r);
  ~pointer_equiv_analyzer ();
  void enter (basic_block);
  void leave (basic_block);
  void visit_stmt (gimple *stmt);
  tree get_equiv (tree ssa) const;
...
};

The enter(), leave(), and visit_stmt() methods are meant to be called
from a DOM walk.   At any point throughout the walk, one can call
get_equiv() to get whatever an SSA is equivalent to.

Tested on x86-64 Linux with a regular bootstrap/tests and by comparing
EVRP folds over ranger before and after this patch.

gcc/ChangeLog:

* gimple-ssa-evrp.c (class ssa_equiv_stack): New.
(ssa_equiv_stack::ssa_equiv_stack): New.
(ssa_equiv_stack::~ssa_equiv_stack): New.
(ssa_equiv_stack::enter): New.
(ssa_equiv_stack::leave): New.
(ssa_equiv_stack::push_replacement): New.
(ssa_equiv_stack::get_replacement): New.
(is_pointer_ssa): New.
(class pointer_equiv_analyzer): New.
(pointer_equiv_analyzer::pointer_equiv_analyzer): New.
(pointer_equiv_analyzer::~pointer_equiv_analyzer): New.
(pointer_equiv_analyzer::set_global_equiv): New.
(pointer_equiv_analyzer::set_cond_equiv): New.
(pointer_equiv_analyzer::get_equiv): New.
(pointer_equiv_analyzer::enter): New.
(pointer_equiv_analyzer::leave): New.
(pointer_equiv_analyzer::get_equiv_expr): New.
(pta_valueize): New.
(pointer_equiv_analyzer::visit_stmt): New.
(pointer_equiv_analyzer::visit_edge): New.
(hybrid_folder::value_of_expr): Call PTA.
(hybrid_folder::value_on_edge): Same.
(hybrid_folder::pre_fold_bb): New.
(hybrid_folder::post_fold_bb): New.
(hybrid_folder::pre_fold_stmt): New.
(rvrp_folder::pre_fold_bb): New.
(rvrp_folder::post_fold_bb): New.
(rvrp_folder::pre_fold_stmt): New.
(rvrp_folder::value_of_expr): Call PTA.
(rvrp_folder::value_on_edge): Same.

3 years ago[GCN] Fix run-time variable 'num_workers'
Thomas Schwinge [Sat, 5 Jun 2021 20:39:21 +0000 (22:39 +0200)]
[GCN] Fix run-time variable 'num_workers'

... which currently has *not* been forced to 'num_workers (1)'.

In addition to the testcases modified here, this also fixes:

    FAIL: libgomp.oacc-c/../libgomp.oacc-c-c++-common/mode-transitions.c -DACC_DEVICE_TYPE_radeon=1 -DACC_MEM_SHARED=0 -foffload=amdgcn-amdhsa  -O0  execution test
    [Etc.]

    mode-transitions.exe: [...]/libgomp.oacc-c-c++-common/mode-transitions.c:702: t17: Assertion `arr_b[i] == (i ^ 31) * 8' failed.

libgomp/
* plugin/plugin-gcn.c (gcn_exec): Force 'num_workers (1)'
unconditionally.
* testsuite/libgomp.oacc-c-c++-common/acc_prof-kernels-1.c:
Update.
* testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c: Likewise.

3 years agoEnable more 'libgomp.oacc-*/lib-*' testcases for non-'openacc_nvidia_accel_selected'
Thomas Schwinge [Thu, 31 Oct 2019 16:40:13 +0000 (17:40 +0100)]
Enable more 'libgomp.oacc-*/lib-*' testcases for non-'openacc_nvidia_accel_selected'

libgomp/
* testsuite/libgomp.oacc-c-c++-common/lib-11.c: Enable for all but
'-DACC_MEM_SHARED=0'.
* testsuite/libgomp.oacc-c-c++-common/lib-13.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-14.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-15.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-20.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-23.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-24.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-34.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-42.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-44.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-48.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-88.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-89.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-92.c: Likewise.
* testsuite/libgomp.oacc-fortran/lib-14.f90: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-5.c: Add
'acc_device_radeon' testing.
* testsuite/libgomp.oacc-c-c++-common/lib-6.c: Likewise.
* testsuite/libgomp.oacc-fortran/lib-5.f90: Likewise.
* testsuite/libgomp.oacc-fortran/lib-7.f90: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-52.c: Enable for all.
* testsuite/libgomp.oacc-c-c++-common/lib-53.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-54.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-86.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-87.c: Likewise.
* testsuite/libgomp.oacc-fortran/lib-10.f90: Likewise.
* testsuite/libgomp.oacc-fortran/lib-8.f90: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-57.c: Improve checking
for non-'openacc_nvidia_accel_selected'.
* testsuite/libgomp.oacc-c-c++-common/lib-58.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-62.c: Clarify that "Not
all implement this checking".
* testsuite/libgomp.oacc-c-c++-common/lib-63.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-64.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-65.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-67.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/lib-68.c: Likewise.

3 years agoFix 'libgomp.oacc-fortran/parallel-dims.f90' for 'acc_device_radeon'
Thomas Schwinge [Fri, 4 Jun 2021 13:31:53 +0000 (15:31 +0200)]
Fix 'libgomp.oacc-fortran/parallel-dims.f90' for 'acc_device_radeon'

..., by simplifying 'libgomp.oacc-c-c++-common/parallel-dims.c', and updating
the former correspondingly.  '__builtin_goacc_parlevel_id' does the right thing
for all 'acc_device_*'.

Follow-up to commit 09e0ad6253f4330977e1b2f116b5e289dc2c2a02 "Update OpenACC
tests for amdgcn".

libgomp/
* testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: Simplify.
* testsuite/libgomp.oacc-fortran/parallel-dims-aux.c: Update.

3 years agoFix 'libgomp.oacc-c-c++-common/acc_prof-kernels-1.c' for 'acc_device_radeon'
Thomas Schwinge [Sun, 6 Jun 2021 08:41:18 +0000 (10:41 +0200)]
Fix 'libgomp.oacc-c-c++-common/acc_prof-kernels-1.c' for 'acc_device_radeon'

... on top of r279378 (commit 26b74ed0223d108d7d7818c3c860f20cfe81a4af)
"Update OpenACC tests for amdgcn".

libgomp/
* testsuite/libgomp.oacc-c-c++-common/acc_prof-kernels-1.c: Fix
for 'acc_device_radeon'.

3 years agoEnhance 'libgomp.oacc-c-c++-common/firstprivate-1.c' for non-'acc_device_nvidia'
Thomas Schwinge [Fri, 4 Jun 2021 13:42:22 +0000 (15:42 +0200)]
Enhance 'libgomp.oacc-c-c++-common/firstprivate-1.c' for non-'acc_device_nvidia'

libgomp/
* testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c: Enhance
for non-'acc_device_nvidia'.

3 years agoAdd 'acc_device_radeon' testing to 'libgomp.oacc-*/acc_on_device-*'
Thomas Schwinge [Fri, 4 Jun 2021 13:29:54 +0000 (15:29 +0200)]
Add 'acc_device_radeon' testing to 'libgomp.oacc-*/acc_on_device-*'

libgomp/
* testsuite/libgomp.oacc-c-c++-common/acc_on_device-1.c: Add
'acc_device_radeon' testing.
* testsuite/libgomp.oacc-fortran/acc_on_device-1-1.f90: Likewise.
* testsuite/libgomp.oacc-fortran/acc_on_device-1-2.f: Likewise.
* testsuite/libgomp.oacc-fortran/acc_on_device-1-3.f: Likewise.

3 years agoDon't require 'openacc_nvidia_accel_selected' in 'libgomp.oacc-c-c++-common/async_que...
Thomas Schwinge [Fri, 4 Jun 2021 13:27:55 +0000 (15:27 +0200)]
Don't require 'openacc_nvidia_accel_selected' in 'libgomp.oacc-c-c++-common/async_queue-1.c'

That is, re-enable it for host-fallback, and enable it for GCN offloading.

Fix-up for r279378 (commit 26b74ed0223d108d7d7818c3c860f20cfe81a4af)
"Update OpenACC tests for amdgcn".

libgomp/
* testsuite/libgomp.oacc-c-c++-common/async_queue-1.c: Don't
require 'openacc_nvidia_accel_selected'.  Fix up for
'ACC_DEVICE_TYPE_radeon'.

3 years agoDon't require 'openacc_nvidia_accel_selected' in additional 'libgomp.oacc-*/declare-*'
Thomas Schwinge [Fri, 4 Jun 2021 13:25:32 +0000 (15:25 +0200)]
Don't require 'openacc_nvidia_accel_selected' in additional 'libgomp.oacc-*/declare-*'

Like r253779 (commit 92d5d01ac65e395ceaecc5d930f6017952aa4934)
"Enable libgomp.oacc-*/declare-*.{c,f90} for non-nvidia devices".

libgomp/
* testsuite/libgomp.oacc-c++/declare-1.C: Don't require
'openacc_nvidia_accel_selected'.
* testsuite/libgomp.oacc-c-c++-common/declare-3.c: Likewise.

3 years agoopenmp: Fix ICE on depend(source) clause during cdtor cloning [PR100957]
Jakub Jelinek [Tue, 8 Jun 2021 09:16:41 +0000 (11:16 +0200)]
openmp: Fix ICE on depend(source) clause during cdtor cloning [PR100957]

The depend(source) clause has NULL OMP_CLAUSE_DECL, it has just the
depend kind specified and no arguments.  So copy_tree_body_r shouldn't
check TREE_CODE on it without checking it is non-NULL.

2021-06-08  Jakub Jelinek  <jakub@redhat.com>

PR c++/100957
* tree-inline.c (copy_tree_body_r): For OMP_CLAUSE_DEPEND don't
check TREE_CODE if OMP_CLAUSE_DECL is NULL.

* g++.dg/gomp/doacross-2.C: New test.

3 years ago[GCN] Streamline 'libgomp/testsuite/lib/libgomp.exp:check_effective_target_openacc_ra...
Thomas Schwinge [Fri, 4 Jun 2021 13:19:35 +0000 (15:19 +0200)]
[GCN] Streamline 'libgomp/testsuite/lib/libgomp.exp:check_effective_target_openacc_radeon_accel_selected'

The GCN support that got added in r278935 (commit
83caa34e2a618842e05f59cbb3e2dda93dc23270) "Enable OpenACC GCN testing" was
forked before my r269107 (commit ee332b4a9a19552d160a23155f59b11692d8f07e)
"[libgomp] Clarify difference between offload target, offload plugin, and
OpenACC device type", and didn't later pick up these changes.

No functional change.

libgomp/
* testsuite/lib/libgomp.exp
(check_effective_target_openacc_radeon_accel_selected):
Streamline.

3 years agoRevert PR80547 workaround in 'libgomp.oacc-c-c++-common/parallel-dims.c'
Thomas Schwinge [Mon, 7 Jun 2021 14:17:06 +0000 (16:17 +0200)]
Revert PR80547 workaround in 'libgomp.oacc-c-c++-common/parallel-dims.c'

This problem has been fixed long ago, in r267934 (commit
d41d952c9bbdffe6fd2badc9c4f2c18d241ce412) "[nvptx] Handle assignment to
gang-level reduction variable".

libgomp/
* testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: Revert
PR80547 workaround.

3 years ago[nvptx] Update comment in 'libgomp.oacc-c-c++-common/parallel-dims.c'
Thomas Schwinge [Sat, 5 Jun 2021 20:01:48 +0000 (22:01 +0200)]
[nvptx] Update comment in 'libgomp.oacc-c-c++-common/parallel-dims.c'

Small fix-up for r267889 (commit 2b9d9e393766d2fa6e2dd5f361d0db14872cf261)
"[nvptx] Enable large vectors":

>  * testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: Expect vector
>  length 2097152 to be reduced to 1024 instead of 32.

libgomp/
* testsuite/libgomp.oacc-c-c++-common/parallel-dims.c
<acc_device_nvidia>: Update comment.

3 years agomiddle-end/100951 - make sure to generate VECTOR_CST in lowering
Richard Biener [Mon, 7 Jun 2021 18:08:13 +0000 (20:08 +0200)]
middle-end/100951 - make sure to generate VECTOR_CST in lowering

When vector lowering creates piecewise ops make sure to create
VECTOR_CSTs instead of CONSTRUCTORs when possible.

gcc/

2021-06-07  Richard Biener  <rguenther@suse.de>

PR middle-end/100951
* tree-vect-generic.c (expand_vector_piecewise): Build a
VECTOR_CST if all elements are constant.
(expand_vector_condition): Likewise.
(lower_vec_perm): Likewise.
(expand_vector_conversion): Likewise.

gcc/testsuite/

2021-06-07  H.J. Lu  <hjl.tools@gmail.com>

PR middle-end/100951
* gcc.target/i386/pr100951.c: New test.

3 years agotestsuite: Add -Wno-psabi -w to pr100887.c test [PR100943]
Jakub Jelinek [Tue, 8 Jun 2021 08:06:13 +0000 (10:06 +0200)]
testsuite: Add -Wno-psabi -w to pr100887.c test [PR100943]

On x86 the test is using -mavx512f and so never reports the various
-Wpsabi notes/warnings, but on other targets it can.

2021-06-08  Jakub Jelinek  <jakub@redhat.com>

PR target/100887
PR testsuite/100943
* gcc.dg/pr100887.c: Add -Wno-psabi -w to dg-options.

3 years agoFortran/OpenMP: Fix clause splitting for target/parallel/teams [PR99928]
Tobias Burnus [Tue, 8 Jun 2021 07:51:09 +0000 (09:51 +0200)]
Fortran/OpenMP: Fix clause splitting for target/parallel/teams [PR99928]

PR middle-end/99928

gcc/fortran/ChangeLog:

* trans-openmp.c (gfc_add_clause_implicitly): New.
(gfc_split_omp_clauses): Use it.
(gfc_free_split_omp_clauses): New.
(gfc_trans_omp_do_simd, gfc_trans_omp_parallel_do,
gfc_trans_omp_parallel_do_simd, gfc_trans_omp_distribute,
gfc_trans_omp_teams, gfc_trans_omp_target, gfc_trans_omp_taskloop,
gfc_trans_omp_master_taskloop, gfc_trans_omp_parallel_master): Use it.

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/openmp-simd-6.f90: Update scan-tree-dump.
* gfortran.dg/gomp/scan-5.f90: Likewise.
* gfortran.dg/gomp/loop-1.f90: Likewise; remove xfail.
* gfortran.dg/gomp/pr99928-1.f90: Remove xfail.
* gfortran.dg/gomp/pr99928-2.f90: Likewise.
* gfortran.dg/gomp/pr99928-3.f90: Likewise.
* gfortran.dg/gomp/pr99928-8.f90: Likewise.

3 years agodocs: document evrp-sparse-threshold param
Martin Liska [Tue, 8 Jun 2021 07:45:40 +0000 (09:45 +0200)]
docs: document evrp-sparse-threshold param

gcc/ChangeLog:

* doc/invoke.texi: Document new param evrp-sparse-threshold.

3 years agoFix "tailing" typo.
Martin Liska [Tue, 8 Jun 2021 07:42:18 +0000 (09:42 +0200)]
Fix "tailing" typo.

gcc/fortran/ChangeLog:

* intrinsic.texi: Fix typo.
* trans-expr.c (gfc_trans_pointer_assignment): Likewise.

gcc/ChangeLog:

* genautomata.c (create_automata): Fix typo.

libgfortran/ChangeLog:

* intrinsics/chmod.c (chmod_internal): Fix typo.
* io/transfer.c (read_sf): Likewise.

libquadmath/ChangeLog:

* libquadmath.texi: Fix typo.

gcc/testsuite/ChangeLog:

* gcc.dg/format/strfmon-1.c: Fix typo.
* gfortran.dg/char4-subscript.f90: Likewise.

3 years agopredcom: Enabled by loop vect at O2 [PR100794]
Kewen Lin [Tue, 8 Jun 2021 03:10:33 +0000 (22:10 -0500)]
predcom: Enabled by loop vect at O2 [PR100794]

As PR100794 shows, in the current implementation PRE bypasses
some optimization to avoid introducing loop carried dependence
which stops loop vectorizer to vectorize the loop.  At -O2,
there is no downstream pass to re-catch this kind of opportunity
if loop vectorizer fails to vectorize that loop.

This patch follows Richi's suggestion in the PR, if predcom flag
isn't set and loop vectorization will enable predcom without any
unrolling implicitly.  The Power9 SPEC2017 evaluation showed it
can speed up 521.wrf_r 3.30% and 554.roms_r 1.08% at very-cheap
cost model, no remarkable impact at cheap cost model, the build
time and size impact is fine (see the PR for the details).

By the way, I tested another proposal to guard PRE not skip the
optimization for cheap and very-cheap vect cost models, the
evaluation results showed it's fine with very cheap cost model,
but it can degrade some bmks like 521.wrf_r -9.17% and
549.fotonik3d_r -2.07% etc.

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

gcc/ChangeLog:

PR tree-optimization/100794
* tree-predcom.c (tree_predictive_commoning_loop): Add parameter
allow_unroll_p and only allow unrolling when it's true.
(tree_predictive_commoning): Add parameter allow_unroll_p and
adjust for it.
(run_tree_predictive_commoning): Likewise.
(pass_predcom::gate): Check flag_tree_loop_vectorize and
global_options_set.x_flag_predictive_commoning.
(pass_predcom::execute): Adjust for allow_unroll_p.

gcc/testsuite/ChangeLog:

PR tree-optimization/100794
* gcc.dg/tree-ssa/pr100794.c: New test.

3 years agopredcom: Adjust some unnecessary update_ssa calls
Kewen Lin [Tue, 8 Jun 2021 03:10:03 +0000 (22:10 -0500)]
predcom: Adjust some unnecessary update_ssa calls

As Richi suggested in PR100794, this patch is to remove
some unnecessary update_ssa calls with flag
TODO_update_ssa_only_virtuals, also do some refactoring.

Bootstrapped/regtested on powerpc64le-linux-gnu P9,
x86_64-redhat-linux and aarch64-linux-gnu, built well
on Power9 ppc64le with --with-build-config=bootstrap-O3,
and passed both P8 and P9 SPEC2017 full build with
{-O3, -Ofast} + {,-funroll-loops}.

gcc/ChangeLog:

* tree-predcom.c (execute_pred_commoning): Remove update_ssa call.
(tree_predictive_commoning_loop): Factor some cleanup stuffs into
lambda function cleanup, remove scev_reset call, and adjust return
value.
(tree_predictive_commoning): Adjust for different changed values,
only set flag TODO_update_ssa_only_virtuals if changed.
(pass_data pass_data_predcom): Remove TODO_update_ssa_only_virtuals
from todo_flags_finish.

3 years agoc++: preserve BASELINK from lookup [PR91706]
Jason Merrill [Fri, 16 Apr 2021 17:52:02 +0000 (13:52 -0400)]
c++: preserve BASELINK from lookup [PR91706]

In the earlier patch for PR91706 I fixed the BASELINK built by
baselink_for_fns, but since we already had one from lookup, we should keep
that one around instead of stripping it.  The removed hunk in
get_class_binding was a wierdly large amount of code to decide whether to
pull out BASELINK_FUNCTIONS.

gcc/cp/ChangeLog:

PR c++/91706
* name-lookup.c (get_class_binding): Keep a BASELINK.
(set_inherited_value_binding_p): Adjust.
* lambda.c (is_lambda_ignored_entity): Adjust.
* pt.c (lookup_template_function): Copy a BASELINK before
modifying it.

3 years agoc++: alias with same name as base fn [PR91706]
Jason Merrill [Fri, 16 Apr 2021 15:13:40 +0000 (11:13 -0400)]
c++: alias with same name as base fn [PR91706]

This is a bit complex.  Looking up c<T> in the definition of D::c finds
C::c, OK.  Looking up c in the definition of E finds D::c, OK.  Since the
alias is not dependent, we strip it from the template argument, leaving

using E = A<decltype(c<T>())>;

where 'c' still refers to C::c.  But instantiating E looks up 'c' again and
finds D::c, which isn't a function, and sadness ensues.

I think the bug here is looking up 'c' in D at instantiation time; the
declaration we found before is not dependent.  This seems to happen because
baselink_for_fns gets BASELINK_BINFO wrong; it is supposed to be the base
where lookup found the functions, C in this case.

gcc/cp/ChangeLog:

PR c++/91706
* semantics.c (baselink_for_fns): Fix BASELINK_BINFO.

gcc/testsuite/ChangeLog:

PR c++/91706
* g++.dg/template/lookup17.C: New test.

3 years agoc++: fix modules binfo merging
Jason Merrill [Mon, 7 Jun 2021 21:51:24 +0000 (17:51 -0400)]
c++: fix modules binfo merging

My coming fix for PR91706 caused some regressions in the modules testsuite.
This turned out to be because the change to properly use the base subobject
BINFO as BASELINK_BINFO hit problems with the code for merging binfos.  The
tree reader needed a typo fix.  The duplicate_hash function was crashing on
the BINFO for a variadic base in <variant>.  I started fixing the hash
function, but then noticed that there's no ::equal function defined;
duplicate_hash just uses pointer equality, so we might as well also
use the normal pointer hash for the moment.

gcc/cp/ChangeLog:

* module.cc (duplicate_hash::hash): Comment out.
(trees_in::tree_value): Adjust loop counter.

3 years agoc++: alias member template [PR100102]
Jason Merrill [Mon, 31 May 2021 16:56:34 +0000 (12:56 -0400)]
c++: alias member template [PR100102]

Patrick already fixed the primary cause of this bug.  But while I was
looking at this testcase I noticed that with the qualified name k::o we
ended up with a plain FUNCTION_DECL, whereas without the k:: we got a
BASELINK.  There seems to be no good reason not to return the BASELINK
in this case as well.

PR c++/100102

gcc/cp/ChangeLog:

* init.c (build_offset_ref): Return the BASELINK for a static
member function.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/alias-decl-73.C: New test.

3 years agoDaily bump.
GCC Administrator [Tue, 8 Jun 2021 00:16:44 +0000 (00:16 +0000)]
Daily bump.

3 years agoImplement a sparse bitmap representation for Rangers on-entry cache.
Andrew MacLeod [Mon, 7 Jun 2021 17:18:55 +0000 (13:18 -0400)]
Implement a sparse bitmap representation for Rangers on-entry cache.

Use a sparse representation for the on entry cache, and utilize it when
the number of basic blocks in the function exceeds param_evrp_sparse_threshold.

PR tree-optimization/PR100299
* gimple-range-cache.cc (class sbr_sparse_bitmap): New.
(sbr_sparse_bitmap::sbr_sparse_bitmap): New.
(sbr_sparse_bitmap::bitmap_set_quad): New.
(sbr_sparse_bitmap::bitmap_get_quad): New.
(sbr_sparse_bitmap::set_bb_range): New.
(sbr_sparse_bitmap::get_bb_range): New.
(sbr_sparse_bitmap::bb_range_p): New.
(block_range_cache::block_range_cache): initialize bitmap obstack.
(block_range_cache::~block_range_cache): Destruct obstack.
(block_range_cache::set_bb_range): Decide when to utilze the
sparse on entry cache.
* gimple-range-cache.h (block_range_cache): Add bitmap obstack.
* params.opt (-param=evrp-sparse-threshold): New.

3 years agoImplement multi-bit aligned accessors for sparse bitmap.
Andrew MacLeod [Mon, 7 Jun 2021 17:12:01 +0000 (13:12 -0400)]
Implement multi-bit aligned accessors for sparse bitmap.

Provide set/get routines to allow sparse bitmaps to be treated as an array
of multiple bit values. Only chunk sizes that are powers of 2 are supported.

* bitmap.c (bitmap_set_aligned_chunk): New.
(bitmap_get_aligned_chunk): New.
(test_aligned_chunk): New.
(bitmap_c_tests): Call test_aligned_chunk.
* bitmap.h (bitmap_set_aligned_chunk, bitmap_get_aligned_chunk): New.

3 years agoi386: Add init pattern for V4QI vectors [PR100637]
Uros Bizjak [Mon, 7 Jun 2021 20:58:15 +0000 (22:58 +0200)]
i386: Add init pattern for V4QI vectors [PR100637]

2021-06-07  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/100637
* config/i386/i386-expand.c (ix86_expand_vector_init_duplicate):
Handle V4QI mode.
(ix86_expand_vector_init_one_nonzero): Ditto.
(ix86_expand_vector_init_one_var): Ditto.
(ix86_expand_vector_init_general): Ditto.
* config/i386/mmx.md (vec_initv4qiqi): New expander.

gcc/testsuite/

PR target/100637
* gcc.target/i386/pr100637-5b.c: New test.
* gcc.target/i386/pr100637-5w.c: Ditto.

3 years agox86: Don't compile pr82735-[345].c for x32
H.J. Lu [Mon, 7 Jun 2021 18:43:25 +0000 (11:43 -0700)]
x86: Don't compile pr82735-[345].c for x32

Since -mabi=ms isn't compatible with x32, skip pr82735-[345].c for x32.

PR target/82735
* gcc.target/i386/pr82735-3.c: Don't compile for x32.
* gcc.target/i386/pr82735-4.c: Likewise.
* gcc.target/i386/pr82735-5.c: Likewise.

3 years agoFix old thinko in warning on pointer for storage order purposes
Eric Botcazou [Mon, 7 Jun 2021 16:17:31 +0000 (18:17 +0200)]
Fix old thinko in warning on pointer for storage order purposes

gcc/c
PR c/100920
* c-typeck.c (convert_for_assignment): Test fndecl_built_in_p to
spot built-in functions.
gcc/testsuite/
* gcc.dg/sso-14.c: Adjust.

3 years agoc++: access of dtor named by qualified template-id [PR100918]
Patrick Palka [Mon, 7 Jun 2021 16:02:08 +0000 (12:02 -0400)]
c++: access of dtor named by qualified template-id [PR100918]

Here, when resolving the destructor named by Inner<int>::~Inner<int>
(which is valid until C++20) we end up in cp_parser_lookup_name called
indirectly from cp_parser_template_id to look up the name Inner from
the scope Inner<int>.  The lookup naturally finds the injected-class-name,
and because the flag is_template is true, we adjust this lookup result
to the TEMPLATE_DECL Inner.  We then check access of this adjusted
lookup result.  But this access check fails because the lookup scope is
Inner<int> and the context_for_name_lookup for the TEMPLATE_DECL is
Outer (whereas for the injected-class-name it's also Inner<int>).

The simplest fix seems to be to check access of the original lookup
result (the injected-class-name) instead of the adjusted result (the
TEMPLATE_DECL).  So this patch moves the access check in
cp_parser_lookup_name to before the injected-class-name adjustment.

PR c++/100918

gcc/cp/ChangeLog:

* parser.c (cp_parser_lookup_name): Check access of the lookup
result before we potentially adjust an injected-class-name to
its TEMPLATE_DECL.

gcc/testsuite/ChangeLog:

* g++.dg/template/access38.C: New test.

3 years agolibstdc++: add missing typename for dependent type in ranges::elements_view [PR100900]
Avi Kivity [Mon, 7 Jun 2021 15:19:05 +0000 (11:19 -0400)]
libstdc++: add missing typename for dependent type in ranges::elements_view [PR100900]

Clang complains about the missing typename. I believe it's not required
in a more complete implementation of C++, but it's nicer to support
less complete implementations.

PR libstdc++/100900

libstdc++-v3/ChangeLog:

* include/std/ranges (elements_view::__iter_cat::_S_iter_cat):
Add missing typename.

3 years agox86: Update g++.target/i386/pr100885.C
H.J. Lu [Mon, 7 Jun 2021 14:29:31 +0000 (07:29 -0700)]
x86: Update g++.target/i386/pr100885.C

Since long is 32 bits for x32, update g++.target/i386/pr100885.C to cast
__m64 to long long for x32.

PR target/100885
* g++.target/i386/pr100885.C (_mm_set_epi64): Cast __m64 to long
long.

3 years agolibstdc++: Constrain three-way comparison for std::optional [PR 98842]
Jonathan Wakely [Mon, 7 Jun 2021 12:02:15 +0000 (13:02 +0100)]
libstdc++: Constrain three-way comparison for std::optional [PR 98842]

The operator<=>(const optional<T>&, const U&) operator is supposed to be
constrained with three_way_comparable_with<U, T> so that it can only be
used when T and U are weakly-equality-comparable and also three-way
comparable.

Adding that constrain completely breaks std::optional comparisons,
because it causes constraint recursion. To avoid that, an additional
check that U is not a specialization of std::optional is needed. That
appears to be a defect in the standard and should be reported to LWG.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/98842
* include/std/optional (operator<=>(const optional<T>& const U&)):
Add missing constraint and add workaround for template
recursion.
* testsuite/20_util/optional/relops/three_way.cc: Check that
type without equality comparison cannot be compared when wrapped
in std::optional.

3 years agoUse moves to eliminate redundant test/compare instructions
Jeff Law [Sun, 6 Jun 2021 04:44:13 +0000 (00:44 -0400)]
Use moves to eliminate redundant test/compare instructions

gcc/

* config/h8300/movepush.md: Change most _clobber_flags
patterns to instead use <cczn> subst.
(movsi_cczn): New pattern with usable CC cases split out.
(movsi_h8sx_cczn): Likewise.

3 years agoReformat target.def for better parsing.
Martin Liska [Fri, 4 Jun 2021 12:28:11 +0000 (14:28 +0200)]
Reformat target.def for better parsing.

gcc/c-family/ChangeLog:

* c-target.def: Split long lines and replace them
with '\n\'.

gcc/ChangeLog:

* common/common-target.def: Split long lines and replace them
with '\n\'.
* target.def: Likewise.
* doc/tm.texi: Re-generated.

3 years agoFor obj-c stage-final re-use the checksum from the previous stage
Bernd Edlinger [Fri, 28 May 2021 04:54:13 +0000 (06:54 +0200)]
For obj-c stage-final re-use the checksum from the previous stage

This silences the stage compare.

gcc/objc:
2021-06-07  Bernd Edlinger  <bernd.edlinger@softing.com>

* Make-lang.in (cc1obj-checksum.c): For stage-final re-use
the checksum from the previous stage.

gcc/objcp:
2021-06-07  Bernd Edlinger  <bernd.edlinger@softing.com>

* Make-lang.in (cc1objplus-checksum.c): For stage-final re-use
the checksum from the previous stage.

3 years agofold-const: Fix up fold_read_from_vector [PR100887]
Jakub Jelinek [Mon, 7 Jun 2021 07:28:31 +0000 (09:28 +0200)]
fold-const: Fix up fold_read_from_vector [PR100887]

The callers of fold_read_from_vector expect that the index they pass is
an index of an element in the vector and the function does that most of the
time.  But we allow CONSTRUCTORs with VECTOR_TYPE to have VECTOR_TYPE
elements and in that case every CONSTRUCTOR element represents not just one
index (with the exception of V1 vectors), but multiple.
So returning zero vector if i >= CONSTRUCTOR_NELTS or returning some
CONSTRUCTOR_ELT's value might not be what the callers expect.

Fixed by punting if the first element has vector type.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

In theory we could instead recurse (and assert that for CONSTRUCTORs of
vector elements we have always all elements specified like tree-cfg.c
verifies?) after adjusting the index appropriately.

2021-06-07  Jakub Jelinek  <jakub@redhat.com>

PR target/100887
* fold-const.c (fold_read_from_vector): Return NULL if trying to
read from a CONSTRUCTOR with vector type elements.

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

3 years agotree-inline: Fix up __builtin_va_arg_pack handling [PR100898]
Jakub Jelinek [Mon, 7 Jun 2021 07:25:37 +0000 (09:25 +0200)]
tree-inline: Fix up __builtin_va_arg_pack handling [PR100898]

The following testcase ICEs, because gimple_call_arg_ptr (..., 0)
asserts that there is at least one argument, while we were using
it even if we didn't copy anything just to get a pointer from/to which
the zero arguments should be copied.

Fixed by guarding the memcpy calls.  Also, the code was calling
gimple_call_num_args too many times - 5 times instead of 2, so the patch
adds two temporaries for those.

2021-06-07  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/100898
* tree-inline.c (copy_bb): Only use gimple_call_arg_ptr if memcpy
should copy any arguments.  Don't call gimple_call_num_args
on id->call_stmt or call_stmt more than once.

* g++.dg/ext/va-arg-pack-3.C: New test.

3 years agoFix ICE of insn does not satisfy its constraints.
liuhongt [Thu, 3 Jun 2021 08:38:32 +0000 (16:38 +0800)]
Fix ICE of insn does not satisfy its constraints.

evex encoding vpmovzxbx needs both AVX512BW and AVX512VL which means
constraint "Yw" should be used instead of constraint "v".

gcc/ChangeLog:

PR target/100885
* config/i386/sse.md (*sse4_1_zero_extendv8qiv8hi2_3): Refine
constraints.
(<insn>v4siv4di2): Delete constraints for define_expand.

gcc/testsuite/ChangeLog:

PR target/100885
* g++.target/i386/pr100885.C: New test.

3 years agoFix _mm256_zeroupper by representing the instructions as call_insns in which the...
liuhongt [Tue, 1 Jun 2021 01:09:44 +0000 (09:09 +0800)]
Fix _mm256_zeroupper by representing the instructions as call_insns in which the call has a special vzeroupper ABI.

When __builtin_ia32_vzeroupper is called explicitly, the corresponding
vzeroupper pattern does not carry any CLOBBERS or SETs before LRA,
which leads to incorrect optimization in pass_reload. In order to
solve this problem, this patch refine instructions as call_insns in
which the call has a special vzeroupper ABI.

gcc/ChangeLog:

PR target/82735
* config/i386/i386-expand.c (ix86_expand_builtin): Remove
assignment of cfun->machine->has_explicit_vzeroupper.
* config/i386/i386-features.c
(ix86_add_reg_usage_to_vzerouppers): Delete.
(ix86_add_reg_usage_to_vzeroupper): Ditto.
(rest_of_handle_insert_vzeroupper): Remove
ix86_add_reg_usage_to_vzerouppers, add df_analyze at the end
of the function.
(gate): Remove cfun->machine->has_explicit_vzeroupper.
* config/i386/i386-protos.h (ix86_expand_avx_vzeroupper):
Declared.
* config/i386/i386.c (ix86_insn_callee_abi): New function.
(ix86_initialize_callee_abi): Ditto.
(ix86_expand_avx_vzeroupper): Ditto.
(ix86_hard_regno_call_part_clobbered): Adjust for vzeroupper
ABI.
(TARGET_INSN_CALLEE_ABI): Define as ix86_insn_callee_abi.
(ix86_emit_mode_set): Call ix86_expand_avx_vzeroupper
directly.
* config/i386/i386.h (struct GTY(()) machine_function): Delete
has_explicit_vzeroupper.
* config/i386/i386.md (enum unspec): New member
UNSPEC_CALLEE_ABI.
(ABI_DEFAULT,ABI_VZEROUPPER,ABI_UNKNOWN): New
define_constants for insn callee abi index.
* config/i386/predicates.md (vzeroupper_pattern): Adjust.
* config/i386/sse.md (UNSPECV_VZEROUPPER): Deleted.
(avx_vzeroupper): Call ix86_expand_avx_vzeroupper.
(*avx_vzeroupper): Rename to ..
(avx_vzeroupper_callee_abi): .. this, and adjust pattern as
call_insn which has a special vzeroupper ABI.
(*avx_vzeroupper_1): Deleted.

gcc/testsuite/ChangeLog:

PR target/82735
* gcc.target/i386/pr82735-1.c: New test.
* gcc.target/i386/pr82735-2.c: New test.
* gcc.target/i386/pr82735-3.c: New test.
* gcc.target/i386/pr82735-4.c: New test.
* gcc.target/i386/pr82735-5.c: New test.

3 years agoCALL_INSN may not be a real function call.
liuhongt [Tue, 1 Jun 2021 01:00:57 +0000 (09:00 +0800)]
CALL_INSN may not be a real function call.

Use "used" flag for CALL_INSN to indicate it's a fake call. If it's a
fake call, it won't have its own function stack.

gcc/ChangeLog

PR target/82735
* df-scan.c (df_get_call_refs): When call_insn is a fake call,
it won't use stack pointer reg.
* final.c (leaf_function_p): When call_insn is a fake call, it
won't affect caller as a leaf function.
* reg-stack.c (callee_clobbers_any_stack_reg): New.
(subst_stack_regs): When call_insn doesn't clobber any stack
reg, don't clear the arguments.
* rtl.c (shallow_copy_rtx): Don't clear flag used when orig is
a insn.
* shrink-wrap.c (requires_stack_frame_p): No need for stack
frame for a fake call.
* rtl.h (FAKE_CALL_P): New macro.

3 years agoDaily bump.
GCC Administrator [Mon, 7 Jun 2021 00:16:23 +0000 (00:16 +0000)]
Daily bump.

3 years agoReimplement LEAF_REG_REMAP macro for the SPARC
Eric Botcazou [Sun, 6 Jun 2021 21:54:24 +0000 (23:54 +0200)]
Reimplement LEAF_REG_REMAP macro for the SPARC

The current implementation as an array of chars is indeed a bit awkward
so this reimplements it as a function taking and returning an int.

gcc/
* config/sparc/sparc-protos.h (order_regs_for_local_alloc): Rename
to...
(sparc_order_regs_for_local_alloc): ...this.
(sparc_leaf_reg_remap): Declare.
* config/sparc/sparc.h (ADJUST_REG_ALLOC_ORDER): Adjust.
(LEAF_REG_REMAP): Reimplement as call to sparc_leaf_reg_remap.
* config/sparc/sparc.c (leaf_reg_remap): Delete.
(order_regs_for_local_alloc): Rename to...
(sparc_order_regs_for_local_alloc): ...this.
(sparc_leaf_reg_remap): New function.
(sparc_conditional_register_usage): Do not modify leaf_reg_remap.

3 years agoaix: Use assemble_name to output BSS section name.
David Edelsohn [Wed, 2 Jun 2021 17:32:45 +0000 (13:32 -0400)]
aix: Use assemble_name to output BSS section name.

The code to emit BSS CSECT needs to support user assembler name.

* config/rs6000/rs6000.c (rs6000_xcoff_asm_output_aligned_decl_common):
Use assemble_name to output BSS section name.

3 years agoi386: Clean up constraints.md
Uros Bizjak [Sun, 6 Jun 2021 20:07:05 +0000 (22:07 +0200)]
i386: Clean up constraints.md

No functional changes.

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

gcc/
* config/i386/constraints.md (Bs):
Remove boolean operators from match_test RTX.
(Bw): Ditto.
(L): Ditto.
(M): Use "mode" variable instead of GET_MODE (op) in match_test RTX.
(Wz): Ditto.

3 years agoopenmp: Add testcase for scan directive with nested functions
Jakub Jelinek [Sun, 6 Jun 2021 17:38:41 +0000 (19:38 +0200)]
openmp: Add testcase for scan directive with nested functions

> In convert_nonlocal_omp_clauses, the following clauses are
> missing: OMP_CLAUSE_AFFINITY, OMP_CLAUSE_DEVICE_TYPE,
> OMP_CLAUSE_EXCLUSIVE, OMP_CLAUSE_INCLUSIVE.

OMP_CLAUSE_{EXCLUSIVE,INCLUSIVE} isn't needed, because we don't
walk the clauses at all for GIMPLE_OMP_SCAN.  It would be a bug
if we used the exclusive/inclusive operands after gimplification,
but we apparently don't do that, all we check is whether the
OMP_CLAUSE_KIND of the first clause (all should be the same) is
OMP_CLAUSE_EXCLUSIVE or OMP_CLAUSE_INCLUSIVE, nothing else.

That said, I think we should have a testcase.

2021-06-06  Jakub Jelinek  <jakub@redhat.com>

* gcc.dg/gomp/scan-1.c: New test.

3 years agoopenmp: Call c_omp_adjust_map_clauses even for combined target [PR100902]
Jakub Jelinek [Sun, 6 Jun 2021 17:37:06 +0000 (19:37 +0200)]
openmp: Call c_omp_adjust_map_clauses even for combined target [PR100902]

When looking at in_reduction support for target, I've noticed that
c_omp_adjust_map_clauses is not called for the combined target case.

The following patch fixes it.

Unfortunately, there are other issues.

One is (also mentioned in the PR) that currently the pointer attachment
stuff seems to be clause ordering dependent (the standard says that clause
ordering on the same construct does not matter), the baz and qux cases
in the PR are rejected while when swapped it is accepted.
Note, the order of clauses in GCC really is treated as insignificant
initially and only later on the compiler can adjust the ordering (e.g. when
we sort map clauses based on what they refer to etc.) and in particular,
clauses from parsing is reverse of the order in user code, while
c_omp_split_clauses performed for combined/composite constructs typically
reverses that ordering, i.e. makes it follow the user code ordering.

And another one is I'm slightly afraid c_omp_adjust_map_clauses might
misbehave in templates, though haven't tried to verify it with testcases.
When processing_template_decl, the non-dependent clauses will be handled
usually the same as when not in a template, but dependent clauses aren't
processed or only limited processing is done there, and rest is deferred
till later.  From quick skimming of c_omp_adjust_map_clauses, it seems
it might not be very happy about non-processed map clauses that might
still have the TREE_LIST representation of array sections, or might
not have finalized decls or base decls etc.
So, for this I wonder if cp_parser_omp_target (and other cp/parser.c
callers of c_omp_adjust_map_clauses) shouldn't call it only
if (!processing_template_decl) - perhaps you could add
cp_omp_adjust_map_clauses wrapper that would be
if (!processing_template_decl)
  c_omp_adjust_map_clauses (...);
- and call c_omp_adjust_map_clauses from within pt.c after the clauses
are tsubsted and finish_omp_clauses is called again.

2021-06-06  Jakub Jelinek  <jakub@redhat.com>

PR c/100902
* c-parser.c (c_parser_omp_target): Call c_omp_adjust_map_clauses
even when target is combined with other constructs.

* parser.c (cp_parser_omp_target): Call c_omp_adjust_map_clauses
even when target is combined with other constructs.

* c-c++-common/gomp/pr100902-1.c: New test.

3 years agodocs: Add missing @headitem for tables.
Martin Liska [Sun, 6 Jun 2021 15:29:44 +0000 (17:29 +0200)]
docs: Add missing @headitem for tables.

gcc/ChangeLog:

* doc/extend.texi: Add missing @headitem.
* doc/invoke.texi: Likewise.
* doc/objc.texi: Likewise.

3 years agogenhooks: remove dead code
Martin Liska [Fri, 4 Jun 2021 11:12:02 +0000 (13:12 +0200)]
genhooks: remove dead code

gcc/ChangeLog:

* genhooks.c (emit_findices): Remove unused function.
(emit_documentation): Do not call emit_findices
and do not search for @Fcode directives.

3 years agodocs: remove extra character.
Martin Liska [Sun, 6 Jun 2021 14:56:18 +0000 (16:56 +0200)]
docs: remove extra character.

gcc/ChangeLog:

* doc/invoke.texi: Remove extra character.

3 years agoFix thinko in new warning on type punning for storage order purposes
Eric Botcazou [Sun, 6 Jun 2021 09:37:45 +0000 (11:37 +0200)]
Fix thinko in new warning on type punning for storage order purposes

In C, unlike in Ada, the storage order of arrays is that of their component
type, so you need to look at it when deciding to warn.  And the PR complains
about a bogus warning on the assignment of a pointer returned by alloca or
malloc, so this also fixes that.

gcc/c
PR c/100920
* c-decl.c (finish_struct): Fix thinko in previous change.
* c-typeck.c (convert_for_assignment): Do not warn on pointer
assignment and initialization for storage order purposes if the
RHS is a call to a DECL_IS_MALLOC function.
gcc/testsuite/
* gcc.dg/sso-14.c: New test.

3 years agoDaily bump.
GCC Administrator [Sun, 6 Jun 2021 00:16:22 +0000 (00:16 +0000)]
Daily bump.

3 years agoUse libiberty snprintf and vsnprintf on hppa*-*-hpux*.
John David Anglin [Sat, 5 Jun 2021 15:48:04 +0000 (15:48 +0000)]
Use libiberty snprintf and vsnprintf on hppa*-*-hpux*.

libiberty/ChangeLog:

PR target/100734
* configure.ac: Use libiberty snprintf and vsnprintf on
hppa*-*-hpux*.
* configure: Regenerate.

3 years agoFix maintainers-verify.sh
Jeff Law [Sat, 5 Jun 2021 13:53:31 +0000 (09:53 -0400)]
Fix maintainers-verify.sh

* MAINTAINERS: Adjust my entry in the DCO section so that it does
not trigger testsuite failures.

3 years agosh: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:21:14 +0000 (00:21 -0500)]
sh: Update unexpected empty split condition

gcc/ChangeLog:

* config/sh/sh.md (doloop_end_split): Fix empty split condition.

3 years agosparc: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:21:18 +0000 (00:21 -0500)]
sparc: Update unexpected empty split condition

gcc/ChangeLog:

* config/sparc/sparc.md (*snedi<W:mode>_zero_vis3,
*neg_snedi<W:mode>_zero_subxc, *plus_snedi<W:mode>_zero,
*plus_plus_snedi<W:mode>_zero, *minus_snedi<W:mode>_zero,
*minus_minus_snedi<W:mode>_zero): Fix empty split condition.

3 years agoor1k: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:21:11 +0000 (00:21 -0500)]
or1k: Update unexpected empty split condition

gcc/ChangeLog:

* config/or1k/or1k.md (*movdi): Fix empty split condition.

3 years agomips: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:21:07 +0000 (00:21 -0500)]
mips: Update unexpected empty split condition

gcc/ChangeLog:

* config/mips/mips.md (<anonymous>, bswapsi2, bswapdi2): Fix empty
split condition.

3 years agom68k: Update unexpected empty split condition
Kewen Lin [Fri, 28 May 2021 05:21:04 +0000 (00:21 -0500)]
m68k: Update unexpected empty split condition

gcc/ChangeLog:

* config/m68k/m68k.md (*zero_extend_inc, *zero_extend_dec,
*zero_extendsidi2): Fix empty split condition.

3 years agoFortran: Fix some issues with pointers to character.
José Rui Faustino de Sousa [Sat, 5 Jun 2021 11:12:50 +0000 (11:12 +0000)]
Fortran: Fix some issues with pointers to character.

gcc/fortran/ChangeLog:

PR fortran/100120
PR fortran/100816
PR fortran/100818
PR fortran/100819
PR fortran/100821
* trans-array.c (gfc_get_array_span): rework the way character
array "span" was calculated.
(gfc_conv_expr_descriptor): improve handling of character sections
and unlimited polymorphic objects.
* trans-expr.c (gfc_get_character_len): new function to calculate
character string length.
(gfc_get_character_len_in_bytes): new function to calculate
character string length in bytes.
(gfc_conv_scalar_to_descriptor): add call to set the "span".
(gfc_trans_pointer_assignment): set "_len" and antecipate the
initialization of the deferred character length hidden argument.
* trans-intrinsic.c (gfc_conv_associated): set "force_no_tmp" to
avoid the creation of a temporary.
* trans-types.c (gfc_get_dtype_rank_type): rework type detection
so that unlimited polymorphic objects get proper type infomation,
also important for bind(c).
(gfc_get_dtype): add argument to pass the rank if necessary.
(gfc_get_array_type_bounds): cosmetic change to have character
arrays called character instead of unknown.
* trans-types.h (gfc_get_dtype): modify prototype.
* trans.c (get_array_span): rework the way character array "span"
was calculated.
* trans.h (gfc_get_character_len): new prototype.
(gfc_get_character_len_in_bytes): new prototype.
Add "unlimited_polymorphic" flag to "gfc_se" type to signal when
expression carries an unlimited polymorphic object.

libgfortran/ChangeLog:

PR fortran/100120
* intrinsics/associated.c (associated): have associated verify if
the "span" matches insted of the "elem_len".
* libgfortran.h (GFC_DESCRIPTOR_SPAN): add macro to retrive the
descriptor "span".

gcc/testsuite/ChangeLog:

PR fortran/100120
* gfortran.dg/PR100120.f90: New test.
PR fortran/100816
PR fortran/100818
PR fortran/100819
PR fortran/100821
* gfortran.dg/character_workout_1.f90: New test.
* gfortran.dg/character_workout_4.f90: New test.

3 years agolibstdc++: Fix return type of ranges::ssize for 128-bit integer [PR 100824]
Jonathan Wakely [Sat, 5 Jun 2021 10:42:01 +0000 (11:42 +0100)]
libstdc++: Fix return type of ranges::ssize for 128-bit integer [PR 100824]

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/100824
* include/bits/ranges_base.h (_SSize): Return signed type.
* testsuite/std/ranges/access/ssize.cc: Check with __int128.

3 years ago * MAINTAINERS: Add myself to DCO section with both email addresses.
Jeff Law [Sat, 5 Jun 2021 05:35:02 +0000 (01:35 -0400)]
* MAINTAINERS: Add myself to DCO section with both email addresses.

3 years agoFix split conditions in H8/300 port
Jeff Law [Sat, 5 Jun 2021 05:27:02 +0000 (01:27 -0400)]
Fix split conditions in H8/300 port

gcc/

* config/h8300/addsub.md: Fix split condition in define_insn_and_split
patterns.
* config/h8300/bitfield.md: Likewise.
* config/h8300/combiner.md: Likewise.
* config/h8300/divmod.md: Likewise.
* config/h8300/extensions.md: Likewise.
* config/h8300/jumpcall.md: Likewise.
* config/h8300/movepush.md: Likewise.
* config/h8300/multiply.md: Likewise.
* config/h8300/other.md: Likewise.
* config/h8300/shiftrotate.md: Likewise.
* config/h8300/logical.md: Likewise.  Fix split pattern to use
code iterator that somehow slipped through.

3 years agoDaily bump.
GCC Administrator [Sat, 5 Jun 2021 00:16:29 +0000 (00:16 +0000)]
Daily bump.

3 years agolibstdc++: Implement LWG 3403 for std::ranges::ssize
Jonathan Wakely [Fri, 4 Jun 2021 19:28:04 +0000 (20:28 +0100)]
libstdc++: Implement LWG 3403 for std::ranges::ssize

I already changed the constraints for ranges::ssize to use ranges::size,
this implements the rest of LWG 3403, so that the returned type is the
signed type corresponding to the result of ranges::size.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/ranges_base.h (_SSize): Return the result of
ranges::size converted to the wider of make-signed-like-t<S> and
ptrdiff_t, rather than the ranges different type.
* testsuite/std/ranges/access/ssize.cc: Adjust expected result
for an iota_view that uses an integer class type for its
difference_type.

3 years agolibstdc++: Fix helper concept for ranges::data [PR 100824]
Jonathan Wakely [Fri, 4 Jun 2021 19:25:39 +0000 (20:25 +0100)]
libstdc++: Fix helper concept for ranges::data [PR 100824]

We need to decay the result of t.data() before checking if it's a
pointer.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/100824
* include/bits/ranges_base.h (__member_data): Use __decay_copy.
* testsuite/std/ranges/access/data.cc: Add testcase from PR.

3 years agoOpenMP: Handle bind clause in tree-nested.c [PR100905]
Tobias Burnus [Fri, 4 Jun 2021 18:52:33 +0000 (20:52 +0200)]
OpenMP: Handle bind clause in tree-nested.c [PR100905]

PR middle-end/100905

gcc/ChangeLog:

* tree-nested.c (convert_nonlocal_omp_clauses,
convert_local_omp_clauses): Handle OMP_CLAUSE_BIND.

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/loop-3.f90: New test.

3 years agod: Fix ICE in gimplify_var_or_parm_decl, at gimplify.c:2755 (PR100882)
Iain Buclaw [Fri, 4 Jun 2021 17:38:26 +0000 (19:38 +0200)]
d: Fix ICE in gimplify_var_or_parm_decl, at gimplify.c:2755 (PR100882)

Constructor calls for temporaries were reusing the TARGET_EXPR_SLOT of a
TARGET_EXPR for an assignment, which later got passed to `build_assign',
which stripped away the outer TARGET_EXPR, leaving a reference to a lone
temporary with no declaration.

This stripping away of the TARGET_EXPR also discarded any cleanups that
may have been assigned to the expression as well.

So now the reuse of TARGET_EXPR_SLOT has been removed, and
`build_assign' now constructs assignments inside the TARGET_EXPR_INITIAL
slot.  This has also been extended to `return_expr', to deal with
possibility of a TARGET_EXPR being returned.

gcc/d/ChangeLog:

PR d/100882
* d-codegen.cc (build_assign): Construct initializations inside
TARGET_EXPR_INITIAL.
(compound_expr): Remove intermediate expressions that have no
side-effects.
(return_expr): Construct returns inside TARGET_EXPR_INITIAL.
* expr.cc (ExprVisitor::visit (CallExp *)): Remove useless assignment
to TARGET_EXPR_SLOT.

gcc/testsuite/ChangeLog:

PR d/100882
* gdc.dg/pr100882a.d: New test.
* gdc.dg/pr100882b.d: New test.
* gdc.dg/pr100882c.d: New test.
* gdc.dg/torture/pr100882.d: New test.

3 years agoc++: top-level cv-quals on type of NTTP [PR100893]
Patrick Palka [Fri, 4 Jun 2021 18:08:26 +0000 (14:08 -0400)]
c++: top-level cv-quals on type of NTTP [PR100893]

Here, we're rejecting the specialization of g<T,F> with T=A, F=&f in
param4.C below due to a spurious constness mismatch between the type of
the template argument &f and the substituted type of the parm F (the
latter has a top-level const).  Note that this mismatch doesn't occur
with object pointers because in that case a call to
perform_qualification_conversions from convert_nontype_argument
implicitly adds a top-level const to the argument (via a cast) to match.

This however seems to be a manifestation of a more general conformance
issue: we're not dropping top-level cv-quals on the substituted
type of an NTTP as per [temp.param]/6 (we only do so at parse time in
process_template_parm).  So this patch makes convert_template_argument
drop top-level cv-quals accordingly.

PR c++/100893

gcc/cp/ChangeLog:

* pt.c (convert_template_argument): Strip top-level cv-quals
on the substituted type of a non-type template parameter.

gcc/testsuite/ChangeLog:

* g++.dg/template/param4.C: New test.
* g++.dg/template/param5.C: New test.
* g++.dg/cpp1z/nontype-auto19.C: New test.
* g++.dg/cpp2a/concepts-decltype.C: Don't expect that the
deduced type of a decltype(auto) NTTP has top-level cv-quals.

3 years agoc++: tsubst_function_decl and excess arg levels [PR100102]
Patrick Palka [Fri, 4 Jun 2021 17:46:53 +0000 (13:46 -0400)]
c++: tsubst_function_decl and excess arg levels [PR100102]

Here, when instantiating the dependent alias template
duration::__is_harmonic with args={{T,U},{int}}, we find ourselves
substituting the function decl _S_gcd.  Since we have more arg levels
than _S_gcd has parm levels, an old special case in tsubst_function_decl
causes us to unwantedly reduce args to its innermost level, yielding
args={int}, which leads to a nonsensical substitution into the decl
context and eventually a crash.

The comment for this special case refers to three examples for which we
ought to see more arg levels than parm levels here, but none of the
examples actually demonstrate this.  In the first example, when
defining S<int>::f(U) parms_depth is 2 and args_depth is 1, and
later when instantiating say S<int>::f<char> both depths are 2.  In the
second example, when substituting the template friend declaration
parms_depth is 2 and args_depth is 1, and later when instantiating f
both depths are 1.  Finally, the third example is invalid since we can't
specialize a member template of an unspecialized class template like
that.

Given that this reduction code seems no longer relevant for its
documented purpose and that it causes problems as in the PR, this patch
just removes it.  Note that as far as bootstrap/regtest is concerned,
this code is dead; the below two tests would be the first to reach it.

PR c++/100102

gcc/cp/ChangeLog:

* pt.c (tsubst_function_decl): Remove old code for reducing
args when it has excess levels.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/alias-decl-72.C: New test.
* g++.dg/cpp0x/alias-decl-72a.C: New test.

3 years agoFortran - ICE in inline_matmul_assign
Harald Anlauf [Fri, 4 Jun 2021 17:23:48 +0000 (19:23 +0200)]
Fortran - ICE in inline_matmul_assign

Restrict inlining of matmul to those cases where assignment to the
result array does not need special treatment.

gcc/fortran/ChangeLog:

PR fortran/99839
* frontend-passes.c (inline_matmul_assign): Do not inline matmul
if the assignment to the resulting array if it is not of canonical
type (real/integer/complex/logical).

gcc/testsuite/ChangeLog:

PR fortran/99839
* gfortran.dg/inline_matmul_25.f90: New test.

3 years agoPR c/100783 - ICE on -Wnonnull and erroneous type
Martin Sebor [Fri, 4 Jun 2021 17:21:51 +0000 (11:21 -0600)]
PR c/100783 - ICE on -Wnonnull and erroneous type

gcc/c-family/ChangeLog:

PR c/100783
* c-attribs.c (positional_argument): Bail on erroneous types.

gcc/c/ChangeLog:

PR c/100783
* c-objc-common.c (print_type): Handle erroneous types.

gcc/testsuite/ChangeLog:

PR c/100783
* gcc.dg/nonnull-6.c: New test.

3 years agoFortran/OpenMP: Fix -fdump-parse-tree for 'omp loop'
Tobias Burnus [Fri, 4 Jun 2021 16:51:35 +0000 (18:51 +0200)]
Fortran/OpenMP: Fix -fdump-parse-tree for 'omp loop'

gcc/fortran/ChangeLog
* dump-parse-tree.c (show_code_node): Handle
EXEC_OMP_(TARGET_)(,PARALLEL_,TEAMS_)LOOP.

3 years agoPR middle-end/100732 - ICE on sprintf %s with integer argument
Martin Sebor [Fri, 4 Jun 2021 16:49:06 +0000 (10:49 -0600)]
PR middle-end/100732 - ICE on sprintf %s with integer argument

gcc/ChangeLog:

PR middle-end/100732
* gimple-fold.c (gimple_fold_builtin_sprintf): Avoid folding calls
with either source or destination argument of invalid type.
* tree-ssa-uninit.c (maybe_warn_pass_by_reference): Avoid checking
calls with arguments of invalid type.

gcc/testsuite/ChangeLog:

PR middle-end/100732
* gcc.dg/tree-ssa/builtin-snprintf-11.c: New test.
* gcc.dg/tree-ssa/builtin-snprintf-12.c: New test.
* gcc.dg/tree-ssa/builtin-sprintf-28.c: New test.
* gcc.dg/tree-ssa/builtin-sprintf-29.c: New test.
* gcc.dg/uninit-pr100732.c: New test.

3 years agoPR c/100719 - missing -Wvla-parameter on a mismatch in second parameter
Martin Sebor [Fri, 4 Jun 2021 16:35:27 +0000 (10:35 -0600)]
PR c/100719 - missing -Wvla-parameter on a mismatch in second parameter

gcc/ChangeLog:

* attribs.c (init_attr_rdwr_indices): Use VLA bounds in the expected
order.
(attr_access::vla_bounds): Also handle VLA bounds.

gcc/c-family/ChangeLog:

* c-warn.c (warn_parm_array_mismatch): Check TREE_PURPOSE to test
for element presence.

gcc/testsuite/ChangeLog:

* gcc.dg/Wvla-parameter-10.c: New test.
* gcc.dg/Wvla-parameter-11.c: New test.

3 years agoi386: Convert a couple of predicates to use match_code RTXes.
Uros Bizjak [Fri, 4 Jun 2021 15:51:05 +0000 (17:51 +0200)]
i386: Convert a couple of predicates to use match_code RTXes.

No functional changes.

2021-06-04  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
* config/i386/predicates.md (GOT_memory_operand):
Implement using match_code RTXes.
(GOT32_symbol_operand): Ditto.

3 years agoFortran: Fix OpenMP/OpenACC continue-line parsing
Tobias Burnus [Fri, 4 Jun 2021 15:43:59 +0000 (17:43 +0200)]
Fortran: Fix OpenMP/OpenACC continue-line parsing

gcc/fortran/ChangeLog:

* scanner.c (skip_fixed_omp_sentinel): Set openacc_flag if
this is not an (OpenMP) continuation line.
(skip_fixed_oacc_sentinel): Likewise for openmp_flag and OpenACC.
(gfc_next_char_literal): gfc_error_now to force error for mixed OMP/ACC
continuation once per location and return '\n'.

gcc/testsuite/ChangeLog:

* gfortran.dg/goacc/omp-fixed.f: Re-add test item changed in previous
commit in addition - add more dg-errors and '... end ...' due to changed
parsing.
* gfortran.dg/goacc/omp.f95: Likewise.
* gfortran.dg/goacc-gomp/mixed-1.f: New test.

3 years agoi386: Add init pattern for V2HI vectors [PR100637]
Uros Bizjak [Fri, 4 Jun 2021 15:37:15 +0000 (17:37 +0200)]
i386: Add init pattern for V2HI vectors [PR100637]

2021-06-03  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/100637
* config/i386/i386-expand.c (ix86_expand_vector_init_duplicate):
Handle V2HI mode.
(ix86_expand_vector_init_general): Ditto.
Use SImode instead of word_mode for logic operations
when GET_MODE_SIZE (mode) < UNITS_PER_WORD.
(expand_vec_perm_even_odd_1): Assert that V2HI mode should be
implemented by expand_vec_perm_1.
(expand_vec_perm_broadcast_1): Assert that V2HI and V4HI modes
should be implemented using standard shuffle patterns.
(ix86_vectorize_vec_perm_const): Handle V2HImode.  Add V4HI and
V2HI modes to modes, implementable with shuffle for one operand.
* config/i386/mmx.md (*punpckwd): New insn_and_split pattern.
(*pshufw_1): New insn pattern.
(*vec_dupv2hi): Ditto.
(vec_initv2hihi): New expander.

gcc/testsuite/

PR target/100637
* gcc.dg/vect/slp-perm-9.c (dg-final): Adjust dumps for vect32 targets.

3 years agolibstdc++: Fix value categories used by ranges access CPOs [PR 100824]
Jonathan Wakely [Fri, 4 Jun 2021 14:59:38 +0000 (15:59 +0100)]
libstdc++: Fix value categories used by ranges access CPOs [PR 100824]

The implementation of P2091R0 was incomplete, so that some range access
CPOs used perfect forwarding where they should not. This fixes it by
consistently operating on lvalues.

Some additional changes that are not necessary to fix the bug:

Modify the __as_const helper to simplify its usage. Instead of deducing
the value category from its argument, and requiring callers to forward
the argument as the correct category, add a non-deduced template
parameter which is used for the value category and accept the argument
as an lvalue. This means callers say __as_const<T>(t) instead of
__as_const(std::forward<T>(t)).

Always use an lvalue reference type as the template argument for the
_S_noexcept helpers, so that we only instantiate one specialization for
lvalues and rvalues of the same type.

Move some helper concepts and functions from namespace std::__detail
to ranges::__cust_access, to be consistent with the ranges::begin CPO.
This ensures that the __adl_begin concept and the _Begin::operator()
function are in the same namespace, so unqualified lookup is consistent
and the poison pills for begin are visible to both.

Simplified static assertions for arrays, because the expression a+0 is
already ill-formed for an array of incomplete type.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/100824
* include/bits/iterator_concepts.h (__detail::__decay_copy)
(__detail::__member_begin, __detail::__adl_begin): Move to
namespace ranges::__cust_access.
(__detail::__ranges_begin): Likewise, and rename to __begin.
Remove redundant static assertion.
* include/bits/ranges_base.h (_Begin, _End, _RBegin, _REnd):
Use lvalue in noexcept specifier.
(__as_const): Add non-deduced parameter for value category.
(_CBegin, _CEnd, _CRBegin, _CREnd, _CData): Adjust uses of
__as_const.
(__member_size, __adl_size, __member_empty, __size0_empty):
(__eq_iter_empty, __adl_data): Use lvalue objects in
requirements.
(__sentinel_size): Likewise. Add check for conversion to
unsigned-like.
(__member_data): Allow non-lvalue types to satisfy the concept,
but use lvalue object in requirements.
(_Size, _SSize): Remove forwarding to always use an lvalue.
(_Data): Likewise. Add static assertion for arrays.
* testsuite/std/ranges/access/cdata.cc: Adjust expected
behaviour for rvalues. Add negative tests for ill-formed
expressions.
* testsuite/std/ranges/access/data.cc: Likewise.
* testsuite/std/ranges/access/empty.cc: Adjust expected
behaviour for rvalues.
* testsuite/std/ranges/access/size.cc: Likewise.

3 years agolibstdc++: Optimize std::any_cast by replacing indirect call
Tim Adye [Fri, 4 Jun 2021 14:59:38 +0000 (15:59 +0100)]
libstdc++: Optimize std::any_cast by replacing indirect call

This significantly improves the performance of std::any_cast, by
avoiding an indirect call to the _S_manage function through a function
pointer. Before we make that indirect call we've already established
that the contained value has the expected type, which means we also know
the manager type, and so can call one of its members directly.

We also know the precise type in the any::emplace functions, because
we've just constructed that type, so we can use the new member there
too. That doesn't seem to affect performance, but we might as well use
the new _S_access function anyway.

Signed-off-by: Tim Adye <Tim.Adye@cern.ch>
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/std/any (any::_Manager::_S_access): New static
function to access the contained value.
(any::emplace, __any_caster): Use _S_access member of the
manager type.

3 years agolibstdc++: Add feature test macro for heterogeneous lookup in unordered containers
Jonathan Wakely [Fri, 4 Jun 2021 14:59:37 +0000 (15:59 +0100)]
libstdc++: Add feature test macro for heterogeneous lookup in unordered containers

Also update the C++20 status docs.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* doc/xml/manual/status_cxx2020.xml:
* doc/html/*: Regenerate.
* include/bits/hashtable.h (__cpp_lib_generic_unordered_lookup):
Define.
* include/std/version (__cpp_lib_generic_unordered_lookup):
Define.
* testsuite/23_containers/unordered_map/operations/1.cc: Check
feature test macro.
* testsuite/23_containers/unordered_set/operations/1.cc:
Likewise.

3 years agogfortran.dg/gomp/pr99928-5.f90: Use proper iteration var
Tobias Burnus [Fri, 4 Jun 2021 11:26:40 +0000 (13:26 +0200)]
gfortran.dg/gomp/pr99928-5.f90: Use proper iteration var

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/pr99928-5.f90: Really use the
proper iteration variable.