Commit Graph

183028 Commits

Author SHA1 Message Date
GCC Administrator
8502e23d1f Daily bump. 2021-01-23 00:16:32 +00:00
Jonathan Wright
16b7b8a32d aarch64: Use RTL builtins for integer mla intrinsics
Rewrite integer mla Neon intrinsics to use RTL builtins rather than
inline assembly code, allowing for better scheduling and optimization.

gcc/Changelog:

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

	* config/aarch64/aarch64-simd-builtins.def: Add mla builtin
	generator macro.
	* config/aarch64/arm_neon.h (vmla_s8): Use RTL builtin rather
	than asm.
	(vmla_s16): Likewise.
	(vmla_s32): Likewise.
	(vmla_u8): Likewise.
	(vmla_u16): Likewise.
	(vmla_u32): Likewise.
	(vmlaq_s8): Likewise.
	(vmlaq_s16): Likewise.
	(vmlaq_s32): Likewise.
	(vmlaq_u8): Likewise.
	(vmlaq_u16): Likewise.
	(vmlaq_u32): Likewise.
2021-01-22 23:18:11 +00:00
Marek Polacek
89100826ac c++: ICE with noexcept in class in member function [PR96623]
I discovered very strange code in inject_parm_decls:

   if (args && is_this_parameter (args))
     {
       gcc_checking_assert (current_class_ptr == NULL_TREE);
       current_class_ptr = NULL_TREE;

We are tripping up on the assert because when we call inject_parm_decls,
current_class_ptr is set to 'A'.  It was set by inject_this_parameter
after we've parsed the parameter-declaration-clause of the member
function foo.  It seems correct to set ccp/ccr to A::B when we're
late parsing the noexcept-specifiers of bar* functions in B, so that
this-> does the right thing.  Since inject_parm_decls doesn't expect
to see non-null ccp/ccr, reset it before calling inject_parm_decls.

gcc/cp/ChangeLog:

	PR c++/96623
	* parser.c (inject_parm_decls): Remove a redundant assignment.
	(cp_parser_class_specifier_1): Clear current_class_{ptr,ref}
	before calling inject_parm_decls.

gcc/testsuite/ChangeLog:

	PR c++/96623
	* g++.dg/cpp0x/noexcept64.C: New test.
2021-01-22 17:55:06 -05:00
David Edelsohn
ab8cde87ca testsuite: Enable spbp.C on AIX.
This testcase was disabled in the distant past when AIX did not have
support for DWARF and the testcase explicitly invokes DWARF debugging.
This patch re-enables the testcase.

gcc/testsuite/ChangeLog:

	* g++.dg/eh/spbp.C: Remove skip on AIX.
2021-01-22 17:38:50 -05:00
David Malcolm
9cead79073 doc: ensure GCC_EXTRA_DIAGNOSTIC_OUTPUT gets an HTML anchor
This is referenced by my recent release notes changes for GCC 11:
  https://gcc.gnu.org/pipermail/gcc-patches/2021-January/564164.html

gcc/ChangeLog:
	* doc/invoke.texi (GCC_EXTRA_DIAGNOSTIC_OUTPUT): Add @findex
	directive.
2021-01-22 17:07:30 -05:00
Jakub Jelinek
70ab52b8ca testsuite: Fix a typo - UINON_TYPE to UNION_TYPE - in gcc.target/powerpc
Spotted while fixing the rs6000 aliasing issue.

2021-01-22  Jakub Jelinek  <jakub@redhat.com>

	* gcc.target/powerpc/m128-check.h (CHECK_EXP, CHECK_FP_EXP): Fix a
	typo, UINON_TYPE to UNION_TYPE.
2021-01-22 22:55:44 +01:00
Jakub Jelinek
b30e19b517 testsuite: Fix a typo - UINON_TYPE to UNION_TYPE - in gcc.target/i386
Spotted while fixing the rs6000 aliasing issue.

2021-01-22  Jakub Jelinek  <jakub@redhat.com>

	* gcc.target/i386/m128-check.h (CHECK_EXP, CHECK_FP_EXP): Fix a typo,
	UINON_TYPE to UNION_TYPE.
	* gcc.target/i386/m256-check.h (CHECK_FP_EXP): Likewise.
	* gcc.target/i386/m512-check.h (CHECK_ROUGH_EXP): Likewise.
2021-01-22 22:51:03 +01:00
Jakub Jelinek
d08677c11d testsuite: Fix sse2-andnpd-1.c and sse-andnps-1.c testscases on powerpc
On Mon, Sep 21, 2020 at 10:12:20AM +0200, Richard Biener wrote:
> On Mon, 21 Sep 2020, Jan Hubicka wrote:
> > these testcases now fails because they contains an invalid type puning
> > that happens via const VALUE_TYPE *v pointer. Since the check function
> > is noinline, modref is needed to trigger the wrong code.
> > I think it is easiest to fix it by no-strict-aliasing.
> >
> > Regtested x86_64-linux, OK?
>
> OK.
>
> >     * gcc.target/i386/m128-check.h: Add no-strict aliasing to
> >     CHECK_EXP macro.
> >
> > diff --git a/gcc/testsuite/gcc.target/i386/m128-check.h b/gcc/testsuite/gcc.target/i386/m128-check.h
> > index 48b23328539..6f414b07be7 100644
> > --- a/gcc/testsuite/gcc.target/i386/m128-check.h
> > +++ b/gcc/testsuite/gcc.target/i386/m128-check.h
> > @@ -78,6 +78,7 @@ typedef union
> >
> >  #define CHECK_EXP(UINON_TYPE, VALUE_TYPE, FMT)             \
> >  static int                                         \
> > +__attribute__((optimize ("no-strict-aliasing")))   \
> >  __attribute__((noinline, unused))                  \
> >  check_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v)     \
> >  {                                                  \

On powerpc64le the tests suffer from the exact same issue.

2021-01-22  Jakub Jelinek  <jakub@redhat.com>

	* gcc.target/powerpc/m128-check.h (check_##UINON_TYPE): Add
	optimize ("no-strict-aliasing") attribute.
2021-01-22 22:38:31 +01:00
Jakub Jelinek
b485fa167e dwarf2out: Always emit required 0 entries for DWARF 5 in *.debug_line [PR98796]
When GCC is emitting .debug_line or .gnu.debuglto_.debug_line section by
itself (happens either with too old or non-GNU assembler, with
-gno-as-loc-support or with -flto) on empty translation units, it violates
the DWARF 5 requirements.
The standard says:
"The first entry is the current directory of the compilation."
and a few lines later:
"The first entry in the sequence is the primary source file whose file name
exactly matches that given in the DW_AT_name attribute in the compilation
unit debugging information entry."
GCC emits 4 zeros (directory entry format count, directories count,
filename entry format count and filename count), which would be ok if the
spec said The first entry may be rather than is.

I had a brief look at whether I could just fall through into the rest of the
function, but there are too many assumptions that there is at least one
normal file that it can't be done that way easily.

So this patch instead extends the early out code to emit the required
minimum, which is 15 bytes more than we used to emit before.

2021-01-22  Jakub Jelinek  <jakub@redhat.com>

	PR debug/98796
	* dwarf2out.c (output_file_names): For -gdwarf-5, if there are no
	filenames to emit, still emit the required 0 index directory and
	filename entries that match DW_AT_comp_dir and DW_AT_name of the
	compilation unit.
2021-01-22 22:37:36 +01:00
Jonathan Wright
32a93eac7a MAINTAINERS: Add myself for write after approval
ChangeLog:

2021-01-22  Jonathan Wright  <jonathan.wright@arm.com>

	* MAINTAINERS (Write After Approval): Add myself.
2021-01-22 19:11:21 +00:00
Jason Merrill
90cbc76900 c++: Fix base copy elision thinko [PR98744]
As Jakub points out in the PR, I was mixing up
DECL_HAS_IN_CHARGE_PARM_P (which is true for the abstract maybe-in-charge
constructor) and DECL_HAS_VTT_PARM_P (which is true for a base constructor
that needs to handle virtual bases).

gcc/cp/ChangeLog:

	PR c++/98744
	* call.c (make_base_init_ok): Use DECL_HAS_VTT_PARM_P.

gcc/testsuite/ChangeLog:

	PR c++/98744
	* g++.dg/init/elide7.C: New test.
2021-01-22 13:09:00 -05:00
Jakub Jelinek
a9ed18295b c++: Fix up ubsan false positives on references [PR95693]
Alex' 2 years old change to build_zero_init_1 to return NULL pointer with
reference type for references breaks the sanitizers, the assignment of NULL
to a reference typed member is then instrumented before it is overwritten
with a non-NULL address later on.
That change has been done to fix error recovery ICE during
process_init_constructor_record, where we:
          if (TYPE_REF_P (fldtype))
            {
              if (complain & tf_error)
                error ("member %qD is uninitialized reference", field);
              else
                return PICFLAG_ERRONEOUS;
            }
a few lines earlier, but then continue and ICE when build_zero_init returns
NULL.

The following patch reverts the build_zero_init_1 change and instead creates
the NULL with reference type constants during the error recovery.

The pr84593.C testcase Alex' change was fixing still works as before.

2021-01-22  Jakub Jelinek  <jakub@redhat.com>

	PR sanitizer/95693
	* init.c (build_zero_init_1): Revert the 2018-03-06 change to
	return build_zero_cst for reference types.
	* typeck2.c (process_init_constructor_record): Instead call
	build_zero_cst here during error recovery instead of build_zero_init.

	* g++.dg/ubsan/pr95693.C: New test.
2021-01-22 19:04:55 +01:00
Marek Polacek
25fc4d01a8 c++: ICE when mangling operator name [PR98545]
r11-6301 added some asserts in mangle.c, and now we trip over one of
them.  In particular, it's the one asserting that we didn't get
IDENTIFIER_ANY_OP_P when mangling an expression with a dependent name.

As this testcase shows, it's possible to get that, so turn the assert
into an if and write "on".  That changes the mangling in the following
way:

With this patch:

$ c++filt _ZN1i1hIJ1adS1_EEEDTcldtdefpTonclspcvT__EEEDpS2_
decltype (((*this).(operator()))((a)(), (double)(), (a)())) i::h<a, double, a>(a, double, a)

G++10:
$ c++filt _ZN1i1hIJ1adS1_EEEDTcldtdefpTclspcvT__EEEDpS2_
decltype (((*this).(operator()))((a)(), (double)(), (a)())) i::h<a, double, a>(a, double, a)

clang++/icc:
$ c++filt _ZN1i1hIJ1adS1_EEEDTclonclspcvT__EEEDpS2_
decltype ((operator())((a)(), (double)(), (a)())) i::h<a, double, a>(a, double, a)

This is now tracked in PR98756.

gcc/cp/ChangeLog:

	PR c++/98545
	* mangle.c (write_member_name): Emit abi_warn_or_compat_version_crosses
	warnings regardless of abi_version_at_least.
	(write_expression): When the expression is a dependent name
	and an operator name, write "on" before writing its name.

gcc/ChangeLog:

	PR c++/98545
	* doc/invoke.texi: Update C++ ABI Version 15 description.

gcc/testsuite/ChangeLog:

	PR c++/98545
	* g++.dg/abi/mangle76.C: New test.
2021-01-22 13:02:23 -05:00
Paul Thomas
bf8ee9e4ee Fortran: Fix for class functions as associated target [PR98565].
2021-01-22  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran
	PR fortran/98565
	* trans-intrinsic.c (gfc_conv_associated): Do not add a _data
	component for scalar class function targets. Instead, fix the
	function result and access the _data from that.

gcc/testsuite/
	PR fortran/98565
	* gfortran.dg/associated_target_7.f90 : New test.
2021-01-22 17:11:32 +00:00
Martin Jambor
d7e681fc3a Testcase for old PR 47059
I stumbled across PR 47059 from 2010 which has been addressed by
store-merging.  I am going to close it but would like to add its
testcase too.

gcc/testsuite/ChangeLog:

2021-01-08  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/47059
	* gcc.dg/tree-ssa/pr47059.c: New test.
2021-01-22 18:09:38 +01:00
Kyrylo Tkachov
9d33785f57 tree-ssa-mathopts: Use proper poly_int64 comparison with param_avoid_fma_max_bits [PR 98766]
We ICE here because we end up comparing a poly_int64 with a scalar using
<= rather than maybe_le.
This patch fixes that in the way rich suggests in the PR.

gcc/ChangeLog:

	PR tree-optimization/98766
	* tree-ssa-math-opts.c (convert_mult_to_fma): Use maybe_le when
	comparing against type size with param_avoid_fma_max_bits.

gcc/testsuite/ChangeLog:

	PR tree-optimization/98766
	* gcc.dg/pr98766.c: New test.
2021-01-22 16:40:57 +00:00
Nathan Sidwell
eee8ed2f22 testsuite: Uniquify test names [PR 98795]
Header unit names come from the path the preprocessor determines, and
thus can be absolute.  This tweaks the testsuite to elide that
absoluteness when embedded in a CMI name.  We were also not
distinguishing link and execute tests by the $std flags, so append
them when necessary.

	PR testsuite/98795
	gcc/testsuite/
	* g++.dg/modules/modules.exp (module_cmi_p): Avoid
	embedded absolute paths.
	(module_do_it): Append $std to test name.
2021-01-22 06:44:22 -08:00
Richard Biener
4be156d6be middle-end/98793 - properly handle BLKmode vectors in vector_element_bits
The previous change made AVX512 mask vectors correct but disregarded
the possibility of generic (BLKmode) boolean vectors which are exposed
by the frontends already.

2021-01-22  Richard Biener  <rguenther@suse.de>

	PR middle-end/98793
	* tree.c (vector_element_bits): Key single-bit bool vector on
	integer mode rather than not vector mode.

	* gcc.dg/pr98793.c: New testcase.
2021-01-22 15:23:54 +01:00
Xionghu Luo
e3a8ef8ef2 rs6000: Enable vec_insert for P8 with rs6000_expand_vector_set_var_p8 [PR98093]
Support P8 variable vec_insert and Update testcases' instruction count.

gcc/ChangeLog:

2021-01-22  Xionghu Luo  <luoxhu@linux.ibm.com>

	PR target/98093

	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
	Generate ARRAY_REF(VIEW_CONVERT_EXPR) for P8 and later
	platforms.
	* config/rs6000/rs6000.c (rs6000_expand_vector_set_var): Update
	to call different path for P8 and P9.
	(rs6000_expand_vector_set_var_p9): New function.
	(rs6000_expand_vector_set_var_p8): New function.

gcc/testsuite/ChangeLog:

2021-01-22  Xionghu Luo  <luoxhu@linux.ibm.com>

	* gcc.target/powerpc/pr79251.p8.c: New test.
	* gcc.target/powerpc/fold-vec-insert-char-p8.c: Adjust
	instruction counts.
	* gcc.target/powerpc/fold-vec-insert-char-p9.c: Likewise.
	* gcc.target/powerpc/fold-vec-insert-double.c: Likewise.
	* gcc.target/powerpc/fold-vec-insert-float-p8.c: Likewise.
	* gcc.target/powerpc/fold-vec-insert-float-p9.c: Likewise.
	* gcc.target/powerpc/fold-vec-insert-int-p8.c: Likewise.
	* gcc.target/powerpc/fold-vec-insert-int-p9.c: Likewise.
	* gcc.target/powerpc/fold-vec-insert-longlong.c: Likewise.
	* gcc.target/powerpc/fold-vec-insert-short-p8.c: Likewise.
	* gcc.target/powerpc/fold-vec-insert-short-p9.c: Likewise.
	* gcc.target/powerpc/vsx-builtin-7.c: Likewise.
2021-01-22 08:05:32 -06:00
Xionghu Luo
b292255975 rs6000: Support variable insert and Expand vec_insert in expander [PR79251]
vec_insert accepts 3 arguments, arg0 is input vector, arg1 is the value
to be insert, arg2 is the place to insert arg1 to arg0.  Current expander
generates stxv+stwx+lxv if arg2 is variable instead of constant, which
causes serious store hit load performance issue on Power.  This patch tries
 1) Build VIEW_CONVERT_EXPR for vec_insert (i, v, n) like v[n&3] = i to
unify the gimple code, then expander could use vec_set_optab to expand.
 2) Expand the IFN VEC_SET to fast instructions: lvsr+insert+lvsl.
