platform/upstream/gcc.git
5 years agoAllow MODE_PARTIAL_INT modes for integer constant input operands.
Peter Bergner [Thu, 7 Nov 2019 18:48:45 +0000 (18:48 +0000)]
Allow MODE_PARTIAL_INT modes for integer constant input operands.

gcc/
PR other/92090
* config/rs6000/predicates.md (input_operand): Allow MODE_PARTIAL_INT
modes for integer constants.

gcc/testsuite/
PR other/92090
* gcc.target/powerpc/pr92090.c: New test.

From-SVN: r277928

5 years agore PR lto/92406 (ICE in ipa_call_summary at ipa-fnsummary.h:253 with lto and pgo)
Jan Hubicka [Thu, 7 Nov 2019 17:08:11 +0000 (18:08 +0100)]
re PR lto/92406 (ICE in ipa_call_summary at ipa-fnsummary.h:253 with lto and pgo)

PR ipa/92406
* ipa-fnsummary.c (analyze_function_body): Use get_create to copy
summary.

From-SVN: r277927

5 years agooptc-save-gen.awk: Generate cl_target_option_free and cl_optimization_option_free.
Jan Hubicka [Thu, 7 Nov 2019 17:06:43 +0000 (18:06 +0100)]
optc-save-gen.awk: Generate cl_target_option_free and cl_optimization_option_free.

* optc-save-gen.awk: Generate cl_target_option_free
and cl_optimization_option_free.
* opth-en.awk: Declare cl_target_option_free
and cl_optimization_option_free.
* tree.c (free_node): Use it.

From-SVN: r277926

5 years agoImplement D1959R0, remove weak_equality and strong_equality.
Jason Merrill [Thu, 7 Nov 2019 17:06:09 +0000 (12:06 -0500)]
Implement D1959R0, remove weak_equality and strong_equality.

Shortly after I finished implementing the previous semantics, the
committee decided to remove the *_equality comparison categories, because
they were largely obsoleted by the earlier change that separated operator==
from its original dependency on operator<=>.

gcc/cp/
* method.c (enum comp_cat_tag, comp_cat_info): Remove *_equality.
(genericize_spaceship, common_comparison_type): Likewise.
* typeck.c (cp_build_binary_op): Move SPACESHIP_EXPR to be with the
relational operators, exclude other types no longer supported.
libstdc++-v3/
* libsupc++/compare: Remove strong_equality and weak_equality.

From-SVN: r277925

5 years agolto-streamer-in.c: Include alloc-pool.h.
Jan Hubicka [Thu, 7 Nov 2019 17:06:04 +0000 (17:06 +0000)]
lto-streamer-in.c: Include alloc-pool.h.

* lto-streamer-in.c: Include alloc-pool.h.
(freeing_string_slot_hasher): Remove.
(string_slot_allocator): New object allocator.
(file_name_hash_table): Turn to hash_table<string_slot_hasher>.
(file_name_obstack): New obstack.
(canon_file_name): Allocate in obstack and allocator.
(lto_reader_init): Initialize obstack and allocator.
(lto_free_file_name_hash): New function.
* lto-streamer.h (lto_free_file_name_hash): New.
* lto.c (do_whole_program_analysis): Call lto_free_file_name_hash.

From-SVN: r277924

5 years agoLoop split on semi-invariant conditional statement
Feng Xue [Thu, 7 Nov 2019 15:43:01 +0000 (15:43 +0000)]
Loop split on semi-invariant conditional statement

2019-11-07  Feng Xue <fxue@os.amperecomputing.com>

        PR tree-optimization/89134
        * doc/invoke.texi (min-loop-cond-split-prob): Document new --params.
        * params.def: Add min-loop-cond-split-prob.
        * tree-ssa-loop-split.c (split_loop): Remove niter parameter, move some
        outside checks on loop into the function.
        (split_info): New class.
        (find_vdef_in_loop, get_control_equiv_head_block): New functions.
        (find_control_dep_blocks, vuse_semi_invariant_p): Likewise.
        (ssa_semi_invariant_p, loop_iter_phi_semi_invariant_p): Likewise.
        (control_dep_semi_invariant_p, stmt_semi_invariant_p_1): Likewise.
        (stmt_semi_invariant_p, branch_removable_p): Likewise.
        (get_cond_invariant_branch, compute_added_num_insns): Likewise.
        (get_cond_branch_to_split_loop, do_split_loop_on_cond): Likewise.
        (split_loop_on_cond): Likewise.
        (tree_ssa_split_loops): Add loop split on conditional statement.

2019-11-07  Feng Xue  <fxue@os.amperecomputing.com>

        PR tree-optimization/89134
        * gcc.dg/tree-ssa/loop-cond-split-1.c: New test.
        * g++.dg/tree-ssa/loop-cond-split-1.C: New test.
        * gcc.dg/torture/pr55107.c: Add -fno-split-loops.

From-SVN: r277923

5 years agoIBM Z: Add pattern for load truth value of comparison into reg
Andreas Krebbel [Thu, 7 Nov 2019 11:52:05 +0000 (11:52 +0000)]
IBM Z: Add pattern for load truth value of comparison into reg

The RTXs used to express an overflow condition check in add/sub/mul are
too complex for if conversion.  However, there is code in
noce_emit_store_flag which generates a simple CC compare as the base
for using a conditional load.  All we have to do is to provide a
pattern to store the truth value of a CC compare into a GPR.

Done with the attached patch.

2019-11-07  Andreas Krebbel  <krebbel@linux.ibm.com>

* config/s390/s390.md ("*cstorecc<mode>_z13"): New insn_and_split
pattern.

gcc/testsuite/ChangeLog:

2019-11-07  Andreas Krebbel  <krebbel@linux.ibm.com>

* gcc.target/s390/addsub-signed-overflow-1.c: Expect lochi
instructions to be used.
* gcc.target/s390/addsub-signed-overflow-2.c: Likewise.
* gcc.target/s390/mul-signed-overflow-1.c: Likewise.
* gcc.target/s390/mul-signed-overflow-2.c: Likewise.
* gcc.target/s390/vector/vec-scalar-cmp-1.c: Check for 32 and 64
bit variant of lochi.  Swap the values for the lochi's.
* gcc.target/s390/zvector/vec-cmp-1.c: Likewise.

From-SVN: r277922

