aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-01-13Replace update_web_docs_svn with update_web_docs_git.Joseph Myers3-9/+16
This patch replaces the update_web_docs_svn script, that updates online documentation from its sources in the GCC repository, run once a day from cron, with update_web_docs_git. * update_web_docs_git: New file. * update_web_docs_svn: Remove. * crontab: Use update_web_docs_svn.
2020-01-13Fix typo in invoke.texi.Jason Merrill1-1/+1
2020-01-13Fix handling of overflow in C casts in integer constant expressions (PR ↵Joseph Myers5-0/+41
c/93241). Bug 93241 reports a case where certain C expressions involving casts, that would not be valid in an evaluated part of an integer constant expression (because of e.g. involving integer overflow), are wrongly rejected in an unevaluated part of an integer constant expression even though all the operands and operations are ones that are valid in that context. This is a rejects-valid regression in GCC 4.5 and later relative to 4.4 (for some testcases; the one in the bug uses _Static_assert which isn't supported in those older releases). The rule in the C front end is that an expression with those properties (valid in an unevaluated part of an integer constant expression but not an evaluated part) must be represented either as an INTEGER_CST with TREE_OVERFLOW set or as a C_MAYBE_CONST_EXPR with C_MAYBE_CONST_EXPR_INT_OPERANDS set. This patch fixes build_c_cast to check for that case and call note_integer_operands as needed. Bootstrapped with no regressions for x86_64-pc-linux-gnu. PR c/93241 gcc/c: * c-typeck.c (build_c_cast): Check for expressions with integer operands that can occur in an unevaluated part of an integer constant expression and call note_integer_operands as needed. gcc/testsuite: * gcc.dg/c11-static-assert-10.c, gcc.dg/c99-const-expr-15.c: New tests.
2020-01-13contrib: script to setup git to pull a vendors branchesRichard Earnshaw2-0/+26
This simple script is intended to setup a new git configuration to pull the branches and tags for a specific vendor. This should simplify some of the steps needed for working with a vendor's branches. * git-fetch-vendor.sh: New file.
2020-01-13contrib: Add git gcc-descr and gcc-undescr aliases.Jakub Jelinek2-0/+10
2020-01-13 Jakub Jelinek <jakub@redhat.com> * contrib/gcc-git-customization.sh: Add git gcc-descr and gcc-undescr aliases.
2020-01-13contrib: Add script to help with customizing a git checkout for use with GCCRichard Earnshaw2-0/+73
This patch is intended to help with folks setting up a git work environment for use with GCC following the transition to git. It currently does a couple of things. 1) Add an alias 'svn-rev' to git so that you can look up a legacy commit by its svn revision number. This enables you to type git svn-rev 1234 and git will show the commit log entry relating to SVN r1234. 2) Sets up tracking information for the user's personal area in the git repo. It tries to figure out some sensible answers to the data it needs, but allows the user to override the values. It then creates the fetch and push entries that are needed for tracking the extra refs. This implements one part of the recommendations that I've proposed in svnwrite.html for dealing with private branches. It should be possible to run the script more than once and for it to DTRT. If you change your answers the configuration should be correctly updated. 2020-01-13 Richard Earnshaw <rearnsha@arm.com> * gcc-git-customization: New file.
2020-01-13Remove usage of legacy param_ipa_cp_unit_growth.Martin Liska3-6/+8
* ipa-cp.c (get_max_overall_size): Use newly renamed param param_ipa_cp_unit_growth. * params.opt: Remove legacy param name.
2020-01-13PR tree-optimization/93213 - wrong code with -Og -foptimize-strlenMartin Sebor4-3/+64
gcc/testsuite/ChangeLog: PR tree-optimization/93213 * gcc.c-torture/execute/pr93213.c: New test. gcc/ChangeLog: PR tree-optimization/93213 * tree-ssa-strlen.c (handle_store): Only allow single-byte nul-over-nul stores to be eliminated.
2020-01-13Exclude CL_WARNING and CL_PARAM from --help=optimize.Martin Liska2-0/+10
2020-01-13 Martin Liska <mliska@suse.cz> * opts.c (print_help): Do not print CL_PARAM and CL_WARNING for CL_OPTIMIZATION.
2020-01-13libstdc++: Ensure root-dir converted to forward slash (PR93244)Jonathan Wakely5-0/+154
PR libstdc++/93244 * include/bits/fs_path.h (path::generic_string<C,A>) [_GLIBCXX_FILESYSTEM_IS_WINDOWS]: Convert root-dir to forward-slash. * testsuite/27_io/filesystem/path/generic/generic_string.cc: Check root-dir is converted to forward slash in generic pathname. * testsuite/27_io/filesystem/path/generic/utf.cc: New test. * testsuite/27_io/filesystem/path/generic/wchar_t.cc: New test.
2020-01-13libstdc++: Value-initialize std::atomic for C++20 (P0883R2)Jonathan Wakely16-15/+270
This implements the new requirements for C++20 that std::atomic should initialize the atomic variable in its default constructor. This patch does not add the deprecated attribute to atomic_init, but that should be done at some point as it's deprecated in C++20. The paper also deprecates the ATOMIC_FLAG_INIT macro, although we can't apply the deprecated attribute to a macro. PR libstdc++/58605 * include/bits/atomic_base.h (__cpp_lib_atomic_value_initialization): Define. (__atomic_flag_base, __atomic_base, __atomic_base<_PTp*>) (__atomic_float): Add default member initializer for C++20. * include/std/atomic (atomic): Likewise. (atomic::atomic()): Remove noexcept-specifier on default constructor. * include/std/version (__cpp_lib_atomic_value_initialization): Define. * testsuite/29_atomics/atomic/cons/assign_neg.cc: Adjust dg-error line number. * testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise. * testsuite/29_atomics/atomic/cons/value_init.cc: New test. * testsuite/29_atomics/atomic_flag/cons/value_init.cc: New test. * testsuite/29_atomics/atomic_flag/requirements/trivial.cc: Adjust expected result for is_trivially_default_constructible. * testsuite/29_atomics/atomic_float/requirements.cc: Likewise. * testsuite/29_atomics/atomic_float/value_init.cc: New test. * testsuite/29_atomics/atomic_integral/cons/assign_neg.cc: Likewise. * testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise. * testsuite/29_atomics/atomic_integral/cons/value_init.cc * testsuite/29_atomics/atomic_integral/requirements/trivial.cc: Adjust expected results for is_trivially_default_constructible. * testsuite/util/testsuite_common_types.h (has_trivial_dtor): Add new test generator.
2020-01-13doc: Note that some warnings depend on optimizations (PR 92757)Jonathan Wakely2-0/+11
PR driver/92757 * doc/invoke.texi (Warning Options): Add caveat about some warnings depending on optimization settings.
2020-01-13tree-opt: Fix bootstrap failure in tree-ssa-forwprop.c some more PR90838Jakub Jelinek2-3/+12
2020-01-13 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/90838 * tree-ssa-forwprop.c (simplify_count_trailing_zeroes): Use SCALAR_INT_TYPE_MODE directly in CTZ_DEFINED_VALUE_AT_ZERO macro argument rather than to initialize temporary for targets that don't use the mode argument at all. Initialize ctzval to avoid warning at -O0.
2020-01-13Update gcc_release for move to git.Joseph Myers3-52/+66
This patch updates the gcc_release script, used for snapshots and releases, to use git instead of SVN. The parts of the changes used in building snapshots have been tested. The parts used for building releases have not, so it's likely further fixes may turn out to be needed there when releases are first built from git. * gcc_release: Use git instead of SVN. * crontab: Update gcc_release calls.
2020-01-13Daily bump.GCC Administrator1-1/+1
2020-01-13Replace update_version_svn with update_version_git.Joseph Myers4-86/+92
This patch replaces the update_version_svn script, that updates the DATESTAMP files from cron, with update_version_git. * update_version_git: New file. * update_version:svn: Remove. * crontab: Use update_version_git.
2020-01-13Remove README.MOVED_TO_GIT. The repository is now open for commits.Joseph Myers2-1/+4
* README.MOVED_TO_GIT: Remove.
2020-01-11Add README.MOVED_TO_GIT.misc/cutover-gitJoseph Myers2-0/+5
* README.MOVED_TO_GIT: New file. From-SVN: r280156
2020-01-11Daily bump.GCC Administrator1-1/+1
From-SVN: r280155
2020-01-10[amdgcn] Remove dependency on stdint.h in libgccKwok Cheung Yeung2-3/+8
2020-01-10 Kwok Cheung Yeung <kcy@codesourcery.com> libgcc/ * config/gcn/atomic.c: Remove include of stdint.h. (__sync_val_compare_and_swap_##SIZE): Replace uintptr_t with __UINTPTR_TYPE__. From-SVN: r280152
2020-01-10OpenACC 'acc_get_property' cleanupThomas Schwinge15-182/+163
include/ * gomp-constants.h (enum gomp_device_property): Remove. libgomp/ * libgomp-plugin.h (enum goacc_property): New. Adjust all users to use this instead of 'enum gomp_device_property'. (GOMP_OFFLOAD_get_property): Rename to... (GOMP_OFFLOAD_openacc_get_property): ... this. Adjust all users. * libgomp.h (struct gomp_device_descr): Move 'GOMP_OFFLOAD_openacc_get_property'... (struct acc_dispatch_t): ... here. Adjust all users. * plugin/plugin-hsa.c (GOMP_OFFLOAD_get_property): Remove. liboffloadmic/ * plugin/libgomp-plugin-intelmic.cpp (GOMP_OFFLOAD_get_property): Remove. From-SVN: r280150
2020-01-10Further changes for the OpenACC 'if_present' clause on the 'host_data' constructThomas Schwinge11-55/+133
gcc/ * tree.h (OMP_CLAUSE_USE_DEVICE_PTR_IF_PRESENT): New definition. * tree-core.h: Document it. * gimplify.c (gimplify_omp_workshare): Set it. * omp-low.c (lower_omp_target): Use it. * tree-pretty-print.c (dump_omp_clause): Print it. gcc/testsuite/ * c-c++-common/goacc/host_data-1.c: Extend. * gfortran.dg/goacc/host_data-tree.f95: Likewise. gcc/ * omp-low.c (lower_omp_target) <OMP_CLAUSE_USE_DEVICE_PTR etc.>: Assert that for OpenACC we always have 'GOMP_MAP_USE_DEVICE_PTR'. libgomp/ * target.c (gomp_map_vars_internal) <GOMP_MAP_USE_DEVICE_PTR_IF_PRESENT>: Clean up/elaborate code paths. From-SVN: r280149
2020-01-10libstdc++: Improve comment about testsuite utilitiesJonathan Wakely2-4/+9
This fixes a typo and also explains why test_container is not a range when used with output_iterator_wrapper or input_iterator_wrapper. * testsuite/util/testsuite_iterators.h: Improve comment. From-SVN: r280146
2020-01-10Add diagnostic pathsDavid Malcolm42-16/+2975
This patch adds support for associating a "diagnostic_path" with a diagnostic: a sequence of events predicted by the compiler that leads to the problem occurring, with their locations in the user's source, text descriptions, and stack information (for handling interprocedural paths). For example, the following (hypothetical) error has a 3-event intraprocedural path: test.c: In function 'demo': test.c:29:5: error: passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter 29 | PyList_Append(list, item); | ^~~~~~~~~~~~~~~~~~~~~~~~~ 'demo': events 1-3 | | 25 | list = PyList_New(0); | | ^~~~~~~~~~~~~ | | | | | (1) when 'PyList_New' fails, returning NULL | 26 | | 27 | for (i = 0; i < count; i++) { | | ~~~ | | | | | (2) when 'i < count' | 28 | item = PyLong_FromLong(random()); | 29 | PyList_Append(list, item); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (3) when calling 'PyList_Append', passing NULL from (1) as argument 1 | The patch adds a new "%@" format code for printing event IDs, so that in the above, the description of event (3) mentions event (1), showing the user where the bogus NULL value comes from (the event IDs are colorized to draw the user's attention to them). There is a separation between data vs presentation: the above shows how the diagnostic-printing code has consolidated the path into a single run of events, since all the events are near each other and within the same function; more complicated examples (such as interprocedural paths) might be printed as multiple runs of events. Examples of how interprocedural paths are printed can be seen in the test suite (which uses a plugin to exercise the code without relying on specific warnings using this functionality). Other output formats include - JSON, - printing each event as a separate "note", and - to not emit paths. gcc/ChangeLog: * Makefile.in (OBJS): Add tree-diagnostic-path.o. * common.opt (fdiagnostics-path-format=): New option. (diagnostic_path_format): New enum. (fdiagnostics-show-path-depths): New option. * coretypes.h (diagnostic_event_id_t): New forward decl. * diagnostic-color.c (color_dict): Add "path". * diagnostic-event-id.h: New file. * diagnostic-format-json.cc (json_from_expanded_location): Make non-static. (json_end_diagnostic): Call context->make_json_for_path if it exists and the diagnostic has a path. (diagnostic_output_format_init): Clear context->print_path. * diagnostic-path.h: New file. * diagnostic-show-locus.c (colorizer::set_range): Special-case when printing a run of events in a diagnostic_path so that they all get the same color. (layout::m_diagnostic_path_p): New field. (layout::layout): Initialize it. (layout::print_any_labels): Don't colorize the label text for an event in a diagnostic_path. (gcc_rich_location::add_location_if_nearby): Add "restrict_to_current_line_spans" and "label" params. Pass the former to layout.maybe_add_location_range; pass the latter when calling add_range. * diagnostic.c: Include "diagnostic-path.h". (diagnostic_initialize): Initialize context->path_format and context->show_path_depths. (diagnostic_show_any_path): New function. (diagnostic_path::interprocedural_p): New function. (diagnostic_report_diagnostic): Call diagnostic_show_any_path. (simple_diagnostic_path::num_events): New function. (simple_diagnostic_path::get_event): New function. (simple_diagnostic_path::add_event): New function. (simple_diagnostic_event::simple_diagnostic_event): New ctor. (simple_diagnostic_event::~simple_diagnostic_event): New dtor. (debug): New overload taking a diagnostic_path *. * diagnostic.def (DK_DIAGNOSTIC_PATH): New. * diagnostic.h (enum diagnostic_path_format): New enum. (json::value): New forward decl. (diagnostic_context::path_format): New field. (diagnostic_context::show_path_depths): New field. (diagnostic_context::print_path): New callback field. (diagnostic_context::make_json_for_path): New callback field. (diagnostic_show_any_path): New decl. (json_from_expanded_location): New decl. * doc/invoke.texi (-fdiagnostics-path-format=): New option. (-fdiagnostics-show-path-depths): New option. (-fdiagnostics-color): Add "path" to description of default GCC_COLORS; describe it. (-fdiagnostics-format=json): Document how diagnostic paths are represented in the JSON output format. * gcc-rich-location.h (gcc_rich_location::add_location_if_nearby): Add optional params "restrict_to_current_line_spans" and "label". * opts.c (common_handle_option): Handle OPT_fdiagnostics_path_format_ and OPT_fdiagnostics_show_path_depths. * pretty-print.c: Include "diagnostic-event-id.h". (pp_format): Implement "%@" format code for printing diagnostic_event_id_t *. (selftest::test_pp_format): Add tests for "%@". * selftest-run-tests.c (selftest::run_tests): Call selftest::tree_diagnostic_path_cc_tests. * selftest.h (selftest::tree_diagnostic_path_cc_tests): New decl. * toplev.c (general_init): Initialize global_dc->path_format and global_dc->show_path_depths. * tree-diagnostic-path.cc: New file. * tree-diagnostic.c (maybe_unwind_expanded_macro_loc): Make non-static. Drop "diagnostic" param in favor of storing the original value of "where" and re-using it. (virt_loc_aware_diagnostic_finalizer): Update for dropped param of maybe_unwind_expanded_macro_loc. (tree_diagnostics_defaults): Initialize context->print_path and context->make_json_for_path. * tree-diagnostic.h (default_tree_diagnostic_path_printer): New decl. (default_tree_make_json_for_path): New decl. (maybe_unwind_expanded_macro_loc): New decl. gcc/c-family/ChangeLog: * c-format.c (local_event_ptr_node): New. (PP_FORMAT_CHAR_TABLE): Add entry for "%@". (init_dynamic_diag_info): Initialize local_event_ptr_node. * c-format.h (T_EVENT_PTR): New define. gcc/testsuite/ChangeLog: * gcc.dg/format/gcc_diag-10.c (diagnostic_event_id_t): New typedef. (test_diag): Add coverage of "%@". * gcc.dg/plugin/diagnostic-path-format-default.c: New test. * gcc.dg/plugin/diagnostic-path-format-inline-events-1.c: New test. * gcc.dg/plugin/diagnostic-path-format-inline-events-2.c: New test. * gcc.dg/plugin/diagnostic-path-format-inline-events-3.c: New test. * gcc.dg/plugin/diagnostic-path-format-none.c: New test. * gcc.dg/plugin/diagnostic-test-paths-1.c: New test. * gcc.dg/plugin/diagnostic-test-paths-2.c: New test. * gcc.dg/plugin/diagnostic-test-paths-3.c: New test. * gcc.dg/plugin/diagnostic-test-paths-4.c: New test. * gcc.dg/plugin/diagnostic_plugin_test_paths.c: New. * gcc.dg/plugin/plugin.exp: Add the new plugin and test cases. libcpp/ChangeLog: * include/line-map.h (class diagnostic_path): New forward decl. (rich_location::get_path): New accessor. (rich_location::set_path): New function. (rich_location::m_path): New field. * line-map.c (rich_location::rich_location): Initialize m_path. From-SVN: r280142
2020-01-10re PR tree-optimization/93210 (Sub-optimal code optimization on ↵Jakub Jelinek8-158/+373
struct/combound constexpr (gcc vs. clang)) PR tree-optimization/93210 * fold-const.h (native_encode_initializer, can_native_interpret_type_p): Declare. * fold-const.c (native_encode_string): Fix up handling with off != -1, simplify. (native_encode_initializer): New function, moved from dwarf2out.c. Adjust to native_encode_expr compatible arguments, including dry-run and partial extraction modes. Don't handle STRING_CST. (can_native_interpret_type_p): No longer static. * gimple-fold.c (fold_ctor_reference): For native_encode_expr, verify offset / BITS_PER_UNIT fits into int and don't call it if can_native_interpret_type_p fails. If suboff is NULL and for CONSTRUCTOR fold_{,non}array_ctor_reference returns NULL, retry with native_encode_initializer. (fold_const_aggregate_ref_1): Formatting fix. * dwarf2out.c (native_encode_initializer): Moved to fold-const.c. (tree_add_const_value_attribute): Adjust caller. * gcc.dg/pr93210.c: New test. * g++.dg/opt/pr93210.C: New test. From-SVN: r280141
2020-01-10re PR tree-optimization/90838 (Detect table-based ctz implementation)Jakub Jelinek2-1/+9
PR tree-optimization/90838 * tree-ssa-forwprop.c (simplify_count_trailing_zeroes): Use SCALAR_INT_TYPE_MODE instead of TYPE_MODE as operand of CTZ_DEFINED_VALUE_AT_ZERO. From-SVN: r280140
2020-01-10re PR inline-asm/93027 (ICE: in match_reload, at lra-constraints.c:1060)Vladimir Makarov2-1/+6
2020-01-10 Vladimir Makarov <vmakarov@redhat.com> PR inline-asm/93027 * gcc.target/i386/pr93027.c: Use the right PR number in the test. From-SVN: r280138
2020-01-10re PR libgomp/93219 (unused return value in affinity-fmt.c)Jakub Jelinek3-3/+10
PR libgomp/93219 * libgomp.h (gomp_print_string): Change return type from void to int. * affinity-fmt.c (gomp_print_string): Likewise. Return true if not all characters have been written. From-SVN: r280137
2020-01-10Rename pr93207.c to pr93027.c. Fix PR number in change logs.Vladimir Makarov3-3/+8
From-SVN: r280136
2020-01-10re PR inline-asm/93027 (ICE: in match_reload, at lra-constraints.c:1060)Vladimir Makarov2-1/+6
2020-01-10 Vladimir Makarov <vmakarov@redhat.com> PR inline-asm/93207 * gcc.target/i386/pr93207.c: Run it only for x86-64. From-SVN: r280135
2020-01-10testsuite: add dg-enable-nn-line-numbersDavid Malcolm4-0/+103
This patch adds support for obscuring the line numbers printed in the left-hand margin when printing the source code, converting them to "NN", e.g from: 7111 | if (!(flags & 0x0001)) { | ^ | | | (1) following 'true' branch... 7112 | to: NN | if (!(flags & 0x0001)) { | ^ | | | (1) following 'true' branch... NN | This is useful in followup patches e.g. when testing how interprocedural paths are printed using multiline.exp, to avoid depending on precise line numbers. gcc/testsuite/ChangeLog: * lib/gcc-dg.exp (cleanup-after-saved-dg-test): Reset global nn_line_numbers_enabled. * lib/multiline.exp (nn_line_numbers_enabled): New global. (dg-enable-nn-line-numbers): New proc. (maybe-handle-nn-line-numbers): New proc. * lib/prune.exp (prune_gcc_output): Call maybe-handle-nn-line-numbers. From-SVN: r280134
2020-01-10re PR inline-asm/93027 (ICE: in match_reload, at lra-constraints.c:1060)Vladimir Makarov4-5/+34
2020-01-10 Vladimir Makarov <vmakarov@redhat.com> PR inline-asm/93207 * lra-constraints.c (match_reload): Permit input operands have the same mode as output while other input operands have a different mode. 2020-01-10 Vladimir Makarov <vmakarov@redhat.com> PR inline-asm/93207 * gcc.target/i386/pr93207.c: New test. From-SVN: r280133
2020-01-10PR90838: Support ctz idiomsWilco Dijkstra5-0/+272
Support common idioms for count trailing zeroes using an array lookup. The canonical form is array[((x & -x) * C) >> SHIFT] where C is a magic constant which when multiplied by a power of 2 creates a unique value in the top 5 or 6 bits. This is then indexed into a table which maps it to the number of trailing zeroes. When the table is valid, we emit a sequence using the target defined value for ctz (0): int ctz1 (unsigned x) { static const char table[32] = { 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9 }; return table[((unsigned)((x & -x) * 0x077CB531U)) >> 27]; } Is optimized to: rbit w0, w0 clz w0, w0 and w0, w0, 31 ret gcc/ PR tree-optimization/90838 * tree-ssa-forwprop.c (check_ctz_array): Add new function. (check_ctz_string): Likewise. (optimize_count_trailing_zeroes): Likewise. (simplify_count_trailing_zeroes): Likewise. (pass_forwprop::execute): Try ctz simplification. * match.pd: Add matching for ctz idioms. testsuite/ PR tree-optimization/90838 * testsuite/gcc.target/aarch64/pr90838.c: New test. From-SVN: r280132
2020-01-10aarch64.c (aarch64_invalid_conversion): New function for target hook.Stam Markianos-Wright7-0/+827
gcc/ChangeLog: 2020-01-10 Stam Markianos-Wright <stam.markianos-wright@arm.com> * config/aarch64/aarch64.c (aarch64_invalid_conversion): New function for target hook. (aarch64_invalid_unary_op): New function for target hook. (aarch64_invalid_binary_op): New function for target hook. gcc/testsuite/ChangeLog: 2020-01-10 Stam Markianos-Wright <stam.markianos-wright@arm.com> * g++.target/aarch64/bfloat_cpp_typecheck.C: New test. * gcc.target/aarch64/bfloat16_scalar_typecheck.c: New test. * gcc.target/aarch64/bfloat16_vector_typecheck_1.c: New test. * gcc.target/aarch64/bfloat16_vector_typecheck_2.c: New test. From-SVN: r280130
2020-01-10config.gcc: Add arm_bf16.h.Stam Markianos-Wright22-46/+829
2020-01-10 Stam Markianos-Wright <stam.markianos-wright@arm.com> * config.gcc: Add arm_bf16.h. * config/aarch64/aarch64-builtins.c (aarch64_simd_builtin_std_type): Add BFmode. (aarch64_init_simd_builtin_types): Define element types for vector types. (aarch64_init_bf16_types): New function. (aarch64_general_init_builtins): Add arm_init_bf16_types function call. * config/aarch64/aarch64-modes.def: Add BFmode and V4BF, V8BF vector modes. * config/aarch64/aarch64-simd-builtin-types.def: Add BF SIMD types. * config/aarch64/aarch64-simd.md: Add BF vector types to NEON move patterns. * config/aarch64/aarch64.h (AARCH64_VALID_SIMD_DREG_MODE): Add V4BF. (AARCH64_VALID_SIMD_QREG_MODE): Add V8BF. * config/aarch64/aarch64.c (aarch64_classify_vector_mode): Add support for BF types. (aarch64_gimplify_va_arg_expr): Add support for BF types. (aarch64_vq_mode): Add support for BF types. (aarch64_simd_container_mode): Add support for BF types. (aarch64_mangle_type): Add support for BF scalar type. * config/aarch64/aarch64.md: Add BFmode to movhf pattern. * config/aarch64/arm_bf16.h: New file. * config/aarch64/arm_neon.h: Add arm_bf16.h and Bfloat vector types. * config/aarch64/iterators.md: Add BF types to mode attributes. (HFBF, GPF_TF_F16_MOV, VDMOV, VQMOV, VQMOV_NO2Em VALL_F16MOV): New. 2020-01-10 Stam Markianos-Wright <stam.markianos-wright@arm.com> * g++.dg/abi/mangle-neon-aarch64.C: Add Bfloat SIMD types to test. * g++.dg/ext/arm-bf16/bf16-mangle-aarch64-1.C: New test. * gcc.target/aarch64/bfloat16_scalar_1.c: New test. * gcc.target/aarch64/bfloat16_scalar_2.c: New test. * gcc.target/aarch64/bfloat16_scalar_3.c: New test. * gcc.target/aarch64/bfloat16_scalar_4.c: New test. * gcc.target/aarch64/bfloat16_simd_1.c: New test. * gcc.target/aarch64/bfloat16_simd_2.c: New test. * gcc.target/aarch64/bfloat16_simd_3.c: New test. From-SVN: r280129
2020-01-10Shorten right-shift again in C++.Jason Merrill2-0/+40
Back in SVN r131862 richi removed this code to fix PR 34235, but didn't remove the parallel code from the C front-end because the bug had previously been fixed in r44080. This patch copies the code from C again. * typeck.c (cp_build_binary_op): Restore short_shift code. From-SVN: r280128
2020-01-10PR c++/93143 - incorrect tree sharing with constexpr.Jason Merrill3-3/+34
We don't unshare CONSTRUCTORs as often during constexpr evaluation, so we need to unshare them here. * constexpr.c (cxx_eval_outermost_constant_expr): Don't assume CONSTRUCTORs are already unshared. From-SVN: r280127
2020-01-10PR c++/93173 - incorrect tree sharing.Jason Merrill7-4/+32
My patch for 93033 wasn't sufficient to handle all the possible sharing introduced by split_nonconstant_init, and it occurred to me that it would make sense to use the same unsharing technique as unshare_body, namely copy_if_shared. PR c++/93033 gcc/ * gimplify.c (copy_if_shared): No longer static. * gimplify.h: Declare it. gcc/cp/ * cp-gimplify.c (cp_gimplify_init_expr, cp_gimplify_expr): Use copy_if_shared after cp_genericize_tree. * typeck2.c (split_nonconstant_init): Don't unshare here. From-SVN: r280126
2020-01-10[AArch64] Make -msve-vector-bits=128 generate VL-specific codeRichard Sandiford15-13/+1358
related_vector_mode and compatible_vector_types_p make it possible to generate 128-bit SVE code while still maintaining the distinction between SVE vectors and Advanced SIMD vectors. We can therefore generate VL-specific code for -msve-vector-bits=128 on little-endian targets. In theory we could do the same for big-endian targets, but it could have quite a high overhead; see the comment in the patch for details. 2020-01-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * doc/invoke.texi (-msve-vector-bits=): Document that -msve-vector-bits=128 now generates VL-specific code for little-endian targets. * config/aarch64/aarch64-sve-builtins.cc (register_builtin_types): Use build_vector_type_for_mode to construct the data vector types. * config/aarch64/aarch64.c (aarch64_convert_sve_vector_bits): Generate VL-specific code for -msve-vector-bits=128 on little-endian targets. (aarch64_simd_container_mode): Always prefer Advanced SIMD modes for 128-bit vectors. gcc/testsuite/ * gcc.target/aarch64/sve/struct_vect_1.c (N): Protect with #ifndef. * gcc.target/aarch64/sve/pcs/return_1_128.c: New test. * gcc.target/aarch64/sve/pcs/return_4_128.c: Likewise. * gcc.target/aarch64/sve/pcs/return_5_128.c: Likewise. * gcc.target/aarch64/sve/pcs/return_6_128.c: Likewise. * gcc.target/aarch64/sve/pcs/stack_clash_1_128.c: Likewise. * gcc.target/aarch64/sve/pcs/stack_clash_2_128.c: Likewise. * gcc.target/aarch64/sve/single_5.c: Likewise. * gcc.target/aarch64/sve/struct_vect_25.c: Likewise. * gcc.target/aarch64/sve/struct_vect_26.c: Likewise. From-SVN: r280125
2020-01-10PR c/93132 - bogus 'attribute((access))' warning when size-index is specifiedMartin Sebor4-3/+31
gcc/c-family/ChangeLog: PR c/93132 * c-attribs.c (append_access_attrs): Validate against the translated access string rather than the human-readable representation. gcc/testsuite/ChangeLog: PR c/93132 * gcc.dg/attr-access-read-only-2.c: New test. From-SVN: r280124
2020-01-10[AArch64] Fix reversed vcond_mask invocation in aarch64_evpc_selRichard Sandiford6-48/+116
aarch64_evpc_sel (new in GCC 10) got the true and false vectors the wrong way round, leading to execution failures with fixed-length 128-bit SVE. Now that the ACLE types are in trunk, it's much easier to match the exact asm sequence for a permute. 2020-01-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/aarch64.c (aarch64_evpc_sel): Fix gen_vcond_mask invocation. gcc/testsuite/ * gcc.target/aarch64/sve/sel_1.c: Use SVE types for the arguments and return values. Use check-function-bodies instead of scan-assembler. * gcc.target/aarch64/sve/sel_2.c: Likewise * gcc.target/aarch64/sve/sel_3.c: Likewise. From-SVN: r280121
2020-01-10gotest: don't use localIan Lance Taylor2-3/+2
It's not part of the POSIX shell standard. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/214300 From-SVN: r280118
2020-01-10libstdc++: Fix testcase for C++98 compatibilityJonathan Wakely2-1/+4
* testsuite/25_algorithms/equal/deque_iterators/1.cc: Don't use C++11 initialization syntax. From-SVN: r280117
2020-01-10libstdc++: Make istreambuf_iterator base class consistent (PR92285)Jonathan Wakely4-14/+69
Since LWG 445 was implemented for GCC 4.7, the std::iterator base class of std::istreambuf_iterator changes type depending on the -std mode used. This creates an ABI incompatibility between different -std modes. This change ensures the base class always has the same type. This makes layout for C++98 compatible with the current -std=gnu++14 default, but no longer compatible with C++98 code from previous releases. In practice this is unlikely to cause real problems, because it only affects the layout of types with two std::iterator base classes, one of which comes from std::istreambuf_iterator. Such types are expected to be vanishingly rare. PR libstdc++/92285 * include/bits/streambuf_iterator.h (istreambuf_iterator): Make type of base class independent of __cplusplus value. [__cplusplus < 201103L] (istreambuf_iterator::reference): Override the type defined in the base class * testsuite/24_iterators/istreambuf_iterator/92285.cc: New test. * testsuite/24_iterators/istreambuf_iterator/requirements/ base_classes.cc: Adjust expected base class for C++98. From-SVN: r280116
2020-01-10OpenACC – support "if" + "if_present" clauses with "host_data"Tobias Burnus11-8/+229
2020-01-10 Gergö Barany <gergo@codesourcery.com> Thomas Schwinge <thomas@codesourcery.com> Julian Brown <julian@codesourcery.com> Tobias Burnus <tobias@codesourcery.com> gcc/c/ * c-parser.c (OACC_HOST_DATA_CLAUSE_MASK): Add PRAGMA_OACC_CLAUSE_IF and PRAGMA_OACC_CLAUSE_IF_PRESENT. gcc/cp/ * parser.c (OACC_HOST_DATA_CLAUSE_MASK): Add PRAGMA_OACC_CLAUSE_IF and PRAGMA_OACC_CLAUSE_IF_PRESENT. gcc/fortran/ * openmp.c (OACC_HOST_DATA_CLAUSES): Add PRAGMA_OACC_CLAUSE_IF and PRAGMA_OACC_CLAUSE_IF_PRESENT. gcc/ * omp-low.c (lower_omp_target): Use GOMP_MAP_USE_DEVICE_PTR_IF_PRESENT if PRAGMA_OACC_CLAUSE_IF_PRESENT exist. gcc/testsuite/ * c-c++-common/goacc/host_data-1.c: Added tests of if and if_present clauses on host_data. * gfortran.dg/goacc/host_data-tree.f95: Likewise. include/ * gomp-constants.h (enum gomp_map_kind): New enumeration constant GOMP_MAP_USE_DEVICE_PTR_IF_PRESENT. libgomp/ * oacc-parallel.c (GOACC_data_start): Handle GOMP_MAP_USE_DEVICE_PTR_IF_PRESENT. * target.c (gomp_map_vars_async): Likewise. * testsuite/libgomp.oacc-c-c++-common/host_data-7.c: New. * testsuite/libgomp.oacc-fortran/host_data-5.F90: New. From-SVN: r280115
2020-01-10[AArch64] Tighten mode checks in aarch64_builtin_vectorized_functionRichard Sandiford2-12/+11
aarch64_builtin_vectorized_function checked vectors based on the number of elements and the element mode. This doesn't interact well with fixed-length 128-bit SVE, where SVE modes can have those same properties. (And we can't just use the built-ins for SVE because the types use a different ABI. SVE handles this kind of thing using optabs instead.) 2020-01-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/aarch64-builtins.c (aarch64_builtin_vectorized_function): Check for specific vector modes, rather than checking the number of elements and the element mode. From-SVN: r280114
2020-01-10Use get_related_vectype_for_scalar_type for reduction indicesRichard Sandiford2-2/+9
The related_vector_mode series missed this case in vect_create_epilog_for_reduction, where we want to create the unsigned integer equivalent of another vector. Without it we could mix SVE and Advanced SIMD vectors in the same operation. This showed up on existing tests when testing with fixed-length -msve-vector-bits=128. 2020-01-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-loop.c (vect_create_epilog_for_reduction): Use get_related_vectype_for_scalar_type rather than build_vector_type to create the index type for a conditional reduction. From-SVN: r280112
2020-01-10Fix gather/scatter check when updating a vector epilogue loopRichard Sandiford2-1/+6
update_epilogue_loop_vinfo applies SSA renmaing to the DR_REF of a gather or scatter, so that vect_check_gather_scatter continues to work. However, we sometimes also rely on vect_check_gather_scatter when using gathers and scatters to implement strided accesses. This showed up on existing tests when testing with fixed-length -msve-vector-bits=128. 2020-01-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-loop.c (update_epilogue_loop_vinfo): Update DR_REF for any type of gather or scatter, including strided accesses. From-SVN: r280111
2020-01-10compiler: permit duplicate methods from embedded interfacesIan Lance Taylor4-27/+21
This is a language change for Go 1.14. Updates golang/go#6977 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/214240 From-SVN: r280109
2020-01-10[vect] Add missing commentAndre Vieira2-0/+9
gcc/ChangeLog: 2020-01-10 Andre Vieira <andre.simoesdiasvieira@arm.com> * tree-vectorizer.h (get_dr_vinfo_offset): Add missing function comment. From-SVN: r280108