In this way, "vec_insert (i, v, n)" and "v[n&3] = i" won't be expanded too
early in gimple stage if arg2 is variable, avoid generating store hit load
instructions.

For Power9 V4SI:
	addi 9,1,-16
	rldic 6,6,2,60
	stxv 34,-16(1)
	stwx 5,9,6
	lxv 34,-16(1)
=>
	rlwinm 6,6,2,28,29
	mtvsrwz 0,5
	lvsr 1,0,6
	lvsl 0,0,6
	xxperm 34,34,33
	xxinsertw 34,0,12
	xxperm 34,34,32

Though instructions increase from 5 to 7, the performance is improved
60% in typical cases.
Tested with V2DI, V2DF V4SI, V4SF, V8HI, V16QI on Power9-LE.

2021-01-22  Xionghu Luo  <luoxhu@linux.ibm.com>

gcc/ChangeLog:

	PR target/79251
	PR target/98065

	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
	Ajdust variable index vec_insert from address dereference to
	ARRAY_REF(VIEW_CONVERT_EXPR) tree expression.
	* config/rs6000/rs6000-protos.h (rs6000_expand_vector_set_var):
	New declaration.
	* config/rs6000/rs6000.c (rs6000_expand_vector_set_var): New function.

2021-01-22  Xionghu Luo  <luoxhu@linux.ibm.com>

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/pr79251.p9.c: New test.
	* gcc.target/powerpc/pr79251-run.c: New test.
	* gcc.target/powerpc/pr79251.h: New header.
