platform/upstream/gcc.git
3 years agoMIPS: use mips_isa enum instead hardcoded numbers
YunQiang Su [Sat, 28 Aug 2021 11:28:55 +0000 (07:28 -0400)]
MIPS: use mips_isa enum instead hardcoded numbers

Currently mips-cpu.defs, mips.h, netbsd.h and config.gcc are
using hardcoded numbers for isa level.

Let's replace them with more readable enum mips_isa.

gcc/ChangeLog:
* config/mips/mips.h (struct mips_cpu_info): define enum mips_isa;
  use enum instead of int for 'isa' member.
* config.gcc, config/mips/mips.c, config/mips/mips-cpus.def,
  config/mips/netbsd.h: replace hardcoded numbers with enum.

3 years agoUnify UNSPEC_MASKED_EQ/GT to the form of UNSPEC_PCMP.
liuhongt [Mon, 30 Aug 2021 07:05:14 +0000 (15:05 +0800)]
Unify UNSPEC_MASKED_EQ/GT to the form of UNSPEC_PCMP.

Currently for evex vpcmpeqb instruction, we have two forms of rtl
template representation, one is (unspec [op1 op2] UNSPEC_MASK_EQ), the
other is (unspec [op1, op2, const_int 0] UNSPEC_PCMP), which increases
the maintenance burden, such as optimization (not: vpcmpeqb)
to (vpcmpneqb) requires two define_insn_and_split to match the two
forms respectively, this patch removes UNSPEC_MASK_EQ/GT, unifying
them into the form of UNSPEC_PCMP.

gcc/ChangeLog:

