aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-12-10Daily bump.GCC Administrator6-1/+226
2020-12-09go-test.exp: rewrite errchk regexp quotingIan Lance Taylor1-40/+22
* go.test/go-test.exp (errchk): Rewrite regexp quoting to use curly braces, making it much simpler.
2020-12-09phiopt: Fix up two_value_replacement BOOLEAN_TYPE handling for Ada [PR98188]Jakub Jelinek1-5/+5
For Ada with LTO, boolean_{false,true}_node can be 1-bit precision boolean, while TREE_TYPE (lhs) can be 8-bit precision boolean and thus we can end up with wide_int mismatches. This patch for non-VR_RANGE just use VARYING min/max manually. The min + 1 != max check will then do the rest. 2020-12-09 Jakub Jelinek <jakub@redhat.com> PR bootstrap/98188 * tree-ssa-phiopt.c (two_value_replacement): Don't special case BOOLEAN_TYPEs for ranges, instead if get_range_info doesn't return VR_RANGE, set min/max to wi::min/max_value.
2020-12-09aarch64: Add +pauth to -marchPrzemyslaw Wirkus4-6/+17
New +pauth (Pointer Authentication from Armv8.3-A) feature option for -march command line option. Please note that majority of PAUTH instructions are implemented behind HINT instruction. PAUTH stays an Armv8.3-A feature but now can be assigned to other architectures or CPUs. gcc/ChangeLog: * config/aarch64/aarch64-option-extensions.def (AARCH64_OPT_EXTENSION): New +pauth option in -march for AArch64. * config/aarch64/aarch64.h (AARCH64_FL_PAUTH): New pauth extension bitmask. (AARCH64_ISA_PUATH): New ISA bitmask for PAUTH. (AARCH64_FL_FOR_ARCH8_3): Add PAUTH to Armv8.3-A. (TARGET_PAUTH): New target mask to isolate PAUTH instructions. * config/aarch64/aarch64.md (do_return): Condition set to TARGET_PAUTH. * doc/invoke.texi: Update docs for +flagm and +pauth.
2020-12-09i386: Remove REG_ALLOC_ORDER definitionUros Bizjak1-16/+0
REG_ALLOC_ORDER just defines what the default is set to. 2020-12-09 Uroš Bizjak <ubizjak@gmail.com> gcc/ * config/i386/i386.h (REG_ALLOC_ORDER): Remove
2020-12-09tree-optimization/98213 - cache PHI walking result in SMRichard Biener2-6/+38
This avoids exponential work when walking PHIs in loop store motion. Fails are quickly propagated and thus need no caching. 2020-12-09 Richard Biener <rguenther@suse.de> PR tree-optimization/98213 * tree-ssa-loop-im.c (sm_seq_valid_bb): Cache successfully processed PHIs. (hoist_memory_references): Adjust. * g++.dg/pr98213.C: New testcase.
2020-12-09c++: Module parsingNathan Sidwell3-6/+403
This adds the module-declaration parsing and other logic. We have two new kinds of declaration -- module and import. Plus the ability to export other declarations. The module processing can also divide the TU into several portions -- GMF, Purview and PMF. There are restrictions that some declarations must or mustnot appear in a #include, so I needed to add a bit to indicate whether a token came from the main source or not. This seemed the least unpleasant way of implementing such a check. gcc/cp/ * parser.h (struct cp_token): Add main_source_p field. * parser.c (cp_lexer_new_main): Pass thought module token filter. Check macros. (cp_lexer_get_preprocessor_token): Set main_source_p. (enum module_parse): New. (cp_parser_diagnose_invalid_type_name): Deal with unrecognized module-directives. (cp_parser_skip_to_closing_parenthesize_1): Skip module-directivres. (cp_parser_skip_to_end_of_statement): Likewise. (cp_parser_skiup_to_end_of_block_or_statement): Likewise. (cp_parser_translation_unit): Add module parsing calls. (cp_parser_module_name, cp_parser_module_declaration): New. (cp_parser_import_declaration, cp_parser_module_export): New. (cp_parser_declaration): Add module export detection. (cp_parser_template_declaration): Adjust 'export' error message. (cp_parser_function_definition_after_declarator): Add module-specific logic. * module.cc (import_module, declare_module) (maybe_check_all_macros): Stubs.
2020-12-09c++: Fix printing of decltype(nullptr) [PR97517]Marek Polacek2-0/+14
The C++ printer doesn't handle NULLPTR_TYPE, so we issue the ugly "'nullptr_type' not supported by...". Since NULLPTR_TYPE is decltype(nullptr), it seemed reasonable to handle it where we handle DECLTYPE_TYPE, that is, in the simple-type-specifier handler. gcc/cp/ChangeLog: PR c++/97517 * cxx-pretty-print.c (cxx_pretty_printer::simple_type_specifier): Handle NULLPTR_TYPE. (pp_cxx_type_specifier_seq): Likewise. (cxx_pretty_printer::type_id): Likewise. gcc/testsuite/ChangeLog: PR c++/97517 * g++.dg/diagnostic/nullptr.C: New test.
2020-12-09testsuite: fix 2 tests on aarch64Martin Liska2-2/+2
gcc/testsuite/ChangeLog: PR tree-optimization/98182 * gcc.dg/tree-ssa/if-to-switch-1.c: Add case-values-threshold in order to fix them for aarch64. * gcc.dg/tree-ssa/if-to-switch-10.c: Likewise.
2020-12-09aarch64: Add CPU-specific SVE vector costs structKyrylo Tkachov2-116/+204
This patch extends the backend vector costs structures to allow for separate Advanced SIMD and SVE costs. The fields in the current cpu_vector_costs that would vary between the ISAs are moved into a simd_vec_cost struct and we have two typedefs of it: advsimd_vec_cost and sve_vec_costs. If, in the future, SVE needs some extra fields it could inherit from simd_vec_cost. The CPU vector cost tables in aarch64.c are updated for the struct changes. aarch64_builtin_vectorization_cost is updated to select either the Advanced SIMD or SVE costs field depending on the mode and field availability. No change in codegen is intended with this patch. gcc/ * config/aarch64/aarch64-protos.h (cpu_vector_cost): Move simd fields to... (simd_vec_cost): ... Here. Define. (advsimd_vec_cost): Define. (sve_vec_cost): Define. * config/aarch64/aarch64.c (generic_advsimd_vector_cost): Define. (generic_sve_vector_cost): Likewise. (generic_vector_cost): Update. (qdf24xx_advsimd_vector_cost): Define. (qdf24xx_vector_cost): Update. (thunderx_advsimd_vector_cost): Define. (thunderx_vector_cost): Update. (tsv110_advsimd_vector_cost): Define. (tsv110_vector_cost): Likewise. (cortexa57_advsimd_vector_cost): Define. (cortexa57_vector_cost): Update. (exynosm1_advsimd_vector_cost): Define. (exynosm1_vector_cost): Update. (xgene1_advsimd_vector_cost): Define. (xgene1_vector_cost): Update. (thunderx2t99_advsimd_vector_cost): Define. (thunderx2t99_vector_cost): Update. (thunderx3t110_advsimd_vector_cost): Define. (thunderx3t110_vector_cost): Update. (aarch64_builtin_vectorization_cost): Handle sve and advsimd vector cost fields.
2020-12-09c++: Decl module-specific semantic processingNathan Sidwell6-15/+205
This adds the module-specific logic to the various declaration processing routines in decl.c and semantic.c. I also adjust the rtti type creation, as those are all in the global module, so we need to temporarily clear the module_kind, when they are being created. Finally, I added init and fini module processing with the initialier giving a fatal error if you try and turn it on (so don't do that yet). gcc/cp/ * decl.c (duplicate_decls): Add module-specific redeclaration logic. (cxx_init_decl_processing): Export the global namespace, maybe initialize modules. (start_decl): Reject local-extern in a module, adjust linkage of template var. (xref_tag_1): Add module-specific redeclaration logic. (start_enum): Likewise. (finish_enum_value_list): Export unscoped members of an exported enum. (grokmethod): Implement p1779 linkage of in-class defined functions. * decl2.c (no_linkage_error): Imports are ok. (c_parse_final_cleanups): Call fini_modules. * lex.c (cxx_dup_lang_specific): Clear some module flags in the copy. * module.cc (module_kind): Define. (module_may_redeclare, set_defining_module): Stubs. (init_modules): Error on modules. (fini_modules): Stub. * rtti.c (push_abi_namespace): Save and reset module_kind. (pop_abi_namespace): Restore module kind. (build_dynamic_cast_1, tinfo_base_init): Adjust. * semantics.c (begin_class_definition): Add module-specific logic. (expand_or_defer_fn_1): Keep bodies of more fns when modules_p.
2020-12-09IBM Z: Build autovec-*-signaling-eq.c tests with exceptionsIlya Leoshkevich2-2/+2
According to https://gcc.gnu.org/pipermail/gcc/2020-November/234344.html, GCC is allowed to perform optimizations that remove floating point traps, since they do not affect the modeled control flow. This interferes with two signaling comparison tests, where (a <= b && a >= b) is turned into (a <= b && a == b) by test_for_singularity, into ((a <= b) & (a == b)) by vectorizer and then into (a == b) eliminate_redundant_comparison. Fix by making traps affect the control flow by turning them into exceptions. gcc/testsuite/ChangeLog: 2020-12-03 Ilya Leoshkevich <iii@linux.ibm.com> * gcc.target/s390/zvector/autovec-double-signaling-eq.c: Build with exceptions. * gcc.target/s390/zvector/autovec-float-signaling-eq.c: Likewise.
2020-12-09OpenMP: C/C++ parse 'omp allocate'Tobias Burnus5-1/+137
gcc/c-family/ChangeLog: * c-pragma.c (omp_pragmas): Add 'allocate'. * c-pragma.h (enum pragma_kind): Add PRAGMA_OMP_ALLOCATE. gcc/c/ChangeLog: * c-parser.c (c_parser_omp_allocate): New. (c_parser_omp_construct): Call it. gcc/cp/ChangeLog: * parser.c (cp_parser_omp_allocate): New. (cp_parser_omp_construct, cp_parser_pragma): Call it. gcc/testsuite/ChangeLog: * c-c++-common/gomp/allocate-5.c: New test.
2020-12-09c/98200 - improve error recovery for GIMPLE FERichard Biener2-0/+11
This avoids ICEing by making sure to propagate error early. 2020-12-09 Richard Biener <rguenther@suse.de> PR c/98200 gcc/c/ * gimple-parser.c (c_parser_gimple_postfix_expression): Return early on error. gcc/testsuite/ * gcc.dg/gimplefe-error-8.c: New testcase.
2020-12-09gfortran.dg/gomp/reduction4.f90: Fix testcaseTobias Burnus2-16/+21
Fix to 'omp scan' commit 005cff4e2ecbd5c4e2ef978fe4842fa3c8c79f47 gcc/testsuite/ChangeLog: * gfortran.dg/gomp/reduction4.f90: Update scan-trees, add lost testcase; move test with FE error to ... * gfortran.dg/gomp/reduction5.f90: ... here.
2020-12-09fold-const: Fix native_encode_initializer bitfield handling [PR98199]Jakub Jelinek2-2/+9
With the bit_cast changes, I have added support for bitfields which don't have scalar representatives. For bit_cast it works fine, as when mask is non-NULL, off is asserted to be 0. But when native_encode_initializer is called e.g. from sccvn with off > 0 (i.e. we are interested in encoding just a few bytes out of it somewhere from the middle or at the end), the following computations are incorrect. pos is a byte position from the start of the constructor, repr_size is the size in bytes of the bit-field representative and len is the length of the buffer. If the buffer is offsetted by positive off, those numbers are uncomparable though, we need to add off to len to make both count bytes from the start of the constructor, and o is a utility temporary set to off != -1 ? off : 0 (because off -1 also means start at offset 0 and just force special behavior). 2020-12-09 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/98199 * fold-const.c (native_encode_initializer): Fix handling bit-fields when off > 0. * gcc.c-torture/compile/pr98199.c: New test.
2020-12-09fold-const: Fix up native_encode_initializer missing field handling [PR98193]Jakub Jelinek2-0/+40
When native_encode_initializer is called with non-NULL mask (i.e. ATM bit_cast only), it checks if the current index in the CONSTRUCTOR (if any) is the next initializable FIELD_DECL, and if not, decrements cnt and performs the iteration with that FIELD_DECL as field and val of zero (so that it computes mask properly). As the testcase shows, I forgot to set pos to the byte position of the field though (like it is done for e.g. index referenced FIELD_DECLs in the constructor. 2020-12-09 Jakub Jelinek <jakub@redhat.com> PR c++/98193 * fold-const.c (native_encode_initializer): Set pos to field's byte position if iterating over a field with missing initializer. * g++.dg/cpp2a/bit-cast7.C: New test.
2020-12-09c++: Avoid [[nodiscard]] warning in requires-expr [PR98019]Jason Merrill2-1/+4
If we aren't really evaluating the expression, it doesn't matter that the return value is discarded. gcc/cp/ChangeLog: PR c++/98019 * cvt.c (maybe_warn_nodiscard): Check c_inhibit_evaluation_warnings. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-nodiscard1.C: Remove xfail.
2020-12-09c++: Don't require accessible dtors for some forms of new [PR59238]Jason Merrill3-2/+38
Jakub noticed that in build_new_1 we needed to add tf_no_cleanup to avoid building a cleanup for a TARGET_EXPR that we already know is going to be used to initialize something, so the cleanup will never be run. The best place to add it is close to where we build the INIT_EXPR; in cp_build_modify_expr fixes the single-object new, in expand_default_init fixes array new. Co-authored-by: Jakub Jelinek <jakub@redhat.com> gcc/cp/ChangeLog: PR c++/59238 * init.c (expand_default_init): Pass tf_no_cleanup when building a TARGET_EXPR to go on the RHS of an INIT_EXPR. * typeck.c (cp_build_modify_expr): Likewise. gcc/testsuite/ChangeLog: PR c++/59238 * g++.dg/cpp0x/new4.C: New test.
2020-12-09Daily bump.GCC Administrator6-1/+317
2020-12-09testsuite: Fix up testcase for ia32 [PR98191]Jakub Jelinek1-0/+1
2020-12-09 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/98191 * gcc.dg/torture/pr98191.c: Add dg-additional-options with -w -Wno-psabi.
2020-12-08c++: ICE with -fsanitize=vptr and constexpr dynamic_cast [PR98103]Marek Polacek2-1/+35
-fsanitize=vptr initializes all vtable pointers to null so that it can catch invalid calls; see cp_ubsan_maybe_initialize_vtbl_ptrs. That means that evaluating a vtable reference can produce a null pointer in this mode, so cxx_eval_dynamic_cast_fn should check that and give and error. gcc/cp/ChangeLog: PR c++/98103 * constexpr.c (cxx_eval_dynamic_cast_fn): If the evaluating of vtable yields a null pointer, give an error and return. Use objtype. gcc/testsuite/ChangeLog: PR c++/98103 * g++.dg/ubsan/vptr-18.C: New test.
2020-12-08libgo: update to 1.15.6 releaseIan Lance Taylor1-1/+1
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/276153
2020-12-08c++: Originating and instantiating moduleNathan Sidwell4-0/+66
With modules streamed entities have two new properties -- the module that declares them and the module that instantiates them. Here 'instantiate' applies to more than just templates -- for instance an implicit member fn. These may well be the same module. This adds the calls to places that need it. gcc/cp/ * class.c (layout_class_type): Call set_instantiating_module. (build_self_reference): Likewise. * decl.c (grokfndecl): Call set_originating_module. (grokvardecl): Likewise. (grokdeclarator): Likewise. * pt.c (maybe_new_partial_specialization): Call set_instantiating_module, propagate DECL_MODULE_EXPORT_P. (lookup_template_class_1): Likewise. (tsubst_function_decl): Likewise. (tsubst_decl, instantiate_template_1): Likewise. (build_template_decl): Propagate module flags. (tsubst_template_dcl): Likewise. (finish_concept_definition): Call set_originating_module. * module.cc (set_instantiating_module, set_originating_module): Stubs.
2020-12-08c++: Fix defaulted <=> fallback to < and == [PR96299]Jason Merrill6-29/+220
I thought I had implemented P1186R3, but apparently I didn't read it closely enough to understand the point of the paper, namely that for a defaulted operator<=>, if a member type doesn't have a viable operator<=>, we will use its operator< and operator== if the defaulted operator has an specific comparison category as its return type; the compiler can't guess if it should be strong_ordering or something else, but the user can make that choice explicit. The libstdc++ test change was necessary because of the change in genericize_spaceship from op0 > op1 to op1 < op0; this should be equivalent, but isn't because of PR88173. gcc/cp/ChangeLog: PR c++/96299 * cp-tree.h (build_new_op): Add overload that omits some parms. (genericize_spaceship): Add location_t parm. * constexpr.c (cxx_eval_binary_expression): Pass it. * cp-gimplify.c (genericize_spaceship): Pass it. * method.c (genericize_spaceship): Handle class-type arguments. (build_comparison_op): Fall back to op</== when appropriate. gcc/testsuite/ChangeLog: PR c++/96299 * g++.dg/cpp2a/spaceship-synth-neg2.C: Move error. * g++.dg/cpp2a/spaceship-p1186.C: New test. libstdc++-v3/ChangeLog: PR c++/96299 * testsuite/18_support/comparisons/algorithms/partial_order.cc: One more line needs to use VERIFY instead of static_assert.
2020-12-08c++: Distinguish ambiguity from no valid candidateJason Merrill1-0/+4
Several recent C++ features are specified to try overload resolution, and if no viable candidate is found, do something else. But our error return doesn't distinguish between that situation and finding multiple viable candidates that end up being ambiguous. We're already trying to separately return the single function we found even if it ends up being ill-formed for some reason; for ambiguity let's pass back error_mark_node, to be distinguished from NULL_TREE meaning no viable candidate. gcc/cp/ChangeLog: * call.c (build_new_op_1): Set *overload for ambiguity. (build_new_method_call_1): Likewise.
2020-12-08Avoid atomic for guard acquire when that is expensiveBernd Edlinger1-4/+29
When the atomic access involves a call to __sync_synchronize it is better to call __cxa_guard_acquire unconditionally, since it handles the atomics too, or is a non-threaded implementation when there is no gthread support for this target. This fixes also a bug for the ARM EABI big-endian target, that is, previously the wrong bit was checked. 2020-12-08 Bernd Edlinger <bernd.edlinger@hotmail.de> * decl2.c: (is_atomic_expensive_p): New helper function. (build_atomic_load_byte): Rename to... (build_atomic_load_type): ... and add new parameter type. (get_guard_cond): Skip the atomic here if that is expensive. Use the correct type for the atomic load on certain targets.
2020-12-08if-to-switch: fix matching of negative conditionsMartin Liska3-0/+68
gcc/ChangeLog: PR tree-optimization/98182 * gimple-if-to-switch.cc (pass_if_to_switch::execute): Request chain linkage through false edges only. gcc/testsuite/ChangeLog: PR tree-optimization/98182 * gcc.dg/tree-ssa/if-to-switch-10.c: New test. * gcc.dg/tree-ssa/pr98182.c: New test.
2020-12-08c++: template and clone fns for modulesNathan Sidwell3-20/+28
We need to expose build_cdtor_clones, it fortunately has the desired API -- gosh, how did that happen? :) The template machinery will need to cache path-of-instantiation information, so add two more fields to the tinst_level struct. I also had to adjust the match_mergeable_specialization API since adding it, so including that change too. gcc/cp/ * cp-tree.h (struct tinst_level): Add path & visible fields. (build_cdtor_clones): Declare. (match_mergeable_specialization): Use a spec_entry, add insert parm. * class.c (build_cdtor_clones): Externalize. * pt.c (push_tinst_level_loc): Clear new fields. (match_mergeable_specialization): Adjust API.
2020-12-08Raw tree accessorsNathan Sidwell1-9/+12
Here are the couple of raw accessors I make use of in the module streaming. gcc/ * tree.h (DECL_ALIGN_RAW): New. (DECL_ALIGN): Use it. (DECL_WARN_IF_NOT_ALIGN_RAW): New. (DECL_WARN_IF_NOT_ALIGN): Use it. (SET_DECL_WARN_IF_NOT_ALIGN): Likewise.
2020-12-08compiler: use correct location for iota errorsIan Lance Taylor4-11/+99
Also check for valid array length when reducing len/cap to a constant. For golang/go#8183 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/275654
2020-12-08arm: Replace calls to __builtin_vmvn* by ~ in vmvn intrinsics in arm_neon.h ↵Prathamesh Kulkarni2-15/+14
[PR66791] gcc/ 2020-12-08 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> PR target/66791 * config/arm/arm_neon.h: Replace calls to __builtin_vmvn* by ~ in vmvn intrinsics. * config/arm/arm_neon_builtins.def: Remove entry for vmvn.
2020-12-08c++: Named module global initializersNathan Sidwell2-45/+92
C++ 20 modules adds some new rules about when the global initializers of imported modules run. They must run no later than before any initializers in the importer that appear after the import. To provide this, each named module emits an idempotent global initializer that calls the global initializer functions of its imports (these of course may call further import initializers). This is the machinery in our global-init emission to accomplish that, other than the actual emission of calls, which is in the module file. The naming of this global init is a new piece of the ABI. FWIW, the module's emitter does some optimization to avoid calling a direct import's initializer when it can determine thatr import is also indirect. gcc/cp/ * decl2.c (start_objects): Refactor and adjust for named module initializers. (finish_objects): Likewise. (generate_ctor_or_dtor_function): Likewise. * module.cc (module_initializer_kind) (module_add_import_initializers): Stubs.
2020-12-08Fortran: Add 'omp scan' support of OpenMP 5.0Tobias Burnus19-41/+554
gcc/fortran/ChangeLog: * dump-parse-tree.c (show_omp_clauses, show_omp_node, show_code_node): Handle OMP SCAN. * gfortran.h (enum gfc_statement): Add ST_OMP_SCAN. (enum): Add OMP_LIST_SCAN_IN and OMP_LIST_SCAN_EX. (enum gfc_exec_op): Add EXEC_OMP_SCAN. * match.h (gfc_match_omp_scan): New prototype. * openmp.c (gfc_match_omp_scan): New. (gfc_match_omp_taskgroup): Cleanup. (resolve_omp_clauses, gfc_resolve_omp_do_blocks, omp_code_to_statement, gfc_resolve_omp_directive): Handle 'omp scan'. * parse.c (decode_omp_directive, next_statement, gfc_ascii_statement): Likewise. * resolve.c (gfc_resolve_code): Handle EXEC_OMP_SCAN. * st.c (gfc_free_statement): Likewise. * trans-openmp.c (gfc_trans_omp_clauses, gfc_trans_omp_do, gfc_split_omp_clauses): Handle 'omp scan'. libgomp/ChangeLog: * testsuite/libgomp.fortran/scan-1.f90: New test. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/reduction4.f90: Update; move FE some tests to ... * gfortran.dg/gomp/reduction6.f90: ... this new test and ... * gfortran.dg/gomp/reduction7.f90: ... this new test. * gfortran.dg/gomp/reduction5.f90: Add dg-error. * gfortran.dg/gomp/scan-1.f90: New test. * gfortran.dg/gomp/scan-2.f90: New test. * gfortran.dg/gomp/scan-3.f90: New test. * gfortran.dg/gomp/scan-4.f90: New test. * gfortran.dg/gomp/scan-5.f90: New test. * gfortran.dg/gomp/scan-6.f90: New test. * gfortran.dg/gomp/scan-7.f90: New test.
2020-12-08i386: Fix up X87_ENABLE_{FLOAT,ARITH} in conditions [PR94440]Jakub Jelinek6-8/+95
The documentation says For a named pattern, the condition may not depend on the data in the insn being matched, but only the target-machine-type flags. The i386 backend violates that by using flag_excess_precision and flag_unsafe_math_optimizations in the conditions too, which is bad when optimize attribute or pragmas are used. The problem is that the middle-end caches the enabled conditions for the optabs for a particular switchable target, but multiple functions can share the same TARGET_OPTION_NODE, but have different TREE_OPTIMIZATION_NODE with different flag_excess_precision or flag_unsafe_math_optimizations, so the enabled conditions then match only one of those. I think best would be to just have a single options node for both the generic and target options, then such problems wouldn't exist, but that would be very risky at this point and quite large change. So, instead the following patch just shadows flag_excess_precision and flag_unsafe_math_optimizations values for uses in the instruction conditions in TargetVariable and during set_cfun artificially creates new TARGET_OPTION_NODE if flag_excess_precision and/or flag_unsafe_math_optimizations change from what is recorded in their TARGET_OPTION_NODE. The target nodes are hashed, so worst case we can get 4 times as many target option nodes if one would for each unique target option try all the flag_excess_precision and flag_unsafe_math_optimizations values. 2020-12-08 Jakub Jelinek <jakub@redhat.com> PR target/94440 * config/i386/i386.opt (ix86_excess_precision, ix86_unsafe_math_optimizations): New TargetVariables. * config/i386/i386.h (X87_ENABLE_ARITH, X87_ENABLE_FLOAT): Use ix86_unsafe_math_optimizations instead of flag_unsafe_math_optimizations and ix86_excess_precision instead of flag_excess_precision. * config/i386/i386.c (ix86_excess_precision): Rename to ... (ix86_get_excess_precision): ... this. (TARGET_C_EXCESS_PRECISION): Define to ix86_get_excess_precision. * config/i386/i386-options.c (ix86_valid_target_attribute_tree, ix86_option_override_internal): Update ix86_unsafe_math_optimization from flag_unsafe_math_optimizations and ix86_excess_precision from flag_excess_precision when constructing target option nodes. (ix86_set_current_function): If flag_unsafe_math_optimizations or flag_excess_precision is different from the one recorded in TARGET_OPTION_NODE, create a new target option node for the current function and switch to that.
2020-12-08c++: Fix MODULE_VERSION breakageNathan Sidwell2-1/+3
Adding includes to module.cc triggered the kind of build failure I wanted to check for. In this case it was MODULE_VERSION not being defined, and module.cc's internal #error triggering. I've relaxed the check in Make-lang, so we proviude MODULE_VERSION when DEVPHASE is not empty (rather than when it is 'experimental'). AFAICT devphase is empty for release builds, and the #error will force us to decide whether modules is sufficiently baked at that point. gcc/cp * Make-lang.in (MODULE_VERSION): Override when DEVPHASE not empty. * module.cc: Comment.
2020-12-08c++: Mangling for modulesNathan Sidwell3-3/+101
This is the mangling changes for modules. These were developed in collaboration with clang, which also implemements the same ABI (or plans to, I do not think the global init is in clang). The global init mangling is captured in https://github.com/itanium-cxx-abi/cxx-abi/issues/99 gcc/cp/ * cp-tree.h (mangle_module_substitution, mangle_identifier) (mangle_module_global_init): Declare. * mangle.c (struct globals): Add mod field. (mangle_module_substitution, mangle_identifier) (mangle_module_global_init): Define. (write_module, maybe_write_module): New. (write_name): Call it. (start_mangling): Clear mod field. (finish_mangling_internal): Adjust. * module.cc (mangle_module, mangle_module_fini) (get_originating_module): Stubs.
2020-12-08c++: module directive FSMNathan Sidwell3-1/+222
As mentioned in the preprocessor patches, there's a new kind of preprocessor directive for modules, and it interacts with the compiler-proper, as that has to stream in header-unit macro information (when the directive is an import that names a header-unit). This is that machinery. It's an FSM that inspects the token stream and does the minimal parsing to detect such imports. This ends up being called from the C++ parser's tokenizer and from the -E tokenizer (via a lang hook). The actual module streaming is a stub here. gcc/cp/ * cp-tree.h (module_token_pre, module_token_cdtor) (module_token_lang): Declare. * lex.c: Include langhooks. (struct module_token_filter): New. * cp-tree.h (module_token_pre, module_token_cdtor) (module_token_lang): Define. * module.cc (get_module, preprocess_module, preprocessed_module): Nop stubs.
2020-12-08c++: Add module includesNathan Sidwell2-1/+55
gcc/cp/ * Make-lang.in (MODULE_VERSION): Define. * module.cc: Add includes.
2020-12-08testsuite: i386: Require avx512vpopcntdq in two testsRainer Orth2-0/+3
Two recent AVX512 tests FAIL on Solaris/x86 with /bin/as: FAIL: gcc.target/i386/avx512vpopcntdq-pr97770-2.c (test for excess errors) Excess errors: Assembler: avx512vpopcntdq-pr97770-2.c "/var/tmp//ccM4Gt1a.s", line 171 : Illegal mnemonic Near line: " vpopcntd (%eax), %zmm0" "/var/tmp//ccM4Gt1a.s", line 171 : Syntax error Near line: " vpopcntd (%eax), %zmm0" FAIL: gcc.target/i386/avx512vpopcntdqvl-pr97770-1.c (test for excess errors) similarly. Fixed as follows. Tested on i386-pc-solaris2.11 with as and gas and x86_64-pc-linux-gnu. 2020-12-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc/testsuite: * gcc.target/i386/avx512vpopcntdq-pr97770-2.c: Require avx512vpopcntdq support. * gcc.target/i386/avx512vpopcntdqvl-pr97770-1.c: Require avx512vpopcntdq, avx512vl support.
2020-12-08testsuite: i386: Require ifunc support in gcc.target/i386/pr98100.cRainer Orth1-0/+1
The new gcc.target/i386/pr98100.c test FAILs on Solaris/x86: FAIL: gcc.target/i386/pr98100.c (test for excess errors) Excess errors: /vol/gcc/src/hg/master/local/gcc/testsuite/gcc.target/i386/pr98100.c:6:1: error: the call requires 'ifunc', which is not supported by this target Fixed as follows. Tested on i386-pc-solaris2.11 and x86_64-pc-linux-gnu. 2020-12-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc/testsuite: * gcc.target/i386/pr98100.c: Require ifunc support.
2020-12-08tree-optimization/98192 - fix double free in SLPRichard Biener1-1/+1
This makes sure to clear the vector pointer on release. 2020-12-08 Richard Biener <rguenther@suse.de> PR tree-optimization/98192 * tree-vect-slp.c (vect_build_slp_instance): Get scalar_stmts by reference.
2020-12-08testsuite/95900 - fix gcc.dg/vect/bb-slp-pr95866.c target requirementRichard Biener1-1/+1
We require a vector-by-scalar shift, there's no appropriate target selector so use SSE2 for now. 2020-12-08 Richard Biener <rguenther@suse.de> PR testsuite/95900 * gcc.dg/vect/bb-slp-pr95866.c: Require sse2 for the BIT_FIELD_REF match.
2020-12-08testsuite: Avoid strict aliasing violations in some avx512 testsJakub Jelinek8-16/+40
These tests violated strict aliasing, fixed by using a union and type punning through that. 2020-12-08 Jakub Jelinek <jakub@redhat.com> * gcc.target/i386/avx512dq-vandnpd-2.c (CALC): Use union to avoid aliasing violations. * gcc.target/i386/avx512dq-vandnps-2.c (CALC): Likewise. * gcc.target/i386/avx512dq-vandpd-2.c (CALC): Likewise. * gcc.target/i386/avx512dq-vandps-2.c (CALC): Likewise. * gcc.target/i386/avx512dq-vorpd-2.c (CALC): Likewise. * gcc.target/i386/avx512dq-vorps-2.c (CALC): Likewise. * gcc.target/i386/avx512dq-vxorpd-2.c (CALC): Likewise. * gcc.target/i386/avx512dq-vxorps-2.c (CALC): Likewise.
2020-12-08openmp: -fopenmp-simd fixes [PR98187]Jakub Jelinek3-1/+113
This patch fixes two bugs in the -fopenmp-simd support. One is that in C++ #pragma omp parallel master would actually create OMP_PARALLEL in the IL, which is a big no-no for -fopenmp-simd, we should be creating only the constructs -fopenmp-simd handles (mainly OMP_SIMD, OMP_LOOP which is gimplified as simd in that case, declare simd/reduction and ordered simd). The other bug was that #pragma omp master taskloop simd combined construct contains simd and thus should be recognized as #pragma omp simd (with only the simd applicable clauses), but as master wasn't included in omp_pragmas_simd, we'd ignore it completely instead. 2020-12-08 Jakub Jelinek <jakub@redhat.com> PR c++/98187 * c-pragma.c (omp_pragmas): Remove "master". (omp_pragmas_simd): Add "master". * parser.c (cp_parser_omp_parallel): For parallel master with -fopenmp-simd only, just call cp_parser_omp_master instead of wrapping it in OMP_PARALLEL. * c-c++-common/gomp/pr98187.c: New test.
2020-12-08tree-optimization/98191 - fix BIT_INSERT_EXPR sequence vectorizationRichard Biener2-1/+12
This adds a missing check. 2020-12-08 Richard Biener <rguenther@suse.de> PR tree-optimization/98191 * tree-vect-slp.c (vect_slp_check_for_constructors): Do not follow a non-SSA def chain. * gcc.dg/torture/pr98191.c: New testcase.
2020-12-08tree-optimization/97559 - fix sinking in irreducible regionsRichard Biener3-5/+48
This fixes sinking of loads when irreducible regions are involved and the heuristics to find stores on the path along the sink breaks down since that uses dominator queries. 2020-12-08 Richard Biener <rguenther@suse.de> PR tree-optimization/97559 * tree-ssa-sink.c (statement_sink_location): Never ignore PHIs on sink paths in irreducible regions. * gcc.dg/torture/pr97559-1.c: New testcase. * gcc.dg/torture/pr97559-2.c: Likewise.
2020-12-08gimple-isel: Fold x CMP y ? -1 : 0 to x CMP y [PR97872]Prathamesh Kulkarni2-0/+26
gcc/ 2020-12-08 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> PR target/97872 * gimple-isel.cc (gimple_expand_vec_cond_expr): Try to fold x CMP y ? -1 : 0 to x CMP y. gcc/testsuite/ 2020-12-08 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> PR target/97872 * gcc.target/arm/pr97872.c: New test.
2020-12-08tree-optimization/98180 - fix BIT_INSERT_EXPR sequence vectorizationRichard Biener1-1/+3
This adds a missing check for the first inserted value. 2020-12-08 Richard Biener <rguenther@suse.de> PR tree-optimization/98180 * tree-vect-slp.c (vect_slp_check_for_constructors): Check the first inserted value has a def.
2020-12-08Fix PR target/96470Eric Botcazou1-0/+1
This forces the scalarization of the testcase on PowerPC. gcc/testsuite/ChangeLog: PR target/96470 * gnat.dg/opt39.adb: Add dg-additional-options for PowerPC.