aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-12-17[Ada] Spurious discriminant check on bounded synchronized queueEd Schonberg1-1/+9
gcc/ada/ * libgnat/a-cbsyqu.ads (Implementation): Provide a box initialization for the element array used internally to represent the queue, so that its components are properly initialized if the given element type has default initialization. Suppress warnings on the rest of the package in case the element type has no default or discriminant, because it is bound to be confusing to the user.
2020-12-17[Ada] Assert failure on b38105a in -gnat95 modeArnaud Charlet1-1/+3
gcc/ada/ * sem_util.adb (Inherit_Predicate_Flags): No-op before Ada 2012.
2020-12-17[Ada] Compiler crash on protected component of controlled typeArnaud Charlet2-3/+24
gcc/ada/ * exp_ch7.adb (Make_Final_Call, Make_Init_Call): Take protected types into account. * sem_util.ads: Fix typo.
2020-12-17[Ada] Fixes for GNAT error/warning messagesYannick Moy27-125/+132
gcc/ada/ * checks.adb: Rework error messages. * exp_ch3.adb: Likewise. * freeze.adb: Likewise. * lib-load.adb: Likewise. * par-ch12.adb: Likewise. * par-ch3.adb: Likewise. * par-ch4.adb: Likewise. * par-ch9.adb: Likewise. * sem_aggr.adb: Likewise. * sem_attr.adb: Likewise. * sem_cat.adb: Likewise. * sem_ch10.adb: Likewise. * sem_ch12.adb: Likewise. (Instantiate_Type): Fix CODEFIX comment, applicable only on continuation message, and identify the second message as a continuation. * sem_ch13.adb: Rework error messages. * sem_ch3.adb: Likewise. * sem_ch4.adb: Likewise. * sem_ch5.adb: Likewise. * sem_ch6.adb: Likewise. * sem_ch8.adb: Likewise. * sem_ch9.adb: Likewise. * sem_prag.adb: Likewise. * sem_res.adb: Likewise. * sem_util.adb: Likewise. (Wrong_Type): Fix CODEFIX comment, applicable only on continuation message, and identify the second message as a continuation. * symbols.adb: Rework error messages. gcc/testsuite/ * gnat.dg/interface6.adb, gnat.dg/not_null.adb, gnat.dg/protected_func.adb: Adjust error messages.
2020-12-17[Ada] Spurious error on Type'Access and <>Arnaud Charlet1-3/+8
gcc/ada/ * sem_attr.adb (OK_Self_Reference): Return True if node does not come from source (e.g. a rewritten aggregate).
2020-12-17[Ada] Style cleanups in Parse_Aspect_Stable_PropertiesPiotr Trojanek1-8/+20
gcc/ada/ * sem_ch13.adb (Parse_Aspect_Stable_Properties): Fix style; limit the scope of local variables; remove extra assignment in Extract_Entity. (Validate_Aspect_Stable_Properties): Simplify with procedural Next.
2020-12-17IBM Z: Detect libc's float_t behavior on cross compilesMarius Hillenbrand3-41/+85
When cross-compiling GCC with target libc headers available and configure option --enable-s390-excess-float-precision has been omitted, identify whether they clamp float_t to double or respect __FLT_EVAL_METHOD__ via a compile test that coerces the build-system compiler to use the target headers. Then derive the setting from that. gcc/ChangeLog: 2020-12-16 Marius Hillenbrand <mhillen@linux.ibm.com> * configure.ac: Change --enable-s390-excess-float-precision default behavior for cross compiles with target headers. * configure: Regenerate. * doc/install.texi: Adjust documentation.
2020-12-17MAINTAINERS: Add myself for write after approval.Marius Hillenbrand1-0/+1
ChangeLog: 2020-12-17 Marius Hillenbrand <mhillen@linux.ibm.com> * MAINTAINERS (Write After Approval): Add myself.
2020-12-17Fortran: Delay vtab generation until after parsing [PR92587]Tobias Burnus3-3/+83
gcc/fortran/ChangeLog: PR fortran/92587 * match.c (gfc_match_assignment): Move gfc_find_vtab call from here ... * resolve.c (gfc_resolve_code): ... to here. gcc/testsuite/ChangeLog: PR fortran/92587 * gfortran.dg/finalize_37.f90: New test.
2020-12-17PR fortran/98307 - Dependency check fails when using "allocatable"Harald Anlauf2-2/+35
The dependency check for FORALL constructs already handled pointer components to derived types, but missed allocatables. Fix that. gcc/fortran/ChangeLog: PR fortran/98307 * trans-stmt.c (check_forall_dependencies): Extend dependency check to allocatable components of derived types. gcc/testsuite/ChangeLog: PR fortran/98307 * gfortran.dg/forall_19.f90: New test.
2020-12-16test: add new Go tests from source repoIan Lance Taylor505-0/+13602
2020-12-16test: add new Go tests from source repoIan Lance Taylor274-0/+7480
2020-12-16gcc: xtensa: add optimizations for shift operationsTakayuki 'January June' Suwa2-0/+74
2020-12-16 Takayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp> gcc/ * config/xtensa/xtensa.md (*ashlsi3_1, *ashlsi3_3x, *ashrsi3_3x) (*lshrsi3_3x): New patterns. gcc/testsuite/ * gcc.target/xtensa/shifts.c: New test.
2020-12-17Daily bump.GCC Administrator14-1/+864
2020-12-17fwprop: Rewrite to use RTL SSARichard Sandiford4-1155/+548
This patch rewrites fwprop.c to use the RTL SSA framework. It tries as far as possible to mimic the old behaviour, even in caes where that doesn't fit naturally with the new framework. I've added ??? comments to mark those places, but I think “fixing” them should be done separately to make bisection easier. In particular: * The old implementation iterated over uses, and after a successful substitution, the new insn's uses were added to the end of the list. The pass still processed those uses, but because it processed them at the end, it didn't fully optimise one instruction before propagating it into the next. The new version follows the same approach for comparison purposes, but I'd like to drop that as a follow-on patch. * The old implementation operated on single use sites (DF_REF_LOCs). This doesn't work well for instructions with match_dups, where it's necessary to update both an operand and its dups at the same time. For example, attempting to substitute into a divmod instruction would fail because only the div or the mod side would be updated. The new version again follows this to some extent for comparison purposes (although not exactly). Again I'd like to drop it as a follow-on patch. One difference is that if a register occurs in multiple MEM addresses in a set, the new version will try to update them all at once. This is what causes the SVE ACLE st4* output to improve. Also, the old version didn't naturally guarantee termination (PR79405), whereas the new one does. gcc/ * fwprop.c: Rewrite to use the RTL SSA framework. gcc/testsuite/ * gcc.dg/rtl/x86_64/test-return-const.c.before-fwprop.c: Don't expect insn updates to be deferred. * gcc.target/aarch64/sve/acle/asm/st4_s8.c: Expect the addition to be folded into the address. * gcc.target/aarch64/sve/acle/asm/st4_u8.c: Likewise.
2020-12-17Add rtl-ssaRichard Sandiford23-2/+10061
This patch adds the RTL SSA infrastructure itself. The following fwprop.c patch will make use of it. gcc/ * configure.ac: Add rtl-ssa to the list of dependence directories. * configure: Regenerate. * Makefile.in (rtl-ssa-warn): New variable. (OBJS): Add the rtl-ssa object files. * emit-rtl.h (rtl_data::ssa): New field. * rtl-ssa.h: New file. * system.h: Include <functional> when INCLUDE_FUNCTIONAL is defined. * rtl-ssa/access-utils.h: Likewise. * rtl-ssa/accesses.h: New file. * rtl-ssa/accesses.cc: Likewise. * rtl-ssa/blocks.h: New file. * rtl-ssa/blocks.cc: Likewise. * rtl-ssa/change-utils.h: Likewise. * rtl-ssa/changes.h: New file. * rtl-ssa/changes.cc: Likewise. * rtl-ssa/functions.h: New file. * rtl-ssa/functions.cc: Likewise. * rtl-ssa/insn-utils.h: Likewise. * rtl-ssa/insns.h: New file. * rtl-ssa/insns.cc: Likewise. * rtl-ssa/internals.inl: Likewise. * rtl-ssa/is-a.inl: Likewise. * rtl-ssa/member-fns.inl: Likewise. * rtl-ssa/movement.h: Likewise.
2020-12-17doc: Add documentation for rtl-ssaRichard Sandiford1-0/+787
This patch adds some documentation to rtl.texi about the SSA form. It only really describes the high-level structure -- I think for API-level stuff it's better to rely on function comments instead. gcc/ * doc/rtl.texi (RTL SSA): New node.
2020-12-17rtlanal: Add simple_regno_setRichard Sandiford2-0/+34
This patch adds a routine for finding a “simple” SET for a register definition. See the comment in the patch for details. gcc/ * rtl.h (simple_regno_set): Declare. * rtlanal.c (simple_regno_set): New function.
2020-12-17rtlanal: Add some new helper classesRichard Sandiford2-0/+616
This patch adds some classes for gathering the list of registers and memory that are read and written by an instruction, along with various properties about the accesses. In some ways it's similar to the information that DF collects for registers, but extended to memory. The main reason for using it instead of DF is that it can analyse tentative changes to instructions before they've been committed. The classes also collect general information about the instruction, since it's cheap to do and helps to avoid multiple walks of the same RTL pattern. I've tried to optimise the code quite a bit, since with later patches it becomes relatively performance-sensitive. See the discussion in the comments for the trade-offs involved. I put the declarations in a new rtlanal.h header file since it seemed a bit excessive to put so much new inline stuff in rtl.h. gcc/ * rtlanal.h: New file. (MEM_REGNO): New constant. (rtx_obj_flags): New namespace. (rtx_obj_reference, rtx_properties): New classes. (growing_rtx_properties, vec_rtx_properties_base): Likewise. (vec_rtx_properties): New alias. * rtlanal.c: Include it. (rtx_properties::try_to_add_reg): New function. (rtx_properties::try_to_add_dest): Likewise. (rtx_properties::try_to_add_src): Likewise. (rtx_properties::try_to_add_pattern): Likewise. (rtx_properties::try_to_add_insn): Likewise. (vec_rtx_properties_base::grow): Likewise.
2020-12-17recog: Add an RAII class for undoing insn changesRichard Sandiford1-0/+51
When using validate_change to make a group of changes, you have to remember to cancel them if something goes wrong. This patch adds an RAII class to make that easier. See the comments in the patch for details and examples. gcc/ * recog.h (insn_change_watermark): New class.
2020-12-17recog: Add a class for propagating into insnsRichard Sandiford2-0/+480
This patch adds yet another way of propagating into an instruction and simplifying the result. (The net effect of the series is to keep the total number of propagation approaches the same though, since a later patch removes the fwprop.c routines.) One of the drawbacks of the validate_replace_* routines is that they only do simple simplifications, mostly canonicalisations: /* Do changes needed to keep rtx consistent. Don't do any other simplifications, as it is not our job. */ if (simplify) simplify_while_replacing (loc, to, object, op0_mode); But substituting can often lead to real simplification opportunities. simplify-rtx.c:simplify_replace_rtx does fully simplify the result, but it only operates on specific rvalues rather than full instruction patterns. It is also nondestructive, which means that it returns a new rtx whenever a substitution or simplification was possible. This can create quite a bit of garbage rtl in the context of a speculative recog, where changing the contents of a pointer is often enough. The new routines are therefore supposed to provide simplify_replace_rtx- style substitution in recog. They go to some effort to prevent garbage rtl from being created. At the moment, the new routines fail if the pattern would still refer to the old "from" value in some way. That might be unnecessary in some contexts; if so, it could be put behind a configuration parameter. gcc/ * recog.h (insn_propagation): New class. * recog.c (insn_propagation::apply_to_mem_1): New function. (insn_propagation::apply_to_rvalue_1): Likewise. (insn_propagation::apply_to_lvalue_1): Likewise. (insn_propagation::apply_to_pattern_1): Likewise. (insn_propagation::apply_to_pattern): Likewise. (insn_propagation::apply_to_rvalue): Likewise.
2020-12-17recog: Add a way of temporarily undoing changesRichard Sandiford2-0/+50
In some cases, it can be convenient to roll back the changes that have been made by validate_change to see how things looked before, then reroll the changes. For example, this makes it possible to defer calculating the cost of an instruction until we know that the result is actually needed. It can also make dumps easier to read. This patch adds a couple of helper functions for doing that. gcc/ * recog.h (temporarily_undo_changes, redo_changes): Declare. * recog.c (temporarily_undone_changes): New variable. (validate_change_1, confirm_change_group): Check that it's zero. (cancel_changes): Likewise. (swap_change, temporarily_undo_changes): New functions. (redo_changes): Likewise.
2020-12-17recog: Add a validate_change_xveclen functionRichard Sandiford2-6/+36
A later patch wants to be able to use the validate_change machinery to reduce the XVECLEN of a PARALLEL. This should be more efficient than allocating a separate PARALLEL at a possibly distant memory location, especially since the new PARALLEL would be garbage rtl if the new pattern turns out not to match. Combine already pulls this trick with SUBST_INT. This patch adds a general helper for doing that. gcc/ * recog.h (validate_change_xveclen): Declare. * recog.c (change_t::old_len): New field. (validate_change_1): Add a new_len parameter. Conditionally replace the XVECLEN of an rtx, avoiding single-element PARALLELs. (validate_change_xveclen): New function. (cancel_changes): Undo changes made by validate_change_xveclen.
2020-12-17simplify-rtx: Put simplify routines into a classRichard Sandiford2-81/+220
One of the recurring warts of RTL is that multiplication by a power of 2 is represented as a MULT inside a MEM but as an ASHIFT outside a MEM. It would obviously be better if we didn't have this kind of context sensitivity, but it would be difficult to remove. Currently the simplify-rtx.c routines are hard-coded for the ASHIFT form. This means that some callers have to convert the ASHIFTs “back” into MULTs after calling the simplify-rtx.c routines; see fwprop.c:canonicalize_address for an example. I think we can relieve some of the pain by wrapping the simplify-rtx.c routines in a simple class that tracks whether the expression occurs in a MEM or not, so that no post-processing is needed. An obvious concern is whether passing the “this” pointer around will slow things down or bloat the code. I can't measure any increase in compile time after applying the patch. Sizewise, simplify-rtx.o text increases by 2.3% in default-checking builds and 4.1% in release-checking builds. I realise the MULT/ASHIFT thing isn't the most palatable reason for doing this, but I think it might be useful for other things in future, such as using local nonzero_bits hooks/virtual functions instead of the global hooks. The obvious alternative would be to add a static variable and hope that it is always updated correctly. Later patches make use of this. gcc/ * rtl.h (simplify_context): New class. (simplify_unary_operation, simplify_binary_operation): Use it. (simplify_ternary_operation, simplify_relational_operation): Likewise. (simplify_subreg, simplify_gen_unary, simplify_gen_binary): Likewise. (simplify_gen_ternary, simplify_gen_relational): Likewise. (simplify_gen_subreg, lowpart_subreg): Likewise. * simplify-rtx.c (simplify_gen_binary): Turn into a member function of simplify_context. (simplify_gen_unary, simplify_gen_ternary, simplify_gen_relational) (simplify_truncation, simplify_unary_operation): Likewise. (simplify_unary_operation_1, simplify_byte_swapping_operation) (simplify_associative_operation, simplify_logical_relational_operation) (simplify_binary_operation, simplify_binary_operation_series) (simplify_distributive_operation, simplify_plus_minus): Likewise. (simplify_relational_operation, simplify_relational_operation_1) (simplify_cond_clz_ctz, simplify_merge_mask): Likewise. (simplify_ternary_operation, simplify_subreg, simplify_gen_subreg) (lowpart_subreg): Likewise. (simplify_binary_operation_1): Likewise. Test mem_depth when deciding whether the ASHIFT or MULT form is canonical. (simplify_merge_mask): Use simplify_context.
2020-12-17recog: Split out a register_asm_p functionRichard Sandiford3-4/+14
verify_changes has a test for whether a particular hard register is a user-defined register asm. A later patch needs to test the same thing, so this patch splits it out into a helper. gcc/ * rtl.h (register_asm_p): Declare. * recog.c (verify_changes): Split out the test for whether a hard register is a register asm to... * rtlanal.c (register_asm_p): ...this new function.
2020-12-17Export print-rtl.c:print_insn_with_notesRichard Sandiford2-4/+2
Later patches want to use print_insn_with_notes (printing to a pretty_printer). This patch exports it from print-rtl.c. The non-notes version is already public. gcc/ * print-rtl.h (print_insn_with_notes): Declare. * print-rtl.c (print_insn_with_notes): Make non-static
2020-12-17Split update_cfg_for_uncondjump out of combineRichard Sandiford3-36/+48
Later patches want to reuse combine's update_cfg_for_uncondjump, so this patch makes it a public cfgrtl.c function. gcc/ * cfgrtl.h (update_cfg_for_uncondjump): Declare. * combine.c (update_cfg_for_uncondjump): Move to... * cfgrtl.c: ...here.
2020-12-17Add a cut-down version of std::span (array_slice)Richard Sandiford1-0/+120
A later patch wants to be able to pass around subarray views of an existing array. The standard class to do that is std::span, but it's a C++20 thing. This patch just adds a cut-down version of it. The intention is just to provide what's currently needed. gcc/ * vec.h (array_slice): New class.
2020-12-17Add an alternative splay tree implementationRichard Sandiford7-0/+1721
We already have two splay tree implementations: the old C one in libiberty and a templated reimplementation of it in typed-splay-tree.h. However, they have some drawbacks: - They hard-code the assumption that nodes should have both a key and a value, which isn't always true. - They use the two-phase method of lookup, and so nodes need to store a temporary back pointer. We can avoid that overhead by using the top-down method (as e.g. the bitmap tree code already does). - The tree node has to own the key and the value. For some use cases it's more convenient to embed the tree links in the value instead. Also, a later patch wants to use splay trees to represent an adaptive total order: the splay tree itself records whether node N1 is less than node N2, and (in the worst case) comparing nodes is a splay operation. This patch therefore adds an alternative implementation. The main features are: - Nodes can optionally point back to their parents. - An Accessors class abstracts accessing child nodes and (where applicable) parent nodes, so that the information can be embedded in larger data structures. - There is no fixed comparison function at the class level. Instead, individual functions that do comparisons take a comparison function argument. - There are two styles of comparison function, optimised for different use cases. (See the comments in the patch for details.) - It's possible to do some operations directly on a given node, without knowing whether it's the root. This includes the comparison use case described above. This of course has its own set of drawbacks. It's really providing splay utility functions rather than a true ADT, and so is more low-level than the existing routines. It's mostly geared for cases in which the client code wants to participate in the splay operations to some extent. gcc/ * Makefile.in (OBJS): Add splay-tree-utils.o. * system.h: Include <array> when INCLUDE_ARRAY is defined. * selftest.h (splay_tree_cc_tests): Declare. * selftest-run-tests.c (selftest::run_tests): Run splay_tree_cc_tests. * splay-tree-utils.h: New file. * splay-tree-utils.tcc: Likewise. * splay-tree-utils.cc: Likewise.
2020-12-17Add a class that multiplexes two pointer typesRichard Sandiford1-0/+251
This patch adds a pointer_mux<T1, T2> class that provides similar functionality to: union { T1 *a; T2 *b; }; ... bool is_b_rather_than_a; except that the is_b_rather_than_a tag is stored in the low bit of the pointer. See the comments in the patch for a comparison between the two approaches and why this one can be more efficient. I've tried to microoptimise the class a fair bit, since a later patch uses it extensively in order to keep the sizes of data structures down. gcc/ * mux-utils.h: New file.
2020-12-17Add an RAII class for managing obstacksRichard Sandiford1-0/+86
This patch adds an RAII class for managing the lifetimes of objects on an obstack. See the comments in the patch for more details and example usage. gcc/ * obstack-utils.h: New file.
2020-12-17Add more iterator utilitiesRichard Sandiford1-0/+159
This patch adds some more iterator helper classes. They really fall into two groups, but there didn't seem much value in separating them: - A later patch has a class hierarchy of the form: Base +- Derived1 +- Derived2 A class wants to store an array A1 of Derived1 pointers and an array A2 of Derived2 pointers. However, for compactness reasons, it was convenient to have a single array of Base pointers, with A1 and A2 being slices of this array. This reduces the overhead from two pointers and two ints (3 LP64 words) to one pointer and two ints (2 LP64 words). But consumers of the class shouldn't be aware of this: they should see A1 as containing Derived1 pointers rather than Base pointers and A2 as containing Derived2 pointers rather than Base pointers. This patch adds derived_iterator and const_derived_container classes to support this use case. - A later patch also adds various linked lists. This patch adds wrapper_iterator and list_iterator classes to make it easier to create iterators for these linked lists. For example: // Iterators for lists of definitions. using def_iterator = list_iterator<def_info, &def_info::next_def>; using reverse_def_iterator = list_iterator<def_info, &def_info::prev_def>; This in turn makes it possible to use range-based for loops on the lists. The patch just adds the things that the later patches need; it doesn't try to make the classes as functionally complete as possible. I think we should add extra functionality when needed rather than ahead of time. gcc/ * iterator-utils.h (derived_iterator): New class. (const_derived_container, wrapper_iterator): Likewise. (list_iterator): Likewise.
2020-12-17reginfo: Add a global_reg_setRichard Sandiford2-0/+7
A later patch wants to use the set of global registers as a HARD_REG_SET rather than a bool/char array. Most other arrays already have a HARD_REG_SET counterpart, but this one didn't. gcc/ * hard-reg-set.h (global_reg_set): Declare. * reginfo.c (global_reg_set): New variable. (init_reg_sets_1, globalize_reg): Update it when globalizing registers.
2020-12-16libstdc++: Add C++ runtime support for new 128-bit long double formatJonathan Wakely44-311/+1380
This adds support for the new __ieee128 long double format on powerpc64le targets. Most of the complexity comes from wanting a single libstdc++.so library that contains the symbols needed by code compiled with both -mabi=ibmlongdouble and -mabi=ieeelongdouble (and not forgetting -mlong-double-64 as well!) In a few places this just requires an extra overload, for example std::from_chars has to be overloaded for both forms of long double. That can be done in a single translation unit that defines overloads for 'long double' and also '__ieee128', so that user code including <charconv> will be able to link to a definition for either type of long double. Those are the easy cases. The difficult parts are (as for the std::string ABI transition) the I/O and locale facets. In order to be able to write either form of long double to an ostream such as std::cout we need the locale to contain a std::num_put facet that can handle both forms. The same approach is taken as was already done for supporting 64-bit long double and 128-bit long double: adding extra overloads of do_put to the facet class. On targets where the new long double code is enabled, the facets that are registered in the locale at program startup have additional overloads so that they can work with any long double type. Where this fails to work is if user code installs its own facet, which will probably not have the additional overloads and so will only be able to output one or the other type. In practice the number of users expecting to be able to use their own locale facets in code using a mix of -mabi=ibmlongdouble and -mabi=ieeelongdouble is probably close to zero. libstdc++-v3/ChangeLog: * Makefile.in: Regenerate. * config.h.in: Regenerate. * config/abi/pre/gnu.ver: Make patterns less greedy. * config/os/gnu-linux/ldbl-ieee128-extra.ver: New file with patterns for IEEE128 long double symbols. * configure: Regenerate. * configure.ac: Enable alternative 128-bit long double format on powerpc64*-*-linux*. * doc/Makefile.in: Regenerate. * fragment.am: Regenerate. * include/Makefile.am: Set _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT. * include/Makefile.in: Regenerate. * include/bits/c++config: Define inline namespace for new long double symbols. Don't define _GLIBCXX_USE_FLOAT128 when it's the same type as long double. * include/bits/locale_classes.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT] (locale::_Impl::_M_init_extra_ldbl128): Declare new member function. * include/bits/locale_facets.h (_GLIBCXX_NUM_FACETS): Simplify by only counting narrow character facets. (_GLIBCXX_NUM_CXX11_FACETS): Likewise. (_GLIBCXX_NUM_LBDL_ALT128_FACETS): New. [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT] (num_get::__do_get): Define vtable placeholder for __ibm128 long double type. [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__] (num_get::__do_get): Declare vtable placeholder for __ibm128 long double type. [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__] (num_put::__do_put): Likewise. * include/bits/locale_facets.tcc [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__] (num_get::__do_get, num_put::__do_put): Define. * include/bits/locale_facets_nonio.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__] (money_get::__do_get): Declare vtable placeholder for __ibm128 long double type. [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__] (money_put::__do_put): Likewise. * include/bits/locale_facets_nonio.tcc [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__] (money_get::__do_get, money_put::__do_put): Define. * include/ext/numeric_traits.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT] (__numeric_traits<__ibm128>, __numeric_traits<__ieee128>): Define. * libsupc++/Makefile.in: Regenerate. * po/Makefile.in: Regenerate. * python/Makefile.in: Regenerate. * src/Makefile.am: Add compatibility-ldbl-alt128.cc and compatibility-ldbl-alt128-cxx11.cc sources and recipes for objects. * src/Makefile.in: Regenerate. * src/c++11/Makefile.in: Regenerate. * src/c++11/compatibility-ldbl-alt128-cxx11.cc: New file defining symbols using the old 128-bit long double format, for the cxx11 ABI. * src/c++11/compatibility-ldbl-alt128.cc: Likewise, for the gcc4-compatible ABI. * src/c++11/compatibility-ldbl-facets-aliases.h: New header for long double compat aliases. * src/c++11/cow-locale_init.cc: Add comment. * src/c++11/cxx11-locale-inst.cc: Define C and C_is_char unconditionally. * src/c++11/cxx11-wlocale-inst.cc: Add sanity check. Include locale-inst.cc directly, not via cxx11-locale-inst.cc. * src/c++11/locale-inst-monetary.h: New header for monetary category instantiations. * src/c++11/locale-inst-numeric.h: New header for numeric category instantiations. * src/c++11/locale-inst.cc: Include new headers for monetary, numeric, and long double definitions. * src/c++11/wlocale-inst.cc: Remove long double compat aliases that are defined in new header now. * src/c++17/Makefile.am: Use -mabi=ibmlongdouble for floating_from_chars.cc. * src/c++17/Makefile.in: Regenerate. * src/c++17/floating_from_chars.cc (from_chars_impl): Add if-constexpr branch for __ieee128. (from_chars): Overload for __ieee128. * src/c++20/Makefile.in: Regenerate. * src/c++98/Makefile.in: Regenerate. * src/c++98/locale_init.cc (num_facets): Adjust calculation. (locale::_Impl::_Impl(size_t)): Call _M_init_extra_ldbl128. * src/c++98/localename.cc (num_facets): Adjust calculation. (locale::_Impl::_Impl(const char*, size_t)): Call _M_init_extra_ldbl128. * src/filesystem/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. * testsuite/util/testsuite_abi.cc: Add new symbol versions. Allow new symbols to be added to GLIBCXX_IEEE128_3.4.29 and CXXABI_IEEE128_1.3.13 too. * testsuite/26_numerics/complex/abi_tag.cc: Add u9__ieee128 to regex matching expected symbols.
2020-12-17maintainer-scripts: Use /sourceware/snapshot-tmp/gcc as temp directory if ↵Jakub Jelinek1-6/+13
possible > https://gcc.gnu.org/pipermail/gccadmin/2020q4/017037.html > > OSError: [Errno 28] No space left on device: > '/tmp/tmp.Zq3p6D4MxS/gcc/.git/objects/objn31xpefh' -> > '/tmp/tmp.Zq3p6D4MxS/gcc/.git/objects/db/ffb02a4bcdd4ec04af3db75d86b8cc2e52bdff' > > Maybe change the script to use /sourceware/snapshot-tmp/gcc (which has > rather more space) instead of /tmp? This patch implements that. 2020-12-17 Jakub Jelinek <jakub@redhat.com> * update_version_git: Put BASEDIR into /sourceware/snapshot-tmp/gcc if it exist.
2020-12-16rs6000: Add support for powerpc64le-unknown-freebsdPiotr Kubaj4-3/+19
This implements support for powerpc64le architecture on FreeBSD. Since we don't have powerpcle (32-bit), I did not add support for powerpcle here. This remains to be changed if there is powerpcle support in the future. 2020-12-15 Piotr Kubaj <pkubaj@FreeBSD.org> gcc/ * config.gcc (powerpc*le-*-freebsd*): Add. * configure.ac (powerpc*le-*-freebsd*): Ditto. * configure: Regenerate. * config/rs6000/freebsd64.h (ASM_SPEC_COMMON): Use ENDIAN_SELECT. (DEFAULT_ASM_ENDIAN): Add little endian support. (LINK_OS_FREEBSD_SPEC64): Ditto.
2020-12-16test: add new Go tests from source repoIan Lance Taylor14-0/+579
2020-12-16C: Drop qualifiers of assignment expressions. [PR98047]Martin Uecker2-10/+21
ISO C17 6.5.15.1 specifies that the result is the type the LHS would have after lvalue conversion. 2020-12-16 Martin Uecker <muecker@gwdg.de> gcc/c/ PR c/98047 * c-typeck.c (build_modify_expr): Drop qualifiers. gcc/testsuite/ PR c/98047 * gcc.dg/qual-assign-7.c: New test.
2020-12-16C: Avoid incorrect warning for volatile in compound expressions [PR98260]Martin Uecker2-2/+21
2020-12-16 Martin Uecker <muecker@gwdg.de> gcc/c/ PR c/98260 * c-parser.c (c_parser_expression): Look into nop expression when marking expressions as read. gcc/testsuite/ PR c/98260 * gcc.dg/unused-9.c: New test.
2020-12-16gcc: xtensa: rearrange DI mode constant loadingTakayuki 'January June' Suwa2-2/+32
2020-12-16 Takayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp> gcc/ * config/xtensa/xtensa.c (xtensa_emit_move_sequence): Try to replace 'l32r' with 'movi' + 'slli' when optimizing for size. * config/xtensa/xtensa.md (movdi): Split loading DI mode constant into register pair into two loads of SI mode constants.
2020-12-16Arm: MVE: Split refactoring of remaining complex instrinsicsTamar Christina5-138/+54
This refactors the complex numbers bits of MVE to go through the same unspecs as the NEON variant. This is pre-work to allow code to be shared between NEON and MVE for the complex vectorization patches. gcc/ChangeLog: * config/arm/arm_mve.h (__arm_vcmulq_rot90_f16): (__arm_vcmulq_rot270_f16, _arm_vcmulq_rot180_f16, __arm_vcmulq_f16, __arm_vcmulq_rot90_f32, __arm_vcmulq_rot270_f32, __arm_vcmulq_rot180_f32, __arm_vcmulq_f32, __arm_vcmlaq_f16, __arm_vcmlaq_rot180_f16, __arm_vcmlaq_rot270_f16, __arm_vcmlaq_rot90_f16, __arm_vcmlaq_f32, __arm_vcmlaq_rot180_f32, __arm_vcmlaq_rot270_f32, __arm_vcmlaq_rot90_f32): Update builtin calls. * config/arm/arm_mve_builtins.def (vcmulq_f, vcmulq_rot90_f, vcmulq_rot180_f, vcmulq_rot270_f, vcmlaq_f, vcmlaq_rot90_f, vcmlaq_rot180_f, vcmlaq_rot270_f): Removed. (vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270, vcmlaq, vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270): New. * config/arm/iterators.md (mve_rot): Add UNSPEC_VCMLA, UNSPEC_VCMLA90, UNSPEC_VCMLA180, UNSPEC_VCMLA270, UNSPEC_VCMUL, UNSPEC_VCMUL90, UNSPEC_VCMUL180, UNSPEC_VCMUL270. (VCMUL): New. * config/arm/mve.md (mve_vcmulq_f<mode, mve_vcmulq_rot180_f<mode>, mve_vcmulq_rot270_f<mode>, mve_vcmulq_rot90_f<mode>, mve_vcmlaq_f<mode>, mve_vcmlaq_rot180_f<mode>, mve_vcmlaq_rot270_f<mode>, mve_vcmlaq_rot90_f<mode>): Removed. (mve_vcmlaq<mve_rot><mode>, mve_vcmulq<mve_rot><mode>, mve_vcaddq<mve_rot><mode>, cadd<rot><mode>3, mve_vcaddq<mve_rot><mode>): New. * config/arm/unspecs.md (UNSPEC_VCMUL90, UNSPEC_VCMUL270, UNSPEC_VCMUL, UNSPEC_VCMUL180): New. (VCMULQ_F, VCMULQ_ROT180_F, VCMULQ_ROT270_F, VCMULQ_ROT90_F, VCMLAQ_F, VCMLAQ_ROT180_F, VCMLAQ_ROT90_F, VCMLAQ_ROT270_F): Removed.
2020-12-16Arm: Add NEON and MVE RTL patterns for Complex Addition.Tamar Christina7-72/+58
This adds implementation for the optabs for complex additions. With this the following C code: void f90 (float complex a[restrict N], float complex b[restrict N], float complex c[restrict N]) { for (int i=0; i < N; i++) c[i] = a[i] + (b[i] * I); } generates f90: add r3, r2, #1600 .L2: vld1.32 {q8}, [r0]! vld1.32 {q9}, [r1]! vcadd.f32 q8, q8, q9, #90 vst1.32 {q8}, [r2]! cmp r3, r2 bne .L2 bx lr instead of f90: add r3, r2, #1600 .L2: vld2.32 {d24-d27}, [r0]! vld2.32 {d20-d23}, [r1]! vsub.f32 q8, q12, q11 vadd.f32 q9, q13, q10 vst2.32 {d16-d19}, [r2]! cmp r3, r2 bne .L2 bx lr gcc/ChangeLog: * config/arm/arm_mve.h (__arm_vcaddq_rot90_u8, __arm_vcaddq_rot270_u8, __arm_vcaddq_rot90_s8, __arm_vcaddq_rot270_s8, __arm_vcaddq_rot90_u16, __arm_vcaddq_rot270_u16, __arm_vcaddq_rot90_s16, __arm_vcaddq_rot270_s16, __arm_vcaddq_rot90_u32, __arm_vcaddq_rot270_u32, __arm_vcaddq_rot90_s32, __arm_vcaddq_rot270_s32, __arm_vcaddq_rot90_f16, __arm_vcaddq_rot270_f16, __arm_vcaddq_rot90_f32, __arm_vcaddq_rot270_f32): Update builtin calls. * config/arm/arm_mve_builtins.def (vcaddq_rot90_u, vcaddq_rot270_u, vcaddq_rot90_s, vcaddq_rot270_s, vcaddq_rot90_f, vcaddq_rot270_f): Removed. (vcaddq_rot90, vcaddq_rot270): New. * config/arm/constraints.md (Dz): Include MVE. * config/arm/iterators.md (mve_rot): New. (supf): Remove VCADDQ_ROT270_S, VCADDQ_ROT270_U, VCADDQ_ROT90_S, VCADDQ_ROT90_U. (VCADDQ_ROT270, VCADDQ_ROT90): Removed. * config/arm/mve.md (mve_vcaddq_rot270_<supf><mode, mve_vcaddq_rot90_<supf><mode>, mve_vcaddq_rot270_f<mode>, mve_vcaddq_rot90_f<mode>): Removed. (mve_vcaddq<mve_rot><mode>, mve_vcaddq<mve_rot><mode>): New. * config/arm/unspecs.md (VCADDQ_ROT270_S, VCADDQ_ROT90_S, VCADDQ_ROT270_U, VCADDQ_ROT90_U, VCADDQ_ROT270_F, VCADDQ_ROT90_F): Removed. * config/arm/vec-common.md (cadd<rot><mode>3): New.
2020-12-16AArch64: Add NEON, SVE and SVE2 RTL patterns for Complex Addition.Tamar Christina4-0/+36
This adds implementation for the optabs for add complex operations. With this the following C code: void f90 (float complex a[restrict N], float complex b[restrict N], float complex c[restrict N]) { for (int i=0; i < N; i++) c[i] = a[i] + (b[i] * I); } generates f90: mov x3, 0 .p2align 3,,7 .L2: ldr q0, [x0, x3] ldr q1, [x1, x3] fcadd v0.4s, v0.4s, v1.4s, #90 str q0, [x2, x3] add x3, x3, 16 cmp x3, 1600 bne .L2 ret instead of f90: add x3, x1, 1600 .p2align 3,,7 .L2: ld2 {v4.4s - v5.4s}, [x0], 32 ld2 {v2.4s - v3.4s}, [x1], 32 fsub v0.4s, v4.4s, v3.4s fadd v1.4s, v5.4s, v2.4s st2 {v0.4s - v1.4s}, [x2], 32 cmp x3, x1 bne .L2 ret gcc/ChangeLog: * config/aarch64/aarch64-simd.md (cadd<rot><mode>3): New. * config/aarch64/iterators.md (SVE2_INT_CADD_OP): New. * config/aarch64/aarch64-sve.md (cadd<rot><mode>3): New. * config/aarch64/aarch64-sve2.md (cadd<rot><mode>3): New.
2020-12-16Add the -fdebug-aux-vars flag to debug variables generated by Fortran.Thomas Koenig3-1/+56
gcc/fortran/ChangeLog: PR fortran/90207 * invoke.texi: Document -fdebug-aux-vars. * lang.opt: Add -fdebug-aux-vars. * trans.c (MAX_PREFIX_LEN): New macro. (create_var_debug_raw): New function. (gfc_create_var_np): Call create_var_debug_raw if flag_debug_aux_vars is set. (cherry picked from commit 662de36bf798c8c470b382015283fe3a439cdd8f)
2020-12-16Show coarrays on parse tree dump, implement debug for array references.Thomas Koenig1-0/+36
gcc/fortran/ChangeLog: * dump-parse-tree.c (show_array_ref): Also show coarrays. (debug): Implement for array reference. (cherry picked from commit 501f470267445e037614649639d17a1b32b4a9aa)
2020-12-16testsuite: Adjust expected instruction count for PPC fold testcases.David Edelsohn8-12/+12
commit r11-5958 changed the code generation for the vector logical fold tests. This patch updates the expected instruction counts for different instructions. gcc/testsuite/ChangeLog: 2020-12-16 David Edelsohn <dje.gcc@gmail.com> PR target/98280 * gcc.target/powerpc/fold-vec-logical-ors-char.c: Adjust count. * gcc.target/powerpc/fold-vec-logical-ors-int.c: Adjust count. * gcc.target/powerpc/fold-vec-logical-ors-longlong.c: Adjust count. * gcc.target/powerpc/fold-vec-logical-ors-short.c: Adjust count. * gcc.target/powerpc/fold-vec-logical-other-char.c: Adjust count. * gcc.target/powerpc/fold-vec-logical-other-int.c: Adjust count. * gcc.target/powerpc/fold-vec-logical-other-longlong.c: Adjust count. * gcc.target/powerpc/fold-vec-logical-other-short.c: Adjust count.
2020-12-16Fix handling of shared coarray indexing.Thomas Koenig5-90/+118
gcc/fortran/ChangeLog: * dependency.c: Add options.h header. (gfc_full_array_ref_p): Coarrays only are full if the have DIMEN_STAR. * trans-array.c (cas_add_strides): Remove. (cas_add_this_image_offset): Reorganize. (cas_impl_this_image_ref): Fix return for reference. (gfc_conv_ss_descriptor): Fix handling of offset. (gfc_conv_array_ref): Likewise. (gfc_trans_preloop_setup): Use effective dimension. (gfc_conv_section_startstride): Shared coarrays should be handled like deferred arrays. (gfc_get_dataptr_offset): Adjust call to cas_add_this_image_offset. (gfc_conv_expr_descriptor): Adjust dimensions. (gfc_walk_array_ref): Likewise. * trans-types.c (gfc_sym_type): Handle shared coarrays like allocatable arrays. (gfc_get_derived_type): Likewise. gcc/testsuite/ChangeLog: * gfortran.dg/caf-shared/lower_cobound_1.f90: New test. * gfortran.dg/caf-shared/whole_array_1.f90: New test.
2020-12-16c++: Another solaris header use [PR 98315]Nathan Sidwell3-7/+8
Rather than early-include sys/socket.h, let's allow the includer to tell cody no networking. libcody/ * cody.hh: Allow user to set CODY_NETWORKING. gcc/cp/ * mapper-resolver.cc: Remove early include of sys/socket.h. Specify no CODY_NETWORKING instead. * module.cc: Specify no CODY_NETWORKING.
2020-12-16c++: Fix template parm ICE [PR 98297]Nathan Sidwell2-1/+9
I think this is nonsense code, we seem to be naming an instantiation of a template template parm. But this fixes the ICE. Perhaps we should diagnose the issue earlier? gcc/cp/ * parser.c (cp_parser_elaborated_type_specifier): Test BOUND_TEMPLATE_TEMPLATE_PARM before checking for instantiation. gcc/testsuite/ * g++.dg/template/pr98297.C: New.
2020-12-16c++tools: fix install-strip [PR 98328]Nathan Sidwell3-13/+24
I'd missed an install-strip rule in c++tools. Here it is, cribbed from gcc/ subdir. c++tools/ * Makefile.in (INSTALL): Replace with ... (INSTALL_PROGRAM): ... this. (INSTALL_STRIP_PROGRAM): New. (install-strip): New target. (install): Use INSTALL_PROGRAM. * configure.ac: Add INSTALL_PROGRAM. * configure: Regenerated.