2021-01-22 08:03:53 -06:00
Martin Liska
b46027c654 Drop time profile for multi-threaded training run.
gcc/ChangeLog:

	PR gcov-profile/98739
	* profile.c (compute_value_histograms): Drop time profile for
	-fprofile-reproducible=multithreaded.
2021-01-22 14:20:53 +01:00
Nathan Sidwell
4804de453e driver: do not check file existence here [PR 98452]
The driver checks whether OPT_SPECIAL_input_file options are readable.
There's no need, the compiler proper will do that anyway.

	gcc/
	* gcc.c (process_command): Don't check OPT_SPECIAL_input_file
	existence here.
2021-01-22 04:56:11 -08:00
Richard Biener
8bad25eb56 middle-end/98773 - always sign extend CHREC_RIGHT
The previous change exposed a miscompile when trying to interpret
CHREC_RIGHT correctly which in fact it already was to the extent
it is used.  The following reverts this part of the change, only
retaining the singling out of HOST_WIDE_INT_MIN.

2021-01-22  Richard Biener  <rguenther@suse.de>

	PR middle-end/98773
	* tree-data-ref.c (initalize_matrix_A): Revert previous
	change, retaining failing on HOST_WIDE_INT_MIN CHREC_RIGHT.

	* gcc.dg/torture/pr98773.c: New testcase.