* config/i386/sse.md (*<avx512>_ucmp<mode>3_1): Change from
define_split to define_insn_and_split.
(*avx2_eq<mode>3): Removed.
(<avx512>_eq<mode>3<mask_scalar_merge_name>): Adjust pattern
(<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Rename to ..
(*<avx512>_eq<mode>3<mask_scalar_merge_name>_1): .. this, and
adjust pattern.
(*avx2_gt<mode>3): Removed.
(<avx512>_gt<mode>3<mask_scalar_merge_name>): Change from
define_insn to define_expand, and adjust pattern.
(UNSPEC_MASKED_EQ, UNSPEC_MASKED_GT): Removed.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512bw-vpcmpeqb-1.c: Adjust testcase.
* gcc.target/i386/avx512bw-vpcmpeqw-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgtb-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgtw-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpeqd-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpeqq-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpgtd-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpgtq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpeqd-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpeqq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtd-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtq-1.c: Ditto.
* gcc.target/i386/bitwise_mask_op-1.c: Ditto.
* gcc.target/i386/bitwise_mask_op-2.c: Ditto.

3 years agoDaily bump.
GCC Administrator [Tue, 31 Aug 2021 00:16:50 +0000 (00:16 +0000)]
Daily bump.

3 years agoanalyzer: support "bifurcation"; reimplement realloc [PR99260]
David Malcolm [Mon, 30 Aug 2021 22:36:31 +0000 (18:36 -0400)]
analyzer: support "bifurcation"; reimplement realloc [PR99260]

Most of the state-management code in the analyzer involves
modifying state objects in-place, which implies a single outcome.
(I originally implemented in-place modification because I wanted
to avoid having to create copies of state objects, and it's now
very difficult to change this aspect of the analyzer's design)

However, there are various special-cases such as "realloc" for which
it's best to split the state into multiple outcomes.

This patch adds a mechanism for "bifurcating" the analysis in places
where there isn't a split in the CFG, and uses it to implement realloc,
in this case treating it as having 3 possible outcomes:
- failure, returning NULL
- success, growing the buffer in-place without moving it
- success, allocating a new buffer, copying the content of the old
  buffer to it, and freeing the old buffer.

gcc/ChangeLog:
PR analyzer/99260
* Makefile.in (ANALYZER_OBJS): Add analyzer/call-info.o.

gcc/analyzer/ChangeLog:
PR analyzer/99260
* analyzer.h (class custom_edge_info): New class, adapted from
exploded_edge::custom_info_t.  Make member functions const.
Make update_model return bool, converting edge param from
reference to a pointer, and adding a ctxt param.
(class path_context): New class.
* call-info.cc: New file.
* call-info.h: New file.
* engine.cc: Include "analyzer/call-info.h" and <memory>.
(impl_region_model_context::impl_region_model_context): Update for
new m_path_ctxt field.
(impl_region_model_context::bifurcate): New.
(impl_region_model_context::terminate_path): New.
(impl_region_model_context::get_malloc_map): New.
(impl_sm_context::impl_sm_context): Update for new m_path_ctxt
field.
(impl_sm_context::get_fndecl_for_call): Likewise.
(impl_sm_context::set_next_state): Likewise.
(impl_sm_context::warn): Likewise.
(impl_sm_context::is_zero_assignment): Likewise.
(impl_sm_context::get_path_context): New.
(impl_sm_context::m_path_ctxt): New.
(impl_region_model_context::on_condition): Update for new
path_ctxt param.  Handle m_enode_for_diag being NULL.
(impl_region_model_context::on_phi): Update for new path_ctxt
param.
(exploded_node::on_stmt): Add path_ctxt param, updating ctor calls
to use it as necessary.  Use it to bail out after sm-handling,
if needed.
(exploded_node::detect_leaks): Update for new path_ctxt param.
(dynamic_call_info_t::update_model): Update for conversion of
exploded_edge::custom_info_t to custom_edge_info.
(dynamic_call_info_t::add_events_to_path): Likewise.
(rewind_info_t::update_model): Likewise.
(rewind_info_t::add_events_to_path): Likewise.
(exploded_edge::exploded_edge): Likewise.
(exploded_graph::add_edge): Likewise.
(exploded_graph::maybe_process_run_of_before_supernode_enodes):
Update for new path_ctxt param.
(class impl_path_context): New.
(exploded_graph::process_node): Update for new path_ctxt param.
Create an impl_path_context and pass it to exploded_node::on_stmt.
Use it to terminate iterating stmts if terminate_path is called
on it.  After processing a run of stmts, query path_ctxt to
potentially terminate the analysis path, and/or to "bifurcate" the
analysis into multiple additional paths.
(feasibility_state::maybe_update_for_edge): Update for new
update_model ctxt param.
* exploded-graph.h
(impl_region_model_context::impl_region_model_context): Add
path_ctxt param.
(impl_region_model_context::bifurcate): New.
(impl_region_model_context::terminate_path): New
(impl_region_model_context::get_ext_state): New.
(impl_region_model_context::get_malloc_map): New.
(impl_region_model_context::m_path_ctxt): New field.
(exploded_node::on_stmt): Add path_ctxt param.
(class exploded_edge::custom_info_t): Move to analyzer.h, renaming
to custom_edge_info, and making the changes as noted in analyzer.h
above.
(exploded_edge::exploded_edge): Update for these changes to
exploded_edge::custom_info_t.
(exploded_edge::m_custom_info): Likewise.
(class dynamic_call_info_t): Likewise.
(class rewind_info_t): Likewise.
(exploded_graph::add_edge): Likewise.
* program-state.cc (program_state::on_edge): Update for new
path_ctxt param.
(program_state::push_call): Likewise.
(program_state::returning_call): Likewise.
(program_state::prune_for_point): Likewise.
* region-model-impl-calls.cc: Include "analyzer/call-info.h".
(call_details::get_fndecl_for_call): New.
(region_model::impl_call_realloc): Reimplement.
* region-model.cc (region_model::on_call_pre): Move call to
impl_call_realloc to...
(region_model::on_call_post): ...here.  Consolidate creation
of call_details instance.
(noop_region_model_context::bifurcate): New.
(noop_region_model_context::terminate_path): New.
* region-model.h (call_details::get_call_stmt): New.
(call_details::get_fndecl_for_call): New.
(region_model::on_realloc_with_move): New.
(region_model_context::bifurcate): New.
(region_model_context::terminate_path): New.
(region_model_context::get_ext_state): New.
(region_model_context::get_malloc_map): New.
(noop_region_model_context::bifurcate): New.
(noop_region_model_context::terminate_path): New.
(noop_region_model_context::get_ext_state): New.
(noop_region_model_context::get_malloc_map): New.
* sm-malloc.cc: Include "analyzer/program-state.h".
(malloc_state_machine::on_realloc_call): Reimplement.
(malloc_state_machine::on_realloc_with_move): New.
(region_model::on_realloc_with_move): New.
* sm-signal.cc (class signal_delivery_edge_info_t): Update for
conversion from exploded_edge::custom_info_t to custom_edge_info.
* sm.h (sm_context::get_path_context): New.
* svalue.cc (svalue::maybe_get_constant): Call
unwrap_any_unmergeable.

gcc/testsuite/ChangeLog:
PR analyzer/99260
* gcc.dg/analyzer/capacity-2.c: Update for changes to realloc
analysis.
* gcc.dg/analyzer/pr99193-1.c: Likewise.
* gcc.dg/analyzer/pr99193-3.c: Likewise.
* gcc.dg/analyzer/realloc-1.c: Likewise.  Add test coverage for
realloc of non-heap pointer, realloc from mismatching allocator,
and realloc on a freed pointer.
* gcc.dg/analyzer/realloc-2.c: New test.

3 years agoc++: limit instantiation with ill-formed class [PR96286]
Jason Merrill [Sun, 29 Aug 2021 22:17:22 +0000 (18:17 -0400)]
c++: limit instantiation with ill-formed class [PR96286]

I noticed that after the static_assert failures in lwg3466.cc, we got
various follow-on errors because we went ahead and tried to instantiate the
promise<T> member functions even after instantiating the class itself ran
into problems.  Interrupting instantiation of the class itself seems likely
to cause error-recovery problems, but preventing instantiation of member
functions seems strictly better for error-recovery.

This doesn't fix any of the specific testcases in PR96286, but addresses
part of that problem space.

PR c++/96286

gcc/cp/ChangeLog:

* cp-tree.h (struct lang_type): Add erroneous bit-field.
(CLASSTYPE_ERRONEOUS): New.
* pt.c (limit_bad_template_recursion): Check it.
(instantiate_class_template_1): Set it.

libstdc++-v3/ChangeLog:

* testsuite/30_threads/promise/requirements/lwg3466.cc:
Remove dg-prune-outputs.

gcc/testsuite/ChangeLog:

* g++.dg/template/access2.C: Split struct A.

3 years agoc++: preserve location through constexpr
Jason Merrill [Sat, 28 Aug 2021 04:40:29 +0000 (00:40 -0400)]
c++: preserve location through constexpr

While working on the patch for PR101460, I noticed that we were losing the
expression location when folding class prvalue expressions.  The final patch
doesn't fold class prvalues, but this still seems a worthwhile change.  I
don't add location wrappers for scalar prvalues because many callers are
trying to fold them away.

gcc/cp/ChangeLog:

* constexpr.c (cxx_eval_outermost_constant_expr): Copy
expr location to result.

3 years agoc++: fold function template args sooner [PR101460]
Jason Merrill [Mon, 30 Aug 2021 13:44:28 +0000 (09:44 -0400)]
c++: fold function template args sooner [PR101460]

As discussed in the PR, we were giving a lot of unnecessary errors for this
testcase because we didn't try to do constant evaluation until
convert_nontype_argument, which happens for each of the candidates.  But
when looking at a template-id as the function operand of a call, we can try
to fold arguments before we get into overload resolution.

PR c++/101460

gcc/cp/ChangeLog:

* cp-tree.h (cxx_constant_value_sfinae): Declare.
* constexpr.c (cxx_constant_value_sfinae): New.
* pt.c (fold_targs_r, maybe_fold_fn_template_args): New.
(tsubst_copy_and_build) [CALL_EXPR]: Call
maybe_fold_fn_template_args.

gcc/testsuite/ChangeLog:

* g++.dg/template/explicit-args6.C: New test.

3 years agoFortran - fix whitespace issue during parsing of assigned goto
Harald Anlauf [Mon, 30 Aug 2021 21:07:56 +0000 (23:07 +0200)]
Fortran - fix whitespace issue during parsing of assigned goto

gcc/fortran/ChangeLog:

PR fortran/102113
* match.c (gfc_match_goto): Allow for whitespace in parsing list
of labels.

gcc/testsuite/ChangeLog:

PR fortran/102113
* gfortran.dg/goto_9.f90: New test.

3 years agoFix PR 90142: contrib/download_prerequisites uses test ==
Andrew Pinski [Mon, 30 Aug 2021 20:30:41 +0000 (20:30 +0000)]
Fix PR 90142: contrib/download_prerequisites uses test ==

Since == is not portable, it is better to use = in contrib/
download_prerequisites.  The only place == was used is inside
the function md5_check which is used only on Mac OS X.

Tested on Mac OS X as:
./contrib/download_prerequisites --md5
Both with all files having the correct checksum and one with a broken one.

contrib/ChangeLog:

* download_prerequisites (md5_check): Replace == inside
test with = to be more portable.

3 years agoc++: Add warning about missing 'requires'
Jason Merrill [Fri, 27 Aug 2021 21:28:28 +0000 (17:28 -0400)]
c++: Add warning about missing 'requires'

I noticed that concepts-lambda14.C had two useless requires-expressions:

  static_assert(requires { C<T>; });

always succeeds, because C<T> is always a valid expression for any type,
regardless of whether C is satisfied for a particular type.  Presumably the
user means

  static_assert(requires { requires C<T>; });

to make the C<T> a nested-requirement.  Of course,

  static_assert(C<T>);

is much simpler and means the same thing; this is more relevant in the
middle of a longer requires-expression, such as the bug this warning found
in cmcstl2:

  template<class I>
  META_CONCEPT input_iterator =
  input_or_output_iterator<I> &&
  readable<I> &&
  requires(I& i, const I& ci) {
  typename iterator_category_t<I>;
  derived_from<iterator_category_t<I>, input_iterator_tag>;
  i++;
  };

where 'requires' is missing before 'derived_from'.

gcc/ChangeLog:

* doc/invoke.texi: Document -Wmissing-requires.

gcc/c-family/ChangeLog:

* c.opt: Add -Wmissing-requires.

gcc/cp/ChangeLog:

* parser.c (cp_parser_simple_requirement): Warn about missing
requires.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-lambda14.C: Add expected warnings.

3 years agoFortran - correct check for constraint F2008:C628 / F2018:C932
Harald Anlauf [Mon, 30 Aug 2021 20:41:01 +0000 (22:41 +0200)]
Fortran - correct check for constraint F2008:C628 / F2018:C932

gcc/fortran/ChangeLog:

PR fortran/101349
* resolve.c (resolve_allocate_expr): An unlimited polymorphic
argument to ALLOCATE must be ALLOCATABLE or a POINTER.  Fix the
corresponding check.

gcc/testsuite/ChangeLog:

PR fortran/101349
* gfortran.dg/unlimited_polymorphic_33.f90: New test.

3 years agors6000: Always initialize vector_pair and vector_quad nodes
Bill Schmidt [Tue, 24 Aug 2021 17:10:19 +0000 (12:10 -0500)]
rs6000: Always initialize vector_pair and vector_quad nodes

2021-08-24  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-call.c (rs6000_init_builtins): Remove
TARGET_EXTRA_BUILTINS guard.

3 years agors6000: Add sanity to V2DI_type_node definitions
Bill Schmidt [Mon, 30 Aug 2021 19:55:11 +0000 (14:55 -0500)]
rs6000: Add sanity to V2DI_type_node definitions

2021-08-30  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-call.c (rs6000_init_builtins): Change
initialization of V2DI_type_node and unsigned_V2DI_type_node.

3 years agors6000: Darwin builtin support
Bill Schmidt [Fri, 5 Mar 2021 01:54:00 +0000 (19:54 -0600)]
rs6000: Darwin builtin support

2021-03-04  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/darwin.h (SUBTARGET_INIT_BUILTINS): Use the new
decl when new_builtins_are_live.
* config/rs6000/rs6000-builtin-new.def (__builtin_cfstring): New
built-in.

3 years agoFix libgfortran build on hppa*-hp-hpux[01]*
John David Anglin [Mon, 30 Aug 2021 19:31:40 +0000 (19:31 +0000)]
Fix libgfortran build on hppa*-hp-hpux[01]*

Add include hack to define PRIdPTR, PRIiPTR, PRIoPTR, PRIuPTR, PRIxPTR
and PRIXPTR in inttypes.h.

2021-08-30  John David Anglin  <danglin@gcc.gnu.org>

fixincludes/ChangeLog:
* inclhack.def (hpux_c99_inttypes5): New hack to define PRIdPTR, etc.
* fixincl.x: Regenerate.
* tests/base/inttypes.h: Update.

3 years agoUpdate gcc sv.po.
Joseph Myers [Mon, 30 Aug 2021 19:10:08 +0000 (19:10 +0000)]
Update gcc sv.po.

* sv.po: Update.

3 years agoEnable store fusion on Power10.
Pat Haugen [Mon, 30 Aug 2021 15:58:21 +0000 (10:58 -0500)]
Enable store fusion on Power10.

gcc/ChangeLog:

* config/rs6000/rs6000-cpus.def (ISA_3_1_MASKS_SERVER): Add
OPTION_MASK_P10_FUSION_2STORE.
(POWERPC_MASKS): Likewise.
* config/rs6000/rs6000.c (rs6000_option_override_internal): Enable
store fusion for Power10.
(is_fusable_store): New.
(power10_sched_reorder): Likewise.
(rs6000_sched_reorder): Do Power10 specific reordering.
(rs6000_sched_reorder2): Likewise.
* config/rs6000/rs6000.opt: Add new option.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/fusion-p10-stst.c: New test.
* gcc.target/powerpc/fusion-p10-stst2.c: New test.

3 years agolibphobos: Compile configure tests with -fno-druntime
Iain Buclaw [Mon, 30 Aug 2021 10:12:25 +0000 (12:12 +0200)]
libphobos: Compile configure tests with -fno-druntime

libphobos/ChangeLog:

* configure: Regenerate.
* m4/autoconf.m4 (AC_LANG_PROGRAM): Declare module name 'object'.
* m4/gcc_support.m4 (WITH_LOCAL_DRUNTIME): Compile tests with
-fno-druntime.

3 years agotree-optimization/102128 - rework if-converted BB vect heuristic
Richard Biener [Mon, 30 Aug 2021 10:56:26 +0000 (12:56 +0200)]
tree-optimization/102128 - rework if-converted BB vect heuristic

This reworks the previous attempt to avoid leaving around if-converted
scalar code in BB vectorized loop bodies to keep costing independent
subgraphs which should address the observed regression with 519.lbm_r.

For this to work we now first cost all subgraphs and only after
doing that proceed to emit vectorized code.

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

PR tree-optimization/102128
* tree-vect-slp.c (vect_bb_vectorization_profitable_p):
Move scanning for if-converted scalar code to the caller
and instead delay clearing the visited flag for profitable
subgraphs.
(vect_slp_region): Cost all subgraphs before scheduling.
For if-converted BB vectorization scan for scalar COND_EXPRs
and do not vectorize if any found and the cost model is
very-cheap.

3 years agoMake sure -fexceptions is enabled when -fnon-call-exceptions is
Richard Biener [Mon, 30 Aug 2021 07:55:59 +0000 (09:55 +0200)]
Make sure -fexceptions is enabled when -fnon-call-exceptions is

This makes -fexceptions enabled by -fnon-call-exceptions, removing
the odd state of !flag_exceptions && flag_non_call_exceptions from
middle-end consideration.

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

* common.opt (fexceptions): Mark
EnabledBy(fnon-call-exceptions).
* doc/invoke.texi (fnon-call-exceptions): Document this
enables -fexceptions.

3 years agoUse __builtin_trap() for abort() if inhibit_libc
Sebastian Huber [Tue, 17 Aug 2021 07:53:43 +0000 (09:53 +0200)]
Use __builtin_trap() for abort() if inhibit_libc

abort() is used in gcc_assert() and gcc_unreachable() which is used by target
libraries such as libgcov.a.  This patch changes the abort() definition under
certain conditions.  If inhibit_libc is defined and abort is not already
defined, then abort() is defined to __builtin_trap().

The inhibit_libc define is usually defined if GCC is built for targets running
in embedded systems which may optionally use a C standard library.  If
inhibit_libc is defined, then there may be still a full featured abort()
available.  abort() is a heavy weight function which depends on signals and
file streams.  For statically linked applications, this means that a dependency
on gcc_assert() pulls in the support for signals and file streams.  This could
prevent using gcov to test low end targets for example.  Using __builtin_trap()
avoids these dependencies if the target implements a "trap" instruction.  The
application or operating system could use a trap handler to react to failed GCC
runtime checks which caused a trap.

gcc/

* tsystem.h (abort): Define abort() if inhibit_libc is defined and it
is not already defined.

3 years agolibffi: Fix MIPS r6 support
YunQiang Su [Sat, 28 Aug 2021 12:17:18 +0000 (08:17 -0400)]
libffi: Fix MIPS r6 support

for some instructions, MIPS r6 uses different encoding other than
the previous releases.

1. mips/n32.S disable .set mips4: since it casuses old insn encoding
   is used.
   https://github.com/libffi/libffi/pull/396 has been accepted as:
     94c102aa69b04337f63498e0e6551fcdce549ae5
2. mips/ffi.c: the encoding for JR is hardcoded: we need to use
   different value for r6 and pre-r6.
   https://github.com/libffi/libffi/pull/401 has been accpeted as:
     746dbe3a6a79a41931c03b51df2972be4d5e5028

libffi/
PR libffi/83636
* src/mips/n32.S: disable .set mips4
* src/mips/ffi.c: use different JR encoding for r6.

3 years agoMake sure we're playing with integral modes before call extract_integral_bit_field.
liuhongt [Fri, 6 Aug 2021 02:18:43 +0000 (10:18 +0800)]
Make sure we're playing with integral modes before call extract_integral_bit_field.

gcc/ChangeLog:

* expmed.c (extract_bit_field_1): Make sure we're playing with
integral modes before call extract_integral_bit_field.
(extract_integral_bit_field): Add a parameter of type
scalar_int_mode which corresponds to of tmode.
And call extract_and_convert_fixed_bit_field instead of
extract_fixed_bit_field and convert_extracted_bit_field.
(extract_and_convert_fixed_bit_field): New function, it's a
combination of extract_fixed_bit_field and
convert_extracted_bit_field.

3 years agoDaily bump.
GCC Administrator [Mon, 30 Aug 2021 00:16:44 +0000 (00:16 +0000)]
Daily bump.

3 years agolibiberty: Add support for demangling local D template declarations
Iain Buclaw [Sun, 29 Aug 2021 18:26:06 +0000 (20:26 +0200)]
libiberty: Add support for demangling local D template declarations

The D language now allows multiple different template declarations in
the same function that have the same mangled name.  To make the mangled
names unique, a fake parent in the form `__Sddd' is added to the symbol.
This information is not important for the user, so the demangler now
handles and ignores it.

libiberty/ChangeLog:

* d-demangle.c (dlang_identifier): Skip over fake parent manglings.
* testsuite/d-demangle-expected: Add tests.

3 years agolibiberty: Add support for demangling D function literals as template value parameters
Iain Buclaw [Sun, 29 Aug 2021 18:04:24 +0000 (20:04 +0200)]
libiberty: Add support for demangling D function literals as template value parameters

The D language now allows instantiating templates using struct literals
that have function literal fields as a value argument.

libiberty/ChangeLog:

* d-demangle.c (dlang_parse_arrayliteral): Add 'info' parameter.
(dlang_parse_assocarray): Likewise.
(dlang_parse_structlit): Likewise.
(dlang_value): Likewise.  Handle function literal symbols.
(dlang_template_args): Pass 'info' to dlang_value.
* testsuite/d-demangle-expected: Add new test.

3 years agolibiberty: Add support for D `typeof(*null)' types
Iain Buclaw [Sun, 29 Aug 2021 17:00:33 +0000 (19:00 +0200)]
libiberty: Add support for D `typeof(*null)' types

The D language has a new bottom type `typeof(*null)'.  Null types were
also incorrectly being demangled as `none', this has been fixed to be
`typeof(null)'.

libiberty/ChangeLog:

* d-demangle.c (dlang_attributes): Handle typeof(*null).
(dlang_type): Likewise.  Demangle 'n' as typeof(null).
* testsuite/d-demangle-expected: Update tests.

3 years agoDarwin: Fixes for darwin_libc_has_function.
Iain Sandoe [Fri, 27 Aug 2021 18:49:05 +0000 (19:49 +0100)]
Darwin: Fixes for darwin_libc_has_function.

Firstly, the checks for availability need not be run for any
currently supported Darwin version (or for any version of
Darwin on x86).  In fact, the only test that is needed that
differs from the default is for the availbaility of sincos.
Test that and then fall back to the default implementation.

Secondly, the funtion appears to be called from the Jit library
before the value of darwin_macosx_version_min has been set up -
at present we work around this by guarding the checks on having
a non-null pointer for darwin_macosx_version_min.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
gcc/ChangeLog:

* config/darwin.c (darwin_libc_has_function): Do not run
the checks for x86 or modern Darwin.  Make sure that there
is a value set for darwin_macosx_version_min before testing.

3 years agod: Call the assertp and boundsp variants for assert and array contract failures.
Iain Buclaw [Sat, 28 Aug 2021 22:50:38 +0000 (00:50 +0200)]
d: Call the assertp and boundsp variants for assert and array contract failures.

gcc/d/ChangeLog:

* d-codegen.cc: Include dmd/module.h.
(build_filename_from_loc): New function.
(d_assert_call): Rename to...
(build_assert_call): ...this.
(build_array_bounds_call): Call arrayboundsp variant of the array
bounds failure callback.
(build_bounds_condition): Rename to...
(build_bounds_index_condition): ...this.  Update signature.
(build_bounds_slice_condition): New function.
(checkaction_trap_p): New function.
(d_assert_call): Call assertp variant of assert failure callback.
* d-tree.h (class IndexExp): Declare.
(class SliceExp): Declare.
(build_bounds_condition): Remove.
(build_assert_call): Declare.
(build_bounds_index_condition): Declare.
(build_bounds_slice_condition): Declare.
(checkaction_trap_p): Declare.
(d_assert_call): Remove.
* expr.cc (ExprVisitor::visit(IndexExp *)): Call
build_bounds_index_condition.
(ExprVisitor::visit(SliceExp *)): Call build_bounds_slice_condition.
(ExprVisitor::visit(AssertExp *)): Update setting of libcall.
* runtime.cc (enum d_libcall_type): Add LCT_IMMUTABLE_CHARPTR.
(get_libcall_type): Handle LCT_IMMUTABLE_CHARPTR.
* runtime.def (ASSERT): Rename to...
(ASSERTP): ...this.  Update signature.
(UNITTEST): Rename to...
(UNITTESTP): ...this.  Update signature.
(ARRAY_BOUNDS): Rename to...
(ARRAYBOUNDSP): ...this.  Updates signature.
* toir.cc (IRVisitor::visit(SwitchErrorStatement *)): Update call.

3 years agod: Update comment for TypeInfoVisitor::layout_base
Iain Buclaw [Sat, 28 Aug 2021 18:37:25 +0000 (20:37 +0200)]
d: Update comment for TypeInfoVisitor::layout_base

gcc/d/ChangeLog:

* typeinfo.cc (class TypeInfoVisitor::layout_base): Update comment.

3 years agod: Use `int` to store class and struct flags
Iain Buclaw [Sat, 28 Aug 2021 18:28:02 +0000 (20:28 +0200)]
d: Use `int` to store class and struct flags

gcc/d/ChangeLog:

* typeinfo.cc (TypeInfoVisitor::visit(TypeInfoClassDeclaration *)):
Use int to store type flags.
(TypeInfoVisitor::visit(TypeInfoStructDeclaration *)): Likewise.

3 years agod: Get __c_wchar_t type from build_frontend_type
Iain Buclaw [Sat, 28 Aug 2021 18:22:22 +0000 (20:22 +0200)]
d: Get __c_wchar_t type from build_frontend_type

gcc/d/ChangeLog:

* types.cc (TypeVisitor::visit(TypeEnum*)): Get wchar_t type from
build_frontend_type.

3 years agod: Convert convert_for_rvalue switch statement into if condition
Iain Buclaw [Sat, 28 Aug 2021 18:21:21 +0000 (20:21 +0200)]
d: Convert convert_for_rvalue switch statement into if condition

gcc/d/ChangeLog:

* d-convert.cc (convert_for_rvalue): Convert switch statement into if
condition.

3 years agod: Use POINTER_SIZE for testing whether to predefine D_LP64
Iain Buclaw [Sat, 28 Aug 2021 18:20:28 +0000 (20:20 +0200)]
d: Use POINTER_SIZE for testing whether to predefine D_LP64

gcc/d/ChangeLog:

* d-builtins.cc (d_init_versions): Use POINTER_SIZE for testing
whether to predefine D_LP64.

3 years agod: ICE in gimple_register_canonical_type_1, at lto/lto-common.c:430 (PR102094)
Iain Buclaw [Sat, 28 Aug 2021 14:57:03 +0000 (16:57 +0200)]
d: ICE in gimple_register_canonical_type_1, at lto/lto-common.c:430 (PR102094)

User defined types have the TYPE_CXX_ODR_P flag set, but closure frames
did not.  This mismatch led to an ICE in the conflict detection for ODR
and interoperable non-ODR types.  As a given closure frame is tied
explicitly to a function, it already conforms to ODR.

PR d/102094

gcc/d/ChangeLog:

* d-codegen.cc (build_frame_type): Set TYPE_CXX_ODR_P.

gcc/testsuite/ChangeLog:

* gdc.dg/lto/pr102094_0.d: New test.

3 years agotestsuite, Darwin : Skip a test requiring strndup in libc.
Iain Sandoe [Mon, 15 Mar 2021 21:40:40 +0000 (21:40 +0000)]
testsuite, Darwin : Skip a test requiring strndup in libc.

Before Darwin11 there is no strndup in libc. This test fails with
warning output because of that - so skip it on these versions (since
they are not able to use strndup anyway).

gcc/testsuite/ChangeLog:

* gcc.dg/analyzer/strndup-1.c: Skip for Darwin versions
without strndup support in libc.

3 years agoDarwin, X86 : Implement __cache_clear.
Iain Sandoe [Fri, 4 Sep 2020 13:05:12 +0000 (14:05 +0100)]
Darwin, X86 : Implement __cache_clear.

We had a NOP cache clear, but there is a suitable mechanism provided
by a system call.  This connects it up.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
gcc/ChangeLog:

* config/i386/darwin.h (CLEAR_INSN_CACHE): New.

3 years agoDaily bump.
GCC Administrator [Sun, 29 Aug 2021 00:16:41 +0000 (00:16 +0000)]
Daily bump.

3 years agoImprove handling of table overflows in modref_ref_node
Jan Hubicka [Sat, 28 Aug 2021 18:57:08 +0000 (20:57 +0200)]
Improve handling of table overflows in modref_ref_node

gcc/ChangeLog:

* ipa-modref-tree.h (modref_access_node::merge): Break out
logic combining offsets and logic merging ranges to ...
(modref_access_node::combined_offsets): ... here
(modref_access_node::update2): ... here
(modref_access_node::closer_pair_p): New member function.
(modref_access_node::forced_merge): New member function.
(modre_ref_node::insert): Do merging when table is full.

gcc/testsuite/ChangeLog:

* gcc.dg/tree-ssa/modref-9.c: New test.

3 years agoFortran - reject function entries with mismatched characteristics
Harald Anlauf [Sat, 28 Aug 2021 18:09:44 +0000 (20:09 +0200)]
Fortran - reject function entries with mismatched characteristics

gcc/fortran/ChangeLog:

PR fortran/87737
* resolve.c (resolve_entries): For functions of type CHARACTER
tighten the checks for matching characteristics.

gcc/testsuite/ChangeLog:

PR fortran/87737
* gfortran.dg/entry_24.f90: New test.

3 years agolibstdc++: Fix std::allocator<void> for versioned namespace
Jonathan Wakely [Sat, 28 Aug 2021 10:05:58 +0000 (11:05 +0100)]
libstdc++: Fix std::allocator<void> for versioned namespace

Removing the allocator<void> specialization for the versioned namespace
breaks _Extptr_allocator<void> because the allocator<void>
specialization was still declared in <bits/memoryfwd.h>, making it an
incomplete type.  It wrong to remove that specialization anyway, because
it is still needed pre-C++20.

This removes the #if ! _GLIBCXX_INLINE_VERSION check, so that
allocator<void> is still explicitly specialized for the versioned
namespace, consistent with the normal unversioned namespace mode.

To make _Extptr_allocator<void> usable as a ProtoAllocator, this change
adds a default constructor and converting constructor. That is
consistent with std::allocator<void> since C++20 (and harmless to do for
earlier standards).

I'm also explicitly specializing allocator_traits<allocator<void>> so
that it doesn't need to use allocator<void>::construct and destroy.
Doing that allows those members to be removed, further simplifying
allocator<void>.  That new explicit specialization can delete the
allocate, deallocate and max_size members, which are always ill-formed
for allocator<void>.

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

* include/bits/alloc_traits.h (allocator_traits): Add explicit
specialization for allocator<void>. Improve doxygen comments.
* include/bits/allocator.h (allocator<void>): Restore for the
versioned namespace.
(allocator<void>::construct, allocator<void>::destroy): Remove.
* include/ext/extptr_allocator.h (_Extptr_allocator<void>):
Add default constructor and converting constructor.

3 years agolibstdc++: Fix comment typo
Jonathan Wakely [Fri, 27 Aug 2021 21:10:43 +0000 (22:10 +0100)]
libstdc++: Fix comment typo

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

* include/bits/stl_uninitialized.h: Fix typo in comment.

3 years agolibstdc++: Fix inefficiency in filesystem::absolute [PR99876]
Jonathan Wakely [Fri, 27 Aug 2021 09:59:54 +0000 (10:59 +0100)]
libstdc++: Fix inefficiency in filesystem::absolute [PR99876]

When the path is already absolute, the call to current_path() is
wasteful, because operator/ will ignore the left operand anyway.

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

PR libstdc++/99876
* src/c++17/fs_ops.cc (fs::absolute): Call non-throwing form,
to avoid unnecessary current_path() call.

3 years agolibstdc++: Name std::function template parameter
Jonathan Wakely [Thu, 26 Aug 2021 23:20:31 +0000 (00:20 +0100)]
libstdc++: Name std::function template parameter

This avoids "<template-parameter-2-2>" being shown in the diagnostics
for ill-formed uses of std::function constructor:

In instantiation of 'std::function<_Res(_ArgTypes ...)>::function(_Functor&&)
[with _Functor = f(f()::_Z1fv.frame*)::<lambda()>;
<template-parameter-2-2> = void; _Res = void; _ArgTypes = {}]'

Instead we get:

In instantiation of 'std::function<_Res(_ArgTypes ...)>::function(_Functor&&)
[with _Functor = f(f()::_Z1fv.frame*)::<lambda()>;
_Constraints = void; _Res = void; _ArgTypes = {}]'

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

* include/bits/std_function.h (function::function(F&&)): Give
name to defaulted template parameter, to improve diagnostics.
Use markdown for more doxygen comments.

3 years agoMIPS: use N64 ABI by default if the triple end with -gnuabi64
YunQiang Su [Fri, 27 Aug 2021 03:56:58 +0000 (23:56 -0400)]
MIPS: use N64 ABI by default if the triple end with -gnuabi64

gcc/ChangeLog:

PR target/102089
* config.gcc: MIPS: use N64 ABI by default if the triple end
  with -gnuabi64, which is used by Debian since 2013.

3 years agofix latent bootstrap-debug issue
Alexandre Oliva [Sat, 28 Aug 2021 03:40:14 +0000 (00:40 -0300)]
fix latent bootstrap-debug issue

I've hit a bootstrap-debug error involving large subprograms in
gcc/ada/sem_ch12.adb.  I'm afraid I couldn't narrow it down to a
reasonable testcase.

thread1 made different decisions about a block containing a
builtin_eh_filter call because in one compilation, estimate_num_insns
found a cgraph_node for the builtin and could thus get to the
is_simple_builtin test, but in the other it didn't.  With different
insn counts, one stage jump-threaded and the other didn't, and the
resulting code diverged quite a bit.

The reason the builtin had a cgraph_node in one case but not the other
was that modref got a chance to analyze the builtin call when it was
the first stmt in the block, and that created the cgraph_node.
However, when it was preceded by debug stmts, the loop in
analyze_function was cut short after the first debug stmt, because the
summary so far was not useful.

This patch fixes both issues: skip debug stmts in the analyze_function
loop, so as to prevent them from affecting any decisions in the loop,
and enable the insn count estimator to get to the is_simple_builtin
test when a cgraph_node has not been created for the builtin.

for  gcc/ChangeLog

* ipa-modref.c (analyze_function): Skip debug stmts.
* tree-inline.c (estimate_num_insn): Consider builtins even
without a cgraph_node.

3 years agoDaily bump.
GCC Administrator [Sat, 28 Aug 2021 00:16:42 +0000 (00:16 +0000)]
Daily bump.

3 years agoc++: Set type on dependent ARROW_EXPR
Jason Merrill [Fri, 27 Aug 2021 14:00:49 +0000 (10:00 -0400)]
c++: Set type on dependent ARROW_EXPR

Even if the operand of -> has dependent type, if it's a pointer we know
that the result will be the target type of that pointer.  This should avoid
some unnecessary TYPEOF_EXPR when looking up a name after ->.

gcc/cp/ChangeLog:

* typeck2.c (build_x_arrow): Do set TREE_TYPE when operand is
a dependent pointer.

3 years agoSupport limited setcc for H8
Jeff Law [Fri, 27 Aug 2021 21:01:37 +0000 (17:01 -0400)]
Support limited setcc for H8

gcc/

* config/h8300/bitfield.md (cstore<mode>4): Remove expander.
* config/h8300/h8300.c (h8300_expand_branch): Remove function.
* config/h8300/h8300-protos.h (h8300_expadn_branch): Remove prototype.
* config/h8300/h8300.md (eqne): New code iterator.
(geultu, geultu_to_c): Similarly.
* config/h8300/testcompare.md (cstore<mode>4): Dummy expander.
(store_c_<mode>, store_c_i_<mode>): New define_insn_and_splits
(cmp<mode>_c): New pattern

3 years agoUpdate comments in float128-call.c test.
Michael Meissner [Fri, 27 Aug 2021 20:07:50 +0000 (16:07 -0400)]
Update comments in float128-call.c test.

Segher asked that I update the comments to include the d-form vector stores
(even though they wouldn't be generated by this test).

2021-08-25  Michael Meissner  <meissner@linux.ibm.com>

gcc/testsuite/
* gcc.target/powerpc/float128-call.c: Update comments.

3 years agoReduce vector comparison of uniform vectors to a scalar comparison
Jeff Law [Fri, 27 Aug 2021 19:27:38 +0000 (15:27 -0400)]
Reduce vector comparison of uniform vectors to a scalar comparison

gcc/
* tree-ssa-dom.c (reduce_vector_comparison_to_scalar_comparison): New
function.
(dom_opt_dom_walker::optimize_stmt): Use it.

3 years agoFix float128-call.c test for power8 IEEE 128 and power10.
Michael Meissner [Fri, 27 Aug 2021 17:19:54 +0000 (13:19 -0400)]
Fix float128-call.c test for power8 IEEE 128 and power10.

I built a compiler on a little endian power8 system where the default long
double was IEEE 128-bit instead of IBM 128-bit.  I discovered that on
power8, we would generate a lxvd2x and xxpermdi to deal with the endianess
instead of the Altivec lxv.

In addition, I noticed the constant that was being loaded (1.0q) could be
loaded by the lxvkq instruction.

I rewrote the test to handle all forms of vector load and store that can
be generated.

2021-08-27  Michael Meissner  <meissner@linux.ibm.com>

gcc/testsuite/
* gcc.target/powerpc/float128-call.c: Fix test for IEEE 128-bit
long double and power10.

3 years agoDarwin : Mark the mod init/term section starts with a linker-visible sym.
Iain Sandoe [Sat, 29 Aug 2020 21:05:30 +0000 (22:05 +0100)]
Darwin : Mark the mod init/term section starts with a linker-visible sym.

Some newer assemblers emit section start temp symbols for mod init and term
sections if there is no suitable symbol present already.
The temp symbols are linker visible and therefore appear in the symbol tables.
Since the temp symbol number can vary when debug is enabled, that causes
compare-debug fails.  The solution is to provide a stable linker-visible
symbol.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
gcc/ChangeLog:

* config/darwin.c (finalize_ctors): Add a section-start linker-
visible symbol.
(finalize_dtors): Likewise.
* config/darwin.h (MIN_LD64_INIT_TERM_START_LABELS): New.

3 years agors6000: Execute the automatic built-in initialization code
Bill Schmidt [Fri, 27 Aug 2021 14:55:29 +0000 (09:55 -0500)]
rs6000: Execute the automatic built-in initialization code

2021-08-27  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-call.c (rs6000-builtins.h): New #include.
(rs6000_init_builtins): Call rs6000_init_generated_builtins.  Skip the
old initialization logic when new builtins are enabled.
* config/rs6000/rs6000-gen-builtins.c (write_decls): Rename
rs6000_autoinit_builtins to rs6000_init_generated_builtins.
(write_init_file): Likewise.

3 years agolibgfortran: Use the libtool macro to determine libm availability.
Iain Sandoe [Sun, 28 Mar 2021 14:39:33 +0000 (15:39 +0100)]
libgfortran: Use the libtool macro to determine libm availability.

We recently had a report of build failure against a Darwin branch on
the latest OS release.  This was because (temporarily) the symlink
from libm.dylib => libSystem.dylib had been removed/omitted.

libm is not needed on Darwin, and should not be added unconditionally
even if that is (mostly) harmless since it is a symlink to libc.

There could be cases where the addition was not completely harmless
because the presentation of the symlink would cause the symbols exposed
in libSystem to be considered ahead of ones presented in convenience
libraries.

libgfortran/ChangeLog:

* Makefile.am: Use configured libm availability.
* Makefile.in: Regenerate.
* configure: Regenerate.
* configure.ac: Use libtool macro to find libm availability.
* libgfortran.spec.in: Use configured libm availability.

3 years agotestsuite, Darwin : Do not claim 'GAS' for cctools assembler.
Iain Sandoe [Mon, 15 Mar 2021 21:38:31 +0000 (21:38 +0000)]
testsuite, Darwin : Do not claim 'GAS' for cctools assembler.

Although the cctools assembler is based of GNU GAS, it is from a
very old version (1.38) which does not support many of the features
that the target supports test is expecting.

gcc/testsuite/ChangeLog:

* lib/target-supports.exp: Exclude cctools assembler based on
GAS 1.38.

3 years agoconfigure: Adjust several assembler checks to remove an unused parm.
Iain Sandoe [Thu, 26 Aug 2021 10:32:52 +0000 (11:32 +0100)]
configure: Adjust several assembler checks to remove an unused parm.

In r12-3048-ge0b6d0b39c6, the GAS version parameter was removed from
the gcc_GAS_CHECK_FEATURE macro.  It seems that overlapping comit/test
cycles resulted in several AMDGCN and one Darwin commit with the now
extra parameter still present.

This causes wrong configure code to be generated when autoreconf is
used in the gcc directory.

Fixed by removing the extraneous parm from the AMDGCN and Darwin cases.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
gcc/ChangeLog:

* configure.ac (darwin2[[0-9]]* | darwin19*): Alter use of
gcc_GAS_CHECK_FEATURE to remove an extraneous parameter.
(amdgcn-* | gcn-*) Likewise.

3 years agocall_summary: add missing template keyword
Anthony Sharp [Fri, 27 Aug 2021 14:02:42 +0000 (10:02 -0400)]
call_summary: add missing template keyword

Without the 'template', this function template compares 'traverse' to 'f',
and then compares the result to 'a'.  Evidently it hasn't been instantiated
yet.

gcc/ChangeLog:

* symbol-summary.h: Added missing template keyword.

3 years agotree-optimization/45178 - DCE of dead control flow in infinite loop
Richard Biener [Fri, 27 Aug 2021 07:47:49 +0000 (09:47 +0200)]
tree-optimization/45178 - DCE of dead control flow in infinite loop

This fixes DCE to be able to elide dead control flow in an
infinite loop without an exit edge.  This special situation is
handled well by the code finding an edge to preserve since there's
no chance it will find the exit edge and make the loop finite.

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

PR tree-optimization/45178
* tree-ssa-dce.c (find_obviously_necessary_stmts): For
infinite loops without exit do not mark control dependent
edges of the latch necessary.

* gcc.dg/tree-ssa/ssa-dce-3.c: Adjust testcase.

3 years agoi386: Fix wrong optimization for consecutive masked scatters [PR 101472]
konglin1 [Mon, 9 Aug 2021 03:37:52 +0000 (11:37 +0800)]
i386: Fix wrong optimization for consecutive masked scatters [PR 101472]

gcc/ChangeLog:

PR target/101472
* config/i386/sse.md: (<avx512>scattersi<mode>): Add mask operand to
UNSPEC_VSIBADDR.
(<avx512>scattersi<mode>): Likewise.
(*avx512f_scattersi<VI48F:mode>): Merge mask operand to set_dest.
(*avx512f_scatterdi<VI48F:mode>): Likewise

gcc/testsuite/ChangeLog:

PR target/101472
* gcc.target/i386/avx512f-pr101472.c: New test.
* gcc.target/i386/avx512vl-pr101472.c: New test.

3 years agors6000: Make some BIFs vectorized on P10
Kewen Lin [Fri, 27 Aug 2021 01:23:58 +0000 (20:23 -0500)]
rs6000: Make some BIFs vectorized on P10

This patch is to add the support to make vectorizer able to
vectorize some built-in function scalar versions on Power10.

gcc/ChangeLog:

* config/rs6000/rs6000.c (rs6000_builtin_md_vectorized_function): Add
support for built-in functions MISC_BUILTIN_DIVWE, MISC_BUILTIN_DIVWEU,
MISC_BUILTIN_DIVDE, MISC_BUILTIN_DIVDEU, P10_BUILTIN_CFUGED,
P10_BUILTIN_CNTLZDM, P10_BUILTIN_CNTTZDM, P10_BUILTIN_PDEPD and
P10_BUILTIN_PEXTD on Power10.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/dive-vectorize-1.c: New test.
* gcc.target/powerpc/dive-vectorize-1.h: New test.
* gcc.target/powerpc/dive-vectorize-2.c: New test.
* gcc.target/powerpc/dive-vectorize-2.h: New test.
* gcc.target/powerpc/dive-vectorize-run-1.c: New test.
* gcc.target/powerpc/dive-vectorize-run-2.c: New test.
* gcc.target/powerpc/p10-bifs-vectorize-1.c: New test.
* gcc.target/powerpc/p10-bifs-vectorize-1.h: New test.
* gcc.target/powerpc/p10-bifs-vectorize-run-1.c: New test.

3 years agors6000: Add missing unsigned info for some P10 bifs
Kewen Lin [Fri, 27 Aug 2021 01:23:17 +0000 (20:23 -0500)]
rs6000: Add missing unsigned info for some P10 bifs

This patch is to make prototypes of some Power10 built-in
functions consistent with what's in the documentation, as
well as the vector version.  Otherwise, useless conversions
can be generated in gimple IR, and the vectorized versions
will have inconsistent types.

gcc/ChangeLog:

* config/rs6000/rs6000-call.c (builtin_function_type): Add unsigned
signedness for some Power10 bifs.

3 years agoaix: packed struct alignment [PR102068]
David Edelsohn [Thu, 26 Aug 2021 21:14:18 +0000 (17:14 -0400)]
aix: packed struct alignment [PR102068]

Further fixes to structure alignment when the structure is packed
and contains double.  This patch checks for packed attribute
at the top level.

gcc/ChangeLog:

PR target/102068
* config/rs6000/rs6000.c (rs6000_adjust_field_align): Use
computed alignment if the entire struct has attribute packed.

3 years agoFold more shuffle builtins to VEC_PERM_EXPR.
liuhongt [Fri, 11 Dec 2020 11:02:43 +0000 (19:02 +0800)]
Fold more shuffle builtins to VEC_PERM_EXPR.

A follow-up to https://gcc.gnu.org/pipermail/gcc-patches/2019-May/521983.html

gcc/
PR target/98167
PR target/43147
* config/i386/i386.c (ix86_gimple_fold_builtin): Fold
IX86_BUILTIN_SHUFPD512, IX86_BUILTIN_SHUFPS512,
IX86_BUILTIN_SHUFPD256, IX86_BUILTIN_SHUFPS,
IX86_BUILTIN_SHUFPS256.
(ix86_masked_all_ones): New function.

gcc/testsuite/
* gcc.target/i386/avx512f-vshufpd-1.c: Adjust testcase.
* gcc.target/i386/avx512f-vshufps-1.c: Adjust testcase.
* gcc.target/i386/pr43147.c: New test.

3 years agoDaily bump.
GCC Administrator [Fri, 27 Aug 2021 00:16:22 +0000 (00:16 +0000)]
Daily bump.

3 years agolibstdc:: Use markdown for Doxygen comments in std::function
Jonathan Wakely [Thu, 26 Aug 2021 15:55:31 +0000 (16:55 +0100)]
libstdc:: Use markdown for Doxygen comments in std::function

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

* include/bits/std_function.h (function): Adjust doxygen
comments.
* include/bits/unique_ptr.h (make_unique_for_overwrite):
Change parameter name to match doxygen comment.

3 years agolibstdc++: Avoid a move in std::function construction (LWG 2447)
Jonathan Wakely [Thu, 26 Aug 2021 13:01:36 +0000 (14:01 +0100)]
libstdc++: Avoid a move in std::function construction (LWG 2447)

This makes the std::function constructor use perfect forwarding, to
avoid an unnecessary move-construction of the target. This means we need
to rewrite the _Function_base::_Base_manager::_M_init_functor function
to use a forwarding reference, and so can reuse it for the clone
operation.

Also simplify the SFINAE constraints on the constructor, by combining
the !is_same_v<remove_cvref_t<F>, function> constraint into the
_Callable trait.

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

* include/bits/std_function.h (_function_base::_Base_manager):
Replace _M_init_functor with a function template using a
forwarding reference, and a pair of _M_create function
templates. Reuse _M_create for the clone operation.
(function::_Decay_t): New alias template.
(function::_Callable): Simplify by using _Decay.
(function::function(F)): Change parameter to forwarding
reference, as per LWG 2447. Add noexcept-specifier. Simplify
constraints.
(function::operator=(F&&)): Add noexcept-specifier.
* testsuite/20_util/function/cons/lwg2774.cc: New test.
* testsuite/20_util/function/cons/noexcept.cc: New test.

3 years agolibstdc++: Add static assertions for std::function requirements
Jonathan Wakely [Thu, 26 Aug 2021 12:13:27 +0000 (13:13 +0100)]
libstdc++: Add static assertions for std::function requirements

Add static assertions to std::function, so that more user-friendly
diagnostics are given when trying to store a non-copyable target object.

These preconditions were added as "Mandates:" by LWG 2447, but I'm
committing them separately from implementing that, to allow just this
change to be backported more easily.

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

* include/bits/std_function.h (function::function(F)): Add
static assertions to check constructibility requirements.

3 years agors6000: inline ldouble __gcc_qsub
David Edelsohn [Wed, 25 Aug 2021 21:41:50 +0000 (17:41 -0400)]
rs6000: inline ldouble __gcc_qsub

While performing some tests of IEEE 128 float for PPC64LE, Michael
Meissner noticed that __gcc_qsub is substantially slower than
__gcc_qadd.  __gcc_qsub calls __gcc_add with the second operand
negated.  Because the functions normally are invoked through
libgcc shared object, the extra PLT overhead has a large impact
on the overall time of the function.  This patch converts
__gcc_qadd to a static inline function invoked by __gcc_qadd
and __gcc_qsub.

libgcc/ChangeLog:

* config/rs6000/ibm-ldouble.c (ldouble_qadd_internal): Rename from
__gcc_qadd.
(__gcc_qadd): Call ldouble_qadd_internal.
(__gcc_qsub): Call ldouble_qadd_internal with second long double
argument negated.

3 years ago[i386] Call force_reg unconditionally.
Uros Bizjak [Thu, 26 Aug 2021 20:08:25 +0000 (22:08 +0200)]
[i386] Call force_reg unconditionally.

There is no point to check RTXes before calling force_reg,
force_reg checks for REG RTX by itself.

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

gcc/
* config/i386/i386.md (*btr<mode>_1): Call force_reg unconditionally.
(conditional moves with memory inputs splitters): Ditto.
* config/i386/sse.md (one_cmpl<mode>2): Simplify.

3 years agoFix ipa-modref verification ices
Jan Hubicka [Thu, 26 Aug 2021 19:37:46 +0000 (21:37 +0200)]
Fix ipa-modref verification ices

* ipa-modref-tree.h (modref_access_node::try_merge_with): Restart
search after merging.

3 years agors6000: Add remaining overloads
Bill Schmidt [Thu, 26 Aug 2021 19:34:00 +0000 (14:34 -0500)]
rs6000: Add remaining overloads

2021-08-26  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-overload.def: Add remaining overloads.

3 years agors6000: Add Cell builtins
Bill Schmidt [Mon, 7 Jun 2021 21:09:15 +0000 (16:09 -0500)]
rs6000: Add Cell builtins

2021-06-07  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-builtin-new.def: Add cell stanza.

3 years agors6000: Add miscellaneous builtins
Bill Schmidt [Tue, 15 Jun 2021 13:43:11 +0000 (08:43 -0500)]
rs6000: Add miscellaneous builtins

2021-06-15  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-builtin-new.def: Add ieee128-hw, dfp,
crypto, and htm stanzas.

3 years agors6000: Add MMA builtins
Bill Schmidt [Thu, 17 Jun 2021 14:05:24 +0000 (09:05 -0500)]
rs6000: Add MMA builtins

2021-06-16  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
* config/rs6000/rs6000-builtin-new.def: Add mma stanza.

3 years agoRefactor warn_uninit() code.
Martin Sebor [Thu, 26 Aug 2021 19:15:38 +0000 (13:15 -0600)]
Refactor warn_uninit() code.

gcc/ChangeLog:

* tree-ssa-uninit.c (warn_uninit): Refactor and simplify.
(warn_uninit_phi_uses): Remove argument from calls to warn_uninit.
(warn_uninitialized_vars): Same.  Reduce visibility of locals.
(warn_uninitialized_phi): Same.

3 years agoImproved handling of shifts/rotates in bit CCP.
Roger Sayle [Thu, 26 Aug 2021 17:57:00 +0000 (18:57 +0100)]
Improved handling of shifts/rotates in bit CCP.

This patch is the next in the series to improve bit bounds in tree-ssa's
bit CCP pass, this time: bounds for shifts and rotates by unknown amounts.
This allows us to optimize expressions such as ((x&15)<<(y&24))&64.
In this case, the expression (y&24) contains only two unknown bits,
and can therefore have only four possible values: 0, 8, 16 and 24.
From this (x&15)<<(y&24) has the nonzero bits 0x0f0f0f0f, and from
that ((x&15)<<(y&24))&64 must always be zero.

One clever use of computer science in this patch is the use of XOR
to efficiently enumerate bit patterns in Gray code order.  As the
order in which we generate values is not significant, it's faster
and more convenient to enumerate values by flipping one bit at a
time, rather than in numerical order [which would require carry
bits and additional logic].

There's a pre-existing ??? comment in tree-ssa-ccp.c that we should
eventually be able to optimize (x<<(y|8))&255, but this patch takes the
conservatively paranoid approach of only optimizing cases where the
shift/rotate is guaranteed to be less than the target precision, and
therefore avoids changing any cases that potentially might invoke
undefined behavior.  This patch does optimize (x<<((y&31)|8))&255.

2021-08-26  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
* tree-ssa-ccp.c (get_individual_bits): Helper function to
extract the individual bits from a widest_int constant (mask).
(gray_code_bit_flips): New read-only table for effiently
enumerating permutations/combinations of bits.
(bit_value_binop) [LROTATE_EXPR, RROTATE_EXPR]: Handle rotates
by unknown counts that are guaranteed less than the target
precision and four or fewer unknown bits by enumeration.
[LSHIFT_EXPR, RSHIFT_EXPR]: Likewise, also handle shifts by
enumeration under the same conditions.  Handle remaining
shifts as a mask based upon the minimum possible shift value.

gcc/testsuite/ChangeLog
* gcc.dg/tree-ssa/ssa-ccp-41.c: New test case.

3 years ago[Committed] Tidy up !POINTER_TYPE_P test in match.pd LSHIFT_EXPR folding
Roger Sayle [Thu, 26 Aug 2021 17:51:46 +0000 (18:51 +0100)]
[Committed] Tidy up !POINTER_TYPE_P test in match.pd LSHIFT_EXPR folding

As suggested by Richard Biener in the comments of PR middle-end/102029,
the new test "INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type) ..." is
redundant, and just "INTEGRAL_TYPE_P (type)" is the preferred form.

2021-08-26  Roger Sayle  <roger@nextmovesoftware.com>
    Richard Biener  <rguenther@suse.de>

gcc/ChangeLog
* match.pd (shift transformations): Remove a redundant
!POINTER_TYPE_P check.

3 years ago[i386] Set all_regs to true in the call to replace_rtx [PR102057]
Uros Bizjak [Thu, 26 Aug 2021 15:26:06 +0000 (17:26 +0200)]
[i386] Set all_regs to true in the call to replace_rtx [PR102057]

We want to replace all REGs equal to FROM.

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

gcc/
PR target/102057
* config/i386/i386.md (cmove reg-reg move elimination peephole2s):
Set all_regs to true in the call to replace_rtx.

3 years agoImprove handling of modref params.
Jan Hubicka [Thu, 26 Aug 2021 14:57:46 +0000 (16:57 +0200)]
Improve handling of modref params.

this patch makes insertion to modref access tree smarter when --param
modref-max-bases and moredref-max-refs are hit.  Instead of giving up
we either give up on base alias set (make it equal to ref) or turn the
alias set to 0.  This lets us to track useful info on quite large
functions, such as ggc_free.

gcc/ChangeLog:

* ipa-modref-tree.c (test_insert_search_collapse): Update test.
* ipa-modref-tree.h (modref_base_node::insert): Be smarter when
hiting --param modref-max-refs limit.
(modref_tree:insert_base): Be smarter when hitting
--param modref-max-bases limit. Add new parameter REF.
(modref_tree:insert): Update.
(modref_tree:merge): Update.
* ipa-modref.c (read_modref_records): Update.

3 years agoAdd full stop to params.opt.
Jan Hubicka [Thu, 26 Aug 2021 14:01:53 +0000 (16:01 +0200)]
Add full stop to params.opt.

gcc/ChangeLog:

* params.opt: (modref-max-adjustments): Add full stop.

3 years agoFix off-by-one error in try_merge_with
Jan Hubicka [Thu, 26 Aug 2021 13:33:56 +0000 (15:33 +0200)]
Fix off-by-one error in try_merge_with

gcc/ChangeLog:

* ipa-modref-tree.h (modref_ref_node::verify): New member
functoin.
(modref_ref_node::insert): Use it.
(modref_ref_node::try_mere_with): Fix off by one error.

3 years agolibstdc++: Make Networking TS headers more portable [PR100285]
Jonathan Wakely [Thu, 26 Aug 2021 11:06:55 +0000 (12:06 +0100)]
libstdc++: Make Networking TS headers more portable [PR100285]

Add more preprocessor conditions to check for constants being defined
before using them, so that the Networking TS headers can be compiled on
a wider range of platforms.

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

PR libstdc++/100285
* configure.ac: Check for O_NONBLOCK.
* configure: Regenerate.
* include/experimental/internet: Include <ws2tcpip.h> for
Windows.  Use preprocessor conditions around more constants.
* include/experimental/socket: Use preprocessor conditions
around more constants.
* testsuite/experimental/net/internet/resolver/base.cc: Only use
constants when the corresponding C macro is defined.
* testsuite/experimental/net/socket/basic_socket.cc: Likewise.
* testsuite/experimental/net/socket/socket_base.cc: Likewise.
Make preprocessor checks more fine-grained.

3 years agomklog: fix renaming with version 0.7.0.
Martin Liska [Thu, 26 Aug 2021 08:20:20 +0000 (10:20 +0200)]
mklog: fix renaming with version 0.7.0.

contrib/ChangeLog:

* mklog.py: Use file.{source,target}_file for proper rename
handling.

3 years agoUse non-numbered clones for target_clones.
Martin Liska [Fri, 20 Aug 2021 14:35:18 +0000 (16:35 +0200)]
Use non-numbered clones for target_clones.

gcc/ChangeLog:

* cgraph.h (create_version_clone_with_body): Add new parameter.
* cgraphclones.c: Likewise.
* multiple_target.c (create_dispatcher_calls): Do not use
numbered suffixes.
(create_target_clone): Likewise here.

gcc/testsuite/ChangeLog:

* gcc.target/i386/mvc5.c: Scan assembly names.
* gcc.target/i386/mvc7.c: Likewise.
* gcc.target/i386/pr95778-1.c: Update scanned patterns.
* gcc.target/i386/pr95778-2.c: Likewise.

Co-Authored-By: Stefan Kneifel <stefan.kneifel@bluewin.ch>
3 years agoextend.texi: add note about reserved ctor/dtor priorities
Jonathan Yong [Wed, 25 Aug 2021 16:36:14 +0000 (16:36 +0000)]
extend.texi: add note about reserved ctor/dtor priorities

gcc/Changelog:

* doc/extend.texi: Add note about reserved priorities
to the constructor attribute.

Signed-off-by: Jonathan Yong <10walls@gmail.com>
3 years agocygming-crtend.c: fix build warnings
Jonathan Yong [Wed, 25 Aug 2021 16:33:36 +0000 (16:33 +0000)]
cygming-crtend.c: fix build warnings

libgcc/Changelog:

* config/i386/cygming-crtend.c: Fix register_frame_ctor
and register_frame_dtor warnings.

Signed-off-by: Jonathan Yong <10walls@gmail.com>
3 years agoDaily bump.
GCC Administrator [Thu, 26 Aug 2021 00:17:03 +0000 (00:17 +0000)]
Daily bump.

3 years agoAdd -details to dump option needed after r12-3144.
Martin Sebor [Wed, 25 Aug 2021 23:25:08 +0000 (17:25 -0600)]
Add -details to dump option needed after r12-3144.

gcc/testsuite:
* gcc.dg/tree-ssa/evrp1.c: Add -details to dump option.
* gcc.dg/tree-ssa/evrp2.c: Same.
* gcc.dg/tree-ssa/evrp3.c: Same.
* gcc.dg/tree-ssa/evrp4.c: Same.
* gcc.dg/tree-ssa/evrp6.c: Same.
* gcc.dg/tree-ssa/pr64130.c: Same.

3 years agoFix tests that require IBM 128-bit long double
Michael Meissner [Wed, 25 Aug 2021 23:25:12 +0000 (19:25 -0400)]
Fix tests that require IBM 128-bit long double

This patch adds 3 more selections to target-supports.exp to see if we can
specify to use a particular long double format (IEEE 128-bit, IBM extended
double, 64-bit), and the library support will track the changes for the long
double.  This is needed because two of the tests in the test suite use long
double, and they are actually testing IBM extended double.

This patch also forces the two tests that explicitly require long double
to use the IBM double-double encoding to explicitly run the test.  This
requires GLIBC 2.32 or greater in order to do the switch.

I have run tests on a little endian power9 system with 3 compilers.  There were
no regressions with these patches, and the two tests in the following patches
now work if the default long double is not IBM 128-bit:

 * One compiler used the default IBM 128-bit format;
 * One compiler used the IEEE 128-bit format; (and)
 * One compiler used 64-bit long doubles.

I have also tested compilers on a big endian power8 system with a compiler
defaulting to power8 code generation and another with the default cpu
set.  There were no regressions.

2021-08-25  Michael Meissner  <meissner@linux.ibm.com>

gcc/testsuite/
PR target/94630
* gcc.target/powerpc/pr70117.c: Specify that we need the long double
type to be IBM 128-bit.  Remove the code to use __ibm128.
* c-c++-common/dfp/convert-bfp-11.c: Specify that we need the long
double type to be IBM 128-bit.  Run the test at -O2 optimization.
* lib/target-supports.exp (add_options_for_long_double_ibm128): New
function.
(check_effective_target_long_double_ibm128): New function.
(add_options_for_long_double_ieee128): New function.
(check_effective_target_long_double_ieee128): New function.
(add_options_for_long_double_64bit): New function.
(check_effective_target_long_double_64bit): New function.

3 years agolibstdc++: Add another non-reserved name to tests
Jonathan Wakely [Wed, 25 Aug 2021 22:19:25 +0000 (23:19 +0100)]
libstdc++: Add another non-reserved name to tests

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

* testsuite/17_intro/names.cc: Check 'sz'.

3 years agolibstdc++: Fix names.cc test failures on Windows
Jonathan Wakely [Wed, 25 Aug 2021 21:27:22 +0000 (22:27 +0100)]
libstdc++: Fix names.cc test failures on Windows

The Windows CRT headers define structs with members called f, x, y etc
so don't check those. There are also lots of unnecessary function
parameters in mingw headers using non-reserved names, e.g.

<time.h> uses p and z as parameters of mingw_gettimeofday
<inttypes.h> uses j as a parameter of imaxabs
<pthread.h> uses l, o and func as parameter names

Those should be fixed in the headers instead.

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

* testsuite/17_intro/names.cc: Adjust for Windows.

3 years agolibstdc++: Fix non-reserved names in <valarray>
Jonathan Wakely [Wed, 25 Aug 2021 21:24:54 +0000 (22:24 +0100)]
libstdc++: Fix non-reserved names in <valarray>

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

* include/std/valarray: Uglify 'func' parameters.
* testsuite/17_intro/names.cc: Add 'func' to checks.

3 years agolibstdc++: Fix conditions for optimizing uninitialized algos [PR102064]
Jonathan Wakely [Wed, 25 Aug 2021 20:10:48 +0000 (21:10 +0100)]
libstdc++: Fix conditions for optimizing uninitialized algos [PR102064]

While laying some groundwork for constexpr std::vector, I noticed some
bugs in the std::uninitialized_xxx algorithms. The conditions being
checked for optimizing trivial cases were not quite right, as shown in
the examples in the PR.

This consolidates the checks into a single macro. The macro has
appropriate definitions for C++98 or for later standards, to avoid a #if
everywhere the checks are used. For C++11 and later the check makes a
call to a new function doing a static_assert to ensure we don't use
assignment in cases where construction would have been invalid.
Extracting that check to a separate function will be useful for
constexpr std::vector, as that can't use std::uninitialized_copy
directly because it isn't constexpr).

The consolidated checks mean that some slight variations in static
assert message are gone, as there is only one place that does the assert
now. That required adjusting some tests. As part of that the redundant
89164_c++17.cc test was merged into 89164.cc which is compiled as C++17
by default now, but can also use other -std options if the
C++17-specific error is made conditional with a target selector.

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

PR libstdc++/102064
* include/bits/stl_uninitialized.h (_GLIBCXX_USE_ASSIGN_FOR_INIT):
Define macro to check conditions for optimizing trivial cases.
(__check_constructible): New function to do static assert.
(uninitialized_copy, uninitialized_fill, uninitialized_fill_n):
Use new macro.
* testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc:
Adjust dg-error pattern.
* testsuite/23_containers/vector/cons/89164.cc: Likewise. Add
C++17-specific checks from 89164_c++17.cc.
* testsuite/23_containers/vector/cons/89164_c++17.cc: Removed.
* testsuite/20_util/specialized_algorithms/uninitialized_copy/102064.cc:
New test.
* testsuite/20_util/specialized_algorithms/uninitialized_copy_n/102064.cc:
New test.
* testsuite/20_util/specialized_algorithms/uninitialized_fill/102064.cc:
New test.
* testsuite/20_util/specialized_algorithms/uninitialized_fill_n/102064.cc:
New test.

3 years agolibstdc++: Remove __gnu_cxx::rope::erase(size_type) [PR102048]
Jonathan Wakely [Wed, 25 Aug 2021 15:42:49 +0000 (16:42 +0100)]
libstdc++: Remove __gnu_cxx::rope::erase(size_type) [PR102048]

This function claims to remove a single character at index p, but it
actually removes p+1 characters beginning at p. So r.erase(0) removes
the first character, but r.erase(1) removes the second and third, and
r.erase(2) removes the second, third and fourth. This is not a useful
API.

The overload is present in the SGI STL <stl_rope.h> header that we
imported, but it isn't documented in the API reference. The erase
overloads that are documented are:

erase(const iterator& p)
erase(const iterator& f, const iterator& l)
erase(size_type i, size_type n);

Having an erase(size_type p) overload that erases a single character (as
the comment says it does) might be useful, but would be inconsistent
with std::basic_string::erase(size_type p = 0, size_type n = npos),
which erases from p to the end of the string when called with a single
argument.

Since the function isn't part of the documented API, doesn't do what it
claims to do (or anything useful) and "fixing" it would leave it
inconsistent with basic_string, I'm just removing that overload.

libstdc++-v3/ChangeLog:

PR libstdc++/102048
* include/ext/rope (rope::erase(size_type)): Remove broken
function.

3 years agoFix PR c++/66590: incorrect warning "reaches end of non-void function" for switch
Andrew Pinski [Tue, 10 Aug 2021 01:33:17 +0000 (18:33 -0700)]
Fix PR c++/66590: incorrect warning "reaches end of non-void function" for switch

So the problem here is there is code in the C++ front-end not to add a
break statement (to the IR) if the previous block does not fall through.
The problem is the code which does the check to see if the block
may fallthrough does not check a CLEANUP_STMT; it assumes it is always
fall through.  Anyways this adds the code for the case of a CLEANUP_STMT
that is only for !CLEANUP_EH_ONLY (the try/finally case).

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

gcc/cp/ChangeLog:

PR c++/66590
* cp-objcp-common.c (cxx_block_may_fallthru): Handle
CLEANUP_STMT for the case which will be try/finally.

gcc/testsuite/ChangeLog:

PR c++/66590
* g++.dg/warn/Wreturn-5.C: New test.

3 years agoAvoid printing range table header alone.
Martin Sebor [Wed, 25 Aug 2021 20:36:13 +0000 (14:36 -0600)]
Avoid printing range table header alone.

gcc/ChangeLog:
* gimple-range-cache.cc (ssa_global_cache::dump): Avoid printing
range table header alone.
* gimple-range.cc (gimple_ranger::export_global_ranges): Same.

3 years agoc++: Fix up value initialization of structs with zero width bitfields [PR102019]
Jakub Jelinek [Wed, 25 Aug 2021 20:35:21 +0000 (22:35 +0200)]
c++: Fix up value initialization of structs with zero width bitfields [PR102019]

The removal of remove_zero_width_bit_fields, in addition to triggering
some ABI issues that need solving anyway (ABI incompatibility between
C and C++) also resulted in UB inside of gcc, we now call build_zero_init
which calls build_int_cst on an integral type with TYPE_PRECISION of 0.

Fixed by ignoring the zero width bitfields.  I understand
build_value_init_noctor wants to initialize to 0 even unnamed bitfields
(of non-zero width), at least until we have some CONSTRUCTOR flag that says
that even all the padding bits should be cleared.

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

PR c++/102019
* init.c (build_value_init_noctor): Ignore unnamed zero-width
bitfields.

3 years agoMerge load/stores in ipa-modref summaries
Jan Hubicka [Wed, 25 Aug 2021 19:43:07 +0000 (21:43 +0200)]
Merge load/stores in ipa-modref summaries

this patch adds logic needed to merge neighbouring accesses in ipa-modref
summaries.  This helps analyzing array initializers and similar code.  It is
bit of work, since it breaks the fact that modref tree makes a good lattice for
dataflow: the access ranges can be extended indefinitely.  For this reason I
added counter tracking number of adjustments and a cap to limit them during the
dataflow.

gcc/ChangeLog:

* doc/invoke.texi: Document --param modref-max-adjustments.
* ipa-modref-tree.c (test_insert_search_collapse): Update.
(test_merge): Update.
* ipa-modref-tree.h (struct modref_access_node): Add adjustments;
(modref_access_node::operator==): Fix handling of access ranges.
(modref_access_node::contains): Constify parameter; handle also
mismatched parm offsets.
(modref_access_node::update): New function.
(modref_access_node::merge): New function.
(unspecified_modref_access_node): Update constructor.
(modref_ref_node::insert_access): Add record_adjustments parameter;
handle merging.
(modref_ref_node::try_merge_with): New private function.
(modref_tree::insert): New record_adjustments parameter.
(modref_tree::merge): New record_adjustments parameter.
(modref_tree::copy_from): Update.
* ipa-modref.c (dump_access): Dump adjustments field.
(get_access): Update constructor.
(record_access): Update call of insert.
(record_access_lto): Update call of insert.
(merge_call_side_effects): Add record_adjustments parameter.
(get_access_for_fnspec): Update.
(process_fnspec): Update.
(analyze_call): Update.
(analyze_function): Update.
(read_modref_records): Update.
(ipa_merge_modref_summary_after_inlining): Update.
(propagate_unknown_call): Update.
(modref_propagate_in_scc): Update.
* params.opt (param-max-modref-adjustments=): New.

gcc/testsuite/ChangeLog:

* gcc.dg/ipa/modref-1.c: Update testcase.
* gcc.dg/tree-ssa/modref-4.c: Update testcase.
* gcc.dg/tree-ssa/modref-8.c: New test.

3 years agoMake xxsplti*, xpermx, xxeval be vecperm type.
Michael Meissner [Wed, 25 Aug 2021 19:11:47 +0000 (15:11 -0400)]
Make xxsplti*, xpermx, xxeval be vecperm type.

I noticed that the built-functions for xxspltiw, xxspltidp, xxsplti32dx,
xxpermx, and xxeval all used the 'vecsimple' type.  These instructions are
permute instructions (3 cycle latency) and should use 'vecperm' instead.

While I was at it, I changed the UNSPEC name for xxspltidp to be
UNSPEC_XXSPLTIDP instead of UNSPEC_XXSPLTID.

2021-08-25  Michael Meissner  <meissner@linux.ibm.com>

gcc/
* config/rs6000/vsx.md (UNSPEC_XXSPLTIDP): Rename from
UNSPEC_XXSPLTID.
(xxspltiw_v4si): Use vecperm type attribute.
(xxspltiw_v4si_inst): Use vecperm type attribute.
(xxspltiw_v4sf_inst): Likewise.
(xxspltidp_v2df): Use vecperm type attribute.  Use
UNSPEC_XXSPLTIDP instead of UNSPEC_XXSPLTID.
(xxspltidp_v2df_inst): Likewise.
(xxsplti32dx_v4si): Use vecperm type attribute.
(xxsplti32dx_v4si_inst): Likewise.
(xxsplti32dx_v4sf_inst): Likewise.
(xxblend_<mode>): Likewise.
(xxpermx): Likewise.
(xxpermx_inst): Likewise.
(xxeval): Likewise.