5 years agore PR tree-optimization/92405 (ICE in vect_get_vec_def_for_stmt_copy, at tree-vect...
Richard Biener [Thu, 7 Nov 2019 11:49:09 +0000 (11:49 +0000)]
re PR tree-optimization/92405 (ICE in vect_get_vec_def_for_stmt_copy, at tree-vect-stmts.c:1683)

2019-11-07  Richard Biener  <rguenther@suse.de>

PR tree-optimization/92405
* tree-vect-loop.c (vectorizable_reduction): Appropriately
restrict lane-reducing ops to single stmt chains.

From-SVN: r277921

5 years agoRemove gimple_call_types_likely_match_p (PR 70929)
Martin Jambor [Thu, 7 Nov 2019 10:55:43 +0000 (11:55 +0100)]
Remove gimple_call_types_likely_match_p (PR 70929)

2019-11-07  Martin Jambor  <mjambor@suse.cz>

PR lto/70929
* cif-code.def (MISMATCHED_ARGUMENTS): Removed.
* cgraph.h (gimple_check_call_matching_types): Remove
* cgraph.c (gimple_check_call_args): Likewise.
(gimple_check_call_matching_types): Likewise.
(symbol_table::create_edge): Do not call
gimple_check_call_matching_types.
(cgraph_edge::make_direct): Likewise.
(cgraph_edge::redirect_call_stmt_to_callee): Likewise.
* value-prof.h (check_ic_target): Remove.
* value-prof.c (check_ic_target): Remove.
(gimple_ic_transform): Do nat call check_ic_target.
* auto-profile.c (function_instance::find_icall_target_map): Likewise.
(afdo_indirect_call): Likewise.
* ipa-prop.c (update_indirect_edges_after_inlining): Do not call
gimple_check_call_matching_types.
* ipa-inline.c (early_inliner): Likewise.

testsuite/
* g++.dg/lto/pr70929_[01].C: New test.
* gcc.dg/winline-10.c: Adjust for the fact that inlining happens.

From-SVN: r277920

5 years ago[arm][6/X] Add support for __[us]sat16 intrinsics
Kyrylo Tkachov [Thu, 7 Nov 2019 10:50:23 +0000 (10:50 +0000)]
[arm][6/X] Add support for __[us]sat16 intrinsics

This last patch adds the the __ssat16 and __usat16 intrinsics that perform
"clipping" to a particular bitwidth on packed SIMD values, setting the Q bit
as appropriate.

* config/arm/arm.md (arm_<simd32_op>): New define_expand.
(arm_<simd32_op><add_clobber_q_name>_insn): New define_insn.
* config/arm/arm_acle.h (__ssat16, __usat16): Define.
* config/arm/arm_acle_builtins.def: Define builtins for the above.
* config/arm/iterators.md (USSAT16): New int_iterator.
(simd32_op): Handle UNSPEC_SSAT16, UNSPEC_USAT16.
(sup): Likewise.
* config/arm/predicates.md (ssat16_imm): New predicate.
(usat16_imm): Likewise.
* config/arm/unspecs.md (UNSPEC_SSAT16, UNSPEC_USAT16): Define.

* gcc.target/arm/acle/simd32.c: Update test.

From-SVN: r277919

5 years ago[arm][5/X] Implement Q-bit-setting SIMD32 intrinsics
Kyrylo Tkachov [Thu, 7 Nov 2019 10:49:06 +0000 (10:49 +0000)]
[arm][5/X] Implement Q-bit-setting SIMD32 intrinsics

This patch implements some more Q-setting intrinsics of the
multiply-accumulate
variety, but these are in the SIMD32 family in that they treat their
operands as packed SIMD values, but that's not important at the RTL level.

* config/arm/arm.md (arm_<simd32_op><add_clobber_q_name>_insn):
New define_insns.
(arm_<simd32_op>): New define_expands.
* config/arm/arm_acle.h (__smlad, __smladx, __smlsd, __smlsdx,
__smuad, __smuadx): Define.
* config/arm/arm_acle_builtins.def: Define builtins for the above.
* config/arm/iterators.md (SIMD32_TERNOP_Q): New int_iterator.
(SIMD32_BINOP_Q): Likewise.
(simd32_op): Handle the above.
* config/arm/unspecs.md: Define unspecs for the above.

* gcc.target/arm/acle/simd32.c: Update test.

From-SVN: r277918

5 years ago[arm][4/X] Add initial support for GE-setting SIMD32 intrinsics
Kyrylo Tkachov [Thu, 7 Nov 2019 10:46:05 +0000 (10:46 +0000)]
[arm][4/X] Add initial support for GE-setting SIMD32 intrinsics

This patch adds in plumbing for the ACLE intrinsics that set the GE bits in
APSR.  These are special SIMD instructions in Armv6 that pack bytes or
halfwords into the 32-bit general-purpose registers and set the GE bits in
APSR to indicate if some of the "lanes" of the result have overflowed or
have some other instruction-specific property.
These bits can then be used by the SEL instruction (accessed through the
__sel intrinsic) to select lanes for further processing.

This situation is similar to the Q-setting intrinsics: we have to track
the GE fake register, detect when a function reads it through __sel and restrict
existing patterns that may generate GE-clobbering instruction from
straight-line C code when reading the GE bits matters.

* config/arm/aout.h (REGISTER_NAMES): Add apsrge.
* config/arm/arm.md (APSRGE_REGNUM): Define.
(arm_<simd32_op>): New define_insn.
(arm_sel): Likewise.
* config/arm/arm.h (FIXED_REGISTERS): Add entry for apsrge.
(CALL_USED_REGISTERS): Likewise.
(REG_ALLOC_ORDER): Likewise.
(FIRST_PSEUDO_REGISTER): Update value.
(ARM_GE_BITS_READ): Define.
* config/arm/arm.c (arm_conditional_register_usage): Clear
APSRGE_REGNUM from operand_reg_set.
(arm_ge_bits_access): Define.
* config/arm/arm-builtins.c (arm_check_builtin_call): Handle
ARM_BUIILTIN_sel.
* config/arm/arm-protos.h (arm_ge_bits_access): Declare prototype.
* config/arm/arm-fixed.md (add<mode>3): Convert to define_expand.
FAIL if ARM_GE_BITS_READ.
(*arm_add<mode>3): New define_insn.
(sub<mode>3): Convert to define_expand.  FAIL if ARM_GE_BITS_READ.
(*arm_sub<mode>3): New define_insn.
* config/arm/arm_acle.h (__sel, __sadd8, __ssub8, __uadd8, __usub8,
__sadd16, __sasx, __ssax, __ssub16, __uadd16, __uasx, __usax,
__usub16): Define.
* config/arm/arm_acle_builtins.def: Define builtins for the above.
* config/arm/iterators.md (SIMD32_GE): New int_iterator.
(simd32_op): Handle the above.
* config/arm/unspecs.md (UNSPEC_GE_SET): Define.
(UNSPEC_SEL, UNSPEC_SADD8, UNSPEC_SSUB8, UNSPEC_UADD8, UNSPEC_USUB8,
UNSPEC_SADD16, UNSPEC_SASX, UNSPEC_SSAX, UNSPEC_SSUB16, UNSPEC_UADD16,
UNSPEC_UASX, UNSPEC_USAX, UNSPEC_USUB16): Define.

* gcc.target/arm/acle/simd32.c: Update test.
* gcc.target/arm/acle/simd32_sel.c: New test.

From-SVN: r277917

5 years ago[arm][3/X] Implement __smla* intrinsics (Q-setting)
Kyrylo Tkachov [Thu, 7 Nov 2019 10:43:19 +0000 (10:43 +0000)]
[arm][3/X] Implement __smla* intrinsics (Q-setting)

This patch implements some more Q-setting intrinsics form the SMLA* group.
These can set the saturation bit on overflow in the accumulation step.
Like earlier, these have non-Q-setting RTL forms as well for when the
Q-bit read
is not needed.

* config/arm/arm.md (arm_smlabb_setq): New define_insn.
(arm_smlabb): New define_expand.
(*maddhisi4tb): Rename to...
(maddhisi4tb): ... This.
(*maddhisi4tt): Rename to...
(maddhisi4tt): ... This.
(arm_smlatb_setq): New define_insn.
(arm_smlatb): New define_expand.
(arm_smlatt_setq): New define_insn.
(arm_smlatt): New define_expand.
(arm_<smlaw_op><add_clobber_name>_insn): New define_insn.
(arm_<smlaw_op>): New define_expand.
* config/arm/arm_acle.h (__smlabb, __smlatb, __smlabt, __smlatt,
__smlawb, __smlawt): Define.
* config/arm_acle_builtins.def: Define builtins for the above.
* config/arm/iterators.md (SMLAWBT): New int_iterator.
(slaw_op): New int_attribute.
* config/arm/unspecs.md (UNSPEC_SMLAWB, UNSPEC_SMLAWT): Define.

* gcc.target/arm/acle/dsp_arith.c: Update test.

From-SVN: r277916

5 years ago[arm][2/X] Implement __qadd, __qsub, __qdbl intrinsics
Kyrylo Tkachov [Thu, 7 Nov 2019 10:41:21 +0000 (10:41 +0000)]
[arm][2/X] Implement __qadd, __qsub, __qdbl intrinsics

This patch implements some more Q-bit-setting intrinsics from ACLE.
With the plumbing from patch 1 in place they are a simple builtin->RTL
affair.

* config/arm/arm.md (arm_<ss_op>): New define_expand.
(arm_<ss_op><add_clobber_q_name>_insn): New define_insn.
* config/arm/arm_acle.h (__qadd, __qsub, __qdbl): Define.
* config/arm/arm_acle_builtins.def: Add builtins for qadd, qsub.
* config/arm/iterators.md (SSPLUSMINUS): New code iterator.
(ss_op): New code_attr.

* gcc.target/arm/acle/dsp_arith.c: New test.

From-SVN: r277915

5 years ago[arm][1/X] Add initial support for saturation intrinsics
Kyrylo Tkachov [Thu, 7 Nov 2019 10:39:39 +0000 (10:39 +0000)]
[arm][1/X] Add initial support for saturation intrinsics

This patch adds the plumbing for and an implementation of the saturation
intrinsics from ACLE, in particular the __ssat, __usat intrinsics.
These intrinsics set the Q sticky bit in APSR if an overflow occurred.
ACLE allows the user to read that bit (within the same function, it's not
defined across function boundaries) using the __saturation_occurred
intrinsic
and reset it using __set_saturation_occurred.
Thus, if the user cares about the Q bit they would be using a flow such as:

__set_saturation_occurred (0); // reset the Q bit
...
__ssat (...) // Do some calculations involving __ssat
...
if (__saturation_occurred ()) // if Q bit set handle overflow
   ...

For the implementation this has a few implications:
* We must track the Q-setting side-effects of these instructions to make
sure
saturation reading/writing intrinsics are ordered properly.
This is done by introducing a new "apsrq" register (and associated
APSRQ_REGNUM) in a similar way to the "fake"" cc register.

* The RTL patterns coming out of these intrinsics can have two forms:
one where they set the APSRQ_REGNUM and one where they don't.
Which one is used depends on whether the function cares about reading the Q
flag. This is detected using the TARGET_CHECK_BUILTIN_CALL hook on the
__saturation_occurred, __set_saturation_occurred occurrences.
If no Q-flag read is present in the function we'll use the simpler
non-Q-setting form to allow for more aggressive scheduling and such.
If a Q-bit read is present then the Q-setting form is emitted.
To avoid adding two patterns for each intrinsic to the MD file we make
use of define_subst to auto-generate the Q-setting forms

* Some existing patterns already produce instructions that may clobber the
Q bit, but they don't model it (as we didn't care about that bit up till
now).
Since these patterns can be generated from straight-line C code they can
affect
the Q-bit reads from intrinsics. Therefore they have to be disabled when
a Q-bit read is present.  These are mostly patterns in arm-fixed.md that are
not very common anyway, but there are also a couple of widening
multiply-accumulate patterns in arm.md that can set the Q-bit during
accumulation.

There are more Q-setting intrinsics in ACLE, but these will be
implemented in
a more mechanical fashion once the infrastructure in this patch goes in.

* config/arm/aout.h (REGISTER_NAMES): Add apsrq.
* config/arm/arm.md (APSRQ_REGNUM): Define.
(add_setq): New define_subst.
(add_clobber_q_name): New define_subst_attr.
(add_clobber_q_pred): Likewise.
(maddhisi4): Change to define_expand.  Split into mult and add if
ARM_Q_BIT_READ.
(arm_maddhisi4): New define_insn.
(*maddhisi4tb): Disable for ARM_Q_BIT_READ.
(*maddhisi4tt): Likewise.
(arm_ssat): New define_expand.
(arm_usat): Likewise.
(arm_get_apsr): New define_insn.
(arm_set_apsr): Likewise.
(arm_saturation_occurred): New define_expand.
(arm_set_saturation): Likewise.
(*satsi_<SAT:code>): Rename to...
(satsi_<SAT:code><add_clobber_q_name>): ... This.
(*satsi_<SAT:code>_shift): Disable for ARM_Q_BIT_READ.
* config/arm/arm.h (FIXED_REGISTERS): Mark apsrq as fixed.
(CALL_USED_REGISTERS): Mark apsrq.
(FIRST_PSEUDO_REGISTER): Update value.
(REG_ALLOC_ORDER): Add APSRQ_REGNUM.
(machine_function): Add q_bit_access.
(ARM_Q_BIT_READ): Define.
* config/arm/arm.c (TARGET_CHECK_BUILTIN_CALL): Define.
(arm_conditional_register_usage): Clear APSRQ_REGNUM from
operand_reg_set.
(arm_q_bit_access): Define.
* config/arm/arm-builtins.c: Include stringpool.h.
(arm_sat_binop_imm_qualifiers,
arm_unsigned_sat_binop_unsigned_imm_qualifiers,
arm_sat_occurred_qualifiers, arm_set_sat_qualifiers): Define.
(SAT_BINOP_UNSIGNED_IMM_QUALIFIERS,
UNSIGNED_SAT_BINOP_UNSIGNED_IMM_QUALIFIERS, SAT_OCCURRED_QUALIFIERS,
SET_SAT_QUALIFIERS): Likewise.
(arm_builtins): Define ARM_BUILTIN_SAT_IMM_CHECK.
(arm_init_acle_builtins): Initialize __builtin_sat_imm_check.
Handle 0 argument expander.
(arm_expand_acle_builtin): Handle ARM_BUILTIN_SAT_IMM_CHECK.
(arm_check_builtin_call): Define.
* config/arm/arm.md (ssmulsa3, usmulusa3, usmuluha3,
arm_ssatsihi_shift, arm_usatsihi): Disable when ARM_Q_BIT_READ.
* config/arm/arm-protos.h (arm_check_builtin_call): Declare prototype.
(arm_q_bit_access): Likewise.
* config/arm/arm_acle.h (__ssat, __usat, __ignore_saturation,
__saturation_occurred, __set_saturation_occurred): Define.
* config/arm/arm_acle_builtins.def: Define builtins for ssat, usat,
saturation_occurred, set_saturation_occurred.
* config/arm/unspecs.md (UNSPEC_Q_SET): Define.
(UNSPEC_APSR_READ): Likewise.
(VUNSPEC_APSR_WRITE): Likewise.
* config/arm/arm-fixed.md (ssadd<mode>3): Convert to define_expand.
(*arm_ssadd<mode>3): New define_insn.
(sssub<mode>3): Convert to define_expand.
(*arm_sssub<mode>3): New define_insn.
(ssmulsa3): Convert to define_expand.
(*arm_ssmulsa3): New define_insn.
(usmulusa3): Convert to define_expand.
(*arm_usmulusa3): New define_insn.
(ssmulha3): FAIL if ARM_Q_BIT_READ.
(arm_ssatsihi_shift, arm_usatsihi): Disable for ARM_Q_BIT_READ.
* config/arm/iterators.md (qaddsub_clob_q): New mode attribute.

* gcc.target/arm/acle/saturation.c: New test.
* gcc.target/arm/acle/sat_no_smlatb.c: Likewise.
* lib/target-supports.exp (check_effective_target_arm_qbit_ok_nocache):
Define..
(check_effective_target_arm_qbit_ok): Likewise.
(add_options_for_arm_qbit): Likewise.

From-SVN: r277914

5 years agoClear version_info_node in delete_function_version.
Martin Liska [Thu, 7 Nov 2019 09:44:21 +0000 (10:44 +0100)]
Clear version_info_node in delete_function_version.

2019-11-07  Martin Liska  <mliska@suse.cz>

PR c++/92354
* cgraph.c (delete_function_version): Clear global
variable version_info_node if equal to deleted
function.
2019-11-07  Martin Liska  <mliska@suse.cz>