2021-01-22 12:49:46 +01:00
Jakub Jelinek
36fe1cdc95 match.pd: Replace incorrect simplifications into copysign [PR90248]
In the PR Andrew said he has implemented a simplification that has been
added to LLVM, but that actually is not true, what is in there are
X * (X cmp 0.0 ? +-1.0 : -+1.0) simplifications into +-abs(X)
but what has been added into GCC are (X cmp 0.0 ? +-1.0 : -+1.0)
simplifications into copysign(1, +-X) and then
X * copysign (1, +-X) into +-abs (X).
The problem is with the (X cmp 0.0 ? +-1.0 : -+1.0) simplifications,
they don't work correctly when X is zero.
E.g.
(X > 0.0 ? 1.0 : -1.0)
is -1.0 when X is either -0.0 or 0.0, but copysign will make it return
1.0 for 0.0 and -1.0 only for -0.0.
(X >= 0.0 ? 1.0 : -1.0)
is 1.0 when X is either -0.0 or 0.0, but copysign will make it return
still 1.0 for 0.0 and -1.0 for -0.0.
The simplifications were guarded on !HONOR_SIGNED_ZEROS, but as discussed in
the PR, that option doesn't mean that -0.0 will not ever appear as operand
of some operation, it is hard to guarantee that without compiler adding
canonicalizations of -0.0 to 0.0 after most of the operations and thus
making it very slow, but that the user asserts that he doesn't care if the result
of operations will be 0.0 or -0.0.  Not to mention that some of the
transformations are incorrect even for positive 0.0.

So, instead of those simplifications this patch recognizes patterns where
those ?: expressions are multiplied by X, directly into +-abs.
That works fine even for 0.0 and -0.0 (as long as we don't care about
whether the result is exactly 0.0 or -0.0 in those cases), because
whether the result of copysign is -1.0 or 1.0 doesn't matter when it is
multiplied by 0.0 or -0.0.

As a follow-up, maybe we should add the simplification mentioned in the PR,
in particular doing copysign by hand through
VIEW_CONVERT_EXPR <int, float_X> < 0 ? -float_constant : float_constant
into copysign (float_constant, float_X).  But I think that would need to be
done in phiopt.

