aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-11-06Add fnspec handling to ipa mode of ipa-modef.Jan Hubicka6-148/+501
gcc/: * attr-fnspec.h (attr_fnspec::get_str): New accessor * ipa-fnsummary.c (read_ipa_call_summary): Store also parm info for builtins. * ipa-modref.c (class fnspec_summary): New type. (class fnspec_summaries_t): New type. (modref_summary::modref_summary): Initialize writes_errno. (struct modref_summary_lto): Add writes_errno. (modref_summary_lto::modref_summary_lto): Initialize writes_errno. (modref_summary::dump): Check for NULL pointers. (modref_summary_lto::dump): Dump writes_errno. (collapse_loads): Move up in source file. (collapse_stores): New function. (process_fnspec): Handle also internal calls. (analyze_call): Likewise. (analyze_stmt): Store fnspec string if needed. (analyze_function): Initialize fnspec_sumarries. (modref_summaries_lto::duplicate): Copy writes_errno. (modref_write): Store writes_errno and fnspec summaries. (read_section): Read writes_errno and fnspec summaries. (modref_read): Initialize fnspec summaries. (update_signature): Fix formating. (compute_parm_map): Return true if sucessful. (get_parm_type): New function. (get_access_for_fnspec): New function. (propagate_unknown_call): New function. (modref_propagate_in_scc): Use it. (pass_ipa_modref::execute): Delete fnspec_summaries. (ipa_modref_c_finalize): Delete fnspec_summaries. * ipa-prop.c: Include attr-fnspec.h. (ipa_compute_jump_functions_for_bb): Also compute jump functions for functions with fnspecs. (ipa_read_edge_info): Read jump functions for builtins. gcc/testsuite/ChangeLog: * gcc.dg/ipa/modref-2.c: New test. * gcc.dg/lto/modref-2_0.c: New test.
2020-11-06Move size time tables from GGC to heapJan Hubicka2-44/+44
this patch moves size time tables out of ggc allocated memory. This makes sources bit cleaner and saves about 60MB of GGC memory that turns to about 45MB of heap memory for cc1plus LTO build. * ipa-fnsummary.h (class size_time_entry): Do not GTY annotate. (class ipa_fnsummary): Turn size_time_table to auto_vec and call_size_time_table to effecient vec; update constructors. * ipa-fnsummary.c (ipa_fn_summary::account_size_time): Update. (ipa_fn_summary::~ipa_fn_summary): Update. (ipa_fn_summary_t::duplicate): Update. (ipa_dump_fn_summary): Update. (set_switch_stmt_execution_predicate): Update. (analyze_function_body): Update. (estimate_calls_size_and_time): Update. (ipa_call_context::estimate_size_and_time): Update. (ipa_merge_fn_summary_after_inlining): Update. (ipa_update_overall_fn_summary): Update. (inline_read_section): Update. (ipa_fn_summary_write): Update.
2020-11-06c-common: Remove DEBUG_FUNCTION from verify_sequence_pointsJakub Jelinek1-1/+1
While perhaps the function name might suggest that it is a verification/debugging only routine, it is actually implementation of the -Wsequence-point warning and so doesn't need the DEBUG_FUNCTION macro on it. 2020-11-06 Jakub Jelinek <jakub@redhat.com> * c-common.c (verify_sequence_points): Remove DEBUG_FUNCTION.
2020-11-06tree-optimization/97733 - fix SLP of reductions with zero relevantRichard Biener1-0/+3
This adds a missing check. 2020-11-06 Richard Biener <rguenther@suse.de> PR tree-optimization/97733 * tree-vect-slp.c (vect_analyze_slp_instance): If less than two reductions were relevant or live do nothing.
2020-11-06Fortran: Fix type-decl for PDT / wrong-code pdt_14.f03 issue [PR97652]Tobias Burnus1-0/+3
Parameterized derived types are handled in a special way and start with 'Pdt'. If the 'P' is not uppercase, gfc_get_derived_type (which calls gfc_get_module_backend_decl) does not find the existing declaration and builds a new type. The middle end then sees those types as being different and nonalising, creating an endless loop for pdt_14.f03. gcc/fortran/ChangeLog: PR fortran/97652 * module.c (mio_symbol): Fix symbol name for pdt_type.
2020-11-05Improve overflow checkJeff Law2-8/+13
Convert x < (short) ((unsigned short)x + const) to x <= SHORT_MAX – const (and similarly for other integral types) if const is not 0. gcc/ PR tree-optimization/97223 * match.pd (overflow detection and optimization): Handle conversions. gcc/testsuite/ * gcc.dg/no-strict-overflow-4.c: Adjust expected output.
2020-11-05Simplify x >> x to 0. This fixes PR96701.Eugene Rozenfeld2-0/+17
gcc/ * match.pd (x >> x): New pattern. gcc/testsuite * gcc.dg/self-right-shift.c: New test.
2020-11-06RISC-V: Mark non-export symbol static and const in riscv-common.cKito Cheng1-2/+2
gcc/ChangeLog: * common/config/riscv/riscv-common.c (riscv_implied_info): Add static and const. (riscv_subset_list::handle_implied_ext): Add const due to riscv_implied_info changed to const.
2020-11-06PR target/96307: Fix KASAN option checking.Kito Cheng5-1/+38
- Disable kasan if target is unsupported and -fasan-shadow-offset= is not given, no matter `--param asan-stack=1` is given or not. - Moving KASAN option checking testcase to gcc.dg, those testcase could be useful for all other target which not support asan. - Verifed on riscv and x86. gcc/ChangeLog: PR target/96307 * toplev.c (process_options): Remove param_asan_stack checking for kasan option checking. gcc/testsuite/ChangeLog: PR target/96307 * gcc.dg/pr96307.c: New. * gcc.target/riscv/pr96260.c: Move this test case from here to ... * gcc.dg/pr96260.c: ... here. * gcc.target/riscv/pr91441.c: Move this test case from here to ... * gcc.dg/pr91441.c: ... here. * lib/target-supports.exp (check_effective_target_no_fsanitize_address): New proc.
2020-11-06MAINTAINERS: Add myself for write after approval.liuhongt1-0/+1
ChangeLog: 2019-03-17 Hongtao Liu <hongtao.liu@intel.com> * MAINTAINERS (Write After Approval): Add myself.
2020-11-06Daily bump.GCC Administrator8-1/+372
2020-11-05c++: Add auto_diagnostic_group to check_handlers_1.Marek Polacek1-0/+1
This was missing. gcc/cp/ChangeLog: * except.c (check_handlers_1): Add auto_diagnostic_group.
2020-11-05c++: Fix decltype(auto) deduction with rvalue ref [PR78209]Marek Polacek2-0/+10
Here's a small deficiency in decltype(auto). [dcl.type.auto.deduct]/5: If the placeholder-type-specifier is of the form decltype(auto), [...] the type deduced for T is determined [...] as though E had been the operand of the decltype. So: int &&i = 0; decltype(auto) j = i; // should behave like int &&j = i; error We deduce j's type in do_auto_deduction via finish_decltype_type which takes an 'id' argument. Currently we compute 'id' as false, because stripped_init is *i (a REFERENCE_REF_P). But it seems to me we should rather set 'id' to true here, by looking through the REFERENCE_REF_P, so that finish_decltype_type DTRT. gcc/cp/ChangeLog: PR c++/78209 * pt.c (do_auto_deduction): If init is REFERENCE_REF_P, use its first operand. gcc/testsuite/ChangeLog: PR c++/78209 * g++.dg/cpp1y/decltype-auto1.C: New test.
2020-11-05c++: Add -Wexceptions warning option [PR97675]Marek Polacek6-8/+36
This PR asks that we add a warning option for an existing (very old) warning, so that it can be disabled selectively. clang++ uses -Wexceptions for this, so I added this new option rather than using e.g. -Wnoexcept. gcc/c-family/ChangeLog: PR c++/97675 * c.opt (Wexceptions): New option. gcc/cp/ChangeLog: PR c++/97675 * except.c (check_handlers_1): Use OPT_Wexceptions for the warning. Use inform for the second part of the warning. gcc/ChangeLog: PR c++/97675 * doc/invoke.texi: Document -Wexceptions. gcc/testsuite/ChangeLog: PR c++/97675 * g++.old-deja/g++.eh/catch10.C: Adjust dg-warning. * g++.dg/warn/Wexceptions1.C: New test. * g++.dg/warn/Wexceptions2.C: New test.
2020-11-05c++: Implement -Wvexing-parse [PR25814]Marek Polacek27-23/+617
This patch implements the -Wvexing-parse warning to warn about the sneaky most vexing parse rule in C++: the cases when a declaration looks like a variable definition, but the C++ language requires it to be interpreted as a function declaration. This warning is on by default (like clang++). From the docs: void f(double a) { int i(); // extern int i (void); int n(int(a)); // extern int n (int); } Another example: struct S { S(int); }; void f(double a) { S x(int(a)); // extern struct S x (int); S y(int()); // extern struct S y (int (*) (void)); S z(); // extern struct S z (void); } You can find more on this in [dcl.ambig.res]. I spent a fair amount of time on fix-it hints so that GCC can recommend various ways to resolve such an ambiguity. Sometimes that's tricky. E.g., suggesting default-initialization when the class doesn't have a default constructor would not be optimal. Suggesting {}-init is also not trivial because it can use an initializer-list constructor if no default constructor is available (which ()-init wouldn't do). And of course, pre-C++11, we shouldn't be recommending {}-init at all. I also uncovered a bug in cp_parser_declarator, where we were setting *parenthesized_p to true despite the comment saying the exact opposite. gcc/c-family/ChangeLog: PR c++/25814 * c.opt (Wvexing-parse): New option. gcc/cp/ChangeLog: PR c++/25814 * cp-tree.h (enum cp_tree_index): Add CPTI_EXPLICIT_VOID_LIST. (explicit_void_list_node): Define. (PARENTHESIZED_LIST_P): New macro. (struct cp_declarator): Add function::parens_loc. * decl.c (cxx_init_decl_processing): Initialize explicit_void_list_node. (grokparms): Also break when explicit_void_list_node. * parser.c (make_call_declarator): New location_t parameter. Use it to set declarator->u.function.parens_loc. (cp_parser_lambda_declarator_opt): Pass UNKNOWN_LOCATION to make_call_declarator. (warn_about_ambiguous_parse): New function. (cp_parser_init_declarator): Call warn_about_ambiguous_parse. (cp_parser_declarator): Set *parenthesized_p to false rather than to true. (cp_parser_direct_declarator): Create a location for the function's parentheses and pass it to make_call_declarator. (cp_parser_parameter_declaration_clause): Return explicit_void_list_node for (void). (cp_parser_parameter_declaration_list): Set PARENTHESIZED_LIST_P in the parameters tree. gcc/ChangeLog: PR c++/25814 * doc/invoke.texi: Document -Wvexing-parse. gcc/testsuite/ChangeLog: PR c++/25814 * g++.dg/cpp2a/fn-template16.C: Add a dg-warning. * g++.dg/cpp2a/fn-template7.C: Likewise. * g++.dg/lookup/pr80891-5.C: Likewise. * g++.dg/lto/pr79050_0.C: Add extern. * g++.dg/lto/pr84805_0.C: Likewise. * g++.dg/parse/pr58898.C: Add a dg-warning. * g++.dg/template/scope5.C: Likewise. * g++.old-deja/g++.brendan/recurse.C: Likewise. * g++.old-deja/g++.jason/template4.C: Likewise. * g++.old-deja/g++.law/arm4.C: Likewise. * g++.old-deja/g++.mike/for2.C: Likewise. * g++.old-deja/g++.other/local4.C: Likewise. * g++.old-deja/g++.pt/crash3.C: Likewise. * g++.dg/warn/Wvexing-parse.C: New test. * g++.dg/warn/Wvexing-parse2.C: New test. * g++.dg/warn/Wvexing-parse3.C: New test. * g++.dg/warn/Wvexing-parse4.C: New test. * g++.dg/warn/Wvexing-parse5.C: New test. * g++.dg/warn/Wvexing-parse6.C: New test. * g++.dg/warn/Wvexing-parse7.C: New test. libstdc++-v3/ChangeLog: PR c++/25814 * testsuite/20_util/reference_wrapper/lwg2993.cc: Add a dg-warning. * testsuite/25_algorithms/generate_n/87982_neg.cc: Likewise.
2020-11-05Pass multi-range from range_query::value_* routinesAndrew MacLeod3-9/+37
fix range-ops equal/not_equal to not reuse the result range as intermediary. value_query::value routines should pasa multi-range in as some other rangeop routines build into this result, so we may need better precision. gcc/ PR tree-optimization/97725 * range-op.cc (operator_equal::fold_range): Use new tmp value. (operator_not_equal::fold_range): Ditto. * value-query.cc (range_query::value_of_expr): Use int_range_max not a value_range. (range_query::value_on_edge): Ditto. (range_query::value_of_stmt): Ditto. gcc/testsuite/ * gcc.dg/pr97725.c: New.
2020-11-05libstdc++: Fix typo in ChangeLog entryJonathan Wakely1-1/+1
2020-11-05libstdc++: Fix constraints on std::optional comparisons [PR 96269]Jonathan Wakely2-18/+124
The relational operators for std::optional were using the wrong types in the declval expressions used to constrain them. Instead of using const lvalues they were using non-const rvalues, which meant that a type might satisfy the constraints but then give an error when the function body was instantiated. libstdc++-v3/ChangeLog: PR libstdc++/96269 * include/std/optional (operator==, operator!=, operator<) (operator>, operator<=, operator>=): Fix types used in SFINAE constraints. * testsuite/20_util/optional/relops/96269.cc: New test.
2020-11-05openmp: Mark deprecated symbols in OpenMP 5.0Kwok Cheung Yeung32-15/+77
2020-11-05 Ulrich Drepper <drepper@redhat.com> Kwok Cheung Yeung <kcy@codesourcery.com> libgomp/ * Makefile.am (%.mod): Add -cpp and -fopenmp to compile flags. * Makefile.in: Regenerate. * fortran.c: Wrap uses of omp_set_nested and omp_get_nested with pragmas to ignore -Wdeprecated-declarations warnings. * icv.c: Likewise. * omp.h.in (__GOMP_DEPRECATED_5_0): Define. Mark omp_lock_hint_* enum values, omp_lock_hint_t, omp_set_nested, and omp_get_nested with __GOMP_DEPRECATED_5_0. * omp_lib.f90.in: Mark omp_get_nested and omp_set_nested as deprecated. * testsuite/libgomp.c++/affinity-1.C: Add -Wno-deprecated-declarations to test options. * testsuite/libgomp.c/affinity-1.c: Likewise. * testsuite/libgomp.c/affinity-2.c: Likewise. * testsuite/libgomp.c/appendix-a/a.15.1.c: Likewise. * testsuite/libgomp.c/lib-1.c: Likewise. * testsuite/libgomp.c/nested-1.c: Likewise. * testsuite/libgomp.c/nested-2.c: Likewise. * testsuite/libgomp.c/nested-3.c: Likewise. * testsuite/libgomp.c/pr32362-1.c: Likewise. * testsuite/libgomp.c/pr32362-2.c: Likewise. * testsuite/libgomp.c/pr32362-3.c: Likewise. * testsuite/libgomp.c/pr35549.c: Likewise. * testsuite/libgomp.c/pr42942.c: Likewise. * testsuite/libgomp.c/pr61200.c: Likewise. * testsuite/libgomp.c/sort-1.c: Likewise. * testsuite/libgomp.c/target-5.c: Likewise. * testsuite/libgomp.c/target-6.c: Likewise. * testsuite/libgomp.c/teams-1.c: Likewise. * testsuite/libgomp.c/thread-limit-1.c: Likewise. * testsuite/libgomp.c/thread-limit-2.c: Likewise. * testsuite/libgomp.c/thread-limit-4.c: Likewise. * testsuite/libgomp.fortran/affinity1.f90: Likewise. * testsuite/libgomp.fortran/lib1.f90: Likewise. * testsuite/libgomp.fortran/lib2.f: Likewise. * testsuite/libgomp.fortran/nested1.f90: Likewise. * testsuite/libgomp.fortran/teams1.f90: Likewise.
2020-11-05Handle use of r18 as a TCB pointer on aarch64-vxworksOlivier Hainque1-5/+7
Pick an alternate static chain regnum and document that the port needs to be configured to issue -ffixed-r18 by default. The current definition of TARGET_OS_USES_R18 is not honored by the common part of the back-end. 2020-11-04 Olivier Hainque <hainque@adacore.com> gcc/ * config/aarch64/aarch64-vxworks.h (TARGET_OS_USES_R18): Remove definition. (STATIC_CHAIN_REGNUM): Redefine to 9.
2020-11-05libstdc++: Use non-throwing increment in recursive_directory_iterator [PR 97731]Jonathan Wakely2-7/+60
As described in the PR, the recursive_directory_iterator constructor calls advance(ec), but ec is a pointer so it calls _Dir::advance(bool). The intention was to either call advance() or advance(*ec) depending whether the pointer is null or not. This fixes the bug and renames the parameter to ecptr to make similar mistakes less likely in future. libstdc++-v3/ChangeLog: PR libstdc++/97731 * src/filesystem/dir.cc (recursive_directory_iterator): Call the right overload of _Dir::advance. * testsuite/experimental/filesystem/iterators/97731.cc: New test.
2020-11-05libstdc++: Fix multiple definitions of std::exception_ptr functions [PR 97729]Jonathan Wakely3-44/+34
This fixes some multiple definition errors caused by the changes for PR libstdc++/90295. The previous solution for inlining the members of std::exception_ptr but still exporting them from the library was to suppress the 'inline' keyword on those functions when compiling libsupc++/eh_ptr.cc, so they get defined in that file. That produces ODR violations though, because there are now both inline and non-inline definitions in the library, due to the use of std::exception_ptr in other files sucg as src/c++11/future.cc. The new solution is to define all the relevant members as 'inline' unconditionally, but use __attribute__((used)) to cause definitions to be emitted in libsupc++/eh_ptr.cc as before. This doesn't quite work however, because PR c++/67453 means the attribute is ignored on constructors and destructors. As a workaround, the old solution (conditionally inline) is still used for those members, but they are given the always_inline attribute so that they aren't emitted in src/c++11/future.o as inline definitions. libstdc++-v3/ChangeLog: PR libstdc++/97729 * include/std/future (__basic_future::_M_get_result): Use nullptr for null pointer constant. * libsupc++/eh_ptr.cc (operator==, operator!=): Remove definitions. * libsupc++/exception_ptr.h (_GLIBCXX_EH_PTR_USED): Define macro to conditionally add __attribute__((__used__)). (operator==, operator!=, exception_ptr::exception_ptr()) (exception_ptr::exception_ptr(const exception_ptr&)) (exception_ptr::~exception_ptr()) (exception_ptr::operator=(const exception_ptr&)) (exception_ptr::swap(exception_ptr&)): Always define as inline. Add macro to be conditionally "used".
2020-11-05libstdc++: Export basic_stringbuf constructor [PR 97729]Jonathan Wakely2-0/+7
libstdc++-v3/ChangeLog: PR libstdc++/97729 * config/abi/pre/gnu.ver (GLIBCXX_3.4.29): Add exports. * src/c++20/sstream-inst.cc (basic_stringbuf): Instantiate private constructor taking __xfer_bufptrs.
2020-11-05Add dg-require-effective-target fpic to gcc.dg testOlivier Hainque1-0/+1
The test uses -fpic and doesn't query the target support for that option otherwise, resulting in failure on configurations not supporting -fpic such as VxWorks for kernel mode. 2020-11-03 Olivier Hainque <hainque@adacore.com> gcc/testsuite/ * gcc.dg/sms-12.c: Add dg-require-effective-target fpic.
2020-11-05Move and adjust PROBE_STACK reg definitions for aarch64Olivier Hainque2-6/+9
The change moves the definitions of PROBE_STACK_FIRST_REG and PROBE_STACK_SECOND_REG to a more appropriate place for such items (here, in aarch64.md as suggested by Richard), and adjusts their value from r9/r10 to r10/r11 to free r9 for a possibly more general purpose (e.g. as a static chain at least on targets which have a private use of r18, such as Windows or Vxworks). 2020-11-07 Olivier Hainque <hainque@adacore.com> gcc/ * config/aarch64/aarch64.md: Define PROBE_STACK_FIRST_REGNUM and PROBE_STACK_SECOND_REGNUM constants, designating r10/r11. Replacements for the PROBE_STACK_FIRST/SECOND_REG constants in aarch64.c. * config/aarch64/aarch64.c (PROBE_STACK_FIRST_REG): Remove. (PROBE_STACK_SECOND_REG): Remove. (aarch64_emit_probe_stack_range): Adjust to the _REG -> _REGNUM suffix update for PROBE_STACK register numbers.
2020-11-05Add fnspecs for C++ new and delete operatorsJan Hubicka3-2/+15
gcc/ChangeLog: * gimple.c (gimple_call_fnspec): Handle C++ new and delete. * gimple.h (gimple_call_from_new_or_delete): Constify parameter. gcc/testsuite/ChangeLog: * g++.dg/ipa/devirt-24.C: Update template.
2020-11-05middle-end: guard slp-11b.c testcase on vec_lanesTamar Christina1-1/+2
They say third time is the charm.. It looks like the testcase disables the cost model and so AArch64 we end up being able to do the permute but on x86 we can't. However when analyzing the testcase I didn't disable the cost model hence the difference. So I now guard the testcase on vect_load_lanes as there's not a "can do any permute" test directive and load lanes is what I will be fixing up next year so this should catch it. gcc/testsuite/ChangeLog: * gcc.dg/vect/slp-11b.c: Guard statements.
2020-11-05Drop overflow from constants while building ranges in ranger.Aldy Hernandez2-0/+15
Sometimes the overflow flag will leak into the IL. Drop it while creating ranges. There are various places we could plug this. This patch just plugs things at get_tree_range which is the entry point for ranges from tree expressions. It fixes the PR, and probably fixes the ranger entirely, but we may need to revisit this. For example, I looked to see if there were other places that created ranges with TREE_OVERFLOW set, and there are various. For example, the following code pattern appears multiple times in vr-values.c: else if (is_gimple_min_invariant (op0)) vr0.set (op0); This can pick up TREE_OVERFLOW from the IL if present. However, the ranger won't see them so we're good. At some point we should audit all this. Or perhaps just nuke all TREE_OVERFLOW's at irange::set. For now, this will do. gcc/ChangeLog: PR tree-optimization/97721 * gimple-range.cc (get_tree_range): Drop overflow from constants. gcc/testsuite/ChangeLog: * gcc.dg/pr97721.c: New test.
2020-11-05diagnostic paths: loosen coupling between path-printing and path_summaryDavid Malcolm1-104/+100
Doing this makes followup work to add HTML path-printing cleaner. gcc/ChangeLog: * tree-diagnostic-path.cc (struct path_summary::event_range): Move out of path_summary to... (struct event_range): ...here. (class path_summary): Convert to... (struct path_summary): ...this. (path_summary::m_ranges): Drop "private". (path_summary::print): Convert to... (print_path_summary_as_text): ...this, passing in the path_summary explicitly. (default_tree_diagnostic_path_printer): Update for above change. (selftest::test_empty_path): Likewise. (selftest::test_intraprocedural_path): Likewise. (selftest::test_interprocedural_path_1): Likewise. (selftest::test_interprocedural_path_2): Likewise. (selftest::test_recursion): Likewise.
2020-11-05i386: Fix PR97715qing zhao2-0/+16
This change fixes a bug in the i386 backend when adding -fzero-call-used-regs=all on a target that has no x87 registers. When there is no x87 registers available, we should not zero stack registers. gcc/ChangeLog: PR target/97715 * config/i386/i386.c (zero_all_st_registers): Return earlier when the FPU is disabled. gcc/testsuite/ChangeLog: PR target/97715 * gcc.target/i386/zero-scratch-regs-32.c: New test.
2020-11-05analyzer: fix ICE comparing COMPLEX_CSTs [PR97668]David Malcolm3-0/+57
gcc/analyzer/ChangeLog: PR analyzer/97668 * svalue.cc (cmp_cst): Handle COMPLEX_CST. gcc/testsuite/ChangeLog: PR analyzer/97668 * gcc.dg/analyzer/pr97668.c: New test. * gfortran.dg/analyzer/pr97668.f: New test.
2020-11-05Fix uninitialized memory use in ipa-modrefJan Hubicka1-1/+6
* ipa-modref.c (parm_map_for_arg): Initialize parm_offset and parm_offset_knonw. (read_section): Set writes_errno to false.
2020-11-05libstdc++: Fix new <sstream> constructorsJonathan Wakely9-55/+451
- Add a missing 'explicit' to a basic_stringbuf constructor. - Set up the get/put area pointers in the constructor from strings using different allocator types. - Remove public basic_stringbuf::__sv_type alias. - Do not construct temporary basic_string objects with a default-constructed allocator. Also, change which basic_string constructor is used, as a minor compile-time optimization. Constructing from a basic_string_view requires more work from the compiler, so just use a pointer and length. libstdc++-v3/ChangeLog: * include/std/sstream (basic_stringbuf(const allocator_type&): Add explicit. (basic_stringbuf(const basic_string<C,T,SA>&, openmode, const A&)): Call _M_stringbuf_init. Construct _M_string from pointer and length to avoid constraint checks for string view. (basic_stringbuf::view()): Make __sv_type alias local to the function. (basic_istringstream(const basic_string<C,T,SA>&, openmode, const A&)): Pass string to _M_streambuf instead of constructing a temporary with the wrong allocator. (basic_ostringstream(const basic_string<C,T,SA>&, openmode, const A&)): Likewise. (basic_stringstream(const basic_string<C,T,SA>&, openmode, const A&)): Likewise. * src/c++20/sstream-inst.cc: Use string_view and wstring_view typedefs in explicit instantiations. * testsuite/27_io/basic_istringstream/cons/char/1.cc: Add more tests for constructors. * testsuite/27_io/basic_ostringstream/cons/char/1.cc: Likewise. * testsuite/27_io/basic_stringbuf/cons/char/1.cc: Likewise. * testsuite/27_io/basic_stringbuf/cons/char/2.cc: Likewise. * testsuite/27_io/basic_stringbuf/cons/wchar_t/1.cc: Likewise. * testsuite/27_io/basic_stringbuf/cons/wchar_t/2.cc: Likewise. * testsuite/27_io/basic_stringstream/cons/char/1.cc: Likewise.
2020-11-05libstdc++: Adjust whitespace in <sstream>Jonathan Wakely1-12/+13
libstdc++-v3/ChangeLog: * include/std/sstream: Adjust whitespace.
2020-11-05Fix SLP vectorization of stores from boolean vectorsRichard Biener3-3/+96
The following fixes SLP vectorization of stores that were pattern recognized. Since in SLP vectorization pattern analysis happens after dataref group analysis we have to adjust the groups with the pattern stmts. This has some effects down the pipeline and exposes cases where we looked at the wrong pattern/non-pattern stmts. 2020-11-05 Richard Biener <rguenther@suse.de> * tree-vect-data-refs.c (vect_slp_analyze_node_dependences): Use the original stmts. (vect_slp_analyze_node_alignment): Use the pattern stmt. * tree-vect-slp.c (vect_fixup_store_groups_with_patterns): New function. (vect_slp_analyze_bb_1): Call it. * gcc.dg/vect/bb-slp-69.c: New testcase.
2020-11-05middle-end: optimize slp simplify back to back permutes.Tamar Christina1-1/+13
This optimizes sequential permutes. i.e. if there are two permutes back to back this function applies the permute of the parent to the child and removed the parent. This relies on the materialization point calculation in optimize SLP. This allows us to remove useless permutes such as ldr q0, [x0, x3] ldr q2, [x1, x3] trn1 v1.4s, v0.4s, v0.4s trn2 v0.4s, v0.4s, v0.4s trn1 v0.4s, v1.4s, v0.4s mov v1.16b, v3.16b fcmla v1.4s, v0.4s, v2.4s, #0 fcmla v1.4s, v0.4s, v2.4s, #90 str q1, [x2, x3] from the sequence the vectorizer puts out and give ldr q0, [x0, x3] ldr q2, [x1, x3] mov v1.16b, v3.16b fcmla v1.4s, v0.4s, v2.4s, #0 fcmla v1.4s, v0.4s, v2.4s, #90 str q1, [x2, x3] instead. gcc/ChangeLog: * tree-vect-slp.c (vect_slp_tree_permute_noop_p): New. (vect_optimize_slp): Optimize permutes. (vectorizable_slp_permutation): Fix typo.
2020-11-05testsuite: disable vect tests that was accidentally enabled on x86Tamar Christina2-4/+4
My previous patch accidentally enabled some tests on x86 because my target selector foo was weak.. This now properly only runs them on AArch64. gcc/testsuite/ChangeLog: * gcc.dg/vect/slp-11b.c: Update testcase. * gcc.dg/vect/slp-perm-6.c: Update target selector.
2020-11-05debug/97718 - fix abstract origin references after last changeRichard Biener1-1/+10
The change to clear the external_die_map slot after creating the concrete instance DIE broke abstract origin processing which tried to make sure to have those point to the early abstract instance and not the concrete instance. The following restores this by eventually following the abstract origin link in the concrete instance. 2020-11-05 Richard Biener <rguenther@suse.de> PR debug/97718 * dwarf2out.c (add_abstract_origin_attribute): Make sure to point to the abstract instance.
2020-11-05middle-end: Store and use the SLP instance kind when aborting load/store lanesTamar Christina3-7/+15
This patch stores the SLP instance kind in the SLP instance so that we can use it later when detecting load/store lanes support. This also changes the load/store lane support check to only check if the SLP kind is a store. This means that in order for the load/lanes to work all instances must be of kind store. gcc/ChangeLog: * tree-vect-loop.c (vect_analyze_loop_2): Check kind. * tree-vect-slp.c (vect_build_slp_instance): New. (enum slp_instance_kind): Move to... * tree-vectorizer.h (enum slp_instance_kind): .. Here (SLP_INSTANCE_KIND): New.
2020-11-05rs6000: Use direct move for char/short vector CTOR [PR96933]Kewen Lin8-2/+349
This patch is to make vector CTOR with char/short leverage direct move instructions when they are available. With one constructed test case, it can speed up 145% for char and 190% for short on P9. Tested SPEC2017 x264_r at -Ofast on P9, it gets 1.61% speedup (but based on unexpected SLP see PR96789). Bootstrapped/regtested on powerpc64{,le}-linux-gnu P8 and powerpc64le-linux-gnu P9. gcc/ChangeLog: PR target/96933 * config/rs6000/rs6000.c (rs6000_expand_vector_init): Use direct move instructions for vector construction with char/short types. * config/rs6000/rs6000.md (p8_mtvsrwz_v16qisi2): New define_insn. (p8_mtvsrd_v16qidi2): Likewise. gcc/testsuite/ChangeLog: PR target/96933 * gcc.target/powerpc/pr96933-1.c: New test. * gcc.target/powerpc/pr96933-2.c: New test. * gcc.target/powerpc/pr96933-3.c: New test. * gcc.target/powerpc/pr96933-4.c: New test. * gcc.target/powerpc/pr96933.h: New test. * gcc.target/powerpc/pr96933-run.h: New test.
2020-11-05Daily bump.GCC Administrator10-1/+257
2020-11-04libstdc++: Fix default mode of new basic_stringstream constructor [PR 97719]Jonathan Wakely2-1/+41
libstdc++-v3/ChangeLog: PR libstdc++/97719 * include/std/sstream (basic_stringstream(string_type&&, openmode)): Fix default argument. * testsuite/27_io/basic_stringstream/cons/char/97719.cc: New test.
2020-11-04middle-end: Move load/store-lanes check till late.Tamar Christina4-53/+77
This moves the code that checks for load/store lanes further in the pipeline and places it after slp_optimize. This would allow us to perform optimizations on the SLP tree and only bail out if we really have a permute. With this change it allows us to handle permutes such as {1,1,1,1} which should be handled by a load and replicate. This change however makes it all or nothing. Either all instances can be handled or none at all. This is why some of the test cases have been adjusted. gcc/ChangeLog: * tree-vect-slp.c (vect_analyze_slp_instance): Moved load/store lanes check to ... * tree-vect-loop.c (vect_analyze_loop_2): ..Here gcc/testsuite/ChangeLog: * gcc.dg/vect/slp-11b.c: Update output scan. * gcc.dg/vect/slp-perm-6.c: Likewise.
2020-11-04IBM Z: Unhardcode NR_C_MODESIlya Leoshkevich1-7/+7
gcc/ChangeLog: 2020-11-03 Ilya Leoshkevich <iii@linux.ibm.com> * config/s390/s390.c (NR_C_MODES): Unhardcode. (s390_alloc_pool): Use size_t for iterating from 0 to NR_C_MODES. (s390_add_constant): Likewise. (s390_find_constant): Likewise. (s390_dump_pool): Likewise. (s390_free_pool): Likewise.
2020-11-04IBM Z: Remove unused RRe and RXe mode_attrsIlya Leoshkevich1-5/+0
gcc/ChangeLog: 2020-11-03 Ilya Leoshkevich <iii@linux.ibm.com> * config/s390/s390.md (RRe): Remove. (RXe): Remove.
2020-11-04go: disable -fipa-icf-functions by default in Go frontendIan Lance Taylor1-0/+6
Go programs expect to be able to get reliable backtrace information with correct file/line information, but -fipa-icf-functions breaks that because it merges together distinct functions which should have distinct file/line info. * go-lang.c (go_langhook_post_options): Disable -fipa-icf-functions if it was not explicitly enabled.
2020-11-04Add Ranger temporal cacheAndrew MacLeod4-10/+196
Add a timestamp to supplement the global range cache to detect when a value may become stale. gcc/ PR tree-optimization/97515 * gimple-range-cache.h (class ranger_cache): New prototypes plus temporal cache pointer. * gimple-range-cache.cc (struct range_timestamp): New. (class temporal_cache): New. (temporal_cache::temporal_cache): New. (temporal_cache::~temporal_cache): New. (temporal_cache::get_timestamp): New. (temporal_cache::set_dependency): New. (temporal_cache::temporal_value): New. (temporal_cache::current_p): New. (temporal_cache::set_timestamp): New. (temporal_cache::set_always_current): New. (ranger_cache::ranger_cache): Allocate the temporal cache. (ranger_cache::~ranger_cache): Free temporal cache. (ranger_cache::get_non_stale_global_range): New. (ranger_cache::set_global_range): Add a timestamp. (ranger_cache::register_dependency): New. Add timestamp dependency. * gimple-range.cc (gimple_ranger::range_of_range_op): Add operand dependencies. (gimple_ranger::range_of_phi): Ditto. (gimple_ranger::range_of_stmt): Check if global range is stale, and recalculate if so. gcc/testsuite/ * gcc.dg/pr97515.c: Check listing for folding of entire function.
2020-11-04libstdc++: Fix test failure with --disable-linux-futexJonathan Wakely1-0/+4
As noted in PR 96817 this new test fails if the library is built without futexes. That's expected of course, but we might as well fail more obviously than a deadlock that eventually times out. libstdc++-v3/ChangeLog: * testsuite/18_support/96817.cc: Fail fail if the library is configured to not use futexes.
2020-11-04libstdc++: Define new C++17 std::search overload for Parallel Mode [PR 94971]Jonathan Wakely2-1/+16
libstdc++-v3/ChangeLog: PR libstdc++/94971 * include/bits/stl_algo.h (search(FIter, FIter, const Searcher): Adjust #if condition. * include/parallel/algo.h (search(FIter, FIter, const Searcher&): Define new overload for C++17.
2020-11-04targhooks.c: Fix -fzero-call-used-regs 'sorry' typoTobias Burnus1-1/+1
gcc/ChangeLog: * targhooks.c (default_zero_call_used_regs): Fix flag-name typo in sorry.