PR c++/92354
* g++.target/i386/pr92354.C: New test.

From-SVN: r277913

5 years agoAdd CONSTRUCTOR_NO_CLEARING to operand_equal_p.
Martin Liska [Thu, 7 Nov 2019 09:44:02 +0000 (10:44 +0100)]
Add CONSTRUCTOR_NO_CLEARING to operand_equal_p.

2019-11-07  Martin Liska  <mliska@suse.cz>

* fold-const.c (operand_compare::operand_equal_p): Add comparison
of CONSTRUCTOR_NO_CLEARING.
(operand_compare::hash_operand): Likewise.

From-SVN: r277912

5 years agoUpdate LOCAL_PATCHES.
Martin Liska [Thu, 7 Nov 2019 09:34:42 +0000 (09:34 +0000)]
Update LOCAL_PATCHES.

From-SVN: r277911

5 years agoReapply all revisions mentioned in LOCAL_PATCHES.
Martin Liska [Thu, 7 Nov 2019 09:34:14 +0000 (10:34 +0100)]
Reapply all revisions mentioned in LOCAL_PATCHES.

2019-11-07  Martin Liska  <mliska@suse.cz>

* all source files: Reapply all revisions mentioned in LOCAL_PATCHES.

From-SVN: r277910

5 years agoLibsanitizer: merge from trunk
Martin Liska [Thu, 7 Nov 2019 09:33:54 +0000 (10:33 +0100)]
Libsanitizer: merge from trunk

2019-11-07  Martin Liska  <mliska@suse.cz>

* merge.sh: Update to use llvm-project git repository.
* all source files: Merge from upstream
82588e05cc32bb30807e480abd4e689b0dee132a.

From-SVN: r277909

5 years agoSupport 64-bit double and 64-bit long double configurations.
Georg-Johann Lay [Thu, 7 Nov 2019 09:19:31 +0000 (09:19 +0000)]
Support 64-bit double and 64-bit long double configurations.

gcc/
Support 64-bit double and 64-bit long double configurations.

PR target/92055
* config.gcc (tm_defines) [avr]: Set from --with-double=,
--with-long-double=.
* config/avr/t-multilib: Remove.
* config/avr/t-avr: Output of genmultilib.awk is now fully
dynamically generated and no more part of the repo.
(HAVE_DOUBLE_MULTILIB, HAVE_LONG_DOUBLE_MULTILIB): New variables.
Pass them down to...
* config/avr/genmultilib.awk: ...here and handle them.
* gcc/config/avr/avr.opt (-mdouble=, avr_double). New option and var.
(-mlong-double=, avr_long_double). New option and var.
* common/config/avr/avr-common.c (opts.h, diagnostic.h): Include.
(TARGET_OPTION_OPTIMIZATION_TABLE) <-mdouble=, -mlong-double=>:
Set default as requested by --with-double=
(TARGET_HANDLE_OPTION): Define to this...
(avr_handle_option): ...new hook worker.
* config/avr/avr.h (DOUBLE_TYPE_SIZE): Define to avr_double.
(LONG_DOUBLE_TYPE_SIZE): Define to avr_long_double.
(avr_double_lib): New proto for spec function.
(EXTRA_SPEC_FUNCTIONS) <double-lib>: Add.
(DRIVER_SELF_SPECS): Call %:double-lib.
* config/avr/avr.c (avr_option_override): Assert
sizeof(long double) >= sizeof(double) for the target.
* config/avr/avr-c.c (avr_cpu_cpp_builtins)
[__HAVE_DOUBLE_MULTILIB__, __HAVE_LONG_DOUBLE_MULTILIB__]
[__HAVE_DOUBLE64__, __HAVE_DOUBLE32__, __DEFAULT_DOUBLE__=]
[__HAVE_LONG_DOUBLE64__, __HAVE_LONG_DOUBLE32__]
[__HAVE_LONG_DOUBLE_IS_DOUBLE__, __DEFAULT_LONG_DOUBLE__=]:
New built-in define depending on --with-double=, --with-long-double=.
* config/avr/driver-avr.c (avr_double_lib): New spec function.
* doc/invoke.tex (AVR Options) <-mdouble=,-mlong-double=>: Doc.
* doc/install.texi (Cross-Compiler-Specific Options)
<--with-double=, --with-long-double=>: Doc.

libgcc/
Support 64-bit double and 64-bit long double configurations.

PR target/92055
* config/avr/t-avr (HOST_LIBGCC2_CFLAGS): Only add -DF=SF if
long double is a 32-bit type.
* config/avr/t-avrlibc: Copy double64 and long-double64
multilib(s) from the vanilla one.
* config/avr/t-copy-libgcc: New Makefile snip.

From-SVN: r277908

5 years agodbgcnt.def (gimple_unroll): New.
Richard Biener [Thu, 7 Nov 2019 07:36:39 +0000 (07:36 +0000)]
dbgcnt.def (gimple_unroll): New.

2019-11-07  Richard Biener  <rguenther@suse.de>

* dbgcnt.def (gimple_unroll): New.
* tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): Check
gimple_unroll debug counter before applying transform.
(try_peel_loop): Likewise.

From-SVN: r277907

5 years agoAdjust pr92163.c test to require effective target fopenacc.
Prathamesh Kulkarni [Thu, 7 Nov 2019 06:27:39 +0000 (06:27 +0000)]
Adjust pr92163.c test to require effective target fopenacc.

2019-11-07  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

testsuite/
* gcc.dg/tree-ssa/pr92163.c: Add dg-require-effective-target fopenacc.

From-SVN: r277906