2021-01-22  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/90248
	* match.pd (X cmp 0.0 ? 1.0 : -1.0 -> copysign(1, +-X),
	X cmp 0.0 ? -1.0 : +1.0 -> copysign(1, -+X)): Remove
	simplifications.
	(X * (X cmp 0.0 ? 1.0 : -1.0) -> +-abs(X),
	X * (X cmp 0.0 ? -1.0 : 1.0) -> +-abs(X)): New simplifications.

	* gcc.dg/tree-ssa/copy-sign-1.c: Don't expect any copysign
	builtins.
	* gcc.dg/pr90248.c: New test.
2021-01-22 11:51:22 +01:00
Jakub Jelinek
e287a2a11d on ARRAY_REFs sign-extend offsets only from sizetype's precision [PR98255]
As discussed in the PR, the problem here is that the routines changed in
this patch sign extend the difference of index and low_bound from the
precision of the index, so e.g. when index is unsigned int and contains
value -2U, we treat it as index -2 rather than 0x00000000fffffffeU on 64-bit
arches.
On the other hand, get_inner_reference which is used during expansion, does:
            if (! integer_zerop (low_bound))
              index = fold_build2 (MINUS_EXPR, TREE_TYPE (index),
                                   index, low_bound);

            offset = size_binop (PLUS_EXPR, offset,
                                 size_binop (MULT_EXPR,
                                             fold_convert (sizetype, index),
                                             unit_size));
