aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-11-04libstdc++: Document istreambuf_iterator base class change [PR 92285]Jonathan Wakely2-0/+16
libstdc++-v3/ChangeLog: PR libstdc++/92285 * doc/xml/manual/evolution.xml: Document change to base class. * doc/html/manual/api.html: Regenerate.
2020-11-04add costing to SLP vectorized PHIsRichard Biener3-4/+7
I forgot to cost vectorized PHIs. Scalar PHIs are just costed as scalar_stmt so the following costs vector PHIs as vector_stmt. 2020-11-04 Richard Biener <rguenther@suse.de> * tree-vectorizer.h (vectorizable_phi): Adjust prototype. * tree-vect-stmts.c (vect_transform_stmt): Adjust. (vect_analyze_stmt): Pass cost_vec to vectorizable_phi. * tree-vect-loop.c (vectorizable_phi): Do costing.
2020-11-04tree-optimization/97709 - set abnormal flag when vectorizing live lanesRichard Biener2-0/+29
This properly sets the abnormal flag when vectorizing live lanes when the original scalar was live across an abnormal edge. 2020-11-04 Richard Biener <rguenther@suse.de> PR tree-optimization/97709 * tree-vect-loop.c (vectorizable_live_operation): Set SSA_NAME_OCCURS_IN_ABNORMAL_PHI when necessary. * gcc.dg/vect/bb-slp-pr97709.c: New testcase.
2020-11-04phiopt: Optimize x ? 1024 : 0 to (int) x << 10 [PR97690]Jakub Jelinek4-14/+43
The following patch generalizes the x ? 1 : 0 -> (int) x optimization to handle also left shifts by constant. During x86_64-linux and i686-linux bootstraps + regtests it triggered in 1514 unique non-LTO -m64 cases (sort -u on log mentioning filename, function name and shift count) and 1866 -m32 cases. Unfortunately, the patch regresses (before the tests have been adjusted): +FAIL: gcc.dg/tree-ssa/ssa-ccp-11.c scan-tree-dump-times optimized "if " 0 +FAIL: gcc.dg/vect/bb-slp-pattern-2.c -flto -ffat-lto-objects scan-tree-dump-times slp1 "optimized: basic block" 1 +FAIL: gcc.dg/vect/bb-slp-pattern-2.c scan-tree-dump-times slp1 "optimized: basic block" 1 and in both cases it actually results in worse code. > > We'd need some optimization that would go through all PHI edges and > > compute if some use of the phi results don't actually compute a constant > > across all the PHI edges - 1 & 0 and 0 & 1 is always 0. > PRE should do this, IMHO only optimizing it at -O2 is fine. > > Similarly, in the slp vectorization test there is: > > a[0] = b[0] ? 1 : 7; > note this, carefully avoiding the already "optimized" b[0] ? 1 : 0 ... > So the option is to put : 7 in the 2, 4 an 8 case as well. The testcase > wasn't added for any real-world case but is artificial I guess for > COND_EXPR handling of invariants. > But yeah, for things like SLP it means we eventually have to > implement reverse transforms for all of this to make the lanes > matching. But that's true anyway for things like x + 1 vs. x + 0 > or x / 3 vs. x / 2 or other simplifications we do. 2020-11-04 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/97690 * tree-ssa-phiopt.c (conditional_replacement): Also optimize cond ? pow2p_cst : 0 as ((type) cond) << cst. * gcc.dg/tree-ssa/phi-opt-22.c: New test. * gcc.dg/tree-ssa/ssa-ccp-11.c: Use -O2 instead of -O1. * gcc.dg/vect/bb-slp-pattern-2.c (foo): Use ? 2 : 7, ? 4 : 7 and ? 8 : 7 instead of ? 2 : 0, ? 4 : 0, ? 8 : 0.
2020-11-04libstdc++: Fix constant expressions in std::uniform_int_distributionJonathan Wakely1-4/+4
Clang and EDG say the class member access expressions __urng.min() and __urng.max() are not constant expressions, because the object expression __urng is not usable in a constant expresion. Use a qualified-id to call those static member functions instead. Co-authored-by: Stephan Bergmann <sbergman@redhat.com> libstdc++-v3/ChangeLog: * include/bits/uniform_int_dist.h (uniform_int_distribution::_S_nd): Use qualified-id to refer to static member functions.
2020-11-04gcc-changelog: Change parse_git_revisions strict argument to True.Martin Liska1-1/+1
Change the default that is used by GIT server hook and also by git_update_version.py. Both should use True now. contrib/ChangeLog: * gcc-changelog/git_repository.py: Set strict=True for parse_git_revisions as a default.
2020-11-04Re-instantiate SLP induction IV CSERichard Biener1-2/+19
This re-instantiates the previously removed CSE, fixing the FAIL of gcc.dg/vect/costmodel/x86_64/costmodel-pr30843.c It turns out the previous approach still works. 2020-11-04 Richard Biener <rguenther@suse.de> * tree-vect-loop.c (vectorizable_induction): Re-instantiate previously removed CSE of SLP IVs.
2020-11-04testsuite: fix arm/pure-code/no-literal-pool-* testsChristophe Lyon2-2/+4
Add -mfloat-abi=soft and skip the tests if -mfloat-abi=hard is supplied. This avoids failures when testing with overridden flags such as mthumb/-mcpu=cortex-m4/-mfloat-abi=hard 2020-11-04 Christophe Lyon <christophe.lyon@linaro.org> gcc/testsuite/ * gcc.target/arm/pure-code/no-literal-pool-m0.c: Add dg-skip-if and -mfloat-abi=soft option. * gcc.target/arm/pure-code/no-literal-pool-m23.c: Likewise.
2020-11-04gcc-changelog/git_commit.py: Check for missing descriptionTobias Burnus3-2/+70
Especially when using mklog.py, it is simply to forget to fill in the entries after the '\t* file.c (section):' or '\t(section):'. contrib/ChangeLog: * gcc-changelog/git_commit.py (item_parenthesis_empty_regex, item_parenthesis_regex): Add. (check_for_empty_description): Use them. * gcc-changelog/test_email.py (test_emptry_entry_desc, test_emptry_entry_desc_2): Add. * gcc-changelog/test_patches.txt: Add two testcases for it.
2020-11-04i386: Fix Intel MCU psABI comment w.r.t DEFAULT_PCC_STRUCT_RETURNUros Bizjak1-1/+1
2020-11-04 Uroš Bizjak <ubizjak@gmail.com> gcc/ * config/i386/i386-options.c (ix86_recompute_optlev_based_flags): Fix Intel MCU psABI comment w.r.t DEFAULT_PCC_STRUCT_RETURN.
2020-11-04openmp: allocate clause vs. *reduction array sections [PR97670]Jakub Jelinek6-16/+340
This patch finds the base expression of reduction array sections and uses it in checks whether allocate clause lists only variables that have been privatized. Also fixes a pasto that caused an ICE. 2020-11-04 Jakub Jelinek <jakub@redhat.com> PR c++/97670 gcc/c-family/ * c-omp.c (c_omp_split_clauses): Look through array reductions to find underlying decl to clear in the allocate_head bitmap. gcc/c/ * c-typeck.c (c_finish_omp_clauses): Look through array reductions to find underlying decl to clear in the aligned_head bitmap. gcc/cp/ * semantics.c (finish_omp_clauses): Look through array reductions to find underlying decl to clear in the aligned_head bitmap. Use DECL_UID (t) instead of DECL_UID (OMP_CLAUSE_DECL (c)) when clearing in the bitmap. Only diagnose errors about allocate vars not being privatized on the same construct on allocate clause if it has a DECL_P OMP_CLAUSE_DECL. gcc/testsuite/ * c-c++-common/gomp/allocate-4.c: New test. * g++.dg/gomp/allocate-2.C: New test. * g++.dg/gomp/allocate-3.C: New test.
2020-11-04Fix duplicate ChangeLog entries.Martin Liska2-109/+4
2020-11-04bootstrap/97666 - really fix sizeof (bool) issueRichard Biener1-2/+2
Pastoed the previous fix too quickly, the following fixes the correct spot - the memset, not the allocation. 2020-11-04 Richard Biener <rguenther@suse.de> PR bootstrap/97666 * tree-vect-slp.c (vect_build_slp_tree_2): Revert previous fix and instead adjust the memset.
2020-11-04i386: Cleanup i386/i386elf.h and align it's return convention with the SVR4 ABIPat Bernardi2-60/+6
While i386elf.h was originally derived from sysv4.h it has not been kept up to date with the development of the compiler. Two changes are made: * The return convention now follows the i386 and x86_64 SVR4 ABIs again. * The more efficient default version of ASM_OUTPUT_ASCII in elfos.h is used. 2020-11-04 Pat Bernardi <bernardi@adacore.com> gcc/ChangeLog * config/i386/i386elf.h (SUBTARGET_RETURN_IN_MEMORY): Remove. (ASM_OUTPUT_ASCII): Likewise. (DEFAULT_PCC_STRUCT_RETURN): Define. * config/i386/i386.c (ix86_return_in_memory): Remove SUBTARGET_RETURN_IN_MEMORY.
2020-11-04Objective-C++ : Fix ICE in potential_constant_expression_1.Iain Sandoe4-2/+23
We cannot, as things stand, handle Objective-C tree codes in the switch and deal with this by calling out to a function that has a dummy version when Objective-C is not enabled. Because of the way the logic works (with a fall through to a 'sorry' in case of unhandled expressions), the function reports cases that are known to be unsuitable for constant exprs. The dummy function always reports 'false' and thus will fall through to the 'sorry'. gcc/c-family/ChangeLog: * c-objc.h (objc_non_constant_expr_p): New. * stub-objc.c (objc_non_constant_expr_p): New. gcc/cp/ChangeLog: * constexpr.c (potential_constant_expression_1): Handle expressions known to be non-constant for Objective-C. gcc/objc/ChangeLog: * objc-act.c (objc_non_constant_expr_p): New.
2020-11-04c: Implement C2x nodiscard attributeJoseph Myers8-12/+236
C2x adds the nodiscard standard attribute, with an optional string argument, as in C++; implement it for C. Bootstrapped with no regressions for x86_64-pc-linux-gnu. gcc/c/ 2020-11-04 Joseph Myers <joseph@codesourcery.com> * c-decl.c (handle_nodiscard_attribute): New. (std_attribute_table): Add nodiscard. * c-parser.c (c_parser_std_attribute): Expect argument to nodiscard attribute to be a string. Do not special-case ignoring nodiscard. * c-typeck.c (maybe_warn_nodiscard): New. (build_compound_expr, emit_side_effect_warnings): Call maybe_warn_nodiscard. (c_process_expr_stmt, c_finish_stmt_expr): Also call emit_side_effect_warnings if warn_unused_result. gcc/testsuite/ 2020-11-04 Joseph Myers <joseph@codesourcery.com> * gcc.dg/c2x-attr-nodiscard-1.c, gcc.dg/c2x-attr-nodiscard-2.c, gcc.dg/c2x-attr-nodiscard-3.c, gcc.dg/c2x-attr-nodiscard-4.c: New tests. * gcc.dg/c2x-attr-syntax-5.c: Remove nodiscard test.
2020-11-04Don't extract memory from operand for normal memory constraint.liuhongt4-4/+20
gcc/ChangeLog PR target/97540 * ira.c: (ira_setup_alts): Extract memory from operand only for special memory constraint. * recog.c (asm_operand_ok): Ditto. * lra-constraints.c (process_alt_operands): MEM_P is required for normal memory constraint. gcc/testsuite/ChangeLog * gcc.target/i386/pr97540.c: New test.
2020-11-04Fix invalid address for special_memory_constraint.liuhongt1-8/+13
gcc/ChangeLog PR target/97532 * lra-constraints.c (valid_address_p): Handle operand of special memory constraint. (process_address_1): Ditto.
2020-11-04Daily bump.GCC Administrator10-1/+719
2020-11-04Add testcase for pr97695Jan Hubicka1-0/+20
* gcc.c-torture/execute/pr97695.c: New test.
2020-11-04Fix copying of clone_info while reshaping clone tree.Jan Hubicka6-28/+21
2020-11-04 Jan Hubicka <hubicka@ucw.cz> PR ipa/97695 * cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Fix ICE with in dumping code. (cgraph_node::remove): Save clone info before releasing it and pass it to unregister. * cgraph.h (symtab_node::unregister): Add clone_info parameter. (cgraph_clone::unregister): Likewise. * cgraphclones.c (cgraph_node::find_replacement): Copy clone info * symtab-clones.cc (clone_infos_t::duplicate): Remove. (clone_info::get_create): Simplify. * symtab.c (symtab_node::unregister): Pass around clone info. * varpool.c (varpool_node::remove): Update.
2020-11-03c++: Not all character types are byte-access types.Jason Merrill2-3/+211
The patch for 94923 that introduced is_byte_access_type wrongly changed build_cplus_array_type to treat even arrays of char16_t as typeless storage, which is wrong; only arrays of char and unsigned char have the special alias semantics in C++. G++ used to treat signed char the same way, as C does, but C++ has always omitted it. gcc/cp/ChangeLog: * tree.c (is_byte_access_type): Don't use char_type_p. gcc/testsuite/ChangeLog: * g++.dg/Wclass-memaccess.C: Check that signed char and char16_t aren't treated as byte-access types.
2020-11-03libstdc++: Ensure std::lock_guard is declaredJonathan Wakely1-4/+1
libstdc++-v3/ChangeLog: * include/std/syncstream: Include <bits/std_mutex.h> unconditionally.
2020-11-03[OpenACC] Use proper location to 'inform' of enclosing parent compute constructThomas Schwinge3-11/+104
Bug fix for recent commit beddd1762ad2bbe84dd776c54489153f83f21e56 "[OpenACC] More precise diagnostics for 'gang', 'worker', 'vector' clauses with arguments on 'loop' only allowed in 'kernels' regions": > [...], and 'inform' at the location of the enclosing parent > compute construct/[...]. Now really. gcc/ * omp-low.c (scan_omp_for) <OpenACC>: Use proper location to 'inform' of enclosing parent compute construct. gcc/testsuite/ * c-c++-common/goacc/pr92793-1.c: Extend. * gfortran.dg/goacc/pr92793-1.f90: Likewise.
2020-11-03libstdc++: Add mising gnu-versioned-namespace symbolsFrançois Dumont1-0/+4
libstdc++-v3/ChangeLog: * config/abi/pre/gnu-versioned-namespace.ver: Add __istream_extract and _Safe_local_iterator_base::_M_attach_single symbols.
2020-11-03c++: Don't try to parse a function declaration as deduction guide [PR97663]Jakub Jelinek2-0/+16
While these function declarations have NULL decl_specifiers->type, they have still type specifiers specified from which the default int in the return type is added, so we shouldn't try to parse those as deduction guides. 2020-11-03 Jakub Jelinek <jakub@redhat.com> PR c++/97663 * parser.c (cp_parser_init_declarator): Don't try to parse C++17 deduction guides if there are any type specifiers even when type is NULL. * g++.dg/cpp1z/class-deduction75.C: New test.
2020-11-03libstdc++: Refactor std::call_once internalsJonathan Wakely1-29/+39
This separates the definition of std::__call_proxy into two funcions, one for TLS and one for non-TLS, to make them easier to read. It also replaces the __get_once_functor_lock_ptr() internal helper with a new set_lock_ptr(unique_lock<mutex>*) function so that __once_proxy doesn't need to call it twice. libstdc++-v3/ChangeLog: * src/c++11/mutex.cc [_GLIBCXX_HAVE_TLS] (__once_proxy): Define separately for TLS targets. [!_GLIBCXX_HAVE_TLS] (__get_once_functor_lock_ptr): Replace with ... (set_lock_ptr): ... this. Set new value and return previous value. [!_GLIBCXX_HAVE_TLS] (__set_once_functor_lock_ptr): Adjust to use set_lock_ptr. [!_GLIBCXX_HAVE_TLS] (__once_proxy): Likewise.
2020-11-03c++: DR2303, ambiguous base deduction [PR97453]kamlesh kumar2-2/+51
When there are two possible matches and one is a base of the other, choose the derived class rather than fail. gcc/cp/ChangeLog 2020-10-21 Kamlesh Kumar <kamleshbhalui@gmail.com> Jason Merrill <jason@redhat.com> PR c++/97453 DR2303 * pt.c (get_template_base): Consider closest base in template deduction when base of base also matches. gcc/testsuite/ChangeLog 2020-10-21 Kamlesh Kumar <kamleshbhalui@gmail.com> * g++.dg/DRs/dr2303.C: New test.
2020-11-03Add missing non-NULL check in cgraphclonesJan Hubicka1-1/+1
2020-11-03 Jan Hubicka <hubicka@ucw.cz> PR ipa/97698 * cgraphclones.c (duplicate_thunk_for_node): Check that info is non-NULL.
2020-11-03libstdc++: Rewrite std::call_once to use futexes [PR 66146]Jonathan Wakely11-90/+274
The current implementation of std::call_once uses pthread_once, which only meets the C++ requirements when compiled with support for exceptions. For most glibc targets and all non-glibc targets, pthread_once does not work correctly if the init_routine exits via an exception. The pthread_once_t object is left in the "active" state, and any later attempts to run another init_routine will block forever. This change makes std::call_once work correctly for Linux targets, by replacing the use of pthread_once with a futex, based on the code from __cxa_guard_acquire. For both glibc and musl, the Linux implementation of pthread_once is already based on futexes, and pthread_once_t is just a typedef for int, so this change does not alter the layout of std::once_flag. By choosing the values for the int appropriately, the new code is even ABI compatible. Code that calls the old implementation of std::call_once will use pthread_once to manipulate the int, while new code will use the new std::once_flag members to manipulate it, but they should interoperate correctly. In both cases, the int is initially zero, has the lowest bit set when there is an active execution, and equals 2 after a successful returning execution. The difference with the new code is that exceptional exceptions are correctly detected and the int is reset to zero. The __cxa_guard_acquire code (and musl's pthread_once) use an additional state to say there are other threads waiting. This allows the futex wake syscall to be skipped if there is no contention. Glibc doesn't use a waiter bit, so we have to unconditionally issue the wake in order to be compatible with code calling the old std::call_once that uses Glibc's pthread_once. If we know that we're using musl (and musl's pthread_once doesn't change) it would be possible to set a waiting state and check for it in std::once_flag::_M_finish(bool), but this patch doesn't do that. This doesn't fix the bug for non-linux targets. A similar approach could be used for targets where we know the definition of pthread_once_t is a mutex and an integer. We could make once_flag._M_activate() use pthread_mutex_lock on the mutex member within the pthread_once_t, and then only set the integer if the execution finishes, and then unlock the mutex. That would require careful study of each target's pthread_once implementation and that work is left for a later date. This also fixes PR 55394 because pthread_once is no longer needed, and PR 84323 because the fast path is now just an atomic load. As a consequence of the new implementation that doesn't use pthread_once, we can also make std::call_once work for targets with no gthreads support. The code for the single-threaded implementation follows the same methods as on Linux, but with no need for atomics or futexes. libstdc++-v3/ChangeLog: PR libstdc++/55394 PR libstdc++/66146 PR libstdc++/84323 * config/abi/pre/gnu.ver (GLIBCXX_3.4.29): Add new symbols. * include/std/mutex [!_GLIBCXX_HAS_GTHREADS] (once_flag): Define even when gthreads is not supported. (once_flag::_M_once) [_GLIBCXX_HAVE_LINUX_FUTEX]: Change type from __gthread_once_t to int. (once_flag::_M_passive(), once_flag::_M_activate()) (once_flag::_M_finish(bool), once_flag::_Active_execution): Define new members for futex and non-threaded implementation. [_GLIBCXX_HAS_GTHREADS] (once_flag::_Prepare_execution): New RAII helper type. (call_once): Use new members of once_flag. * src/c++11/mutex.cc (std::once_flag::_M_activate): Define. (std::once_flag::_M_finish): Define. * testsuite/30_threads/call_once/39909.cc: Do not require gthreads. * testsuite/30_threads/call_once/49668.cc: Likewise. * testsuite/30_threads/call_once/60497.cc: Likewise. * testsuite/30_threads/call_once/call_once1.cc: Likewise. * testsuite/30_threads/call_once/dr2442.cc: Likewise. * testsuite/30_threads/call_once/once_flag.cc: Add test for constexpr constructor. * testsuite/30_threads/call_once/66146.cc: New test. * testsuite/30_threads/call_once/constexpr.cc: Removed. * testsuite/30_threads/once_flag/cons/constexpr.cc: Removed.
2020-11-03c++: using-decl instantiationNathan Sidwell1-4/+11
In streaming using decls I needed to check some assumptions. This adds those checks to the instantiation machinery. gcc/cp/ * pt.c (tsubst_expr): Simplify using decl instantiation, add asserts.
2020-11-03c++: Refactor clone copyingNathan Sidwell1-17/+20
This patch sets copy_fndecl_with_name to always inform rest_of_decl_compilation that it is not a top-level decl (it's a member function). I also refactor build_cdtor_clones to conditionally do the method vector updating. That happens to be a better interface for modules to use. gcc/cp/ * class.c (copy_fndecl_with_name): Always not top level. (build_cdtor_clones): Add update_methods parm, use it to conditionally update the method vec. Return void (clone_cdtor): Adjust. (clone_constructors_and_destructors): Adjust comment.
2020-11-03i386: Fix ix86_function_arg_regno_p to return correct SSE regno for 32bit ↵Uros Bizjak2-15/+9
TARGET_MACHO Use up to SSE_REGPARM_MAX registers to pass function parameters for 32bit Mach-O targets. Also, define X86_32_MMX_REGPARM_MAX to return 0 for 32bit Mach-O targets. 2020-11-03 Uroš Bizjak <ubizjak@gmail.com> gcc/ * config/i386/i386.c (ix86_function_arg_regno_p): Use up to SSE_REGPARM_MAX registers to pass function parameters for 32bit Mach-O targets. * config/i386/i386.h (X86_32_MMX_REGPARM_MAX): New macro. (MMX_REGPARM_MAX): Use it.
2020-11-03c++: Small pt.c cleanupsNathan Sidwell1-3/+2
Now I know about VAR_OR_FUNCTION_DECL_P I found a place to use it. Also positively checking for a function_decl is clearer than negatively checking for things that are not. gcc/cp/ * pt.c (primary_template_specialization_p): Use VAR_OR_FUNCTION_DECL_P. (tsubst_template_decl): Check for FUNCTION_DECL, not !TYPE && !VAR for registering a specialization.
2020-11-03cpplib: EOF in pragmasNathan Sidwell1-8/+23
This patch moves the generation of PRAGMA_EOF earlier, to when we set need_line, rather than when we try and get the next line. It also prevents peeking past a PRAGMA token. libcpp/ * lex.c (cpp_peek_token): Do not peek past CPP_PRAGMA. (_cpp_lex_direct): Handle EOF in pragma when setting need_line, not when needing a line.
2020-11-03Add dg-require-effective-target fpic to gcc.target/powerpc testsOlivier Hainque3-1/+4
This helps powerpc-vxworks kernel mode. 2020-11-03 Olivier Hainque <hainque@adacore.com> gcc/testsuite/ * gcc.target/powerpc/pr67789.c: Add dg-require-effective-target fpic. * gcc.target/powerpc/pr83629.c: Likewise. * gcc.target/powerpc/pr84112.c: Likewise. Remove a superflous target test in the dg-do compile directive while at it.
2020-11-03Sync the aarch64-vx7r2 libgcc config with that of LinuxPat Bernardi1-0/+1
This adds ${cpu_type}/t-lse and t-slibgcc-libgcc to the tmake_file list for aarch64-vxworks7* configurations, as the Linux port does. t-lse is needed by all triplets now anyway and the standard setting for slibgcc makes sense as we are working on reintroducing PIC support for RTPs on various targets. The VxWorks7 system environments are leaning towards more and more similarilties with Linux in general, so the closer configurations the better. 2020-11-02 Pat Bernardi <bernardi@adacore.com> libgcc/ * config.host (aarch64-vxworks7*, tmake_file): Add ${cpu_type}/t-lse and t-slibgcc-libgcc. Co-authored-by: Olivier Hainque <hainque@adacore.com>
2020-11-03aarch64: intrinsics extract half of bf16 vectorDennis Zhang7-0/+107
This patch implements ACLE intrinsics vget_low_bf16 and vget_high_bf16 to extract lower or higher half from a bfloat16x8 vector. The vget_high_bf16 is done by 'dup' instruction. The vget_low_bf16 is just to return the lower half of a vector register. Tests include both big- and little-endian cases. gcc/ChangeLog: 2020-11-03 Dennis Zhang <dennis.zhang@arm.com> * config/aarch64/aarch64-simd-builtins.def (vget_lo_half): New entry. (vget_hi_half): Likewise. * config/aarch64/aarch64-simd.md (aarch64_vget_lo_halfv8bf): New entry. (aarch64_vget_hi_halfv8bf): Likewise. * config/aarch64/arm_neon.h (vget_low_bf16): New intrinsic. (vget_high_bf16): Likewise. gcc/testsuite/ChangeLog * gcc.target/aarch64/advsimd-intrinsics/bf16_get.c: New test. * gcc.target/aarch64/advsimd-intrinsics/bf16_get-be.c: New test.
2020-11-03c++: Directly fixup deferred eh-specsNathan Sidwell3-12/+61
eh-specifiers in a class definition are complete-definition contexts, and we sometimes need to deferr their parsing. We create a deferred eh specifier, which can end up persisting in the type system due to variants being created before the deferred parse. This causes problems in modules handling. This patch adds fixup_deferred_exception_variants, which directly modifies the variants of such an eh spec once parsed. As commented, the general case is quite hard, so it doesn't deal with everything. But I do catch the cases I encountered (from the std library). gcc/cp/ * cp-tree.h (fixup_deferred_exception_variants): Declare. * parser.c (cp_parser_class_specifier_1): Call it when completing deferred parses rather than creating a variant. (cp_parser_member_declaration): Move comment from ... (cp_parser_noexcept_specification_opt): ... here. Refactor the deferred parse. * tree.c (fixup_deferred_exception_variants): New.
2020-11-03c++: A couple of template instantiation cleanupsNathan Sidwell1-13/+11
I noticed that we were handling lambda extra scope during template instantiation in a different order to how we handle the non-template case. Reordered that for consistency. Also some more RAII during template instantiation. gcc/cp/ * pt.c (tsubst_lambda_expr): Reorder extra-scope handling to match the non-template case. (instantiate_body): Move a couple of declarations to their initializers.
2020-11-03c++: Make extern-C mismatch an errorNathan Sidwell1-1/+1
duplicate_decls was being lenient about extern-c mismatches, allowing you to have two declarations in the symbol table after emitting an error. This resulted in duplicate error messages in modules, when we find the same problem multiple times. Let's just not let that happen. gcc/cp/ * decl.c (duplicate_decls): Return error_mark_node fo extern-c mismatch.
2020-11-03cpplib: Fix off-by-one errorNathan Sidwell1-1/+1
I noticed a fencepost error in the preprocessor. We should be checking if the next char is at the limit, not the current char (which can't be, because we're looking at it). libcpp/ * lex.c (_cpp_clean_line): Fix DOS off-by-one error.
2020-11-03gcc-changelog/git_email.py: Support older unidiff modulesTobias Burnus1-2/+3
contrib/ChangeLog: * gcc-changelog/git_email.py: Add unidiff_supports_renaming check.
2020-11-03Add setup.cfg for pytest.Martin Liska1-0/+2
contrib/ChangeLog: * gcc-changelog/setup.cfg: New file.
2020-11-03PR target/96342 Change field "simdlen" into poly_uint64Yang Yang8-64/+159
This is the first patch of PR96342. In order to add support for "omp declare simd", change the type of the field "simdlen" of struct cgraph_simd_clone from unsigned int to poly_uint64 and related adaptation. Since the length might be variable for the SVE cases. 2020-11-03 Yang Yang <yangyang305@huawei.com> gcc/ChangeLog: * cgraph.h (struct cgraph_simd_clone): Change field "simdlen" of struct cgraph_simd_clone from unsigned int to poly_uint64. * config/aarch64/aarch64.c (aarch64_simd_clone_compute_vecsize_and_simdlen): adaptation of operations on "simdlen". * config/i386/i386.c (ix86_simd_clone_compute_vecsize_and_simdlen): Printf formats update. * gengtype.c (main): Handle poly_uint64. * omp-simd-clone.c (simd_clone_mangle): Likewise.Re (simd_clone_adjust_return_type): Likewise. (create_tmp_simd_array): Likewise. (simd_clone_adjust_argument_types): Likewise. (simd_clone_init_simd_arrays): Likewise. (ipa_simd_modify_function_body): Likewise. (simd_clone_adjust): Likewise. (expand_simd_clones): Likewise. * poly-int-types.h (vector_unroll_factor): New macro. * poly-int.h (constant_multiple_p): Add two-argument versions. * tree-vect-stmts.c (vectorizable_simd_clone_call): Likewise.
2020-11-03tree-optimization/97623 - limit PRE hoist insertionRichard Biener3-2/+14
This limits insert iteration caused by PRE insertions generating hoist insertion opportunities and vice versa. The patch limits the hoist insertion iterations to three by default. 2020-11-03 Richard Biener <rguenther@suse.de> PR tree-optimization/97623 * params.opt (-param=max-pre-hoist-insert-iterations): New. * doc/invoke.texi (max-pre-hoist-insert-iterations): Document. * tree-ssa-pre.c (insert): Do at most max-pre-hoist-insert-iterations hoist insert iterations.
2020-11-03middle-end/97579 - fix VEC_COND_EXPR ISEL optab queryRichard Biener1-2/+3
This fixes a mistake in the optab query done by ISEL. It doesn't fix the PR but shifts the ICE elsewhere. 2020-11-03 Richard Biener <rguenther@suse.de> PR middle-end/97579 * gimple-isel.cc (gimple_expand_vec_cond_expr): Use the correct types for the vcond_mask/vec_cmp optab queries.
2020-11-03More Ranger cache tweaksAndrew MacLeod2-45/+79
This patch splits the individual value propagation out from fill_block_cache, and calls it from set_global_value when the global value is updated. This ensures the "current" global value is reflected in the on-entry cache. * gimple-range-cache.cc (ssa_global_cache::get_global_range): Return true if there was a previous range set. (ranger_cache::ranger_cache): Take a gimple_ranger parameter. (ranger_cache::set_global_range): Propagate the value if updating. (ranger_cache::propagate_cache): Renamed from iterative_cache_update. (ranger_cache::propagate_updated_value): New. Split from: (ranger_cache::fill_block_cache): Split out value propagator. * gimple-range-cache.h (ssa_global_cache): Update prototypes. (ranger_cache): Update prototypes.
2020-11-03Tweaks to ranger cacheAndrew MacLeod3-25/+86
Add some bounds checking to ssa_block_ranges, and privatize the ranges block cache and global cache, adding API points for accessing them. * gimple-range-cache.h (block_range_cache): Add new entry point. (ranger_cache): Privatize global abnd block cache members. * gimple-range-cache.cc (ssa_block_ranges::set_bb_range): Add bounds check. (ssa_block_ranges::set_bb_varying): Ditto. (ssa_block_ranges::get_bb_range): Ditto. (ssa_block_ranges::bb_range_p): Ditto. (block_range_cache::get_block_ranges): Fix formatting. (block_range_cache::query_block_ranges): New. (block_range_cache::get_bb_range): Use Query_block_ranges. (block_range_cache::bb_range_p): Ditto. (ranger_cache::dump): New. (ranger_cache::get_global_range): New. (ranger_cache::set_global_range): New. * gimple-range.cc (gimple_ranger::range_of_expr): Use new API. (gimple_ranger::range_of_stmt): Ditto. (gimple_ranger::export_global_ranges): Ditto. (gimple_ranger::dump): Ditto.
2020-11-03c++: Tweaks for value_dependent_expression_p.Marek Polacek2-2/+8
We may not call value_dependent_expression_p on expressions that are not potential constant expressions, otherwise value_d could crash, as I saw recently (in C++98). So beef up the checking in i_d_e_p. This revealed a curious issue: when we have __PRETTY_FUNCTION__ in a template function, we set its DECL_VALUE_EXPR to error_mark_node (cp_make_fname_decl), so potential_c_e returns false when it gets it, but value_dependent_expression_p handles it specially and says true. This broke lambda-generic-pretty1.C. So take care of that. And then also tweak uses_template_parms. gcc/cp/ChangeLog: * constexpr.c (potential_constant_expression_1): Treat __PRETTY_FUNCTION__ inside a template function as potentially-constant. * pt.c (uses_template_parms): Call instantiation_dependent_expression_p instead of value_dependent_expression_p. (instantiation_dependent_expression_p): Check potential_constant_expression before calling value_dependent_expression_p.