5 years agore PR libfortran/90374 (Fortran 2018: Support d0.d, e0.d, es0.d, en0.d, g0.d and...
Jerry DeLisle [Thu, 7 Nov 2019 03:06:20 +0000 (03:06 +0000)]
re PR libfortran/90374 (Fortran 2018: Support d0.d, e0.d, es0.d, en0.d, g0.d and ew.d e0 edit descriptors for output)

2019-11-06  Jerry DeLisle  <jvdelisle@gcc.ngu.org>

PR fortran/90374
* io.c (check_format): Allow zero width for D, E, EN, and ES
specifiers as default and when -std=F2018 is given. Retain
existing errors when using the -fdec family of flags.

* libgfortran/io/format.c (parse_format_list): Relax format checking for
zero width as default and when -std=f2018.
io/format.h (format_token): Move definition to io.h.
io/io.h (format_token): Add definition here to allow access to
this definition at higher levels. Rename the declaration of
write_real_g0 to write_real_w0 and add a new format_token
argument, allowing higher level functions to pass in the
token for handling of g0 vs the other zero width specifiers.
io/transfer.c (formatted_transfer_scalar_write): Add checks for
zero width and call write_real_w0 to handle it.
io/write.c (write_real_g0): Remove.
(write_real_w0): Add new, same as previous write_real_g0 except
check format token to handle the g0 case.

* gfortran.dg/fmt_error_10.f: Modify for new constraints.
* gfortran.dg/fmt_error_7.f: Add dg-options "-std=f95".
* gfortran.dg/fmt_error_9.f: Modify for new constraints.
* gfortran.dg/fmt_zero_width.f90: New test.

From-SVN: r277905

5 years agoFix copy-paste typo syntax error by r277872
Xiong Hu Luo [Thu, 7 Nov 2019 01:24:03 +0000 (01:24 +0000)]
Fix copy-paste typo syntax error by r277872

gcc/testsuite/ChangeLog:

2019-11-07  Xiong Hu Luo  <luoxhu@linux.ibm.com>

* gcc.target/powerpc/pr72804.c: Move inline options from
dg-require-effective-target to dg-options.

From-SVN: r277904

5 years agoMove string concatenation for C into the parser.
Joseph Myers [Thu, 7 Nov 2019 01:01:07 +0000 (01:01 +0000)]
Move string concatenation for C into the parser.

This patch is another piece of preparation for C2x attributes support.

C2x attributes require unbounded lookahead in the parser, because the
token sequence '[[' that starts a C2x attribute is also valid in
Objective-C in some of the same contexts, so it is necessary to see
whether the matching ']]' are consecutive tokens or not to determine
whether those tokens start an attribute.

Unbounded lookahead means lexing an unbounded number of tokens before
they are parsed.  c_lex_one_token does various context-sensitive
processing of tokens that cannot be done at that lookahead time,
because it depends on information (such as whether particular
identifiers are typedefs) that may be different at the time it is
relevant than at the time the lookahead is needed (recall that more or
less arbitrary C code, including declarations and statements, can
appear inside expressions in GNU C).

Most of that context-sensitive processing is not a problem, simply
because it is not needed for lookahead purposes so can be deferred
until the tokens lexed during lookahead are parsed.  However, the
earliest piece of context-sensitive processing is the handling of
string literals based on flags passed to c_lex_with_flags, which
determine whether adjacent literals are concatenated and whether
translation to the execution character set occurs.

Because the choice of whether to translate to the execution character
set is context-sensitive, this means that unbounded lookahead requires
the C parser to move to the approach used by the C++ parser, where
string literals are generally not translated or concatenated from
within c_lex_with_flags, but only later in the parser once it knows
whether translation is needed.  (Translation requires the tokens in
their form before concatenation.)

Thus, this patch makes that change to the C parser.  Flags in the
parser are still used for two special cases similar to C++: the
handling of an initial #pragma pch_preprocess, and arranging for
strings inside attributes not to be translated (the latter is made
more logically correct by saving and restoring the flags, as in the
C++ parser, rather than assuming that the state outside the attribute
was always to translate string literals, which might not be the case
in corner cases involving declarations and attributes inside
attributes).

The consequent change to pragma_lex to use c_parser_string_literal
makes it disallow wide strings and disable translation in that
context, which also follows C++ and is more logically correct than the
previous state without special handling in that regard.  Translation
to the execution character set is always disabled when string
constants are handled in the GIMPLE parser.

Although the handling of strings is now a lot closer to that in C++,
there are still some differences, in particular regarding the handling
of locations.  See c-c++-common/Wformat-pr88257.c, which has different
expected multiline diagnostic output for C and C++, for example; I'm
not sure whether the C or C++ output is better there (C++ has a more
complete range than C, C mentions a macro definition location that C++
doesn't), but I tried to keep the locations the same as those
previously used by the C front end, as far as possible, to minimize
the testsuite changes needed, rather than possibly making them closer
to those used with C++.

The only changes needed for tests of user-visible diagnostics were for
the wording of one diagnostic changing to match C++ (as a consequence
of having a check for wide strings based on a flag in a general
string-handling function rather than in a function specific to asm).
However, although locations are extremely similar to what they were
before, I couldn't make them completely identical in all cases.  (My
understanding of the implementation reason for the differences is as
follows: lex_string uses src_loc from each cpp_token; the C parser is
using the virtual location from cpp_get_token_with_location as called
by c_lex_with_flags, and while passing that through
linemap_resolve_location with LRK_MACRO_DEFINITION_LOCATION, as this
patch does, produces something very close to what lex_string uses,
it's not completely identical in some cases.)

This results in changes being needed to two of the gcc.dg/plugin tests
that use a plugin to test details of how string locations are handled.
Because the tests being changed are for ICEs and the only change is to
the details of the particular non-user-visible error that code gives
in cases it can't handle (one involving __FILE__, one involving a
string literal from stringizing), I think it's OK to change that
non-user-visible error and that the new errors are no worse than the
old ones.  So these particular errors are now different for C and C++
(some other messages in those tests already had differences between C
and C++).

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

gcc/c:
* c-parser.c (c_parser): Remove lex_untranslated_string.  Add
lex_joined_string and translate_strings_p.
(c_lex_one_token): Pass 0 or C_LEX_STRING_NO_JOIN to
c_lex_with_flags.
(c_parser_string_literal): New function.
(c_parser_static_assert_declaration_no_semi): Use
c_parser_string_literal.  Do not set lex_untranslated_string.
(c_parser_asm_string_literal): Use c_parser_string_literal.
(c_parser_simple_asm_expr): Do not set lex_untranslated_string.
(c_parser_gnu_attributes): Set and restore translate_strings_p
instead of lex_untranslated_string.
(c_parser_asm_statement): Do not set lex_untranslated_string.
(c_parser_asm_operands): Likewise.
(c_parser_has_attribute_expression): Set and restore
translate_strings_p instead of lex_untranslated_string.
(c_parser_postfix_expression): Use c_parser_string_literal.
(pragma_lex): Likewise.
(c_parser_pragma_pch_preprocess): Set lex_joined_string.
(c_parse_file): Set translate_strings_p.
* gimple-parser.c (c_parser_gimple_postfix_expression)
(c_parser_gimple_or_rtl_pass_list): Use c_parser_string_literal.
* c-parser.c (c_parser_string_literal): Declare function.

gcc/testsuite:
* gcc.dg/asm-wide-1.c, gcc.dg/diagnostic-token-ranges.c,
gcc.dg/plugin/diagnostic-test-string-literals-1.c,
gcc.dg/plugin/diagnostic-test-string-literals-2.c: Update expected
diagnostics.

From-SVN: r277903

5 years agoImplement D1907R1 "structural type".
Jason Merrill [Thu, 7 Nov 2019 00:50:19 +0000 (19:50 -0500)]
Implement D1907R1 "structural type".

ISO C++ paper D1907R1 proposes "structural type" as an alternative to the
current notion of "strong structural equality", which has various problems.
I'm implementing it to give people a chance to try it.

The build_base_field changes are to make it easier for structural_type_p to
see whether a base is private or protected.

* tree.c (structural_type_p): New.
* pt.c (invalid_nontype_parm_type_p): Use it.
* class.c (build_base_field_1): Take binfo.  Copy TREE_PRIVATE.
(build_base_field): Pass binfo.

From-SVN: r277902

5 years agoPR c++/92150 - partial specialization with class NTTP.
Jason Merrill [Thu, 7 Nov 2019 00:31:52 +0000 (19:31 -0500)]
PR c++/92150 - partial specialization with class NTTP.

Here unify was getting confused by the VIEW_CONVERT_EXPR we add in
finish_id_expression_1 to make class NTTP const when they're used in an
expression.

Tested x86_64-pc-linux-gnu, applying to trunk.

* pt.c (unify): Handle VIEW_CONVERT_EXPR.

From-SVN: r277901

5 years agoUse satisfaction with nested requirements.
Jason Merrill [Thu, 7 Nov 2019 00:21:44 +0000 (19:21 -0500)]
Use satisfaction with nested requirements.

gcc/cp/

2019-11-06  Andrew Sutton  <asutton@lock3software.com>

* constraint.cc (build_parameter_mapping): Use
current_template_parms when the declaration is not available.
(norm_info::norm_info) Make explicit.
(normalize_constraint_expression): Factor into a separate overload
that takes arguments, and use that in the original function.
(tsubst_nested_requirement): Use satisfy_constraint instead of
trying to evaluate this as a constant expression.
(finish_nested_requirement): Keep the normalized constraint and the
original normalization arguments with the requirement.
(diagnose_nested_requirement): Use satisfy_constraint. Tentatively
implement more comprehensive diagnostics, but do not enable.
* parser.c (cp_parser_requires_expression): Relax requirement that
requires-expressions can live only inside templates.
* pt.c (any_template_parm_r): Look into type of PARM_DECL.

2019-11-06  Jason Merrill  <jason@redhat.com>

* pt.c (use_pack_expansion_extra_args_p): Still do substitution if
all packs are simple pack expansions.
(add_extra_args): Check that the extra args aren't dependent.

gcc/testsuite/
* lib/prune.exp: Ignore "in requirements" in diagnostics.
* g++.dg/cpp2a/requires-18.C: New test.
* g++.dg/cpp2a/requires-19.C: New test.

From-SVN: r277900

5 years agoDaily bump.
GCC Administrator [Thu, 7 Nov 2019 00:16:37 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r277899

5 years agoSupport using multiple registers to hold the frame pointer
Kwok Cheung Yeung [Thu, 7 Nov 2019 00:07:04 +0000 (00:07 +0000)]
Support using multiple registers to hold the frame pointer

When multiple hard registers are required to hold the frame pointer,
ensure that the registers after the first are marked as non-allocatable,
live and eliminable as well.

2019-11-07  Kwok Cheung Yeung  <kcy@codesourcery.com>

gcc/
* ira.c (setup_alloc_regs): Setup no_unit_alloc_regs for
frame pointer in multiple registers.
(ira_setup_eliminable_regset): Setup eliminable_regset,
ira_no_alloc_regs and regs_ever_live for frame pointer in
multiple registers.

From-SVN: r277895

5 years agovsx.md (xxswapd_<mode>): Add support for V2DF and V2DI modes.
Kelvin Nilsen [Wed, 6 Nov 2019 23:10:51 +0000 (23:10 +0000)]
vsx.md (xxswapd_<mode>): Add support for V2DF and V2DI modes.

gcc/ChangeLog:

2019-11-06  Kelvin Nilsen  <kelvin@gcc.gnu.org>

* config/rs6000/vsx.md (xxswapd_<mode>): Add support for V2DF and
V2DI modes.

From-SVN: r277893

5 years ago[Darwin, testsuite] Fix framework-1.c on later Darwin.
Iain Sandoe [Wed, 6 Nov 2019 21:46:00 +0000 (21:46 +0000)]
[Darwin, testsuite] Fix framework-1.c on later Darwin.

The test works by checking that a known framework path is accessible
when the '-F' option is given.  We need to find a framework path that
exists across a range of Darwin versions, and parseable by GCC.  This
adjusts the test to use a header path that exists and is parsable from
Darwin9 through Darwin19.

gcc/testsuite/ChangeLog:

2019-11-06  Iain Sandoe  <iain@sandoe.co.uk>

* gcc.dg/framework-1.c: Adjust test header path.

From-SVN: r277892

5 years agoC++20 NB CA378 - Remove constrained non-template functions.
Jason Merrill [Wed, 6 Nov 2019 20:20:00 +0000 (15:20 -0500)]
C++20 NB CA378 - Remove constrained non-template functions.

No real use cases have ever arisen for constraints on non-templated
functions, and handling of them has never been entirely clear, so the
committee agreed to accept this national body comment proposing that we
remove them.

* decl.c (grokfndecl): Reject constraints on non-templated function.

From-SVN: r277891

5 years agoggc-common.c (ggc_prune_overhead_list): Do not delete surviving allocations.
Jan Hubicka [Wed, 6 Nov 2019 19:36:22 +0000 (20:36 +0100)]
ggc-common.c (ggc_prune_overhead_list): Do not delete surviving allocations.

* ggc-common.c (ggc_prune_overhead_list): Do not delete surviving
allocations.
* mem-stats.h (mem_alloc_description<T>::release_object_overhead):
Do not silently ignore summary corruptions.

From-SVN: r277890

5 years agolibstdc++: Add compare_three_way and install <compare> header
Jonathan Wakely [Wed, 6 Nov 2019 17:53:38 +0000 (17:53 +0000)]
libstdc++: Add compare_three_way and install <compare> header

* include/Makefile.in: Regenerate.
* libsupc++/Makefile.in: Regenerate.
* libsupc++/compare (__3way_builtin_ptr_cmp): Define helper.
(compare_three_way): Add missing implementation.

From-SVN: r277889

5 years agolibstdc++: remove redundant equality operators
Jonathan Wakely [Wed, 6 Nov 2019 17:53:12 +0000 (17:53 +0000)]
libstdc++: remove redundant equality operators

Now that operator<=> is supported, these operators can be generated by
the compiler.

* include/bits/iterator_concepts.h (unreachable_sentinel_t): Remove
redundant equality operators.
* testsuite/util/testsuite_iterators.h (test_range::sentinel):
Likewise.

From-SVN: r277888

5 years agoFix parser to recognize operator?:
Matthias Kretz [Wed, 6 Nov 2019 16:06:08 +0000 (16:06 +0000)]
Fix parser to recognize operator?:

This change lets grok_op_properties print its useful "ISO C++ prohibits
overloading operator ?:" message instead of the cryptic error message about
a missing type-specifier before '?' token.

2019-11-06  Matthias Kretz  <m.kretz@gsi.de>

* parser.c (cp_parser_operator): Parse operator?: as an
attempt to overload the conditional operator.

From-SVN: r277887

5 years agoDon't vectorise single-iteration epilogues
Richard Sandiford [Wed, 6 Nov 2019 14:03:08 +0000 (14:03 +0000)]
Don't vectorise single-iteration epilogues

With a later patch I saw a case in which we peeled a single iteration
for gaps but didn't need to peel further iterations to make up a full
vector.  We then tried to vectorise the single-iteration epilogue.

2019-11-06  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-loop.c (vect_analyze_loop): Only try to vectorize
the epilogue if there are peeled iterations for it to handle.

From-SVN: r277886

5 years ago[ARC] Don't split ior/mov predicated insns.
Claudiu Zissulescu [Wed, 6 Nov 2019 13:31:43 +0000 (14:31 +0100)]
[ARC] Don't split ior/mov predicated insns.

Do not split long immediate constants for predicated instructions.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (arc_split_ior): Add asserts.
(arc_split_mov_const): Likewise.
(arc_check_ior_const): Do not match known short immediate values.
* config/arc/arc.md (movsi): Don't split predicated instructions.
(iorsi): Likewise.

testsuite/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
Sahahb Vahedi  <shahab@synopsys.com>
Cupertino Miranda  <cmiranda@synopsys.com>

* gcc.target/arc/or-cnst-size2.c: New test.

Co-Authored-By: Sahahb Vahedi <shahab@synopsys.com>
From-SVN: r277885

5 years ago[ARC] Update mea option documentation
Claudiu Zissulescu [Wed, 6 Nov 2019 13:31:32 +0000 (14:31 +0100)]
[ARC] Update mea option documentation

Update -mea option documentation.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.opt (mea): Update help string.
* doc/invoke.texi(ARC): Update mea option info.

From-SVN: r277884

5 years ago[ARC] Cleanup sign/zero extend patterns
Claudiu Zissulescu [Wed, 6 Nov 2019 13:31:07 +0000 (14:31 +0100)]
[ARC] Cleanup sign/zero extend patterns

Clean up sign/zero extend patterns.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.md (zero_extendqihi2_i): Cleanup pattern.
(zero_extendqisi2_ac): Likewise.
(zero_extendhisi2_i): Likewise.
(extendqihi2_i): Likewise.
(extendqisi2_ac): Likewise.
(extendhisi2_i): Likewise.

From-SVN: r277883

5 years agotree-vect-loop.c (vectorizable_reduction): Remember reduction PHI.
Richard Biener [Wed, 6 Nov 2019 12:56:42 +0000 (12:56 +0000)]
tree-vect-loop.c (vectorizable_reduction): Remember reduction PHI.

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

* tree-vect-loop.c (vectorizable_reduction): Remember reduction
PHI.  Use STMT_VINFO_REDUC_IDX to skip the reduction operand.
Simplify single_defuse_cycle condition.

From-SVN: r277882

5 years agoUse scan-tree-dump instead of scan-tree-dump-times for some vect tests
Richard Sandiford [Wed, 6 Nov 2019 12:31:19 +0000 (12:31 +0000)]
Use scan-tree-dump instead of scan-tree-dump-times for some vect tests

With later patches, we're able to vectorise the epilogues of these tests
on AArch64 and so get two instances of "vectorizing stmts using SLP".
Although it would be possible with a bit of effort to predict when
this happens, it doesn't seem important whether we get 1 vs. 2
occurrences.  All that matters is zero vs. nonzero.

2019-11-06  Richard Sandiford  <richard.sandiford@arm.com>

gcc/testsuite/
* gcc.dg/vect/slp-9.c: Use scan-tree-dump rather than
scan-tree-dump-times.
* gcc.dg/vect/slp-widen-mult-s16.c: Likewise.
* gcc.dg/vect/slp-widen-mult-u8.c: Likewise.

From-SVN: r277881

5 years agoCheck the VF is small enough for an epilogue loop
Richard Sandiford [Wed, 6 Nov 2019 12:29:47 +0000 (12:29 +0000)]
Check the VF is small enough for an epilogue loop

The number of iterations of an epilogue loop is always smaller than the
VF of the main loop.  vect_analyze_loop_costing was taking this into
account when deciding whether the loop is cheap enough to vectorise,
but that has no effect with the unlimited cost model.  We need to use
a separate check for correctness as well.

This can happen if the sizes returned by autovectorize_vector_sizes
happen to be out of order, e.g. because the target prefers smaller
vectors.  It can also happen with later patches if two vectorisation
attempts happen to end up with the same VF.

2019-11-06  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-loop.c (vect_analyze_loop_2): When vectorizing an
epilogue loop, make sure that the VF is small enough or that
the epilogue loop can be fully-masked.

From-SVN: r277880

5 years agoRestructure vect_analyze_loop
Richard Sandiford [Wed, 6 Nov 2019 12:29:27 +0000 (12:29 +0000)]
Restructure vect_analyze_loop

Once vect_analyze_loop has found a valid loop_vec_info X, we carry
on searching for alternatives if (1) X doesn't satisfy simdlen or
(2) we want to vectorize the epilogue of X.  I have a patch that
optionally adds a third reason: we want to see if there are cheaper
alternatives to X.

This patch restructures vect_analyze_loop so that it's easier
to add more reasons for continuing.  There's supposed to be no
behavioural change.

If we wanted to, we could allow vectorisation of epilogues once
loop->simdlen has been reached by changing "loop->simdlen" to
"simdlen" in the new vect_epilogues condition.  That should be
a separate change though.

2019-11-06  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-loop.c (vect_analyze_loop): Break out of the main
loop when we've finished, rather than returning directly from
the loop.  Use a local variable to track whether we're still
searching for the preferred simdlen.  Make vect_epilogues
record whether the next iteration should try to treat the
loop as an epilogue.

From-SVN: r277879

5 years ago[PATCH] [ARC] Add builtins for identifying floating point support
Vineet Gupta [Wed, 6 Nov 2019 12:28:25 +0000 (12:28 +0000)]
[PATCH] [ARC] Add builtins for identifying floating point support

Currently for hard float we need to check for
 __ARC_FPU_SP__ || __ARC_FPU_DP__ and for soft float inverse of that.
So define single convenience macros for either cases.

gcc/
xxxx-xx-xx  Vineet Gupta  <vgupta@synopsyscom>

* config/arc/arc-c.c (arc_cpu_cpp_builtins): Add
          __arc_hard_float__, __ARC_HARD_FLOAT__,
          __arc_soft_float__, __ARC_SOFT_FLOAT__

From-SVN: r277878

5 years ago[vect] PR92317: fix skip_epilogue creation for epilogues
Andre Vieira [Wed, 6 Nov 2019 11:22:35 +0000 (11:22 +0000)]
[vect] PR92317: fix skip_epilogue creation for epilogues

gcc/ChangeLog:
2019-11-06  Andre Vieira  <andre.simoesdiasvieira@arm.com>

PR tree-optimization/92317
* tree-vect-loop-manip.c (slpeel_update_phi_nodes_for_guard2): Also
update phi's with constant phi arguments.

gcc/testsuite/ChangeLog:
2019-11-06  Andre Vieira  <andre.simoesdiasvieira@arm.com>

PR tree-optimization/92317
* gcc/testsuite/g++.dg/opt/pr92317.C: New test.

From-SVN: r277877

5 years agointroduce -fcallgraph-info option
Eric Botcazou [Wed, 6 Nov 2019 10:57:18 +0000 (10:57 +0000)]
introduce -fcallgraph-info option

This was first submitted many years ago
https://gcc.gnu.org/ml/gcc-patches/2010-10/msg02468.html

The command line option -fcallgraph-info is added and makes the
compiler generate another output file (xxx.ci) for each compilation
unit (or LTO partitoin), which is a valid VCG file (you can launch
your favorite VCG viewer on it unmodified) and contains the "final"
callgraph of the unit.  "final" is a bit of a misnomer as this is
actually the callgraph at RTL expansion time, but since most
high-level optimizations are done at the Tree level and RTL doesn't
usually fiddle with calls, it's final in almost all cases.  Moreover,
the nodes can be decorated with additional info: -fcallgraph-info=su
adds stack usage info and -fcallgraph-info=da dynamic allocation info.

for  gcc/ChangeLog
From  Eric Botcazou  <ebotcazou@adacore.com>, Alexandre Oliva  <oliva@adacore.com>

* common.opt (-fcallgraph-info[=]): New option.
* doc/invoke.texi (Developer options): Document it.
* opts.c (common_handle_option): Handle it.
* builtins.c (expand_builtin_alloca): Record allocation if
-fcallgraph-info=da.
* calls.c (expand_call): If -fcallgraph-info, record the call.
(emit_library_call_value_1): Likewise.
* flag-types.h (enum callgraph_info_type): New type.
* explow.c: Include stringpool.h.
(set_stack_check_libfunc): Set SET_SYMBOL_REF_DECL on the symbol.
* function.c (allocate_stack_usage_info): New.
(allocate_struct_function): Call it for -fcallgraph-info.
(prepare_function_start): Call it otherwise.
(record_final_call, record_dynamic_alloc): New.
* function.h (struct callinfo_callee): New.
(CALLEE_FROM_CGRAPH_P): New.
(struct callinfo_dalloc): New.
(struct stack_usage): Add callees and dallocs.
(record_final_call, record_dynamic_alloc): Declare.
* gimplify.c (gimplify_decl_expr): Record dynamically-allocated
object if -fcallgraph-info=da.
* optabs-libfuncs.c (build_libfunc_function): Keep SYMBOL_REF_DECL.
* print-tree.h (print_decl_identifier): Declare.
(PRINT_DECL_ORIGIN, PRINT_DECL_NAME, PRINT_DECL_UNIQUE_NAME): New.
* print-tree.c: Include print-tree.h.
(print_decl_identifier): New function.
* toplev.c: Include print-tree.h.
(callgraph_info_file): New global variable.
(callgraph_info_external_printed): Likewise.
(output_stack_usage): Rename to...
(output_stack_usage_1): ... this.  Make it static, add cf
parameter.  If -fcallgraph-info=su, print stack usage to cf.
If -fstack-usage, use print_decl_identifier for
pretty-printing.
(INDIRECT_CALL_NAME): New.
(dump_final_node_vcg_start): New.
(dump_final_callee_vcg, dump_final_node_vcg): New.
(output_stack_usage): New.
(lang_dependent_init): Open and start file if
-fcallgraph-info.  Allocated callgraph_info_external_printed.
(finalize): If callgraph_info_file is not null, finish it,
close it, and release callgraph_info_external_printed.

for  gcc/ada/ChangeLog

* gcc-interface/misc.c (callgraph_info_file): Delete.

Co-Authored-By: Alexandre Oliva <oliva@adacore.com>
From-SVN: r277876

5 years agoWarn about inconsistent OpenACC nested reduction clauses
Frederik Harwath [Wed, 6 Nov 2019 10:43:52 +0000 (10:43 +0000)]
Warn about inconsistent OpenACC nested reduction clauses

OpenACC (cf. OpenACC 2.7, section 2.9.11. "reduction clause";
this was first clarified by OpenACC 2.6) requires that, if a
variable is used in reduction clauses on two nested loops, then
there must be reduction clauses for that variable on all loops
that are nested in between the two loops and all these reduction
clauses must use the same operator.
This commit introduces a check for that property which reports
warnings if it is violated.

2019-11-06  Gergö Barany  <gergo@codesourcery.com>
            Frederik Harwath  <frederik@codesourcery.com>
            Thomas Schwinge  <thomas@codesourcery.com>

gcc/
* omp-low.c (struct omp_context): New fields
local_reduction_clauses, outer_reduction_clauses.
(new_omp_context): Initialize these.
(scan_sharing_clauses): Record reduction clauses on OpenACC constructs.
(scan_omp_for): Check reduction clauses for incorrect nesting.
gcc/testsuite/
* c-c++-common/goacc/nested-reductions-warn.c: New test.
* c-c++-common/goacc/nested-reductions.c: New test.
* gfortran.dg/goacc/nested-reductions-warn.f90: New test.
* gfortran.dg/goacc/nested-reductions.f90: New test.
libgomp/
* testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-1.c:
Add expected warnings about missing reduction clauses.
* testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-2.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c:
Likewise.
* testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c:
Likewise.

Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
From-SVN: r277875

5 years agore PR inline-asm/92352 (ICE in force_constant_size)
Jakub Jelinek [Wed, 6 Nov 2019 08:08:39 +0000 (09:08 +0100)]
re PR inline-asm/92352 (ICE in force_constant_size)

PR inline-asm/92352
* gimplify.c (gimplify_asm_expr): Reject VLA in output or input
operands with non-memory constraints.

* c-c++-common/pr92352.c: New test.

From-SVN: r277873

5 years agoPR92090: Fix part of testcase failures by r276469
Xiong Hu Luo [Wed, 6 Nov 2019 03:36:46 +0000 (03:36 +0000)]
PR92090: Fix part of testcase failures by r276469

-finline-functions is enabled by default for O2 since r276469, update the
test cases with -fno-inline-functions.
c11-atomic-exec-5.c stills hit ICE of LRA on BE systems in PR92090.
This commit is NOT a fix for the bug and so it must NOT be closed.

gcc/testsuite/ChangeLog:

2019-11-06  Xiong Hu Luo  <luoxhu@linux.ibm.com>

PR92090
* gcc.target/powerpc/pr72804.c: Add -fno-inline-functions --param
max-inline-insns-single-O2=200.
* gcc.target/powerpc/pr79439-1.c: Add -fno-inline-functions.
* gcc.target/powerpc/vsx-builtin-7.c: Likewise.

From-SVN: r277872

5 years agoPR tree-optimization/92373 - ICE in -Warray-bounds on access to member array in an...
Martin Sebor [Wed, 6 Nov 2019 01:25:09 +0000 (01:25 +0000)]
PR tree-optimization/92373 - ICE in -Warray-bounds on access to member array in an initialized char buffer

gcc/testsuite/ChangeLog:

PR tree-optimization/92373
* gcc.dg/Warray-bounds-55.c: New test.
* gcc.dg/Wzero-length-array-bounds-2.c: New test.

gcc/ChangeLog:

PR tree-optimization/92373
* tree.c (component_ref_size): Only consider initializers of objects
of matching struct types.
Return null for instances of interior zero-length arrays.

From-SVN: r277871

5 years agoDaily bump.
GCC Administrator [Wed, 6 Nov 2019 00:16:21 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r277870

5 years agodoc: Insn splitting by combine
Segher Boessenkool [Wed, 6 Nov 2019 00:06:23 +0000 (01:06 +0100)]
doc: Insn splitting by combine

The combine pass is perfectly happy if a splitter splits to just one
instruction (instead of two).

* doc/md.texi (Insn Splitting): Fix combiner documentation.

From-SVN: r277866

5 years agoImplement C++20 operator<=>.
Jason Merrill [Tue, 5 Nov 2019 23:56:18 +0000 (18:56 -0500)]
Implement C++20 operator<=>.

There are three major pieces to this support: scalar operator<=>,
synthesis of comparison operators, and rewritten/reversed overload
resolution (e.g. a < b becomes 0 > b <=> a).

Unlike other defaulted functions, where we use synthesized_method_walk to
semi-simulate what the definition of the function will be like, this patch
determines the characteristics of a comparison operator by trying to define
it.

My handling of non-dependent rewritten operators in templates can still use
some work: build_min_non_dep_op_overload can't understand the rewrites and
crashes, so I'm avoiding it for now by clearing *overload.  This means we'll
do name lookup again at instantiation time, which can incorrectly mean a
different result.  I'll poke at this more in stage 3.

I'm leaving out a fourth section ("strong structural equality") even though
I've implemented it, because it seems likely to change radically tomorrow.

Thanks to Tim van Deurzen and Jakub for implementing lexing of the <=>
operator, and Jonathan for the initial <compare> header.

gcc/cp/
* cp-tree.h (struct lang_decl_fn): Add maybe_deleted bitfield.
(DECL_MAYBE_DELETED): New.
(enum special_function_kind): Add sfk_comparison.
(LOOKUP_REWRITTEN, LOOKUP_REVERSED): New.
* call.c (struct z_candidate): Add rewritten and reversed methods.
(add_builtin_candidate): Handle SPACESHIP_EXPR.
(add_builtin_candidates): Likewise.
(add_candidates): Don't add a reversed candidate if the parms are
the same.
(add_operator_candidates): Split out from build_new_op_1.  Handle
rewritten and reversed candidates.
(add_candidate): Swap conversions of reversed candidate.
(build_new_op_1): Swap them back.  Build a second operation for
rewritten candidates.
(extract_call_expr): Handle rewritten calls.
(same_fn_or_template): New.
(joust): Handle rewritten and reversed candidates.
* class.c (add_implicitly_declared_members): Add implicit op==.
(classtype_has_op, classtype_has_defaulted_op): New.
* constexpr.c (cxx_eval_binary_expression): Handle SPACESHIP_EXPR.
(cxx_eval_constant_expression, potential_constant_expression_1):
Likewise.
* cp-gimplify.c (genericize_spaceship): New.
(cp_genericize_r): Use it.
* cp-objcp-common.c (cp_common_init_ts): Handle SPACESHIP_EXPR.
* decl.c (finish_function): Handle deleted function.
* decl2.c (grokfield): SET_DECL_FRIEND_CONTEXT on defaulted friend.
(mark_used): Check DECL_MAYBE_DELETED.  Remove assumption that
defaulted functions are non-static members.
* error.c (dump_expr): Handle SPACESHIP_EXPR.
* method.c (type_has_trivial_fn): False for sfk_comparison.
(enum comp_cat_tag, struct comp_cat_info_t): New types.
(comp_cat_cache): New array variable.
(lookup_comparison_result, lookup_comparison_category)
(is_cat, cat_tag_for, spaceship_comp_cat)
(spaceship_type, genericize_spaceship)
(common_comparison_type, early_check_defaulted_comparison)
(comp_info, build_comparison_op): New.
(synthesize_method): Handle sfk_comparison.  Handle deleted.
(get_defaulted_eh_spec, maybe_explain_implicit_delete)
(explain_implicit_non_constexpr, implicitly_declare_fn)
(defaulted_late_check, defaultable_fn_check): Handle sfk_comparison.
* name-lookup.c (get_std_name_hint): Add comparison categories.
* tree.c (special_function_p): Add sfk_comparison.
* typeck.c (cp_build_binary_op): Handle SPACESHIP_EXPR.

2019-11-05  Tim van Deurzen  <tim@kompiler.org>

Add new tree code for the spaceship operator.
gcc/cp/
* cp-tree.def: Add new tree code.
* operators.def: New binary operator.
* parser.c: Add new token and tree code.
libcpp/
* cpplib.h: Add spaceship operator for C++.
* lex.c: Implement conditional lexing of spaceship operator for C++20.

2019-11-05  Jonathan Wakely  <jwakely@redhat.com>

libstdc++-v3/
* libsupc++/compare: New header.
* libsupc++/Makefile.am (std_HEADERS): Add compare.
* include/std/version: Define __cpp_lib_three_way_comparison.
* include/std/functional: #include <compare>.

From-SVN: r277865

5 years agoFix conversions for built-in operator overloading candidates.
Jason Merrill [Tue, 5 Nov 2019 23:53:53 +0000 (18:53 -0500)]
Fix conversions for built-in operator overloading candidates.

While working on C++20 operator<=>, I noticed that build_new_op_1 was doing
too much conversion when a built-in candidate was selected; the standard
says it should only perform user-defined conversions, and then leave the
normal operator semantics to handle any standard conversions.  This is
important for operator<=> because a comparison of two different unscoped
enums is ill-formed; if we promote the enums to int here, cp_build_binary_op
never gets to see the original operand types, so we can't give the error.

I'm also disabling -Wmaybe-uninitialized for expmed.c to avoid the bootstrap
failure from the last time I applied this patch.

* call.c (build_new_op_1): Don't apply any standard conversions to
the operands of a built-in operator.  Don't suppress conversions in
cp_build_unary_op.
* typeck.c (cp_build_unary_op): Do integral promotions for enums.

PR tree-optimization/91825
* expmed.c: Reduce -Wmaybe-uninitialized to warning.

From-SVN: r277864

5 years agoUse vec instead of raw array for built-in candidates.
Jason Merrill [Tue, 5 Nov 2019 23:50:41 +0000 (18:50 -0500)]
Use vec instead of raw array for built-in candidates.

My operator<=> patch wants to split up build_new_op_1, which makes using a
tree array as well as the vec inconvenient.  build_new_op_1 already has a
vec, and build_conditional_expr_1 can release its vec right away, so this
doesn't increase garbage at all.

* call.c (build_builtin_candidate): Take args in a vec.
(add_builtin_candidate, add_builtin_candidates): Likewise.
(build_conditional_expr_1, build_new_op_1): Adjust.

From-SVN: r277863

5 years agoVarious small C++ changes.
Jason Merrill [Tue, 5 Nov 2019 23:50:08 +0000 (18:50 -0500)]
Various small C++ changes.

Wrappers for lookup_qualified_name and build_x_binary_op to make calling
them more convenient in places, and a function named contextual_conv_bool
for places that want contextual conversion to bool.

I noticed that we weren't showing the declaration location when we complain
about a call to a non-constexpr function where a constant expression is
required.

If maybe_instantiate_noexcept doesn't actually instantiate, there's no
reason for it to mess with clones.

* constexpr.c (explain_invalid_constexpr_fn): Show location of fn.

* pt.c (maybe_instantiate_noexcept): Only update clones if we
instantiated.

* typeck.c (contextual_conv_bool): New.

* name-lookup.c (lookup_qualified_name): Add wrapper overload taking
C string rather than identifier.
* parser.c (cp_parser_userdef_numeric_literal): Use it.
* rtti.c (emit_support_tinfos): Use it.
* cp-tree.h (ovl_op_identifier): Change to inline functions.
(build_x_binary_op): Add wrapper with fewer parms.

From-SVN: r277862

5 years agoAllow libcalls for complex memcpy when optimizing for size.
Jim Wilson [Tue, 5 Nov 2019 22:34:40 +0000 (22:34 +0000)]
Allow libcalls for complex memcpy when optimizing for size.

The RISC-V backend wants to use a libcall when optimizing for size if
more than 6 instructions are needed.  Emit_move_complex asks for no
libcalls.  This case requires 8 insns for rv64 and 16 insns for rv32,
so we get fallback code that emits a loop.  Commit_one_edge_insertion
doesn't allow code inserted for a phi node on an edge to end with a
branch, and so this triggers an assertion.  This problem goes away if
we allow libcalls when optimizing for size, which gives the code the
RISC-V backend wants, and avoids triggering the assert.

gcc/
PR middle-end/92263
* expr.c (emit_move_complex): Only use BLOCK_OP_NO_LIBCALL when
optimize_insn_for_speed_p is true.

gcc/testsuite/
PR middle-end/92263
* gcc.dg/pr92263.c: New.

From-SVN: r277861

5 years agoCatch missed uses of function with unsatisfied constraints.
Jason Merrill [Tue, 5 Nov 2019 20:36:09 +0000 (15:36 -0500)]
Catch missed uses of function with unsatisfied constraints.

While looking at CA378 I noticed that we weren't properly diagnosing two of
the three erroneous lines in the example.

* decl2.c (mark_used): Diagnose use of a function with unsatisfied
constraints here.
* typeck.c (cp_build_function_call_vec): Not here.

From-SVN: r277860

5 years agoMake -fconcepts-ts imply -fconcepts.
Jason Merrill [Tue, 5 Nov 2019 20:36:00 +0000 (15:36 -0500)]
Make -fconcepts-ts imply -fconcepts.

* c-opts.c (c_common_post_options): -fconcepts-ts implies
-fconcepts.

From-SVN: r277859

5 years agoPR middle-end/92333 - missing variable name referencing VLA in warnings
Martin Sebor [Tue, 5 Nov 2019 17:05:33 +0000 (17:05 +0000)]
PR middle-end/92333 - missing variable name referencing VLA in warnings

PR middle-end/92333 - missing variable name referencing VLA in warnings
PR middle-end/82608 - missing -Warray-bounds on an out-of-bounds VLA index

gcc/testsuite/ChangeLog:

PR middle-end/92333
PR middle-end/82608
* gcc.dg/Warray-bounds-51.c: New test.

gcc/ChangeLog:

PR middle-end/92333
PR middle-end/82608
* tree-vrp.c (vrp_prop::check_array_ref): Handle VLAs with constant
size.
* tree-ssa-ccp.c (fold_builtin_alloca_with_align): Use a meaninful
name and location for a temporary variable.

From-SVN: r277854

5 years ago[PR c++/92370] ICE with VC marker
Nathan Sidwell [Tue, 5 Nov 2019 16:59:41 +0000 (16:59 +0000)]
[PR c++/92370] ICE with VC marker

https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00323.html
cp/
PR c++/92370
* parser.c (cp_parser_error_1): Check EOF and UNKNOWN_LOCATION
when skipping over version control marker.

testsuite/
PR c++/92370
* g++.dg/pr92370.C: New.

From-SVN: r277853

5 years agoFix indentation inconsistencies introduced by previous patch.
Aldy Hernandez [Tue, 5 Nov 2019 16:37:28 +0000 (16:37 +0000)]
Fix indentation inconsistencies introduced by previous patch.

From-SVN: r277852

5 years agoPR middle-end/92341 - missing -Warray-bounds indexing past the end of a compound...
Martin Sebor [Tue, 5 Nov 2019 16:20:44 +0000 (16:20 +0000)]
PR middle-end/92341 - missing -Warray-bounds indexing past the end of a compound literal

PR middle-end/92341 - missing -Warray-bounds indexing past the end of a compound literal
PR middle-end/82612 - missing -Warray-bounds on a non-zero offset from the address of a non-array object

gcc/testsuite/ChangeLog:

PR middle-end/92341
PR middle-end/82612
* g++.dg/warn/Warray-bounds-4.C: Adjust text of expected warning.
* gcc.dg/Warray-bounds-53.c: New test.
* gcc.dg/Warray-bounds-54.c: New test.

gcc/ChangeLog:

PR middle-end/92341
PR middle-end/82612
* tree-sra.c (get_access_for_expr): Fail for out-of-bounds offsets.
* tree-vrp.c (vrp_prop::check_array_ref): Correct index and text
of message printed in a warning for empty arrays.
(vrp_prop::check_mem_ref): Also handle function parameters and
empty arrays.

From-SVN: r277851

5 years agore PR tree-optimization/92371 (ICE in info_for_reduction, at tree-vect-loop.c:4106)
Richard Biener [Tue, 5 Nov 2019 16:12:07 +0000 (16:12 +0000)]
re PR tree-optimization/92371 (ICE in info_for_reduction, at tree-vect-loop.c:4106)

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

PR tree-optimization/92371
* tree-vect-loop.c (vectorizable_reduction): Set STMT_VINFO_REDUC_DEF
on the original stmt of live stmts in the chain.
(vectorizable_live_operation): Look at the original stmt when
checking STMT_VINFO_REDUC_DEF.

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

From-SVN: r277850

5 years agoFix <version> header for freestanding
Jonathan Wakely [Tue, 5 Nov 2019 15:56:57 +0000 (15:56 +0000)]
Fix <version> header for freestanding

* include/std/version [!_GLIBCXX_HOSTED]: Do not define feature test
macros for features that are only present in hosted builds.

From-SVN: r277849

5 years agoRemove incorrect comment
Jonathan Wakely [Tue, 5 Nov 2019 15:56:47 +0000 (15:56 +0000)]
Remove incorrect comment

The negative concept is required for subsumption to work, it's not a
bug.

* include/bits/iterator_concepts.h (__iter_without_nested_types):
Remove incorrect comment.

From-SVN: r277848

5 years agoThe base class for ranges is currently value_range_base, which is rather long and...
Aldy Hernandez [Tue, 5 Nov 2019 15:39:11 +0000 (15:39 +0000)]
The base class for ranges is currently value_range_base, which is rather long and cumbersome.

The base class for ranges is currently value_range_base, which is
rather long and cumbersome.  It also occurs more often than the derived
class of value_range.  To avoid confusion, and save typing, this
patch does a global rename from value_range to value_range_equiv,
and from value_range_base to value_range.

This way, the base class is simply value_range, and the derived
class is value_range_equiv which explicitly states what it does.

From-SVN: r277847

5 years ago[mid-end] Fix declared type of personality functions
Matthew Malcomson [Tue, 5 Nov 2019 15:36:20 +0000 (15:36 +0000)]
[mid-end] Fix declared type of personality functions

`build_personality_function` generates a declaration for a personality
function.  The type it declares for these functions doesn't match the
type of the actual personality functions that are defined by the C++
unwinding ABI.

This doesn't cause any crashes since the compiler never generates a call
to these decl's, and hence the type of the function is never used.
Nonetheless, for the sake of consistency and readability we update the
type of this declaration.

gcc/ChangeLog:

2019-11-05  Matthew Malcomson  <matthew.malcomson@arm.com>

* expr.c (build_personality_function): Fix generated type to
match actual personality functions.

From-SVN: r277846

5 years ago[aarch64] Allocate space for err_str in aarch64_handle_attr_branch_protection
Matthew Malcomson [Tue, 5 Nov 2019 15:35:15 +0000 (15:35 +0000)]
[aarch64] Allocate space for err_str in aarch64_handle_attr_branch_protection

-fsanitize=hwaddress found a one-byte overwrite when running the
testsuite here.  aarch64_handle_attr_branch_protection allocates
`strlen(str)` bytes for an error string, which is populated by
`strcpy(..., str)` in the case where the branch protection string is
completely invalid.

Not tested -- I don't want to re-build and it seems obvious.

gcc/ChangeLog:

2019-11-05  Matthew Malcomson  <matthew.malcomson@arm.com>

* config/aarch64/aarch64.c (aarch64_handle_attr_cpu): Allocate
enough bytes for the NULL character.

From-SVN: r277845

5 years agoUpdate LOCAL_PATCHES.
Martin Liska [Tue, 5 Nov 2019 13:56:51 +0000 (13:56 +0000)]
Update LOCAL_PATCHES.

From-SVN: r277839

5 years agoUpdate scanned patterns in a test-case.
Martin Liska [Tue, 5 Nov 2019 13:55:54 +0000 (14:55 +0100)]
Update scanned patterns in a test-case.

2019-11-05  Martin Liska  <mliska@suse.cz>

* c-c++-common/ubsan/ptr-overflow-2.c: Update based on changed
run-time reporting format.

From-SVN: r277838

5 years agoSet print_summary for UBSAN.
Martin Liska [Tue, 5 Nov 2019 13:55:44 +0000 (14:55 +0100)]
Set print_summary for UBSAN.

2019-11-05  Martin Liska  <mliska@suse.cz>

* ubsan/ubsan_flags.cpp (InitializeFlags): Trunk decided to print
summary for all sanitizers, but we want to have UBSAN without it.

From-SVN: r277837

5 years agoReapply all revisions mentioned in LOCAL_PATCHES.
Martin Liska [Tue, 5 Nov 2019 13:55:27 +0000 (14:55 +0100)]
Reapply all revisions mentioned in LOCAL_PATCHES.

2019-11-05  Martin Liska  <mliska@suse.cz>

* asan/asan_globals.cpp (CheckODRViolationViaIndicator): Reapply from
LOCAL_PATCHES.
(CheckODRViolationViaPoisoning): Likewise.
(RegisterGlobal): Likewise.
* asan/asan_interceptors.h (ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION): Likewise.
(defined): Likewise.
* asan/asan_mapping.h: Likewise.
* sanitizer_common/sanitizer_linux_libcdep.cpp (defined): Likewise.
* sanitizer_common/sanitizer_mac.cpp (defined): Likewise.
* sanitizer_common/sanitizer_platform_limits_linux.cpp (defined): Likewise.
* sanitizer_common/sanitizer_platform_limits_posix.h: Likewise.
* sanitizer_common/sanitizer_stacktrace.cpp (GetCanonicFrame): Likewise.
* tsan/tsan_rtl_ppc64.S: Likewise.
* ubsan/ubsan_handlers.cpp (__ubsan::__ubsan_handle_cfi_bad_icall): Likewise.
(__ubsan::__ubsan_handle_cfi_bad_icall_abort): Likewise.
* ubsan/ubsan_handlers.h (struct CFIBadIcallData): Likewise.
(struct CFICheckFailData): Likewise.
(RECOVERABLE): Likewise.
* ubsan/ubsan_platform.h: Likewise.

From-SVN: r277836

5 years agoUpdate Makefile.am.
Martin Liska [Tue, 5 Nov 2019 13:55:17 +0000 (14:55 +0100)]
Update Makefile.am.

2019-11-05  Martin Liska  <mliska@suse.cz>

* tsan/Makefile.am: Rename tsan_interceptors.cpp to
tsan_interceptors_posix.
* tsan/Makefile.in: Regenerate.

From-SVN: r277835

5 years agoLibsanitizer: merge from trunk with merge.sh.
Martin Liska [Tue, 5 Nov 2019 13:54:57 +0000 (14:54 +0100)]
Libsanitizer: merge from trunk with merge.sh.

2019-11-05  Martin Liska  <mliska@suse.cz>

* all source files: Merge from upstream r375507.

From-SVN: r277834

5 years agoIBM Z: gen-vect-26/28: Vectorizing without peeling is ok for Z
Andreas Krebbel [Tue, 5 Nov 2019 13:31:02 +0000 (13:31 +0000)]
IBM Z: gen-vect-26/28: Vectorizing without peeling is ok for Z

These tests check if loop peeling has been applied to avoid
having to vectorize unaligned loops.  On Z we do not have any
alignment requirements for vectorization so we also don't need want
the loop peeling here.

2019-11-05  Andreas Krebbel  <krebbel@linux.ibm.com>

* gcc.dg/tree-ssa/gen-vect-26.c: Disable loop peeling check for
IBM Z.
* gcc.dg/tree-ssa/gen-vect-28.c: Likewise.

From-SVN: r277833

5 years agore PR target/92280 (gcc.target/i386/pr83008.c FAILs)
Richard Biener [Tue, 5 Nov 2019 13:29:52 +0000 (13:29 +0000)]
re PR target/92280 (gcc.target/i386/pr83008.c FAILs)

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

PR tree-optimization/92280
* match.pd (BIT_FIELD_REF of CTOR): Unless the original CTOR
had a single use do not create a new CTOR.
* tree-ssa-forwprop.c (simplify_bitfield_ref): Do not re-fold
BIT_FIELD_REF of a CTOR via GENERIC.

From-SVN: r277832

5 years agoIBM Z: gen-vect-11/32: Set min-vect-loop-bound param back to default
Andreas Krebbel [Tue, 5 Nov 2019 13:29:13 +0000 (13:29 +0000)]
IBM Z: gen-vect-11/32: Set min-vect-loop-bound param back to default

In the Z backend we still set min-vect-loop-bound to 2 to work around
corner cases where awkward epilogue code gets generated in the
vectorizer.  This has a particular bad impact when vectorizing loops
with a low iteration count.  Due to this we do not vectorize the loop
in gen-vect-11/32 - what actually is a pity.

The patch sets min-vect-loop-bound back to the default value of 0 in
order to enable vectorization.

2019-11-05  Andreas Krebbel  <krebbel@linux.ibm.com>

* gcc.dg/tree-ssa/gen-vect-11.c: Add --param min-vect-loop-bound=0
for IBM Z.
* gcc.dg/tree-ssa/gen-vect-23.c: Likewise.

From-SVN: r277831

5 years agoIBM Z: Fix testsuite useable_hw check
Andreas Krebbel [Tue, 5 Nov 2019 13:27:59 +0000 (13:27 +0000)]
IBM Z: Fix testsuite useable_hw check

This fixes various issues with the useable_hw check in s390.exp.  The
check is supposed to verify whether a testcase can be run on the
current hardware.

- the test never returned true for -m31 because vzero is not available
  in ESA mode and -m31 defaults to -mesa
- the missing v0 clobber on the vzero instruction made the check fail
  if the stack pointer got saved in f0
- the lcbb instruction used for checking whether we are on a z13
  also requires vx.  Replace it with an instruction from the generic
  instruction set extensions.
- no support for z14 and z15 so far

gcc/testsuite/ChangeLog:

2019-11-05  Andreas Krebbel  <krebbel@linux.ibm.com>

* gcc.target/s390/s390.exp
(check_effective_target_s390_useable_hw): Add inline asm for z14
and z15. Replace instruction for z13 with lochiz. Add register
clobbers. Check also for __zarch__ when doing the __VX__ test.

From-SVN: r277830

5 years agoIBM Z: Use tree_fits_uhwi_p in vector_alignment hook
Andreas Krebbel [Tue, 5 Nov 2019 13:21:06 +0000 (13:21 +0000)]
IBM Z: Use tree_fits_uhwi_p in vector_alignment hook

This fixes an ICE in gcc.dg/attr-vector_size.c testcase.

gcc/ChangeLog:

2019-11-05  Andreas Krebbel  <krebbel@linux.ibm.com>

* config/s390/s390.c (s390_vector_alignment): Check if the value
fits into uhwi before using it.

From-SVN: r277829

5 years ago[ARM,testsuite] Skip tests incompatible with -mpure-code.
Christophe Lyon [Tue, 5 Nov 2019 13:18:36 +0000 (13:18 +0000)]
[ARM,testsuite] Skip tests incompatible with -mpure-code.

All these tests fail when using -mpure-code:
* some force A or R profile
* some use Neon
* some use -fpic/-fPIC
all of which are not supported by this option.

2019-11-05  Christophe Lyon  <christophe.lyon@linaro.org>

* gcc.target/arm/attr-crypto.c: Skip if -mpure-code is used.
* gcc.target/arm/attr-neon-fp16.c: Likewise.
* gcc.target/arm/combine-cmp-shift.c: Likewise.
* gcc.target/arm/data-rel-1.c: Likewise.
* gcc.target/arm/data-rel-2.c: Likewise.
* gcc.target/arm/data-rel-3.c: Likewise.
* gcc.target/arm/ftest-armv7a-arm.c: Likewise.
* gcc.target/arm/ftest-armv7a-thumb.c: Likewise.
* gcc.target/arm/ftest-armv7r-arm.c: Likewise.
* gcc.target/arm/ftest-armv7r-thumb.c: Likewise.
* gcc.target/arm/ftest-armv7ve-arm.c: Likewise.
* gcc.target/arm/ftest-armv7ve-thumb.c: Likewise.
* gcc.target/arm/ftest-armv8a-arm.c: Likewise.
* gcc.target/arm/ftest-armv8a-thumb.c: Likewise.
* gcc.target/arm/lceil-vcvt_1.c: Likewise.
* gcc.target/arm/lfloor-vcvt_1.c: Likewise.
* gcc.target/arm/lround-vcvt_1.c: Likewise.
* gcc.target/arm/memset-inline-10.c: Likewise.
* gcc.target/arm/mod_2.c: Likewise.
* gcc.target/arm/mod_256.c: Likewise.
* gcc.target/arm/pr40657-1.c: Likewise.
* gcc.target/arm/pr44788.c: Likewise.
* gcc.target/arm/pr50305.c: Likewise.
* gcc.target/arm/pr51835.c: Likewise.
* gcc.target/arm/pr51915.c: Likewise.
* gcc.target/arm/pr52006.c: Likewise.
* gcc.target/arm/pr53187.c: Likewise.
* gcc.target/arm/pr58784.c: Likewise.
* gcc.target/arm/pr59575.c: Likewise.
* gcc.target/arm/pr59923.c: Likewise.
* gcc.target/arm/pr60650-2.c: Likewise.
* gcc.target/arm/pr60657.c: Likewise.
* gcc.target/arm/pr60663.c: Likewise.
* gcc.target/arm/pr67439_1.c: Likewise.
* gcc.target/arm/pr68620.c: Likewise.
* gcc.target/arm/pr7676.c: Likewise.
* gcc.target/arm/pr79239.c: Likewise.
* gcc.target/arm/pr81863.c: Likewise.
* gcc.target/arm/pragma_attribute.c: Likewise.
* gcc.target/arm/pragma_cpp_fma.c: Likewise.
* gcc.target/arm/require-pic-register-loc.c: Likewise.
* gcc.target/arm/thumb-ltu.c: Likewise.
* gcc.target/arm/thumb1-pic-high-reg.c: Likewise.
* gcc.target/arm/thumb1-pic-single-base.c: Likewise.
* gcc.target/arm/tlscall.c: Likewise.
* gcc.target/arm/unsigned-float.c: Likewise.
* gcc.target/arm/vrinta-ce.c: Likewise.

From-SVN: r277828

5 years agoUse more ggc_delete.
Martin Liska [Tue, 5 Nov 2019 12:45:04 +0000 (13:45 +0100)]
Use more ggc_delete.

2019-11-05  Martin Liska  <mliska@suse.cz>

* symbol-summary.h: Use ggc_delete.

From-SVN: r277827

5 years ago[Aarch64] Fix vec_perm cost for thunderx2t99
Anton Youdkevitch [Tue, 5 Nov 2019 12:07:53 +0000 (12:07 +0000)]
[Aarch64] Fix vec_perm cost for thunderx2t99

Here is the one-liner that fixes the incorrect
vec_perm cost for thunderx2t99 chip.
With the patch applied 526.blender of CPU2017
gets ~5% improvement with no measurable changes
for other benchmarks.

2019-11-05  Anton Youdkevitch  <anton.youdkevitch@bell-sw.com>

* config/aarch64/aarch64.c (thunderx2t99_vector_cost):
Change vec_perm field to 10.

From-SVN: r277826

5 years ago* doc/install.texi: Further fix syntax for html generation
Arnaud Charlet [Tue, 5 Nov 2019 11:46:29 +0000 (11:46 +0000)]
* doc/install.texi: Further fix syntax for html generation

From-SVN: r277824

5 years agoUpdate coding style in symbol-summary.h.
Martin Liska [Tue, 5 Nov 2019 11:10:04 +0000 (12:10 +0100)]
Update coding style in symbol-summary.h.

2019-11-05  Martin Liska  <mliska@suse.cz>

* symbol-summary.h: Rename allocator to m_allocator and
add comment.

From-SVN: r277823

5 years agore PR tree-optimization/92324 (ICE in expand_direct_optab_fn, at internal-fn.c:2890)
Richard Biener [Tue, 5 Nov 2019 11:00:24 +0000 (11:00 +0000)]
re PR tree-optimization/92324 (ICE in expand_direct_optab_fn, at internal-fn.c:2890)

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

PR tree-optimization/92324
* tree-vect-loop.c (check_reduction_path): For MIN/MAX require
all signed or unsigned operations.

* gcc.dg/vect/pr92324-3.c: New testcase.

From-SVN: r277822

5 years agohsa-brig.c: Include alloc-pool.h
Jan Hubicka [Tue, 5 Nov 2019 10:38:02 +0000 (11:38 +0100)]
hsa-brig.c: Include alloc-pool.h

* hsa-brig.c: Include alloc-pool.h
* hsa-dump.c: Likewise.
* hsa-gen.c: Likewise.
* hse-regalloc.c: Likewise.
* ipa-hsa.c: Likewise.
* ipa-predicate.c: Likewise.
* ipa-reference.c: Likewise.
* ipa-sra.c: Likewise.
* omp-expand.c: Likewise.
* omp-general.c: Likewise.
* omp-low.c: Likewise.
* sumbol-summary.h (function_summary_base): Add allocator.
(function_summary<T *>::function_summary): Update construction.
(fast_function_summary<T *, V>::fast_function_summary): Likewise.
(call_summary_base): Add allcator.
(call_summary<T *>::call_summary): Update construction.
(fast_call_summary<T *, V>::fast_call_summary): Likewise.

From-SVN: r277821

5 years agore PR tree-optimization/91945 (ICE: tree check: expected integer_cst, have var_decl...
Jakub Jelinek [Tue, 5 Nov 2019 10:17:29 +0000 (11:17 +0100)]
re PR tree-optimization/91945 (ICE: tree check: expected integer_cst, have var_decl in get_len, at tree.h:5837 since r274997)

PR tree-optimization/91945
* builtins.c (compute_objsize): For ARRAY_REF, only multiply off
by tpsize if it is both non-NULL and INTEGER_CST, otherwise punt.
Formatting fix.

* gfortran.dg/pr91945.f90: New test.

From-SVN: r277820

5 years agore PR c++/92343 ([[likely]]/[[unlikely]] prevent method from being a constant expression)
Jakub Jelinek [Tue, 5 Nov 2019 10:16:39 +0000 (11:16 +0100)]
re PR c++/92343 ([[likely]]/[[unlikely]] prevent method from being a constant expression)

PR c++/92343
* constexpr.c (potential_constant_expression_1): Return true rather
than false for PREDICT_EXPR.

* g++.dg/cpp2a/attr-likely6.C: New test.

From-SVN: r277819

5 years agoMove vrp_set_zero_nonzero_bits from tree-vrp.c into vr-values.c, and make it use...
Aldy Hernandez [Tue, 5 Nov 2019 09:50:39 +0000 (09:50 +0000)]
Move vrp_set_zero_nonzero_bits from tree-vrp.c into vr-values.c, and make it use wi_set_zero_nonzero_bits.

Move vrp_set_zero_nonzero_bits from tree-vrp.c into vr-values.c, and
make it use wi_set_zero_nonzero_bits.  Remove the now redundant
wide_int_range_set_zero_nonzero_bits.

From-SVN: r277818

5 years agoReally add gcc/config/gcn/t-omp-device
Tobias Burnus [Tue, 5 Nov 2019 09:01:57 +0000 (10:01 +0100)]
Really add gcc/config/gcn/t-omp-device

        gcc/
        * config/gcn/t-omp-device: New.
        Should have been part of Rev. 277797.

From-SVN: r277817

5 years agoRemove FIELD_DECL leftover.
Martin Liska [Tue, 5 Nov 2019 08:39:14 +0000 (09:39 +0100)]
Remove FIELD_DECL leftover.

2019-11-05  Martin Liska  <mliska@suse.cz>

PR c++/92339
* fold-const.c (operand_compare::hash_operand): Remove
FIELD_DECL handling.
2019-11-05  Martin Liska  <mliska@suse.cz>

PR c++/92339
* g++.dg/pr92339.C: New test.

From-SVN: r277816

5 years agocrontab: Disable snapshots from gcc-7-branch.
Richard Biener [Tue, 5 Nov 2019 07:58:51 +0000 (07:58 +0000)]
crontab: Disable snapshots from gcc-7-branch.

2019-10-05  Richard Biener  <rguenther@suse.de>

        * crontab: Disable snapshots from gcc-7-branch.

From-SVN: r277815

5 years agodecl.c (omp_declare_variant_finalize_one): Call declare_simd_adjust_this not just...
Jakub Jelinek [Tue, 5 Nov 2019 07:46:03 +0000 (08:46 +0100)]
decl.c (omp_declare_variant_finalize_one): Call declare_simd_adjust_this not just on the context...

* decl.c (omp_declare_variant_finalize_one): Call
declare_simd_adjust_this not just on the context, but also on the
variant-id expression for methods.  Don't call
cp_get_callee_fndecl_nofold, call cp_get_callee and only if it is
safe cp_get_fndecl_from_callee.  Don't try to print as %qD
NULL in diagnostics.
* pt.c (tsubst_attribute): Handle "omp declare variant base"
attribute.
(tsubst_function_decl): Call omp_declare_variant_finalize
if there are any "omp declare variant base" attributes left.

* g++.dg/gomp/declare-variant-7.C: New test.
* g++.dg/gomp/declare-variant-8.C: New test.

From-SVN: r277814

5 years agoMove vrp_bitmap_equal_p above its only use and make it static.
Aldy Hernandez [Tue, 5 Nov 2019 04:14:40 +0000 (04:14 +0000)]
Move vrp_bitmap_equal_p above its only use and make it static.

From-SVN: r277813

5 years agoUse value_range_base::equal_p in value_range_base::operator== so we can handle
Aldy Hernandez [Tue, 5 Nov 2019 03:35:27 +0000 (03:35 +0000)]
Use value_range_base::equal_p in value_range_base::operator== so we can handle
symbolics without dying.

From-SVN: r277812

5 years agoDaily bump.
GCC Administrator [Tue, 5 Nov 2019 00:16:28 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r277810