which effectively requires that either low_bound is constant 0 and then
index in ARRAY_REFs can be arbitrary type which is then sign or zero
extended to sizetype, or low_bound is something else and then index and
low_bound must have compatible types and it is still converted afterwards to
sizetype and from there then a few lines later:
expr.c-  if (poly_int_tree_p (offset))
expr.c-    {
expr.c:      poly_offset_int tem = wi::sext (wi::to_poly_offset (offset),
expr.c-                               TYPE_PRECISION (sizetype));
The following patch makes those routines match what get_inner_reference is
doing.

2021-01-22  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/98255
	* tree-dfa.c (get_ref_base_and_extent): For ARRAY_REFs, sign
	extend index - low_bound from sizetype's precision rather than index
	precision.
	(get_addr_base_and_unit_offset_1): Likewise.
	* tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Likewise.
	* gimple-fold.c (fold_const_aggregate_ref_1): Likewise.

	* gcc.dg/pr98255.c: New test.
2021-01-22 11:42:03 +01:00
Richard Biener
fd61ca67f9 tree-optimization/98786 - fix issue with phiopt and abnormals
This fixes factor_out_conditional_conversion to avoid creating overlapping
lifetimes for abnormals.  It also makes sure we do deal with a conditional
conversion (at least for one PHI arg def) - for the testcase that wasn't the case.

2021-01-22  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/98786
	* tree-ssa-phiopt.c (factor_out_conditional_conversion): Avoid
	adding new uses of abnormals.  Verify we deal with a conditional
	conversion.

	* gcc.dg/torture/pr98786.c: New testcase.
2021-01-22 10:37:51 +01:00
Prathamesh Kulkarni
4e3beaca15 arm: Fix ICE with incompatible values for -mfp16-format [PR98636].
gcc/
2021-01-22  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	PR target/98636
	* optc-save-gen.awk: Add arm_fp16_format to checked_options.

gcc/testsuite/
2021-01-22  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	PR target/98636
	* gcc.target/arm/pr98636.c: New test.
2021-01-22 14:14:20 +05:30
liuhongt
ee78c20e74 Lower AVX512 vector comparison to AVX version when dest is vector.
gcc/ChangeLog:

	PR target/96891
	PR target/98348
	* config/i386/sse.md (VI_128_256): New mode iterator.
	(*avx_cmp<mode>3_1, *avx_cmp<mode>3_2, *avx_cmp<mode>3_3,
	 *avx_cmp<mode>3_4, *avx2_eq<mode>3, *avx2_pcmp<mode>3_1,
	 *avx2_pcmp<mode>3_2, *avx2_gt<mode>3): New
	define_insn_and_split to lower avx512 vector comparison to avx
	version when dest is vector.
	(*<avx512>_cmp<mode>3,*<avx512>_cmp<mode>3,*<avx512>_ucmp<mode>3):
	define_insn_and_split for negating the comparison result.
	* config/i386/predicates.md (float_vector_all_ones_operand):
	New predicate.
	* config/i386/i386-expand.c (ix86_expand_sse_movcc): Use
	general NOT operator without UNSPEC_MASKOP.

gcc/testsuite/ChangeLog:

	PR target/96891
	PR target/98348
	* gcc.target/i386/avx512bw-pr96891-1.c: New test.
	* gcc.target/i386/avx512f-pr96891-1.c: New test.
	* gcc.target/i386/avx512f-pr96891-2.c: New test.
	* gcc.target/i386/avx512f-pr96891-3.c: New test.
	* g++.target/i386/avx512f-pr96891-1.C: New test.
	* gcc.target/i386/bitwise_mask_op-3.c: Adjust testcase.
2021-01-22 12:35:14 +08:00
Marek Polacek
bca467e56f c++: ICE with delayed noexcept and attribute used [PR97966]
Another ICE with delayed noexcept parsing, but a bit gnarlier.

A function definition marked with __attribute__((used)) ought to be
emitted even when it is not referenced in the TU.  For a member function
template marked with __attribute__((used)) this means that it will
be instantiated: in instantiate_class_template_1 we have

11971               /* Instantiate members marked with attribute used.  */
11972               if (r != error_mark_node && DECL_PRESERVE_P (r))
11973                 mark_used (r);

It is not so surprising that this doesn't work well with delayed
noexcept parsing: when we're processing the function template we delay
the parsing, so the member "foo" is found, but then when we're
instantiating it, "foo" hasn't yet been seen, which creates a
discrepancy and a crash ensues.  "foo" hasn't yet been seen because
instantiate_class_template_1 just loops over the class members and
instantiates right away.

To make it work, this patch uses a vector to keep track of members
marked with attribute used and uses it to instantiate such members
only after we're done with the class; in particular, after we have
called finish_member_declaration for each member.  And we ought to
be verifying that we did emit such members, so I've added a bunch
of dg-finals.

gcc/cp/ChangeLog:

	PR c++/97966
	* pt.c (instantiate_class_template_1): Instantiate members
	marked with attribute used only after we're done instantiating
	the class.

gcc/testsuite/ChangeLog:

	PR c++/97966
	* g++.dg/cpp0x/noexcept63.C: New test.
2021-01-21 19:22:01 -05:00
Maciej W. Rozycki
070a1fb5f5 MAINTAINERS: Update my e-mail address
* MAINTAINERS (Write After Approval): Update my e-mail address.
2021-01-22 00:18:14 +00:00
GCC Administrator
7559d465fd Daily bump. 2021-01-22 00:16:22 +00:00
David Edelsohn
9929d04ee2 testsuite: Adjust cpp2a/lambda-uneval regrex
Both lambda-uneval1.C and lambda-uneval5.C test that a symbol is not
declared global by looking for "globl" assembler directive.  The testcases
generate the "lglobl" directive in AIX XCOFF, which is a false positive.
This patch restricts the regex to ignore a prepended "l".  The patch
also tightens the regex to specifically look for space, tab or period
between the "globl" and the symbol.

Tested on powerpc-ibm-aix7.2.3.0 and powerpc64le-linux-gnu.

	* g++.dg/cpp2a/lambda-uneval1.C: Ignore preceding "l" and
	intervening period.
	* g++.dg/cpp2a/lambda-uneval5.C: Ignore preceding "l" and
	explicitly check for intervening space, tab or period.
2021-01-21 18:49:33 -05:00
Vladimir N. Makarov
68ba1039c7 [PR98777] LRA: Use preliminary created pseudo for in LRA elimination subpass
LRA did not extend ira_reg_equiv after generation of a pseudo in
eliminate_regs_in_insn which might results in LRA crash.  It is better not
to extend ira_reg_equiv but to use preliminary generated pseudo.  The
patch implements it.

gcc/ChangeLog:

	PR rtl-optimization/98777
	* lra-int.h (lra_pmode_pseudo): New extern.
	* lra.c (lra_pmode_pseudo): New global.
	(lra): Set it up.
	* lra-eliminations.c (eliminate_regs_in_insn): Use it.

gcc/testsuite/ChangeLog:

	PR rtl-optimization/98777
	* gcc.target/riscv/pr98777.c: New.
2021-01-21 18:06:49 -05:00
Ilya Leoshkevich
efb6bc55a9 fwprop: Allow (subreg (mem)) simplifications
Suppose we have:

    (set (reg/v:TF 63) (mem/c:TF (reg/v:DI 62)))
    (set (reg:FPRX2 66) (subreg:FPRX2 (reg/v:TF 63) 0))

It is clearly profitable to propagate the first insn into the second
one and get:

    (set (reg:FPRX2 66) (mem/c:FPRX2 (reg/v:DI 62)))

fwprop actually manages to perform this, but doesn't think the result is
worth it, which results in unnecessary store/load sequences on s390.
Improve the situation by classifying SUBREG -> MEM changes as
profitable.

gcc/ChangeLog:

2021-01-15  Ilya Leoshkevich  <iii@linux.ibm.com>

	* fwprop.c (fwprop_propagation::classify_result): Allow
	(subreg (mem)) simplifications.
2021-01-21 22:48:47 +01:00
Patrick Palka
f645da0e4a c++: Fix excessive instantiation inside decltype [PR71879]
Here after resolving the address of a template-id inside decltype, we
end up instantiating the chosen specialization (from the call to
mark_used in resolve_nondeduced_context), even though only its type is
needed.

This patch sets cp_unevaluated_operand throughout finish_decltype_type,
so that in particular it's set during the call to
resolve_nondeduced_context within.

gcc/cp/ChangeLog:

	PR c++/71879
	* semantics.c (finish_decltype_type): Set up a cp_unevaluated
	sentinel at the start of the function.  Remove a now-redundant
	manual adjustment of cp_unevaluated_operand.

gcc/testsuite/ChangeLog:

	PR c++/71879
	* g++.dg/cpp0x/decltype-71879.C: New test.
2021-01-21 14:04:55 -05:00
Nathan Sidwell
7944753fad c++: Fix null this pointer [PR 98624]
One may not use a null this pointer to invoke a static member
function.  This fixes the remaining ubsan errors found with an
ubsan bootstrap.

	PR c++/98624
	gcc/cp/
	* module.cc (depset:#️⃣:find_dependencies): Add
	module arg.
	(trees_out::core_vals): Check state before calling
	write_location.
	(sort_cluster, module_state::write): Adjust
	find_dependencies call.
2021-01-21 10:41:35 -08:00
Jakub Jelinek
0fb7aa205a c++: Fix up potential_constant_expression_1 FOR/WHILE_STMT handling [PR98672]
The following testcase is rejected even when it is valid.
The problem is that potential_constant_expression_1 doesn't have the
accurate *jump_target tracking cxx_eval_* has, and when the loop has
a condition that isn't guaranteed to be always true, the body isn't walked
at all.  That is mostly a correct conservative behavior, except that it
doesn't detect if there are any return statements in the body, which means
the loop might return instead of falling through to the next statement.
We already have code for return stmt discovery in code snippets we don't
try to evaluate for switches, so this patch reuses that for FOR_STMT
and WHILE_STMT bodies.

Note, I haven't touched FOR_EXPR, with statement expressions it could
have return stmts in it too, or it could have break or continue statements
that wouldn't bind to the current loop but to something outer.  That
case is clearly mishandled by potential_constant_expression_1 even
when the condition is missing or is always true, and it wouldn't surprise me
if cxx_eval_* didn't handle it right either, so I'm deferring that to
separate PR for later.  We'd need proper test coverage for all of that.

> Hmm, IF_STMT probably also needs to check the else clause, if the condition
> isn't a known constant.

You're right, I thought it was ok because it recurses with tf_none, but
if the then branch is potentially constant and only else returns, continues
or breaks, then as the enhanced testcase shows we were mishandling it too.

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

	PR c++/98672
	* constexpr.c (check_for_return_continue_data): Add break_stmt member.
	(check_for_return_continue): Also look for BREAK_STMT.  Handle
	SWITCH_STMT by ignoring break_stmt from its body.
	(potential_constant_expression_1) <case FOR_STMT>,
	<case WHILE_STMT>: If the condition isn't constant true, check if
	the loop body can contain a return stmt.
	<case SWITCH_STMT>: Adjust check_for_return_continue_data initializer.
	<case IF_STMT>: If recursion with tf_none is successful,
	merge *jump_target from the branches - returns with highest priority,
	breaks or continues lower.  If then branch is potentially constant and
	doesn't return, check the else branch if it could return, break or
	continue.

	* g++.dg/cpp1y/constexpr-98672.C: New test.
2021-01-21 17:22:45 +01:00
Kyrylo Tkachov
43705f3fa3 aarch64: Use canonical RTL for sqdmlal patterns
The aarch64_sqdml<SBINQOPS:as>l patterns are of the form:
  [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
        (SBINQOPS:<VWIDE>
	  (match_operand:<VWIDE> 1 "register_operand" "0")
	  (ss_ashift:<VWIDE>
	      (mult:<VWIDE>
		(sign_extend:<VWIDE>
		      (match_operand:VSD_HSI 2 "register_operand" "w"))
		(sign_extend:<VWIDE>
		      (match_operand:VSD_HSI 3 "register_operand" "w")))
	      (const_int 1))))]

where SBINQOPS is ss_plus and ss_minus. The problem is that for the
ss_plus case the RTL
is not canonical: the (match_oprand 1) should be the second arm of the
PLUS.
I've seen this manifest in combine missing some legitimate
simplifications because it generates
the canonical ss_plus form and fails to match the pattern.

This patch splits the patterns into the ss_plus and ss_minus forms with
the canonical form for each.
I've seen this improve my testcase (which I can't include as it's too
large and not easy to test reliably).

