aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-11-10sccvn: Fix up push_partial_def little-endian bitfield handling [PR97764]Jakub Jelinek2-1/+18
This patch fixes a thinko in the left-endian push_partial_def path. As the testcase shows, we have 3 bitfields in the struct, bitoff bitsize 0 3 3 28 31 1 the corresponding read is the byte at offset 3 (i.e. 24 bits) and push_partial_def first handles the full store ({}) to all bits and then is processing the store to the middle bitfield with value of -1. Here are the interesting spots: pd.offset -= offseti; this adjusts the pd to { -21, 28 }, the (for little-endian lowest) 21 bits aren't interesting to us, we only care about the upper 7. len = native_encode_expr (pd.rhs, this_buffer, bufsize, MAX (0, -pd.offset) / BITS_PER_UNIT); native_encode_expr has the offset parameter in bytes and we tell it that we aren't interested in the first (lowest) two bytes of the number. It encodes 0xff, 0xff with len == 2 then. HOST_WIDE_INT size = pd.size; if (pd.offset < 0) size -= ROUND_DOWN (-pd.offset, BITS_PER_UNIT); we get 28 - 16, i.e. 12 - the 16 is subtracting those 2 bytes that we omitted in native_encode_expr. size = MIN (size, (HOST_WIDE_INT) needed_len * BITS_PER_UNIT); needed_len is how many bytes the read at most needs, and that is 1, so we get size 8 and copy all 8 bits (i.e. a single byte plus nothing) from the native_encode_expr filled this_buffer; this incorrectly sets the byte to 0xff when we want 0x7f. The above line is correct for the pd.offset >= 0 case when we don't skip anything, but for the pd.offset < 0 case we need to subtract also the remainder of the bits we aren't interested in (the code shifts the bytes by that number of bits). If it weren't for the big-endian path, we could as well do if (pd.offset < 0) size += pd.offset; but the big-endian path needs it differently. With the following patch, amnt is 3 and we subtract from 12 the (8 - 3) bits and thus get the 7 which is the value we want. 2020-11-10 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/97764 * tree-ssa-sccvn.c (vn_walk_cb_data::push_partial_def): For little-endian stores with negative pd.offset, subtract BITS_PER_UNIT - amnt from size if amnt is non-zero. * gcc.c-torture/execute/pr97764.c: New test.
2020-11-10Fortran: Fix function decl's location [PR95847]Tobias Burnus2-9/+27
gcc/fortran/ChangeLog: PR fortran/95847 * trans-decl.c (gfc_get_symbol_decl): Do not (re)set the location of an external procedure. (build_entry_thunks, generate_coarray_init, create_main_function, gfc_generate_function_code): Use fndecl's location in BIND_EXPR. gcc/testsuite/ChangeLog: PR fortran/95847 * gfortran.dg/coverage.f90: New test.
2020-11-10tree-optimization/97760 - reduction paths with unhandled live stmtRichard Biener2-3/+32
This makes sure we reject reduction paths with a live stmt that is not the last one altering the value. This is because we do not handle this in the epilogue unless there's a scalar epilogue loop. 2020-11-09 Richard Biener <rguenther@suse.de> PR tree-optimization/97760 * tree-vect-loop.c (check_reduction_path): Reject reduction paths we do not handle in epilogue generation. * gcc.dg/vect/pr97760.c: New testcase.
2020-11-10Normalize VARYING for -fstrict-enums.Aldy Hernandez3-15/+60
The problem here is that the representation for VARYING in -fstrict-enums is different between value_range and irange. The helper function irange::normalize_min_max() will normalize to VARYING only if setting the range to the entire domain of the underlying type. That is, [0, 0xff..ff], not the domain as defined by -fstrict-enums. This causes problems because the multi-range version of varying_p() will return true if the range is the domain as defined by -fstrict-enums. Thus, normalize_min_max and varying_p have different concepts of varying for multi-ranges. (BTW, legacy ranges are different because they never look at the extremes of a range to determine varying-ness. They only look at the kind field.) One approach is to change all the code to limit ranges to the domain in the -fstrict-enums world, but this won't work because there are various instances of gimple where the values assigned or compared are beyond the limits of TYPE_{MIN,MAX}_VALUE. One example is the addition of 0xffffffff to represent subtraction. This patch fixes multi-range varying_p() and set_varying() to agree with the normalization code, using the extremes of the underlying type, to represent varying. gcc/ChangeLog: PR tree-optimization/97767 * value-range.cc (dump_bound_with_infinite_markers): Use wi::min_value and wi::max_value. (range_tests_strict_enum): New. (range_tests): Call range_tests_strict_enum. * value-range.h (irange::varying_p): Use wi::min_value and wi::max_value. (irange::set_varying): Same. (irange::normalize_min_max): Remove comment. gcc/testsuite/ChangeLog: * g++.dg/opt/pr97767.C: New test.
2020-11-10Adjust Keylocker regex pattern for darwin, and add missing aesenc256kl test.hongyuw110-93/+110
gcc/testsuite/ChangeLog * gcc.target/i386/keylocker-aesdec128kl.c: Adjust regex patterns. * gcc.target/i386/keylocker-aesdec256kl.c: Likewise. * gcc.target/i386/keylocker-aesdecwide128kl.c: Likewise. * gcc.target/i386/keylocker-aesdecwide256kl.c: Likewise. * gcc.target/i386/keylocker-aesenc128kl.c: Likewise. * gcc.target/i386/keylocker-aesencwide128kl.c: Likewise. * gcc.target/i386/keylocker-aesencwide256kl.c: Likewise. * gcc.target/i386/keylocker-encodekey128.c: Likewise. * gcc.target/i386/keylocker-encodekey256.c: Likewise. * gcc.target/i386/keylocker-aesenc256kl.c: New test.
2020-11-09Fix logical_combine OR operation. Again.Andrew MacLeod2-12/+37
The original fix was incorrect and results in loss of opportunities. Revert the original fix. When processing logical chains, do not follow chains outside of the current basic block. Use the import value instead. gcc/ PR tree-optimization/97567 * gimple-range-gori.cc: (gori_compute::logical_combine): False OR operations should intersect the 2 results. (gori_compute::compute_logical_operands_in_chain): If def chains are outside the current basic block, don't follow them. gcc/testsuite/ * gcc.dg/pr97567-2.c: New.
2020-11-10Daily bump.GCC Administrator9-1/+418
2020-11-09c++: DR 1914 - Allow duplicate standard attributes.Marek Polacek9-32/+81
Following Joseph's change for C to allow duplicate C2x standard attributes <https://gcc.gnu.org/pipermail/gcc-patches/2020-October/557272.html>, this patch does a similar thing for C++. This is DR 1914, to be resolved by <wg21.link/p2156>, which is not part of the standard yet, but has wide support so looks like a shoo-in. The duplications now produce warnings instead, but only if the attribute wasn't specified via a macro. gcc/c-family/ChangeLog: DR 1914 * c-common.c (attribute_fallthrough_p): Tweak the warning message. gcc/cp/ChangeLog: DR 1914 * parser.c (cp_parser_check_std_attribute): Return bool. Add a location_t parameter. Return true if the attribute wasn't duplicated. Give a warning instead of an error. Check more attributes. (cp_parser_std_attribute_list): Don't add duplicated attributes to the list. Pass location to cp_parser_check_std_attribute. gcc/testsuite/ChangeLog: DR 1914 * c-c++-common/attr-fallthrough-2.c: Adjust dg-warning. * g++.dg/cpp0x/fallthrough2.C: Likewise. * g++.dg/cpp0x/gen-attrs-60.C: Turn dg-error into dg-warning. * g++.dg/cpp1y/attr-deprecated-2.C: Likewise. * g++.dg/cpp2a/attr-likely2.C: Adjust dg-warning. * g++.dg/cpp2a/nodiscard-once.C: Turn dg-error into dg-warning. * g++.dg/cpp0x/gen-attrs-72.C: New test.
2020-11-09c++: Consider only relevant template arguments in sat_hasherPatrick Palka3-6/+92
A large source of cache misses in satisfy_atom is caused by the identity of an (atom,args) pair within the satisfaction cache being determined by the entire set of supplied template arguments rather than by the subset of template arguments that the atom actually depends on. For instance, consider template <class T> concept range = range_v<T>; template <class U> void foo () requires range<U>; template <class U, class V> void bar () requires range<U>; The associated constraints of foo and bar are equivalent: they both consist of the atom range_v<T> (with mapping T -> U). But the sat_cache currently will never reuse a satisfaction value between the two atoms because foo has one template parameter and bar has two, and the satisfaction cache conservatively assumes that all template parameters of the constrained decl are relevant to a satisfaction value of one of its atoms. This patch eliminates this assumption and makes the sat_cache instead care about just the subset of args of an (atom,args) pair that is relevant to satisfaction. This patch additionally fixes a seemingly latent bug that was found when testing against range-v3. In the testcase concepts-decltype2.C below, during normalization of f's constraints we end up forming a TARGET_EXPR whose _SLOT has a DECL_CONTEXT that points to g instead of f because current_function_decl is not updated before we start normalizing. This patch fixes this accordingly, and also adds a sanity check to keep_template_parm to verify each found parameter has a valid index. With this patch, compile time and memory usage for the cmcstl2 test test/algorithm/set_symmetric_difference4.cpp drops from 8.5s/1.2GB to 3.5s/0.4GB. gcc/cp/ChangeLog: * constraint.cc (norm_info::norm_info): Initialize orig_decl. (norm_info::orig_decl): New data member. (normalize_atom): When caching an atom for the first time, compute a list of template parameters used in the targets of the parameter mapping and store it in the TREE_TYPE of the mapping. (get_normalized_constraints_from_decl): Set current_function_decl appropriately when normalizing. As an optimization, don't set up a push_nested_class_guard when decl has no constraints. (sat_hasher::hash): Use this list to hash only the template arguments that are relevant to the atom. (satisfy_atom): Use this list to compare only the template arguments that are relevant to the atom. * pt.c (keep_template_parm): Do a sanity check on the parameter's index when flag_checking.
2020-11-09c++: Use two levels of caching in satisfy_atomPatrick Palka2-14/+50
This improves the effectiveness of caching in satisfy_atom by querying the cache again after we've instantiated the atom's parameter mapping. Before instantiating its mapping, the identity of an (atom,args) pair within the satisfaction cache is determined by idiosyncratic things like the level and index of each template parameter used in targets of the parameter mapping. For example, the associated constraints of foo in template <class T> concept range = range_v<T>; template <class U, class V> void foo () requires range<U> && range<V>; are range_v<T> (with mapping T -> U) /\ range_v<T> (with mapping T -> V). If during satisfaction the template arguments supplied for U and V are the same, then the satisfaction value of these two atoms will be the same (despite their uninstantiated parameter mappings being different). But sat_cache doesn't see this because it compares the uninstantiated parameter mapping and the supplied template arguments of sat_entry's independently. So satisy_atom on this latter atom will end up fully evaluating it instead of reusing the satisfaction value of the former. But there is a point when the two atoms do look the same to sat_cache, and that's after instantiating their parameter mappings. By querying the cache again at this point, we can avoid substituting the same instantiated parameter mapping into the same expression a second time around. With this patch, compile time and memory usage for the cmcstl2 test test/algorithm/set_symmetric_diference4.cpp drops from 11s/1.4GB to 8.5s/1.2GB with an --enable-checking=release compiler. gcc/cp/ChangeLog: * cp-tree.h (ATOMIC_CONSTR_MAP_INSTANTIATED_P): Define this flag for ATOMIC_CONSTRs. * constraint.cc (sat_hasher::hash): Use hash_atomic_constraint if the flag is set, otherwise keep using a pointer hash. (sat_hasher::equal): Return false if the flag's setting differs on two atoms. Call atomic_constraints_identical_p if the flag is set, otherwise keep using a pointer equality test. (satisfy_atom): After instantiating the parameter mapping, form another ATOMIC_CONSTR using the instantiated mapping and query the cache again. Cache the satisfaction value of both atoms. (diagnose_atomic_constraint): Simplify now that the supplied atom has an instantiated mapping.
2020-11-09c++: Reuse identical ATOMIC_CONSTRs during normalizationPatrick Palka3-19/+40
Profiling revealed that sat_hasher::equal accounts for nearly 40% of compile time in some cmcstl2 tests. This patch eliminates this bottleneck by caching the ATOMIC_CONSTRs returned by normalize_atom. This in turn allows us to replace the expensive atomic_constraints_identical_p check in sat_hasher::equal with cheap pointer equality, with no loss in cache hit rate. With this patch, compile time for the cmcstl2 test test/algorithm/set_symmetric_difference4.cpp drops from 19s to 11s with an --enable-checking=release compiler. gcc/cp/ChangeLog: * constraint.cc (atom_cache): Define this deletable hash_table. (normalize_atom): Use it to cache ATOMIC_CONSTRs when not generating diagnostics. (sat_hasher::hash): Use htab_hash_pointer instead of hash_atomic_constraint. (sat_hasher::equal): Test for pointer equality instead of atomic_constraints_identical_p. * cp-tree.h (struct atom_hasher): Moved and renamed from ... * logic.cc (struct constraint_hash): ... here. (clause::m_set): Adjust accordingly.
2020-11-09c++: Fix ICE with variadic concepts and aliases [PR93907]Patrick Palka2-0/+62
This patch (naively) extends the PR93907 fix to also apply to variadic concepts invoked with a type argument pack. Without this, we ICE on the below testcase (a variadic version of concepts-using2.C) in the same manner as we used to on concepts-using2.C before r10-7133. gcc/cp/ChangeLog: PR c++/93907 * constraint.cc (tsubst_parameter_mapping): Also canonicalize the type arguments of a TYPE_ARGUMENT_PACk. gcc/testsuite/ChangeLog: PR c++/93907 * g++.dg/cpp2a/concepts-using3.C: New test, based off of concepts-using2.C.
2020-11-09Fix test for size of memory allocation.Thomas Koenig1-1/+1
libgfortran/ChangeLog: * nca/shared_memory.c (shared_memory_get_mem_with_alignment): Fix test.
2020-11-09MAINTAINERS: Add myself for write after approvalPat Bernardi1-0/+1
2020-11-09 Pat Bernardi <bernardi@adacore.com> * MAINTAINERS (Write After Approval): Add myself.
2020-11-09libstdc++: Remove <debug/array>François Dumont18-522/+48
Add _GLIBCXX_ASSERTIONS assert in normal std::array and remove __gnu_debug::array implementation. libstdc++-v3/ChangeLog: * include/debug/array: Remove. * include/Makefile.am: Remove <debug/array>. * include/Makefile.in: Regenerate. * include/experimental/functional: Adapt. * include/std/array: Move to _GLIBCXX_INLINE_VERSION namespace. * include/std/functional: Adapt. * include/std/span: Adapt. * testsuite/23_containers/array/debug/back1_neg.cc: Remove dg-require-debug-mode. Add -D_GLIBCXX_ASSERTIONS option. * testsuite/23_containers/array/debug/back2_neg.cc: Likewise. * testsuite/23_containers/array/debug/front1_neg.cc: Likewise. * testsuite/23_containers/array/debug/front2_neg.cc: Likewise. * testsuite/23_containers/array/debug/square_brackets_operator1_neg.cc: Likewise. * testsuite/23_containers/array/debug/square_brackets_operator2_neg.cc: Likewise. * testsuite/23_containers/array/element_access/60497.cc * testsuite/23_containers/array/tuple_interface/get_debug_neg.cc: Remove. * testsuite/23_containers/array/tuple_interface/get_neg.cc * testsuite/23_containers/array/tuple_interface/tuple_element_debug_neg.cc * testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc
2020-11-09c++: Call tsubst_pack_expansion from tsubst.Jason Merrill1-14/+1
This was unnecessary (and incomplete) code duplication. gcc/cp/ChangeLog: * pt.c (tsubst): Replace *_ARGUMENT_PACK code with a call to tsubst_argument_pack.
2020-11-09c++: Improve error location for class using-decl.Jason Merrill3-5/+7
We should use the location of the using-declaration, not the location of the class. gcc/cp/ChangeLog: * class.c (handle_using_decl): Add an iloc_sentinel. gcc/testsuite/ChangeLog: * g++.dg/lookup/using26.C: Adjust location. * g++.old-deja/g++.other/using1.C: Adjust location.
2020-11-09libstdc++: Make _GLIBCXX_DEBUG checks constexpr compatibleFrançois Dumont23-31/+774
libstdc++-v3/ChangeLog: * include/debug/assertions.h (__glibcxx_requires_non_empty_range): Remove __builtin_expect. (__glibcxx_requires_subscript): Likewise. (__glibcxx_requires_nonempty): Likewise. * include/debug/formatter.h (__check_singular): Add C++11 constexpr qualification. * include/debug/helper_functions.h (__check_singular): Likewise. Skip check if constant evaluated. (__valid_range): Do not skip check if constant evaluated. * include/debug/macros.h (_GLIBCXX_DEBUG_VERIFY_COND_AT): Add __builtin_expect. (_GLIBCXX_DEBUG_VERIFY_AT_F): Use __glibcxx_assert_1. * testsuite/21_strings/basic_string_view/element_access/char/back_constexpr_neg.cc: New test. * testsuite/21_strings/basic_string_view/element_access/char/constexpr.cc: New test. * testsuite/21_strings/basic_string_view/element_access/char/constexpr_neg.cc: New test. * testsuite/21_strings/basic_string_view/element_access/char/front_back_constexpr.cc: New test. * testsuite/21_strings/basic_string_view/element_access/char/front_constexpr_neg.cc: New test. * testsuite/21_strings/basic_string_view/element_access/wchar_t/back_constexpr_neg.cc: New test. * testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr.cc: New test. * testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr_neg.cc: New test. * testsuite/21_strings/basic_string_view/element_access/wchar_t/front_constexpr_neg.cc: New test. * testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc: New test. * testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc: New test. * testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc: New test. * testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc: New test. * testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc: New test. * testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc: New test. * testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc: New test. * testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc: New test. * testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc: New test. * testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc: New test.
2020-11-09Some naming fixes; fix handling of coarrays which are components.Thomas Koenig5-41/+55
gcc/fortran/ChangeLog: * resolve.c (fixup_shared_coarray_args): Symbol does not have to have a codimension. * trans-array.c (gfc_native_coarray_add_this_image_offset): Rename to... (cas_add_this_image_offset): this. (cas_array_ref): New function. (gfc_conv_ss_descriptor): Use it; use cas_add_this_image_offset. (gfc_conv_array_ref): Likewise. (gfc_native_coarray_get_allocation_type): Rename to... (gfc_cas_get_allocation_type): this. (gfc_allocate_native_coarray): Rename to... (gfc_allocate_shared_coarray): this. (gfc_array_allocate): Use new functionn names. (gfc_get_dataptr_offset): Use cas_array_ref; fix logic. * trans-array.h (gfc_native_coarray_get_allocation_type): Rename prototype to... (gfc_cas_get_allocation_type): this. (gfc_allocate_native_coarray): Rename prototype to... (gfc_allocate_shared_coarray): this. * trans-decl.c (gfc_trans_native_coarray): Rename to... (gfc_trans_shared_coarray): This. Use changed function names. (gfc_trans_native_coarray_static): Rename to... (gfc_trans_shared_coarray_static): this. (gfc_trans_native_coarray_inline): Rename to... (gfc_trans_shared_coarray_inline): this. (gfc_trans_deferred_vars): Use new function names. (gfc_create_module_variable): Use new function names. * trans-stmt.c (gfc_trans_deallocate): Likewise.
2020-11-09c++: Fix -Wvexing-parse ICE with omitted int [PR97762]Marek Polacek2-6/+28
For declarations like long f(); decl_specifiers->type will be NULL, but I neglected to handle this case, therefore we ICE. So handle this case by pretending we've seen 'int', which is good enough for -Wvexing-parse's purposes. gcc/cp/ChangeLog: PR c++/97762 * parser.c (warn_about_ambiguous_parse): Handle the case when there is no type in the decl-specifiers. gcc/testsuite/ChangeLog: PR c++/97762 * g++.dg/warn/Wvexing-parse8.C: New test.
2020-11-09c-family: Avoid unnecessary work when -Wpragmas is being ignoredPatrick Palka2-13/+15
This speeds up handle_pragma_diagnostic by avoiding computing a spelling suggestion for an unrecognized option inside a #pragma directive when -Wpragmas warnings are being suppressed. In the range-v3 library, which contains many instances of #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpragmas" #pragma GCC diagnostic ignored "-Wfoo" ... #pragma GCC diagnostic pop (where -Wfoo stands for a warning option we don't recognize), this reduces compile time by 33% for some of its tests. gcc/c-family/ChangeLog: * c-pragma.c (handle_pragma_diagnostic): Split the unknown-option -Wpragmas diagnostic into a warning and a subsequent note containing a spelling suggestion. Avoid computing the suggestion if -Wpragmas warnings are being suppressed. gcc/testsuite/ChangeLog: * gcc.dg/pragma-diag-6.c: Adjust expected diagnostics accordingly.
2020-11-09c-family: Fix regression in location-overflow-test-1.c [PR97117]Patrick Palka1-36/+34
The r11-3266 patch that added macro support to -Wmisleading-indentation accidentally suppressed the column-tracking diagnostic in get_visual_column in some cases, e.g. in the location-overflow-test-1.c testcase. More generally, when all three tokens are on the same line and we've run out of locations with column info, then their location_t values will be equal, and we exit early from should_warn_for_misleading_indentation due to the new check /* Give up if the loci are not all distinct. */ if (guard_loc == body_loc || body_loc == next_stmt_loc) return false; before we ever call get_visual_column. [ This new check is needed to detect and give up on analyzing code fragments where exactly two out of the three tokens come from the same macro expansion, e.g. #define MACRO \ if (a) \ foo (); MACRO; bar (); Here, guard_loc and body_loc will be equal and point to the macro expansion point (and next_stmt_loc will point to 'bar'). The heuristics that the warning uses are not really valid in scenarios like these. ] In order to restore the column-tracking diagnostic, this patch moves the the diagnostic code out from get_visual_column to earlier in should_warn_for_misleading_indentation. Moreover, it tests the three locations for a zero column all at once, which I suppose should make us issue the diagnostic more consistently. gcc/c-family/ChangeLog: PR testsuite/97117 * c-indentation.c (get_visual_column): Remove location_t parameter. Move the column-tracking diagnostic code from here to ... (should_warn_for_misleading_indentation): ... here, before the early exit for when the loci are not all distinct. Don't pass a location_t argument to get_visual_column. (assert_get_visual_column_succeeds): Don't pass a location_t argument to get_visual_column. (assert_get_visual_column_fails): Likewise.
2020-11-09arc: Improve/add instruction patterns to better use MAC instructions.Claudiu Zissulescu4-27/+147
ARC MYP7+ instructions adds MAC instructions for either vector and scalar data types. This patch adds a madd pattern for 16it datum using the 32bit MAC instruction, and dot_prod patterns for v4hi vector types. The 64bit moves are also upgraded by using vadd2 instuction. 2020-11-09 Claudiu Zissulescu <claziss@synopsys.com> gcc/ * config/arc/arc.c (arc_split_move): Recognize vadd2 instructions. * config/arc/arc.md (movdi_insn): Update pattern to use vadd2 instructions. (movdf_insn): Likewise. (maddhisi4): New pattern. (umaddhisi4): Likewise. * config/arc/simdext.md (mov<mode>_int): Update pattern to use vadd2. (sdot_prodv4hi): New pattern. (udot_prodv4hi): Likewise. (arc_vec_<V_US>mac_hi_v4hi): Update/renamed to arc_vec_<V_US>mac_v2hiv2si. (arc_vec_<V_US>mac_v2hiv2si_zero): New pattern. * config/arc/constraints.md (Ral): Accumulator register constraint. Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
2020-11-09Clean up irange self tests.Aldy Hernandez4-493/+532
Currently we have all the irange and range-op tests in range-op.cc. This patch splits them up into the appropriate file (irange tests in value-range.cc and range-op tests in range-op.cc). The patch also splits up the tests themselves by functionality. It's not perfect, but significantly better than the mess we had. gcc/ChangeLog: * function-tests.c (test_ranges): Call range_op_tests. * range-op.cc (build_range3): Move to value-range.cc. (range3_tests): Same. (int_range_max_tests): Same. (multi_precision_range_tests): Same. (range_tests): Same. (operator_tests): Split up... (range_op_tests): Split up... (range_op_cast_tests): ...here. (range_op_lshift_tests): ...here. (range_op_rshift_tests): ...here. (range_op_bitwise_and_tests): ...here. * selftest.h (range_op_tests): New. * value-range.cc (build_range3): New. (range_tests_irange3): New. (range_tests_int_range_max): New. (range_tests_legacy): New. (range_tests_misc): New. (range_tests): New.
2020-11-09Fortran: Fix OpenACC in specification-part checks [PR90111]Tobias Burnus2-5/+106
OpenACC's routine and declare directives can appear anywhere in the specification part, i.e. before/after use-stmts, import-stmt, implicit-part, or declaration-constructs. gcc/fortran/ChangeLog: PR fortran/90111 * parse.c (case_decl): Move ST_OACC_ROUTINE and ST_OACC_DECLARE to ... (case_omp_decl): ... here. (verify_st_order): Update comment. gcc/testsuite/ChangeLog: PR fortran/90111 * gfortran.dg/goacc/specification-part.f90: New test.
2020-11-09libstdc++: Improve comment on _Power_of_2 helper functionJonathan Wakely1-1/+3
libstdc++-v3/ChangeLog: * include/bits/uniform_int_dist.h (__detail::_Power_of_2): Document that true result for zero is intentional.
2020-11-09libstdc++: Remove redundant check for zero in std::__popcountJonathan Wakely1-3/+0
The popcount built-ins work fine for zero, so there's no need to check for it. libstdc++-v3/ChangeLog: * include/std/bit (__popcount): Remove redundant check for zero.
2020-11-09tree-optimization/97761 - fix SLP live calculationRichard Biener2-4/+32
This removes a premature end of the DFS walk. 2020-11-09 Richard Biener <rguenther@suse.de> PR tree-optimization/97761 * tree-vect-slp.c (vect_bb_slp_mark_live_stmts): Remove premature end of DFS walk. * gfortran.dg/vect/pr97761.f90: New testcase.
2020-11-09Cleanup irange::set.Aldy Hernandez2-61/+37
[This is actually part of a larger patch that actually changes behavior, but I thought I'd commit the non-invasive cleanups first which will simplify the upcoming work.] irange::set was doing more work than it should for legacy ranges. I cleaned up various unnecessary calls to swap_out_of_order_endpoints, as well as some duplicate code that could be done with normalize_min_max. I also removed an obsolete comment wrt sticky infinite overflows. Not only did the -INF/+INF(OVF) code get removed in 2017, but normalize_min_max() uses wide ints, which ignored overflows altogether. gcc/ChangeLog: * value-range.cc (irange::swap_out_of_order_endpoints): Rewrite into static function. (irange::set): Cleanup redundant manipulations. * value-range.h (irange::normalize_min_max): Modify object in-place instead of modifying arguments.
2020-11-09aarch64: Do not alter force_reg returned register expanding fcmlaAndrea Corallo1-3/+3
2020-11-06 Andrea Corallo <andrea.corallo@arm.com> * config/aarch64/aarch64-builtins.c (aarch64_expand_fcmla_builtin): Do not alter force_reg returned register.
2020-11-09libstdc++: Use 'inline' consistently in std::exception_ptr [PR 97729]Jonathan Wakely1-9/+0
With PR c++/67453 fixed we can rely on the 'used' attribute to emit inline constructors and destructors in libsupc++/eh_ptr.cc. This means we don't need to suppress the 'inline' keyword on them in that file, and don't need to force 'always_inline' on them in other files. libstdc++-v3/ChangeLog: PR libstdc++/97729 * libsupc++/exception_ptr.h (exception_ptr::exception_ptr()) (exception_ptr::exception_ptr(const exception_ptr&)) (exception_ptr::~exception_ptr()): Remove 'always_inline' attributes. Use 'inline' unconditionally.
2020-11-09libstdc++: Include <typeinfo> even for -fno-rtti [PR 97758]Jonathan Wakely1-3/+1
The std::function code now uses std::type_info* even when RTTI is disabled, so it should include <typeinfo> unconditionally. Without this, Clang can't compile <functional> with -fno-rtti (it works with GCC because std::type_info gets declared automatically by the compiler). libstdc++-v3/ChangeLog: PR libstdc++/97758 * include/bits/std_function.h [!__cpp_rtti]: Include <typeinfo>.
2020-11-09config-ml.in: Suppress output from multi-do recipesJonathan Wakely1-6/+2
The FIXME comments saying "Leave out until this is tested a bit more" are from 1997. I think they've been sufficiently tested. ChangeLog: * config-ml.in (multi-do, multi-clean): Add @ to silence recipes. Remove FIXME comments.
2020-11-09tree-optimization/97753 - fix SLP induction vectRichard Biener2-2/+15
This fixes updating of the step vectors when filling up to group_size. 2020-11-09 Richard Biener <rguenther@suse.de> PR tree-optimization/97753 * tree-vect-loop.c (vectorizable_induction): Fill vec_steps when CSEing inside the group. * gcc.dg/vect/pr97753.c: New testcase.
2020-11-09tree-optimization/97746 - fix order of mask precision computesRichard Biener2-4/+24
This fixes the order of walking PHIs and stmts for BB mask precision compute. 2020-11-09 Richard Biener <rguenther@suse.de> PR tree-optimization/97746 * tree-vect-patterns.c (vect_determine_precisions): First walk PHIs. * gcc.dg/vect/bb-slp-pr97746.c: New testcase.
2020-11-09c++: ADL refactorNathan Sidwell2-54/+109
This refactors the ADL lookup. It just so happens the refactoring makes dropping modules in simpler :) We break apart the namespace and class fn processing, and move scope iteration to an outer function. It'll also become possible to find the same enum in multiple place, so we need to handle that idempotently. gcc/cp/ * cp-tree.h (LOOKUP_FOUND_P): Add ENUMERAL_TYPE. * name-lookup.c (class name_lookup): Add comments. (name_lookup::adl_namespace_only): Replace with ... (name_lookup::adl_class_fns): ... this and ... (name_lookup::adl_namespace_fns): ... this. (name_lookup::adl_namespace): Deal with inline nests here. (name_lookup::adl_class): Complete the type here. (name_lookup::adl_type): Call broken-out enum .. (name_lookup::adl_enum): New. No need to call the namespace adl if it is class-scope. (name_lookup::search_adl): Iterate over collected scopes here.
2020-11-09c++: Consistently expose singleton overloadsNathan Sidwell2-8/+11
This is a patch from my name-lookup overhaul. I noticed the parser and one path in name-lookup looked through an overload of a single known decl. It seems more consistent to do that in both paths through name-lookup, and not in the parser itself. gcc/cp/ * name-lookup.c (lookup_qualified_name): Expose an overload of a singleton with known type. (lookup_name_1): Just check the overload's type to expose it. * parser.c (cp_parser_lookup_name): Do not do that check here.
2020-11-09CSE VN_INFO calls in PRE and VNRichard Biener2-25/+34
The following CSEs VN_INFO calls which nowadays are hashtable queries. 2020-11-09 Richard Biener <rguenther@suse.de> * tree-ssa-pre.c (get_representative_for): CSE VN_INFO calls. (create_expression_by_pieces): Likewise. (insert_into_preds_of_block): Likewsie. (do_pre_regular_insertion): Likewsie. * tree-ssa-sccvn.c (eliminate_dom_walker::eliminate_insert): Likewise. (eliminate_dom_walker::eliminate_stmt): Likewise.
2020-11-09Use a per-edge PRE PHI translation cacheRichard Biener1-85/+81
This changes the phi translation cache to be per edge which pushes it off the profiling radar. For larger testcases the combined hashtable causes a load of cache misses and making it per edge allows to shrink the entry further. 2020-11-09 Richard Biener <rguenther@suse.de> PR tree-optimization/97765 * tree-ssa-pre.c (bb_bitmap_sets::phi_translate_table): Add. (PHI_TRANS_TABLE): New macro. (phi_translate_table): Remove. (expr_pred_trans_d::pred): Remove. (expr_pred_trans_d::hash): Simplify. (expr_pred_trans_d::equal): Likewise. (phi_trans_add): Adjust. (phi_translate): Likewise. Remove hash-table expansion detection and optimization. (phi_translate_set): Allocate PHI_TRANS_TABLE here. (init_pre): Adjsust. (fini_pre): Free PHI_TRANS_TABLE.
2020-11-09arm: [testcase] Better narrow some bfloat16 testcaseAndrea Corallo6-2/+12
2020-11-05 Andrea Corallo <andrea.corallo@arm.com> * gcc.target/arm/simd/vld1_lane_bf16_1.c: Require target to support and add -mfloat-abi=hard flag. * gcc.target/arm/simd/vld1_lane_bf16_indices_1.c: Likewise. * gcc.target/arm/simd/vld1q_lane_bf16_indices_1.c: Likewise. * gcc.target/arm/simd/vst1_lane_bf16_1.c: Likewise. * gcc.target/arm/simd/vst1_lane_bf16_indices_1.c: Likewise. * gcc.target/arm/simd/vstq1_lane_bf16_indices_1.c: Likewise.
2020-11-09Enable MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG for march=tremontCui,Lili2-34/+35
1. Enable MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG for march=tremont 2. Move PREFETCHW from march=broadwell to march=silvermont. 3. Add PREFETCHWT1 to march=knl gcc/ChangeLog: 2020-11-09 Lili Cui <lili.cui@intel.com> PR target/97685 * config/i386/i386.h: (PTA_BROADWELL): Delete PTA_PRFCHW. (PTA_SILVERMONT): Add PTA_PRFCHW. (PTA_KNL): Add PTA_PREFETCHWT1. (PTA_TREMONT): Add PTA_MOVDIRI, PTA_MOVDIR64B, PTA_CLDEMOTE and PTA_WAITPKG. * doc/invoke.texi: Delete PREFETCHW for broadwell, skylake, knl, knm, skylake-avx512, cannonlake, icelake-client, icelake-server, cascadelake, cooperlake, tigerlake and sapphirerapids. Add PREFETCHW for silvermont, goldmont, goldmont-plus and tremont. Add XSAVEC and XSAVES for goldmont, goldmont-plus and tremont. Add MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG for tremont. Add KEYLOCKER and HREST for alderlake. Add AMX-BF16, AMX-TILE, AMX-INT8 and UINTR for sapphirerapids. Add KEYLOCKER for tigerlake.
2020-11-09libiberty/pex-win32.c: Initialize orig_errChristophe Lyon1-1/+1
Initializing orig_err avoids a warning: "may be used uninitialized". See 97108. 2020-09-14 Torbjörn SVENSSON <torbjorn.svensson@st.com> Christophe Lyon <christophe.lyon@linaro.org> libiberty/ * pex-win32.c (pex_win32_exec_child): Initialize orig_err.
2020-11-08ira: Recompute regstat as max_regno changes [PR97705]Kewen Lin1-7/+20
As PR97705 shows, the commit r11-4637 caused some dumping comparison difference error on pass ira. It exposed one issue about the newly introduced function remove_scratches, which can increase the largest pseudo reg number if it succeeds, later some function will use the max_reg_num() to get the latest max_regno, when iterating the numbers we can access some data structures which are allocated as the previous max_regno, some out of array bound accesses can occur, the failure can be random since the values beyond the array could be random. This patch is to free/reinit/recompute the relevant data structures that is regstat_n_sets_and_refs and reg_info_p to ensure we won't access beyond some array bounds. Bootstrapped/regtested on powerpc64le-linux-gnu P9 and powerpc64-linux-gnu P8. gcc/ChangeLog: PR rtl-optimization/97705 * ira.c (ira): Refactor some regstat free/init/compute invocation into lambda function regstat_recompute_for_max_regno, and call it when max_regno increases as remove_scratches succeeds.
2020-11-09Daily bump.GCC Administrator6-1/+45
2020-11-08Implement stat and errmsg.Nicolas Koenig27-577/+1091
gcc/fortran/ChangeLog: * trans-decl.c (gfc_sym_mangled_function_id): Whitespace fix. (gfc_build_builtin_function_decls): Correct fn specs. * trans-intrinsic.c (trans_argument): Re-apply fix (?) (conv_cas_reduce): Likewise. (conv_co_collective): Likewise. libgfortran/ChangeLog: * Makefile.am: Add counter_barrier.c and counter_barrier.h * Makefile.in: Regenerate. * generated/nca_minmax_i1.c: Regenerated. * generated/nca_minmax_i16.c: Regenerated. * generated/nca_minmax_i2.c: Regenerated. * generated/nca_minmax_i4.c: Regenerated. * generated/nca_minmax_i8.c: Regenerated. * generated/nca_minmax_r10.c: Regenerated. * generated/nca_minmax_r16.c: Regenerated. * generated/nca_minmax_r4.c: Regenerated. * generated/nca_minmax_r8.c: Regenerated. * generated/nca_minmax_s1.c: Regenerated. * generated/nca_minmax_s4.c: Regenerated. * m4/nca-minmax-s.m4: Add stat and errmsg. * m4/nca_minmax.m4: Likewise. * nca/coarraynative.c (get_master): New function. (test_for_cas_errors): New function. (master_is_image_active): New function. (master_get_num_active_images): New function. (master_bind_active_image_barrier): New function. (error_on_missing_images): New function. (cas_master): New function. * nca/collective_subroutine.c (collsub_sync): Replace pthread_barrier_wait by counter_barrier. (collsub_reduce_array): Add error_on_missing_images. Adjust to number of images. (collsub_reduce_scalar): Likewise. (collsub_iface_init): Likewise. * nca/collective_subroutine.h: Replace pthread_barrier_t by counter_barrier. * nca/libcoarraynative.h: Include counter_barrier.h. Add handling for failed images, stat and errmsg. * nca/sync.c (sync_all_init): Replace pthread_barrir by counter_barrier. (sync_iface_init): Adjust handling to total_num_images. (sync_table): Likewise. (sync_all): LIkewise. * nca/sync.h: Include some theaders, adjust to counter_barrier. * nca/util.h: Add internal_proto to unpack_array_finish. * nca/wrapper.c (cas_collsub_reduce_array): Adjust to total_num_images, handle status and errmsg. (cas_collsub_reduce_scalar): Likewise. (cas_collsub_broadcast_array): Likewise. (cas_collsub_broadcast_scalar): Likewise. (cas_coarray_alloc): Likewise. (cas_coarray_free): Likewise. (cas_coarray_num_images): Likewise. (cas_coarray_sync_all): Likewise. (cas_sync_images): Likewise. * nca/counter_barrier.c: New file. * nca/counter_barrier.h: New file.
2020-11-08Objective-C/C++ : Handle parsing @property 'class' attribute.Iain Sandoe7-21/+53
This attribute states that a property is one manipulated by class methods (it requires a static variable and the setter and getter must be provided explicitly, they cannot be @synthesized). gcc/c-family/ChangeLog: * c-common.h (OBJC_IS_PATTR_KEYWORD): Add class to the list of keywords accepted in @property attribute contexts. * c-objc.h (enum objc_property_attribute_group): Add OBJC_PROPATTR_GROUP_CLASS. (enum objc_property_attribute_kind): Add OBJC_PROPERTY_ATTR_CLASS. gcc/cp/ChangeLog: * parser.c (cp_parser_objc_at_property_declaration): Handle class keywords in @property attribute context. gcc/objc/ChangeLog: * objc-act.c (objc_prop_attr_kind_for_rid): Handle class attribute. (objc_add_property_declaration): Likewise. * objc-act.h (PROPERTY_CLASS): Record class attribute state. gcc/testsuite/ChangeLog: * obj-c++.dg/property/at-property-4.mm: Test handling class attributes. * objc.dg/property/at-property-4.m: Likewise.
2020-11-08testsuite, Darwin, PPC : Skip zero scratch regs tests.Iain Sandoe4-4/+4
XFAIL-ing these is not sufficient, unfortunately, we need to skip them completely. gcc/testsuite/ChangeLog: * c-c++-common/zero-scratch-regs-10.c: Skip for powerpc Darwin. * c-c++-common/zero-scratch-regs-11.c: Likewise. * c-c++-common/zero-scratch-regs-8.c: Likewise. * c-c++-common/zero-scratch-regs-9.c: Likewise.
2020-11-08testsuite, Darwin, X86 : Add target requires native tls to test.Iain Sandoe1-0/+1
The builtin_thread_pointer test does not work for emulated TLS. Add a target requires to cover this. gcc/testsuite/ChangeLog: * gcc.target/i386/builtin_thread_pointer.c: Require native TLS.
2020-11-07rs6000: Fix bootstrap after r11-4793.David Edelsohn1-1/+2
The patch omitted a change for rs6000.c, fixed thus. gcc/ChangeLog: * config/rs6000/rs6000.c (rs6000_mangle_decl_assembler_name): Change DECL_IS_BUILTIN -> DECL_IS_UNDECLARED_BUILTIN.
2020-11-08Daily bump.GCC Administrator10-1/+108