aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-10-14Turn offset_map to HOST_WIDE_INTJan Hubicka3-5/+6
gcc/ChangeLog: 2020-10-14 Jan Hubicka <hubicka@ucw.cz> * ipa-fnsummary.c (remap_edge_summaries): Make offset_map HOST_WIDE_INT. (remap_freqcounting_predicate): Likewise. (ipa_merge_fn_summary_after_inlining): Likewise. * ipa-predicate.c (predicate::remap_after_inlining): Likewise * ipa-predicate.h (remap_after_inlining): Update.
2020-10-14Handle POINTER_PLUS_EXPR in jump functions in ipa-modref.Jan Hubicka3-3/+60
gcc/ChangeLog: * ipa-modref.c (compute_parm_map): Handle POINTER_PLUS_EXPR in PASSTHROUGH. gcc/testsuite/ChangeLog: * gcc.dg/ipa/modref-1.c: New test. * gcc.dg/tree-ssa/modref-4.c: New test.
2020-10-14Fortran: Fix line-truncation warning for !$acc and !gcc$Tobias Burnus2-2/+13
gcc/fortran/ChangeLog: PR fortran/97390 * scanner.c (load_line): Fix line-truncation warning for !$acc and !gcc$ in free-form source code. gcc/testsuite/ChangeLog: PR fortran/97390 * gfortran.dg/goacc/warn_truncated.f90: New test.
2020-10-14adjust BB SLP build from scalars heuristicsRichard Biener1-20/+31
We can end up with { _1, 1.0 } * { 3.0, _2 } which isn't really profitable. The following adjusts things so we reject more than one possibly expensive (non-constant and not uniform) vector CTOR and instead build a CTOR for the scalar operation results. This also moves a check in vect_get_and_check_slp_defs to a better place. 2020-10-14 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_get_and_check_slp_defs): Move check for duplicate/interleave of variable size constants to a place done once and early. (vect_build_slp_tree_2): Adjust heuristics when to build a BB SLP node from scalars.
2020-10-14[gimple] Move can_duplicate_bb_p to gimple_can_duplicate_bb_pTom de Vries2-64/+40
The function gimple_can_duplicate_bb_p currently always returns true. The presence of can_duplicate_bb_p in tracer.c however suggests that there are cases when bb's indeed cannot be duplicated. Move the implementation of can_duplicate_bb_p to gimple_can_duplicate_bb_p. Bootstrapped and reg-tested on x86_64-linux. Build x86_64-linux with nvptx accelerator and tested libgomp. No issues found. As corner-case check, bootstrapped and reg-tested a patch that makes gimple_can_duplicate_bb_p always return false, resulting in PR97333 - "[gimple_can_duplicate_bb_p == false, tree-ssa-threadupdate] ICE in duplicate_block, at cfghooks.c:1093". gcc/ChangeLog: 2020-10-09 Tom de Vries <tdevries@suse.de> * tracer.c (cached_can_duplicate_bb_p, analyze_bb): Use can_duplicate_block_p. (can_duplicate_insn_p, can_duplicate_bb_no_insn_iter_p) (can_duplicate_bb_p): Move and merge ... * tree-cfg.c (gimple_can_duplicate_bb_p): ... here.
2020-10-14c++: Instantiation with local extern [PR97395]Nathan Sidwell2-7/+33
It turns out that pushdecl_with_scope has somewhat strange behaviour, which probably made more sense way back. Unfortunately making it somewhat saner turned into a rathole. Instead use a push_nested_namespace around pushing the alias -- this is similar to some of the friend handling we already have. gcc/cp/ * name-lookup.c (push_local_extern_decl_alias): Push into alias's namespace and use pushdecl. (do_pushdecl_with_scope): Clarify behaviour. gcc/testsuite/ * g++.dg/lookup/extern-redecl2.C: New.
2020-10-14libstdc++: Define some std::string constructors inlineJonathan Wakely2-62/+28
There are a lot of very simple constructors for the old string which are not defined inline. I don't see any reason for this and it probably makes them less likely to be optimized away. Move the definitions into the class body. libstdc++-v3/ChangeLog: * include/bits/basic_string.h (basic_string(const Alloc&)) (basic_string(const basic_string&) (basic_string(const CharT*, size_type, const Alloc&)) (basic_string(const CharT*, const Alloc&)) (basic_string(size_type, CharT, const Alloc&)) (basic_string(initializer_list<CharT>, const Alloc&)) (basic_string(InputIterator, InputIterator, const Alloc&)): Define inline in class body. * include/bits/basic_string.tcc (basic_string(const Alloc&)) (basic_string(const basic_string&) (basic_string(const CharT*, size_type, const Alloc&)) (basic_string(const CharT*, const Alloc&)) (basic_string(size_type, CharT, const Alloc&)) (basic_string(initializer_list<CharT>, const Alloc&)) (basic_string(InputIterator, InputIterator, const Alloc&)): Move definitions into class body.
2020-10-14libstdc++: Improve comments for check_effective_target_cxx11-abiJonathan Wakely1-0/+2
libstdc++-v3/ChangeLog: * testsuite/lib/libstdc++.exp (check_effective_target_cxx11-abi): Add comments about which test flags get used by the check.
2020-10-14libstdc++: Improve comments in std::string testsJonathan Wakely14-44/+44
The COW std::string does support some features of C++11 allocators, just not propagation. Change some comments in the tests to be more precise about that. libstdc++-v3/ChangeLog: * testsuite/21_strings/basic_string/allocator/char/copy.cc: Make comment more precise about what isn't supported by COW strings. * testsuite/21_strings/basic_string/allocator/char/copy_assign.cc: Likewise. * testsuite/21_strings/basic_string/allocator/char/move.cc: Likewise. * testsuite/21_strings/basic_string/allocator/char/move_assign.cc: Likewise. * testsuite/21_strings/basic_string/allocator/char/noexcept.cc: Likewise. * testsuite/21_strings/basic_string/allocator/char/operator_plus.cc: Likewise. * testsuite/21_strings/basic_string/allocator/char/swap.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/move.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/operator_plus.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc: Likewise.
2020-10-14libstdc++: Enable tests that incorrectly require cxx11-abiJonathan Wakely3-11/+6
These tests were not being run when -D_GLIBCXX_USE_CXX11_ABI=0 was added to the test flags, but they actually work OK with the old string. libstdc++-v3/ChangeLog: * testsuite/21_strings/basic_string/allocator/char/minimal.cc: Do not require cxx11-abi effective target. * testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc: Likewise. * testsuite/27_io/basic_fstream/cons/base.cc: Likewise.
2020-10-14libstdc++: Implement LWG 3706 for COW stringsJonathan Wakely3-2/+7
The basic_string deduction guides are defined for the old ABI, but the tests are currently disabled. This is because a single case fails when using the old ABI, which is just because LWG 3706 isn't implemented for the old ABI. That can be done easily, and the tests can be enabled. libstdc++-v3/ChangeLog: * include/bits/basic_string.h [!_GLIBCXX_USE_CXX11_ABI] (basic_string(const _CharT*, const _Alloc&)): Constrain to require an allocator-like type to fix CTAD ambiguity (LWG 3706). * testsuite/21_strings/basic_string/cons/char/deduction.cc: Remove dg-skip-if. * testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc: Likewise.
2020-10-14Fortran : ICE in build_field PR95614Mark Eggleston8-8/+44
Local identifiers can not be the same as a module name. Original patch by Steve Kargl resulted in name clashes between common block names and local identifiers. A local identifier can be the same as a global identier if that identifier is not a module or a program. The original patch was modified to reject global identifiers that represent a module or a program. 2020-10-14 Steven G. Kargl <kargl@gcc.gnu.org> Mark Eggleston <markeggleston@gcc.gnu.org> gcc/fortran/ChangeLog: PR fortran/95614 * decl.c (gfc_get_common): Use gfc_match_common_name instead of match_common_name. * decl.c (gfc_bind_idents): Use gfc_match_common_name instead of match_common_name. * match.c : Rename match_common_name to gfc_match_common_name. * match.c (gfc_match_common): Use gfc_match_common_name instead of match_common_name. * match.h : Rename match_common_name to gfc_match_common_name. * resolve.c (resolve_common_vars): Check each symbol in a common block has a global symbol. If there is a global symbol issue an error if the symbol type is a module or a program. 2020-10-14 Mark Eggleston <markeggleston@gcc.gnu.org> gcc/testsuite/ChangeLog: PR fortran/95614 * gfortran.dg/pr95614_1.f90: New test. * gfortran.dg/pr95614_2.f90: New test. * gfortran.dg/pr95614_3.f90: New test. * gfortran.dg/pr95614_4.f90: New test.
2020-10-14Support ofsetted parameters in local modrefJan Hubicka5-3/+92
2020-10-14 Jan Hubicka <hubicka@ucw.cz> * doc/invoke.texi: (ipa-jump-function-lookups): Document param. * ipa-modref.c (merge_call_side_effects): Use unadjusted_ptr_and_unit_offset. * ipa-prop.c (unadjusted_ptr_and_unit_offset): New function. * ipa-prop.h (unadjusted_ptr_and_unit_offset): Declare. * params.opt: (-param-ipa-jump-function-lookups): New.
2020-10-14Fix SCC discovery in ipa-modrefJan Hubicka1-5/+34
this patch fixes SCC discovery in ipa-modref which is causing misoptimization of gnat bootstrapped with LTO, PGO and -O3. I also improved debug info and spotted wrong parameter to ignore_stores_p (which is probably quite harmless since we only inline matching functions, but it is better to be consistent). PR bootstrap/97350 * ipa-modref.c (ignore_edge): Do not ignore inlined edes. (ipa_merge_modref_summary_after_inlining): Improve debug output and fix parameter of ignore_stores_p.
2020-10-14libgomp: Fix a typo in documentationJakub Jelinek1-1/+1
2020-10-14 Jakub Jelinek <jakub@redhat.com> * libgomp.texi (omp_get_supported_active_levels): Fix a typo.
2020-10-13runtime: populate signal PC on NetBSDNikhil Benesch2-1/+3
The NetBSD libc provides an architecture-independent macro that can extract the PC from a ucontext struct. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261740
2020-10-13syscall: port fix for netbsd unix sockets from upstreamNikhil Benesch2-4/+10
NetBSD does not include the null terminator when in its reported socket length. Port the upstream bugfix for the issue (#6627). This was likely missed during the usual upstream merge because the gc and gccgo socket implementations have diverged quite a bit. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261741
2020-10-14PR target/96759 - Handle global variable assignment from misaligned ↵Kito Cheng3-0/+23
structure/PARALLEL return values. In g:70cdb21e579191fe9f0f1d45e328908e59c0179e, DECL/global variable has handled misaligned stores, but it didn't handle PARALLEL values, and I refer the other part of this function, I found the PARALLEL need handled by emit_group_* functions, so I add a check, and using emit_group_store if storing a PARALLEL value, also checked this change didn't break the testcase(gcc.target/arm/unaligned-argument-3.c) added by the orginal changes. For riscv64 target, struct S {int a; double b;} will pack into a parallel value to return and it has TImode when misaligned access is supported, however TImode required 16-byte align, but it only 8-byte align, so it go to the misaligned stores handling, then it will try to generate move instruction from a PARALLEL value. Tested on following target without introduced new reguression: - riscv32/riscv64 elf - x86_64-linux - arm-eabi v2 changes: - Use maybe_emit_group_store instead of emit_group_store. - Remove push_temp_slots/pop_temp_slots, emit_group_store only require stack temp slot when dst is CONCAT or PARALLEL, however maybe_emit_group_store will always use REG for dst if needed. gcc/ChangeLog: PR target/96759 * expr.c (expand_assignment): Handle misaligned stores with PARALLEL value. gcc/testsuite/ChangeLog: PR target/96759 * g++.target/riscv/pr96759.C: New. * gcc.target/riscv/pr96759.c: New.
2020-10-13reflect: ensure uniqueness of type descriptors on AIX.Clément Chigot10-30/+168
On AIX, duplication of type descriptors can occur if one is declared in the libgo and one in the Go program being compiled. The AIX linker isn't able to merge them together as Linux one does. One solution is to always load libgo first but that needs a huge mechanism in gcc core. Thus, this patch ensures that the duplication isn't visible for the end user. In reflect and internal/reflectlite, the comparison of rtypes is made on their name and not only on their addresses. In reflect, toType() function is using a canonicalization map to force rtypes having the same rtype.String() to return the same Type. This can't be made in internal/reflectlite as it needs sync package. But, for now, it doesn't matter as internal/reflectlite is not widely used. Fixes golang/go#39276 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/260158
2020-10-14Daily bump.GCC Administrator5-1/+224
2020-10-13openmp: Add support for the omp_get_supported_active_levels runtime library ↵Kwok Cheung Yeung11-4/+70
routine This patch implements the omp_get_supported_active_levels runtime routine from the OpenMP 5.0 specification, which returns the maximum number of active nested parallel regions supported by this implementation. The current maximum (set using the omp_set_max_active_levels routine or the OMP_MAX_ACTIVE_LEVELS environment variable) cannot exceed this number. 2020-10-13 Kwok Cheung Yeung <kcy@codesourcery.com> libgomp/ * env.c (gomp_max_active_levels_var): Initialize to gomp_supported_active_levels. (initialize_env): Limit gomp_max_active_levels_var to be at most equal to gomp_supported_active_levels. * fortran.c (omp_get_supported_active_levels): Add ialias_redirect. (omp_get_supported_active_levels_): New. * icv.c (omp_set_max_active_levels): Limit gomp_max_active_levels_var to at most equal to gomp_supported_active_levels. (omp_get_supported_active_levels): New. * libgomp.h (gomp_supported_active_levels): New. * libgomp.map (OMP_5.0.1): Add omp_get_supported_active_levels and omp_get_supported_active_levels_. * libgomp.texi (omp_get_supported_active_levels): New. (omp_set_max_active_levels): Update. Add reference to omp_get_supported_active_levels. * omp.h.in (omp_get_supported_active_levels): New. * omp_lib.f90.in (omp_get_supported_active_levels): New. * omp_lib.h.in (omp_get_supported_active_levels): New. * testsuite/libgomp.c/lib-2.c (main): Check omp_get_max_active_levels against omp_get_supported_active_levels. * testsuite/libgomp.fortran/lib4.f90 (lib4): Likewise.
2020-10-13libstdc++: Fix doxygen comment for std::any_ofNuno Lopes1-1/+1
libstdc++-v3/ChangeLog: * include/bits/stl_algo.h (any_of): Fix incorrect description in comment.
2020-10-13combine: Fix up simplify_shift_const_1 for nested ROTATEs [PR97386]Jakub Jelinek3-2/+41
The following testcases are miscompiled (the first one since my improvements to rotate discovery on GIMPLE, the other one for many years) because combiner optimizes nested ROTATEs with narrowing SUBREG in between (i.e. the outer rotate is performed in shorter precision than the inner one) to just one ROTATE of the rotated constant. While that (under certain conditions) can work for shifts, it can't work for rotates where we can only do that with rotates of the same precision. 2020-10-13 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/97386 * combine.c (simplify_shift_const_1): Don't optimize nested ROTATEs if they have different modes. * gcc.c-torture/execute/pr97386-1.c: New test. * gcc.c-torture/execute/pr97386-2.c: New test.
2020-10-13libstdc++: Update C++20 status documentationJonathan Wakely10-10/+81
libstdc++-v3/ChangeLog: * doc/xml/manual/evolution.xml: Document some API changes and deprecations. * doc/xml/manual/intro.xml: Document LWG 2499. * doc/xml/manual/status_cxx2020.xml: Update status. * doc/html/*: Regenerate.
2020-10-13libstdc++: Remove trailing whitespace from XML docsJonathan Wakely63-346/+346
libstdc++-v3/ChangeLog: * doc/xml/book.txml: Remove trailing whitespace. * doc/xml/chapter.txml: Likewise. * doc/xml/class.txml: Likewise. * doc/xml/gnu/fdl-1.3.xml: Likewise. * doc/xml/gnu/gpl-3.0.xml: Likewise. * doc/xml/manual/abi.xml: Likewise. * doc/xml/manual/algorithms.xml: Likewise. * doc/xml/manual/allocator.xml: Likewise. * doc/xml/manual/appendix_contributing.xml: Likewise. * doc/xml/manual/appendix_free.xml: Likewise. * doc/xml/manual/appendix_porting.xml: Likewise. * doc/xml/manual/atomics.xml: Likewise. * doc/xml/manual/auto_ptr.xml: Likewise. * doc/xml/manual/backwards_compatibility.xml: Likewise. * doc/xml/manual/bitmap_allocator.xml: Likewise. * doc/xml/manual/build_hacking.xml: Likewise. * doc/xml/manual/codecvt.xml: Likewise. * doc/xml/manual/concurrency.xml: Likewise. * doc/xml/manual/concurrency_extensions.xml: Likewise. * doc/xml/manual/configure.xml: Likewise. * doc/xml/manual/containers.xml: Likewise. * doc/xml/manual/ctype.xml: Likewise. * doc/xml/manual/debug.xml: Likewise. * doc/xml/manual/debug_mode.xml: Likewise. * doc/xml/manual/diagnostics.xml: Likewise. * doc/xml/manual/documentation_hacking.xml: Likewise. * doc/xml/manual/evolution.xml: Likewise. * doc/xml/manual/internals.xml: Likewise. * doc/xml/manual/intro.xml: Likewise. * doc/xml/manual/io.xml: Likewise. * doc/xml/manual/iterators.xml: Likewise. * doc/xml/manual/locale.xml: Likewise. * doc/xml/manual/localization.xml: Likewise. * doc/xml/manual/messages.xml: Likewise. * doc/xml/manual/mt_allocator.xml: Likewise. * doc/xml/manual/numerics.xml: Likewise. * doc/xml/manual/parallel_mode.xml: Likewise. * doc/xml/manual/policy_data_structures.xml: Likewise. * doc/xml/manual/prerequisites.xml: Likewise. * doc/xml/manual/shared_ptr.xml: Likewise. * doc/xml/manual/spine.xml: Likewise. * doc/xml/manual/status_cxxtr1.xml: Likewise. * doc/xml/manual/status_cxxtr24733.xml: Likewise. * doc/xml/manual/strings.xml: Likewise. * doc/xml/manual/support.xml: Likewise. * doc/xml/manual/test.xml: Likewise. * doc/xml/manual/test_policy_data_structures.xml: Likewise. * doc/xml/manual/using.xml: Likewise. * doc/xml/manual/using_exceptions.xml: Likewise. * doc/xml/manual/utilities.xml: Likewise. * doc/html/*: Regenerate.
2020-10-13Do not save hash slots across calls to hash_table::get_or_insert.Aldy Hernandez1-12/+12
There's a read of a freed block while accessing the default_slot in calc_switch_ranges. default_slot->intersect (def_range); It seems the default_slot got swiped from under us, and the valgrind dump indicates the free came from the get_or_insert in the same function: irange *&slot = m_edge_table->get_or_insert (e, &existed); So it looks like the get_or_insert is actually freeing the value of the previously allocated default_slot. Looking down the chain from get_or_insert, we see it calls hash_table<>::expand, which actually does a free while doing a resize of sorts: if (!m_ggc) Allocator <value_type> ::data_free (oentries); else ggc_free (oentries); This patch avoids keeping a pointer to the default_slot across multiple calls to get_or_insert in the loop. gcc/ChangeLog: PR tree-optimization/97379 * gimple-range-edge.cc (outgoing_range::calc_switch_ranges): Do not save hash slot across calls to hash_table<>::get_or_insert.
2020-10-13lto-wrapper: Use nontemp filename with -save-tempsTobias Burnus1-1/+1
gcc/ChangeLog: * lto-wrapper.c (find_crtoffloadtable): Fix last commit by adding NULL as last argument to concat.
2020-10-13[arm] Use -Os for stack-protector-[56].c testsRichard Sandiford2-2/+2
Using -O2 made the tests subject to LDRD vs. LDM tuning. The simplest fix seems to be to use -Os, so that LDM is unequivocally a win. gcc/testsuite/ * gcc.target/arm/stack-protector-5.c: Use -Os rather than -O2. * gcc.target/arm/stack-protector-6.c: Likewise.
2020-10-13AArch64: Add Neoverse N2 tuning modelKyrylo Tkachov2-1/+27
This patch adds a tuning structure for Neoverse N2 to allow for further tuning. For now it's just a deduplication of the Neoverse N1 struct that it was reusing but with the SVE width set to 128. Bootstrapped and tested on aarch64-none-linux-gnu. gcc/ * config/aarch64/aarch64.c (neoversen2_tunings): Define. * config/aarch64/aarch64-cores.def (neoverse-n2): Use it.
2020-10-13lto-wrapper: Use nontemp filename with -save-tempsTobias Burnus1-3/+7
gcc/ChangeLog: * lto-wrapper.c (find_crtoffloadtable): With -save-temps, use non-temp file name utilizing the dump prefix. (run_gcc): Update call.
2020-10-13Remove STMT_VINFO_SAME_ALIGN_REFSRichard Biener8-110/+143
This makes the only consumer of STMT_VINFO_SAME_ALIGN_REFS, the loop peeling for alignment code, use locally computed data and then removes STMT_VINFO_SAME_ALIGN_REFS and its computation. It also adjusts the auto_vec<> move CTOR/assignment so you can write auto_vec<..> foo = bar.copy (); and have foo own the generated copy. 2020-10-13 Richard Biener <rguenther@suse.de> PR tree-optimization/97382 * tree-vectorizer.h (_stmt_vec_info::same_align_refs): Remove. (STMT_VINFO_SAME_ALIGN_REFS): Likewise. * tree-vectorizer.c (vec_info::new_stmt_vec_info): Do not allocate STMT_VINFO_SAME_ALIGN_REFS. (vec_info::free_stmt_vec_info): Do not release STMT_VINFO_SAME_ALIGN_REFS. * tree-vect-data-refs.c (vect_analyze_data_ref_dependences): Do not compute self and read-read dependences. (vect_dr_aligned_if_related_peeled_dr_is): New helper. (vect_dr_aligned_if_peeled_dr_is): Likewise. (vect_update_misalignment_for_peel): Use it instead of iterating over STMT_VINFO_SAME_ALIGN_REFS. (dr_align_group_sort_cmp): New function. (vect_enhance_data_refs_alignment): Count the number of same aligned refs here and elide uses of STMT_VINFO_SAME_ALIGN_REFS. (vect_find_same_alignment_drs): Remove. (vect_analyze_data_refs_alignment): Do not call it. * vec.h (auto_vec<T, 0>::auto_vec): Adjust CTOR to take a vec<>&&, assert it isn't using auto storage. (auto_vec& operator=): Apply a similar change. * gcc.dg/vect/no-vfa-vect-dv-2.c: Remove same align dump scanning. * gcc.dg/vect/vect-103.c: Likewise. * gcc.dg/vect/vect-91.c: Likewise. * gfortran.dg/vect/vect-4.f90: Likewise.
2020-10-13nvptx/mkoffload.c: Add missing fcloseTobias Burnus1-0/+1
gcc/ChangeLog: * config/nvptx/mkoffload.c (main): Add missing fclose (in).
2020-10-13ASAN: disable -Wno-stringop-overflow for 2 testsMartin Liska2-1/+2
gcc/testsuite/ChangeLog: PR middle-end/97392 * g++.dg/asan/asan_test.C: Disable -Wstringop-overflow. * gcc.dg/asan/pr80166.c: Likewise.
2020-10-13AArch64: Add FLAG for mul/mla/mls intrinsics [PR94442]zhengnannan1-26/+26
2020-10-13 Zhiheng Xie <xiezhiheng@huawei.com> Nannan Zheng <zhengnannan@huawei.com> gcc/ChangeLog: * config/aarch64/aarch64-simd-builtins.def: Add proper FLAG for mul/mla/mls intrinsics.
2020-10-13openmp: Improve composite triangular loop lowering and expansionJakub Jelinek2-42/+124
This propagates needed values from the point where number of iterations is calculated on composite loops to the places where that information is needed to use the more efficient square root discovery to compute the starting iterator values from the logical iteration number. 2020-10-13 Jakub Jelinek <jakub@redhat.com> * omp-low.c (add_taskreg_looptemp_clauses): For triangular loops with non-constant number of iterations add another 4 _looptemp_ clauses before the (optional) one for lastprivate. (lower_omp_for_lastprivate): Skip those clauses when looking for the lastprivate clause. (lower_omp_for): For triangular loops with non-constant number of iterations add another 4 _looptemp_ clauses. * omp-expand.c (expand_omp_for_init_counts): For triangular loops with non-constant number of iterations set counts[0], fd->first_inner_iterations, fd->factor and fd->adjn1 from the newly added _looptemp_ clauses. (expand_omp_for_init_vars): Initialize the newly added _looptemp_ clauses. (find_lastprivate_looptemp): New function. (expand_omp_for_static_nochunk, expand_omp_for_static_chunk, expand_omp_taskloop_for_outer): Use it instead of manually skipping _looptemp_ clauses.
2020-10-13Fix tramp3d PGO misoptimizationJan Hubicka1-104/+84
this patch fixes tramp3d ICE with PGO. It has turned out to be by a misupdate in ignore_edge I introduced in previous patch that made us to not compute SCCs correctly with -fno-lto. While looking for problem I proofread the sources and also fortified the srouces for situation where we insert a summary for no good reason and noticed a problem that early ipa-modref disabled itself in some cases. I also noticed that param_index is treamed as uhwi while it is signed (that wastes file space). Bootstrapping/regtesting x86_64-linux, will commit it tomorrow if that passes. gcc/ChangeLog: 2020-10-13 Jan Hubicka <hubicka@ucw.cz> PR ipa/97389 * ipa-modref.c (dump_lto_records): Fix formating of dump file. (modref_summary::dump): Do not check loads to be non-null. (modref_summary_lto::dump): Do not check loads to be non-null. (merge_call_side_effects): Improve debug output. (analyze_call): Crash when cur_summary->loads is NULL. (analyze_function): Update. (modref_summaries::insert): Insert only into summaries, not optimization_summaries. (modref_summaries::duplicate): Likewise; crash when load or sotres are NULL. (modref_summaries_lto::duplicate): Crash when loads or stores are NULL. (write_modref_records): param_index is signed. (read_modref_records): param_index is signed. (modref_write): Crash when loads or stores are NULL. (read_section): Compensate previous change. (pass_modref::execute): Do not check optimization_summaries t be non-NULL. (ignore_edge): Fix. (compute_parm_map): Fix formating. (modref_propagate_in_scc): Do not expect loads/stores to be NULL.
2020-10-13Daily bump.GCC Administrator10-1/+470
2020-10-12analyzer: handle static callbacks [PR97258]David Malcolm9-14/+175
The analyzer's initial worklist was only populated with non-static functions in the TU (along with those that look promising for call summaries). Hence some static functions that were never explicitly called but could be called via function pointers were not being analyzed. This patch remedies this by ensuring that functions that escape as function pointers get added to the worklist, if they haven't been already. Another fix would be to simply analyze all functions that we have a body for, but too much of the testsuite relies on static test functions not being directly analyzed. gcc/analyzer/ChangeLog: PR analyzer/97258 * engine.cc (impl_region_model_context::on_escaped_function): New vfunc. (exploded_graph::add_function_entry): Use m_functions_with_enodes to implement idempotency. (add_any_callbacks): New. (exploded_graph::build_initial_worklist): Use the above to find callbacks that are reachable from global initializers. (exploded_graph::on_escaped_function): New. * exploded-graph.h (impl_region_model_context::on_escaped_function): New decl. (exploded_graph::on_escaped_function): New decl. (exploded_graph::m_functions_with_enodes): New field. * region-model-reachability.cc (reachable_regions::reachable_regions): Replace "store" param with "model" param; use it to initialize m_model. (reachable_regions::add): When getting the svalue for the region, call get_store_value on the model rather than using an initial value. (reachable_regions::mark_escaped_clusters): Add ctxt param and use it to call on_escaped_function when a function_region escapes. * region-model-reachability.h (reachable_regions::reachable_regions): Replace "store" param with "model" param. (reachable_regions::mark_escaped_clusters): Add ctxt param. (reachable_regions::m_model): New field. * region-model.cc (region_model::handle_unrecognized_call): Update for change in reachable_regions ctor. (region_model::handle_unrecognized_call): Pass ctxt to mark_escaped_clusters. (region_model::get_reachable_svalues): Update for change in reachable_regions ctor. (region_model::get_initial_value_for_global): Read-only variables keep their initial values. * region-model.h (region_model_context::on_escaped_function): New vfunc. (noop_region_model_context::on_escaped_function): New. gcc/testsuite/ChangeLog: PR analyzer/97258 * gcc.dg/analyzer/callbacks-1.c: New test. * gcc.dg/analyzer/callbacks-2.c: New test. * gcc.dg/analyzer/callbacks-3.c: New test.
2020-10-12mathfn_built_in_type case type fixAlexandre Oliva1-13/+13
Martin Liška reported warnings about type mismatches in the cases in the recently-introduced mathfn_built_in_type. This patch adjusts the macros to use the combined_fn enumerators rather than the (currently same-numbered) built_in_function ones. for gcc/ChangeLog * builtins.c (mathfn_built_in_type): Use CFN_ enumerators.
2020-10-12make sin and cos generics inlineableAlexandre Oliva1-0/+2
Enable the sincos optimization within callers of these (single-argument) elementary functions. for gcc/ada/ChangeLog * libgnat/a-ngelfu.ads (Sin, Cos): Make the single-argument functions inline.
2020-10-12MIPS/libphobos: Fix switchcontext.S assembly for MIPS I ISAMaciej W. Rozycki1-12/+12
Correct MIPS I assembly build errors in switchcontext.S: .../libphobos/libdruntime/config/mips/switchcontext.S: Assembler messages: .../libphobos/libdruntime/config/mips/switchcontext.S:50: Error: opcode not supported on this processor: mips1 (mips1) `sdc1 $f20,(0*8-((6*8+4+(-6*8+4&7))))($sp)' etc., due to the use of the MIPS II LDC1 and SDC1 hardware instructions for FP register load and store operations. Instead use the L.D and S.D generic assembly instructions, which are strict aliases for the LDC1 and SDC1 instructions respectively and produce identical machine code where the assembly for the MIPS II or a higher ISA has been requested, however they become assembly macros and expand to compatible sequences of LWC1 and SWC1 hardware instructions where the assembly for the MIPS I ISA is in effect. libphobos/ * libdruntime/config/mips/switchcontext.S [__mips_hard_float]: Use L.D and S.D generic assembly instructions rather than LDC1 and SDC1 MIPS II hardware instructions.
2020-10-12Do not ignore failures from gimple_range_calc_op2.Andrew MacLeod2-2/+16
We were ignoring the return value if op2 returned false and getting garbage ranges propagated. gcc/ChangeLog: PR tree-optimization/97381 * gimple-range-gori.cc (gori_compute::compute_operand2_range): If a range cannot be calculated through operand 2, return false. gcc/testsuite/ChangeLog: * gcc.dg/pr97381.c: New test.
2020-10-12libstdc++: Apply proposed resolution for LWG 3450Patrick Palka2-0/+12
libstdc++-v3/ChangeLog: * include/std/ranges (take_while_view::begin): Constrain the const overload further as per LWG 3450. (take_while_view::end): Likewise. * testsuite/std/ranges/adaptors/take_while.cc: Add test for LWG 3450.
2020-10-12libstdc++: Apply proposed resolution for LWG 3449 [PR95322]Patrick Palka2-4/+47
Now that the frontend bug PR96805 is fixed, we can cleanly apply the proposed resolution for this issue. This slightly deviates from the proposed resolution by declaring _CI a member of take_view instead of take_view::_Sentinel, since it doesn't depend on anything within _Sentinel anymore. libstdc++-v3/ChangeLog: PR libstdc++/95322 * include/std/ranges (take_view::_CI): Define this alias template as per LWG 3449 and remove ... (take_view::_Sentinel::_CI): ... this type alias. (take_view::_Sentinel::operator==): Adjust use of _CI accordingly. Define a second overload that accepts an iterator of the opposite constness as per LWG 3449. (take_while_view::_Sentinel::operator==): Likewise. * testsuite/std/ranges/adaptors/95322.cc: Add tests for LWG 3449.
2020-10-12libstdc++: Update doxyfile to Doxygen 1.8.20 formatJonathan Wakely1-73/+193
libstdc++-v3/ChangeLog: * doc/doxygen/user.cfg.in: Update to Doxygen 1.8.20 format.
2020-10-12libstdc++: Include C++17 features in doxygen API docsJonathan Wakely1-1/+1
libstdc++-v3/ChangeLog: * doc/doxygen/user.cfg.in (PREDEFINED): Use __cplusplus=201703L so that C++17 features are documented.
2020-10-12libstdc++: Fix documentation for return values of copy algosJonathan Wakely1-4/+4
The doxygen comments for these algos all incorrectly claim to use (first - last) as the difference from the start of the output range to the return value. As reported on the mailing list by Johannes Choo, it should be (last - first). libstdc++-v3/ChangeLog: * include/bits/stl_algobase.h (copy, move, copy_backward) (move_backward): Fix documentation for returned iterator.
2020-10-12operator_trunc_mod::wi_fold: Return VARYING for mod by zero.Aldy Hernandez2-3/+18
gcc/ChangeLog: PR tree-optimization/97378 * range-op.cc (operator_trunc_mod::wi_fold): Return VARYING for mod by zero. gcc/testsuite/ChangeLog: * gcc.dg/pr97378.c: New test.
2020-10-12analyzer: add warnings about writes to constant regions [PR95007]David Malcolm7-1/+248
This patch adds two new warnings: -Wanalyzer-write-to-const -Wanalyzer-write-to-string-literal for code paths where the analyzer detects a write to a constant region. As noted in the documentation part of the patch, the analyzer doesn't prioritize detection of such writes, in that the state-merging logic will blithely lose the distinction between const and non-const regions. Hence false negatives are likely to arise due to state-merging. However, if the analyzer does happen to spot such a write, it seems worth reporting, hence this patch. gcc/analyzer/ChangeLog: * analyzer.opt (Wanalyzer-write-to-const): New. (Wanalyzer-write-to-string-literal): New. * region-model-impl-calls.cc (region_model::impl_call_memcpy): Call check_for_writable_region. (region_model::impl_call_memset): Likewise. (region_model::impl_call_strcpy): Likewise. * region-model.cc (class write_to_const_diagnostic): New. (class write_to_string_literal_diagnostic): New. (region_model::check_for_writable_region): New. (region_model::set_value): Call check_for_writable_region. * region-model.h (region_model::check_for_writable_region): New decl. gcc/ChangeLog: * doc/invoke.texi: Document -Wanalyzer-write-to-const and -Wanalyzer-write-to-string-literal. gcc/testsuite/ChangeLog: PR c/83347 PR middle-end/90404 PR analyzer/95007 * gcc.dg/analyzer/write-to-const-1.c: New test. * gcc.dg/analyzer/write-to-string-literal-1.c: New test.
2020-10-12PR c++/97201 - ICE in -Warray-bounds writing to result of operator new(0)Martin Sebor7-9/+278
gcc/cp/ChangeLog: PR c++/97201 * error.c (dump_type_suffix): Handle both the C and C++ forms of zero-length arrays. libstdc++-v3/ChangeLog: PR c++/97201 * libsupc++/new (operator new): Add attribute alloc_size and malloc. gcc/testsuite/ChangeLog: PR c++/97201 * g++.dg/warn/Wplacement-new-size-8.C: Adjust expected message. * g++.dg/warn/Warray-bounds-10.C: New test. * g++.dg/warn/Warray-bounds-11.C: New test. * g++.dg/warn/Warray-bounds-12.C: New test. * g++.dg/warn/Warray-bounds-13.C: New test.