gcc/ChangeLog:

	* config/aarch64/aarch64-simd.md (aarch64_sqdml<SBINQOPS:as>l<mode>):
	Split into...
	(aarch64_sqdmlal<mode>): ... This...
	(aarch64_sqdmlsl<mode>): ... And this.
	(aarch64_sqdml<SBINQOPS:as>l_lane<mode>): Split into...
	(aarch64_sqdmlal_lane<mode>): ... This...
	(aarch64_sqdmlsl_lane<mode>): ... And this.
	(aarch64_sqdml<SBINQOPS:as>l_laneq<mode>): Split into...
	(aarch64_sqdmlsl_laneq<mode>): ... This...
	(aarch64_sqdmlal_laneq<mode>):  ... And this.
	(aarch64_sqdml<SBINQOPS:as>l_n<mode>): Split into...
	(aarch64_sqdmlsl_n<mode>): ... This...
	(aarch64_sqdmlal_n<mode>): ... And this.
	(aarch64_sqdml<SBINQOPS:as>l2<mode>_internal): Split into...
	(aarch64_sqdmlal2<mode>_internal): ... This...
	(aarch64_sqdmlsl2<mode>_internal): ... And this.
2021-01-21 14:08:29 +00:00
Iain Buclaw
279d3a89b7 d: Enable private member access for __traits
The following traits can now access non-public members:
 - hasMember
 - getMember
 - getOverloads
 - getVirtualMethods
 - getVirtualFuntions

This fixes a long-standing issue in D where the allMembers trait would
correctly return non-public members but those non-public members would
be inaccessible to other traits.

Reviewed-on: https://github.com/dlang/dmd/pull/12135

gcc/d/ChangeLog:

	* dmd/MERGE: Merge upstream dmd 3a7ebef73.
2021-01-21 14:54:48 +01:00
Christophe Lyon
e154009f35 Fix typo in arm_mve.h __arm_vcmpneq_s8 return type
Like all vcmp intrinsics, __arm_vcmpneq_s8 should return a mve_pred16_t.

2021-01-21  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	* config/arm/arm_mve.h (__arm_vcmpneq_s8): Fix return type.
2021-01-21 13:50:01 +00:00
Andrea Corallo
0568f801ef arm: [testuiste] Fix ivopts.c target test [PR96372]
gcc/
2021-01-15  Andrea Corallo  <andrea.corallo@arm.com>
	PR target/96372
	* doc/sourcebuild.texi (arm_thumb2_no_arm_v8_1_lob): Document.

gcc/testsuite/
2021-01-15  Andrea Corallo  <andrea.corallo@arm.com>
	PR target/96372
	* lib/target-supports.exp
	(check_effective_target_arm_thumb2_no_arm_v8_1_lob): Define proc.
	* gcc.target/arm/ivopts.c: Use target
	'arm_thumb2_no_arm_v8_1_lob'.
2021-01-21 14:35:19 +01:00
Jorge D'Elia
9be0a89c95 gcc/fortran/intrinsic.texi: Fix typo
gcc/fortran/ChangeLog:

	* intrinsic.texi (CO_MAX): Fix typo.
2021-01-21 14:24:27 +01:00
Nathan Sidwell
3c1cf7350b c++: Stat-hack for members [PR 98530]
This was a header file that deployed the stat-hack inside a class
(both a member-class and a [non-static data] member had the same
name).  Due to the way that's represented in name lookup we missed the
class.  Sadly just changing the representation globally has
detrimental effects elsewhere, and this is a rare case, so just
creating a new overload on the fly shouldn't be a problem.

	PR c++/98530
	gcc/cp/
	* name-lookup.c (lookup_class_binding): Rearrange a stat-hack.
	gcc/testsuite/
	* g++.dg/modules/stat-mem-1.h: New.
	* g++.dg/modules/stat-mem-1_a.H: New.
	* g++.dg/modules/stat-mem-1_b.C: New.
2021-01-21 04:54:43 -08:00
Jonathan Wakely
a1a967ce1f libstdc++: Regenerate Makefile.in
This removes a trivial whitespace difference between the currently
committed file and the one regenerated by autotools.

libstdc++-v3/ChangeLog:

	* src/c++17/Makefile.in: Regenerate.
2021-01-21 11:56:07 +00:00
Paul Thomas
eaf883710c Fortran: This patch fixes comments 23 and 24 of PR96320.
2021-01-21  Paul Thomas  <pault@gcc.gnu.org>

gcc/fortran
	PR fortran/96320
	* decl.c (gfc_match_modproc): It is not an error to find a
	module procedure declaration within a contains block.
	* expr.c (gfc_check_vardef_context): Pure procedure result is
	assignable. Change 'own_scope' accordingly.
	* resolve.c (resolve_typebound_procedure): A procedure that
	has the module procedure attribute is almost certainly a
	module procedure, whatever its interface.

gcc/testsuite/
	PR fortran/96320
	* gfortran.dg/module_procedure_5.f90 : New test.
	* gfortran.dg/module_procedure_6.f90 : New test.
2021-01-21 10:00:49 +00:00
Richard Biener
f46a40112c testsuite/97299 - more gcc.dg/vect/slp-reduc-3.c massaging
This adds more guards to the VEC_PERM_EXPR scan, namely that
we also could end up with load-lanes and of course no vectorization
at all.  Need dependent scans (scan-if-scan-X PASSed ...).

2021-01-21  Richard Biener  <rguenther@suse.de>

	PR testsuite/97299
	* gcc.dg/vect/slp-reduc-3.c: Amend target selectors.
2021-01-21 10:57:18 +01:00
Richard Biener
8afef308b4 testsuite/98241 - remove ilp32 XFAIL of gcc.dg/pr78973.c
XPASSes as reported.

2021-01-21  Richard Biener  <rguenther@suse.de>

	PR testsuite/98241
	* gcc.dg/pr78973.c: Remove ilp32 XFAIL.
2021-01-21 10:35:11 +01:00
Richard Biener
fa9d1ad2ff testsuite/98224 - un-XFAIL Walloca-2.c on ilp32
As reported this now XPASSes with ranger.

2021-01-21  Richard Biener  <rguenther@suse.de>

	* gcc.dg/Walloca-2.c: Un-XFAIL.
2021-01-21 10:30:56 +01:00
liuhongt
e711b67a90 Fix incorrect optimization by cprop_hardreg.
If SRC had been assigned a mode narrower than the copy, we can't
always link DEST into the chain even they have same
hard_regno_nregs(i.e. HImode/SImode in i386 backend).

i.e
        kmovw   %k0, %edi
        vmovd   %edi, %xmm2
	vpshuflw        $0, %xmm2, %xmm0
        kmovw   %k0, %r8d
        kmovd   %k0, %r9d
...
-	 movl %r9d, %r11d
+	 vmovd %xmm2, %r11d

gcc/ChangeLog:

	PR rtl-optimization/98694
	* regcprop.c (copy_value): If SRC had been assigned a mode
	narrower than the copy, we can't link DEST into the chain even
	they have same hard_regno_nregs(i.e. HImode/SImode in i386
	backend).

gcc/testsuite/ChangeLog:

	PR rtl-optimization/98694
	* gcc.target/i386/pr98694.c: New test.
2021-01-21 13:28:59 +08:00
GCC Administrator
b93d0e36c0 Daily bump. 2021-01-21 00:16:36 +00:00