aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2021-01-07aarch64: Support conditional unpacked integer unary arithmetic on SVERichard Sandiford9-14/+321
This patch extends the conditional unary integer operations from SVE_FULL_I to SVE_I. In each case the type suffix is taken from the element size rather than the container size: this matters for ABS and NEG, but doesn't matter for NOT. gcc/ * config/aarch64/aarch64-sve.md (@cond_<SVE_INT_UNARY:optab><mode>) (*cond_<SVE_INT_UNARY:optab><mode>_2): Extend from SVE_FULL_I to SVE_I. (*cond_<SVE_INT_UNARY:optab><mode>_any): Likewise. gcc/testsuite/ * gcc.target/aarch64/sve/cond_unary_5.c: New test. * gcc.target/aarch64/sve/cond_unary_5_run.c: Likewise. * gcc.target/aarch64/sve/cond_unary_6.c: Likewise. * gcc.target/aarch64/sve/cond_unary_6_run.c: Likewise. * gcc.target/aarch64/sve/cond_unary_7.c: Likewise. * gcc.target/aarch64/sve/cond_unary_7_run.c: Likewise. * gcc.target/aarch64/sve/cond_unary_8.c: Likewise. * gcc.target/aarch64/sve/cond_unary_8_run.c: Likewise.
2021-01-07gimple-isel: Check whether IFN_VCONDEQ is supported [PR98560]Richard Sandiford4-19/+30
This patch follows on from the previous one for the PR and makes sure that we can handle == as well as <. Previously we assumed without checking that IFN_VCONDEQ was available if IFN_VCOND or IFN_VCONDU wasn't. The patch also fixes the definition of the IFN_VCOND* functions. The optabs are convert optabs in which the first mode is the data mode and the second mode is the comparison or mask mode. gcc/ PR tree-optimization/98560 * internal-fn.def (IFN_VCONDU, IFN_VCONDEQ): Use type vec_cond. * internal-fn.c (vec_cond_mask_direct): Get the data mode from argument 1. (vec_cond_direct): Likewise argument 2. (vec_condu_direct, vec_condeq_direct): Delete. (expand_vect_cond_optab_fn): Rename to... (expand_vec_cond_optab_fn): ...this, replacing old macro. (expand_vec_condu_optab_fn, expand_vec_condeq_optab_fn): Delete. (expand_vect_cond_mask_optab_fn): Rename to... (expand_vec_cond_mask_optab_fn): ...this, replacing old macro. (direct_vec_cond_mask_optab_supported_p): Treat the optab as a convert optab. (direct_vec_cond_optab_supported_p): Likewise. (direct_vec_condu_optab_supported_p): Delete. (direct_vec_condeq_optab_supported_p): Delete. * gimple-isel.cc: Include internal-fn.h. (gimple_expand_vec_cond_expr): Check that IFN_VCONDEQ is supported before using it. gcc/testsuite/ PR tree-optimization/98560 * gcc.dg/vect/pr98560-2.c: New test.
2021-01-07gimple-isel: Fall back to using vcond_mask [PR98560]Richard Sandiford2-7/+36
PR98560 is about a case in which the vectoriser initially generates: mask_1 = a < 0; mask_2 = mask_1 & ...; res = VEC_COND_EXPR <mask_2, b, c>; The vectoriser thus expects res to be calculated using vcond_mask. However, we later manage to fold mask_2 to mask_1, leaving: mask_1 = a < 0; res = VEC_COND_EXPR <mask_1, b, c>; gimple-isel then required a combined vcond to exist. On most targets, it's not too onerous to provide all possible (compare x select) combinations. For each data mode, you just need to provide unsigned comparisons, signed comparisons, and floating-point comparisons, with the data mode and type of comparison uniquely determining the mode of the compared values. But for targets like SVE that support “unpacked” vectors, it's not that simple: the level of unpacking adds another degree of freedom. Rather than insist that the combined versions exist, I think we should be prepared to fall back to using separate comparisons and vcond_masks. I think that makes more sense on targets like AArch64 and AArch32 in which compares and selects are fundementally separate operations anyway. gcc/ PR tree-optimization/98560 * gimple-isel.cc (gimple_expand_vec_cond_expr): If we fail to use IFN_VCOND{,U,EQ}, fall back on IFN_VCOND_MASK. gcc/testsuite/ PR tree-optimization/98560 * gcc.dg/vect/pr98560-1.c: New test.
2021-01-07i386: Merge various insn name mapping code attributesUros Bizjak3-99/+94
2021-01-07 Uroš Bizjak <ubizjak@gmail.com> gcc/ * config/i386/i386.md (insn): Merge from plusminus_insn, shift_insn, rotate_insn and optab code attributes. Update all uses to merged code attribute. * config/i386/sse.md: Update all uses to merged code attribute. * config/i386/mmx.md: Update all uses to merged code attribute.
2021-01-07bswap: Fix up recent vector CONSTRUCTOR optimization [PR98568]Jakub Jelinek2-3/+59
As the testcase shows, bswap can match even byte-swapping or indentity from low part of some wider SSA_NAME. For bswap replacement other than for vector CONSTRUCTOR the code has been using NOP_EXPR casts if the types weren't compatible, but for vectors we need to use VIEW_CONVERT_EXPR. The problem with the latter is that we require that it has the same size, which isn't guaranteed, so this patch in those cases first adds a narrowing NOP_EXPR cast and only afterwards does a VIEW_CONVERT_EXPR. 2021-01-07 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/98568 * gimple-ssa-store-merging.c (bswap_view_convert): New function. (bswap_replace): Use it. * g++.dg/torture/pr98568.C: New test.
2021-01-07Adjust testcase for PR 92658Hongyu Wang2-2/+2
gcc/testsuite/ChangeLog: * gcc.target/i386/pr92658-avx512bw.c: Add -mprefer-vector-width=512 to avoid impact of different default mtune which gcc is built with. * gcc.target/i386/pr92658-avx512bw-2.c: Ditto.
2021-01-06analyzer: fix false leak reports when merging states [PR97074]David Malcolm5-3/+72
gcc/analyzer/ChangeLog: PR analyzer/97074 * store.cc (binding_cluster::can_merge_p): Add "out_store" param and pass to calls to binding_cluster::make_unknown_relative_to. (binding_cluster::make_unknown_relative_to): Add "out_store" param. Use it to mark base regions that are pointed to by pointers that become unknown as having escaped. (store::can_merge_p): Pass out_store to binding_cluster::can_merge_p. * store.h (binding_cluster::can_merge_p): Add "out_store" param. (binding_cluster::make_unknown_relative_to): Likewise. * svalue.cc (region_svalue::implicitly_live_p): New vfunc. * svalue.h (region_svalue::implicitly_live_p): New vfunc decl. gcc/testsuite/ChangeLog: PR analyzer/97074 * gcc.dg/analyzer/pr97074.c: New test.
2021-01-06analyzer: fix missing bitmap_clear [PR98564]David Malcolm2-0/+7
gcc/analyzer/ChangeLog: PR analyzer/98564 * engine.cc (exploded_path::feasible_p): Add missing call to bitmap_clear. gcc/testsuite/ChangeLog: PR analyzer/98564 * gcc.dg/analyzer/pr98564.c: New test.
2021-01-07Daily bump.GCC Administrator7-1/+120
2021-01-06[PR97978] LRA: Permit temporary allocation incorrectness after hard reg split.Vladimir N. Makarov4-4/+33
LRA can crash when a hard register was split and the same hard register was assigned on the previous assignment sub-pass. The following patch fixes this problem. gcc/ChangeLog: PR rtl-optimization/97978 * lra-int.h (lra_hard_reg_split_p): New external. * lra.c (lra_hard_reg_split_p): New global. (lra): Set up lra_hard_reg_split_p after splitting a hard reg. * lra-assigns.c (lra_assign): Don't check allocation correctness after hard reg splitting. gcc/testsuite/ChangeLog: PR rtl-optimization/97978 * gcc.target/i386/pr97978.c: New.
2021-01-06PR c++/95768 - pretty-printer ICE on -Wuninitialized with allocated storageMartin Sebor5-50/+324
gcc/c-family/ChangeLog: PR c++/95768 * c-pretty-print.c (c_pretty_printer::primary_expression): For SSA_NAMEs print VLA names and GIMPLE defining statements. (print_mem_ref): New function. (c_pretty_printer::unary_expression): Call it. gcc/cp/ChangeLog: PR c++/95768 * error.c (dump_expr): Call c_pretty_printer::unary_expression. gcc/testsuite/ChangeLog: PR c++/95768 * g++.dg/pr95768.C: New test. * g++.dg/warn/Wuninitialized-12.C: New test. * gcc.dg/uninit-38.c: New test.
2021-01-06PR c++/98305 spurious -Wmismatched-new-delete on template instanceMartin Sebor2-89/+280
gcc/ChangeLog: PR c++/98305 * builtins.c (new_delete_mismatch_p): New overload. (new_delete_mismatch_p (tree, tree)): Call it. gcc/testsuite/ChangeLog: PR c++/98305 * g++.dg/warn/Wmismatched-new-delete-3.C: New test.
2021-01-06testsuite, coroutines : Fix a bad testcase [PR96504].Iain Sandoe1-1/+1
Where possible (i.e. where that doesn't alter the intent of a test) we use a suspend_always as the final suspend and a test that the coroutine was 'done' to check that the state machine had terminated correctly. Sometimes, filed PRs have 'suspend_never' as the final suspend expression and that needs to be changed to match the testsuite style. This is one I missed and means that the call to 'done()' on the handle is made to an already-destructed coroutine. Surprisngly, thAt didn't actually trigger a failure until glibc 2-32. Fixed by changing the final suspend to be 'suspend_always'. gcc/testsuite/ChangeLog: PR c++/96504 * g++.dg/coroutines/torture/pr95519-05-gro.C: Use suspend_always as the final suspend point so that we can check that the state machine has reached the expected point.
2021-01-06PR fortran/78746 - invalid access after error recoveryHarald Anlauf1-1/+1
The error recovery after an invalid reference to an undefined CLASS during a TYPE declaration lead to an invalid access. Add a check. gcc/fortran/ChangeLog: * resolve.c (resolve_component): Add check for valid CLASS reference before trying to access CLASS data.
2021-01-06c++: Fix g++.dg/warn/Wmismatched-dealloc.C for C++11 [PR98566]Marek Polacek1-2/+2
C++ sized deallocation only came in C++14, so this test wasn't working properly in C++11, which isn't tested by default. Fixed thus by constraining the dg-errors to C++14 only. gcc/testsuite/ChangeLog: PR testsuite/98566 * g++.dg/warn/Wmismatched-dealloc.C: Use target c++14 in dg-error.
2021-01-06add alignment to enable store merging in strict-alignment targetsAlexandre Oliva1-1/+3
In g++.dg/opt/store-merging-2.C, the natural alignment of types T and S is a single byte, so we shouldn't expect store merging on strict-alignment platforms. Indeed, without something like the adjust-alignment pass to bump up the alignment of the automatic variable, as in GCC 10, the optimization does not occur. This patch adjusts the test so that the required alignment is expressly stated, and so we don't rely on its accidentally being there to get the desired optimization. for gcc/testsuite/ChangeLog * g++.dg/opt/store-merging-2.C: Add the required alignment.
2021-01-06robustify vxworks glimits.h overridingAlexandre Oliva2-26/+16
The glimits.h overriding used in gcc/config/t-vxworks was fragile: the intermediate file would already be there in a rebuild, and so the adjustments would not be made, so the generated limits.h would miss them, causing limits-width-[12] tests to fail on that target. While changing it, I also replaced the modern $(cmd) shell syntax with the more portable `cmd` construct. for gcc/ChangeLog * Makefile.in (T_GLIMITS_H): New. (stmp-int-hdrs): Depend on it, use it. * config/t-vxworks (T_GLIMITS_H): Override it. (vxw-glimits.h): New.
2021-01-06add signed_bool_precision attribute for GIMPLE FE useRichard Biener2-0/+60
This adds __attribute__((signed_bool_precision(precision))) to be able to construct nonstandard boolean types which for the included testcase is needed to simulate Ada and LTO interaction (Ada uses a 8 bit precision boolean_type_node). This will also be useful for vector unit testcases where we need to produce vector types with non-standard precision signed boolean type components. 2021-01-06 Richard Biener <rguenther@suse.de> PR tree-optimization/95582 gcc/c-family/ * c-attribs.c (c_common_attribute_table): Add entry for signed_bool_precision. (handle_signed_bool_precision_attribute): New. gcc/testsuite/ * gcc.dg/pr95582.c: New testcase.
2021-01-06tree-optimization/98513 - fix bug in range intersection codeRichard Biener2-2/+51
This fixes a premature optimization in the range intersection code which assumes earlier branches have to be taken, not taking into account that for symbolic ranges we cannot always compare endpoints. The fix is to instantiate the compare deemed redundant (which then fails as undecidable for the testcase). 2021-01-06 Richard Biener <rguenther@suse.de> PR tree-optimization/98513 * value-range.cc (intersect_ranges): Compare the upper bounds for the expected relation. * gcc.dg/tree-ssa/pr98513.c: New testcase.
2021-01-05analyzer: fix false leaks when writing through unknown ptrs [PR97072]David Malcolm2-9/+36
gcc/analyzer/ChangeLog: PR analyzer/97072 * region-model-reachability.cc (reachable_regions::init_cluster): Convert symbolic region handling to a switch statement. Add cases to handle SK_UNKNOWN and SK_CONJURED. gcc/testsuite/ChangeLog: PR analyzer/97072 * gcc.dg/analyzer/pr97072.c: New test.
2021-01-05analyzer: add regression test for PR 98073David Malcolm1-0/+13
This ICE was fixed by r11-2694-g808f4dfeb3a95f50 (aka the big state rewrite for GCC 11). gcc/testsuite/ChangeLog: PR analyzer/98073 * gcc.dg/analyzer/pr98073.c: New test.
2021-01-05analyzer: remove xfail [PR98223]David Malcolm1-2/+1
The bogus leak message went away after fcae5121154d1c3382b056bcc2c563cedac28e74 (aka "Hybrid EVRP and testcases") due to that patch improving a phi node in the gimple input to the analyzer. gcc/testsuite/ChangeLog: PR analyzer/98223 * gcc.dg/analyzer/pr94851-1.c: Remove xfail.
2021-01-06Daily bump.GCC Administrator8-1/+381
2021-01-06doc: Re-add HSAIL to Language StandardsGerald Pfeifer1-0/+8
The HSAIL web server has reappeared after weeks, so restore the standard reference for now while we consider further deprecation. This reverts commit 7e999bd84f47205dc44b0f2dc90b53b3c888ca48. gcc/ 2021-01-06 Gerald Pfeifer <gerald@pfeifer.com> Revert: 2020-12-28 Gerald Pfeifer <gerald@pfeifer.com> * doc/standards.texi (HSAIL): Remove section.
2021-01-05Update GNU/Hurd configure supportSamuel Thibault1-11/+1
ChangeLog: * libtool.m4: Match gnu* along other GNU systems. * libgo/config/libtool.m4: Match gnu* along other GNU systems. * libgo/configure: Re-generate. libffi/ * configure: Re-generate. libgomp/ * configure: Re-generate. gcc/ * configure: Re-generate. libatomic/ * configure: Re-generate. libbacktrace/ * configure: Re-generate. libcc1/ * configure: Re-generate. libgfortran/ * configure: Re-generate. libgomp/ * configure: Re-generate. libhsail-rt/ * configure: Re-generate. libitm/ * configure: Re-generate. libobjc/ * configure: Re-generate. liboffloadmic/ * configure: Re-generate. * plugin/configure: Re-generate. libphobos/ * configure: Re-generate. libquadmath/ * configure: Re-generate. libsanitizer/ * configure: Re-generate. libssp/ * configure: Re-generate. libstdc++-v3/ * configure: Re-generate. libvtv/ * configure: Re-generate. lto-plugin/ * configure: Re-generate. zlib/ * configure: Re-generate.
2021-01-05IBM Z: Fix check_effective_target_s390_z14_hwIlya Leoshkevich1-1/+1
Commit 2f473f4b065d ("IBM Z: Do not run long double tests on old machines") introduced a predicate for tests that must run only on z14+. However, due to a syntax error, the predicate always returns false. gcc/testsuite/ChangeLog: 2020-12-10 Ilya Leoshkevich <iii@linux.ibm.com> * gcc.target/s390/s390.exp: Replace %% with %.
2021-01-05xfail test that will never pass on i?86 FreeBSDSteve Kargl1-1/+1
gcc/testsuite * gfortran.dg/dec_math.f90: xfail on i?86-*-freebsd*
2021-01-05syscall: don't define sys_SETREUID and friendsIan Lance Taylor1-1/+1
We don't use them, since we always call the C library functions which do the right thing anyhow. And they aren't defined on all GNU/Linux variants. Fixes PR go/98510 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/281473
2021-01-05internal/cpu: more build fixes for Go1.16beta1 releaseIan Lance Taylor1-1/+1
Some files were missing from the libgo copy of internal/cpu, because they used to only declare CacheLinePadSize which libgo gets from goarch.sh. Now they also declare doinit, so copy them over. Adjust cpu_other.go. Fix the amd64p32 build by adding a build constraint to cpu_no_name.go. Fixes PR go/98493 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/281472
2021-01-05doc: reflect the publication of C++20 in invoke.texi and standards.texiJakub Jelinek2-10/+20
Jonathan mentioned on IRC that ISO/IEC 14882:2020 has been published yesterday (and indeed it appears on www.iso.org for sale). I think we should reflect that in our documentation and in cxx-status.html, patches attached. I understand we want to keep C++20 support experimental even in GCC 11, though not sure if we should still talk about "almost certainly change in incompatible ways" rather than that it might change in incompatible ways. 2021-01-05 Jakub Jelinek <jakub@redhat.com> * doc/invoke.texi (-std=c++20): Adjust for the publication of ISO 14882:2020 standard. * doc/standards.texi: Likewise.
2021-01-05d: Merge upstream dmd a5c86f5b9Iain Buclaw47-431/+1886
Adds the following new `__traits' to the D language. - isDeprecated: used to detect if a function is deprecated. - isDisabled: used to detect if a function is marked with @disable. - isFuture: used to detect if a function is marked with @__future. - isModule: used to detect if a given symbol represents a module, this enhancement also adds support using `is(sym == module)'. - isPackage: used to detect if a given symbol represents a package, this enhancement also adds support using `is(sym == package)'. - child: takes two arguments. The first must be a symbol or expression and the second must be a symbol, such as an alias to a member of the first 'parent' argument. The result is the second 'member' argument interpreted with its 'this' context set to 'parent'. This is the inverse of `__traits(parent, member)'. - isReturnOnStack: determines if a function's return value is placed on the stack, or is returned via registers. - isZeroInit: used to detect if a type's default initializer has no non-zero bits. - getTargetInfo: used to query features of the target being compiled for, the back-end can expand this to register any key to handle the given argument, however a reliable subset exists which includes "cppRuntimeLibrary", "cppStd", "floatAbi", and "objectFormat". - getLocation: returns a tuple whose entries correspond to the filename, line number, and column number of where the argument was declared. - hasPostblit: used to detect if a type is a struct with a postblit. - isCopyable: used to detect if a type allows copying its value. - getVisibility: an alias for the getProtection trait. Reviewed-on: https://github.com/dlang/dmd/pull/12093 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd a5c86f5b9. * d-builtins.cc (d_eval_constant_expression): Handle ADDR_EXPR trees created by build_string_literal. * d-frontend.cc (retStyle): Remove function. * d-target.cc (d_language_target_info): New variable. (d_target_info_table): Likewise. (Target::_init): Initialize d_target_info_table. (Target::isReturnOnStack): New function. (d_add_target_info_handlers): Likewise. (d_handle_target_cpp_std): Likewise. (d_handle_target_cpp_runtime_library): Likewise. (Target::getTargetInfo): Likewise. * d-target.h (struct d_target_info_spec): New type. (d_add_target_info_handlers): Declare.
2021-01-05x86: Use unsigned short to compute pextrw resultH.J. Lu1-1/+1
Use unsigned short to compute the zero-extended pextrw result. PR target/98495 * gcc.target/i386/sse2-mmx-pextrw.c (compute_correct_result): Use unsigned short to compute pextrw result.
2021-01-05c++: Fix deduction from the type of an NTTPPatrick Palka5-2/+37
In the testcase nontype-auto17.C below, the calls to f and g are invalid because neither deduction nor defaulting of the template parameter T yields a valid specialization. Deducing T doesn't work because T is used only in a non-deduced context, and defaulting T doesn't work because its default argument makes the type of M invalid. But with -std=c++17 or later, we incorrectly accept both calls. Starting with C++17 (specifically P0127R2), during deduction we're allowed to try to deduce T from the argument '42' that's been tentatively deduced for M. The problem is that when unify walks into the type of M (a TYPENAME_TYPE), it immediately gives up without performing any new unifications (so the type of M is still unknown) -- and then we go on to unify M with '42' anyway. Later in type_unification_real, we complete the template argument vector using T's default template argument, and end up forming the bogus specializations f<void, 42> and g<S, 42>. This patch fixes this issue by checking whether the type of an NTTP is still dependent after walking into its type during unification. If it is, it means we couldn't deduce all the template parameters used in its type, and so we shouldn't yet unify the NTTP. (The new testcase ttp33.C demonstrates the need for the TEMPLATE_PARM_LEVEL check; without it, we would ICE on this testcase from the call to tsubst.) gcc/cp/ChangeLog: * pt.c (unify) <case TEMPLATE_PARM_INDEX>: After walking into the type of the NTTP, substitute into the type again. If the type is still dependent, don't unify the NTTP. gcc/testsuite/ChangeLog: * g++.dg/template/partial5.C: Adjust directives to expect the same errors across all dialects. * g++.dg/cpp1z/nontype-auto17.C: New test. * g++.dg/cpp1z/nontype-auto18.C: New test. * g++.dg/template/ttp33.C: New test.
2021-01-05expand: Fold x - y < 0 to x < y during expansion [PR94802]Jakub Jelinek5-1/+110
My earlier patch to simplify x - y < 0 etc. for signed subtraction with undefined overflow into x < y in match.pd regressed some tests, even when it was guarded to be post-IPA, the following patch thus attempts to optimize that during expansion instead (which is the last time we can do it, afterwards we lose the information whether it was x - y < 0 or (int) ((unsigned) x - y) < 0 for which we couldn't optimize it. 2021-01-05 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94802 * expr.h (maybe_optimize_sub_cmp_0): Declare. * expr.c: Include tree-pretty-print.h and flags.h. (maybe_optimize_sub_cmp_0): New function. (do_store_flag): Use it. * cfgexpand.c (expand_gimple_cond): Likewise. * gcc.target/i386/pr94802.c: New test. * gcc.dg/Wstrict-overflow-25.c: Remove xfail.
2021-01-05A couple of comment tweaksRichard Sandiford2-7/+9
Tweak a couple of comments added in the RTL-SSA series in response to reviewer feedback. gcc/ * mux-utils.h (pointer_mux::m_ptr): Tweak description of contents. * rtlanal.c (simple_regno_set): Tweak description to clarify the RMW condition.
2021-01-05Don't link cc1 etc. against libcody.aJakub Jelinek2-6/+6
Richi complained on IRC that cc1 is linked against libcody.a. From my understanding, it is just the cc1plus and cc1objplus binaries that need it, so this patch links only those against it. > this is already part of my Solaris libcody patch The following updated patch are the incremental changes between what Rainer has committed and what I've posted. 2021-01-05 Jakub Jelinek <jakub@redhat.com> gcc/cp/ * Make-lang.in (cc1plus-checksum, cc1plus$(exeext): Add $(CODYLIB) after $(BACKEND). gcc/objcp/ * Make-lang.in (cc1objplus-checksum, cc1objplus$(exeext): Add $(CODYLIB) after $(BACKEND).
2021-01-05tree-optimization/98516 - fix SLP permute opt materializationRichard Biener3-5/+70
When materializing on a VEC_PERM node we have to permute the incoming vectors, not the outgoing one. 2021-01-05 Richard Biener <rguenther@suse.de> PR tree-optimization/98516 * tree-vect-slp.c (vect_optimize_slp): Permute the incoming lanes when materializing on a VEC_PERM node. (vectorizable_slp_permutation): Dump the permute properly. * gcc.dg/vect/bb-slp-pr98516-1.c: New testcase. * gcc.dg/vect/bb-slp-pr98516-2.c: Likewise.
2021-01-05c++: Fix ICE with __builtin_bit_cast [PR98469]Jakub Jelinek4-0/+39
On the following testcase we ICE during constexpr evaluation (for warnings), because the IL has ADDR_EXPR of BIT_CAST_EXPR and ADDR_EXPR case asserts the result is not a CONSTRUCTOR. The patch punts on lval BIT_CAST_EXPR folding. > This change is OK, but part of the problem is that we're trying to do > overload resolution for an S copy/move constructor, which we shouldn't be > because bit_cast is a prvalue, so in C++17 and up we should use it to > directly initialize the target without any implied constructor call. This version therefore wraps it into a TARGET_EXPR then, it alone fixes the bug, but I've kept the constexpr.c change too. 2021-01-05 Jakub Jelinek <jakub@redhat.com> PR c++/98469 * constexpr.c (cxx_eval_constant_expression) <case BIT_CAST_EXPR>: Punt if lval is true. * semantics.c (cp_build_bit_cast): Call get_target_expr_sfinae on the result if it has a class type. * g++.dg/cpp2a/bit-cast8.C: New test. * g++.dg/cpp2a/bit-cast9.C: New test.
2021-01-05c++: ICE with deferred noexcept when deducing targs [PR82099]Marek Polacek3-1/+20
In this test we ICE in type_throw_all_p because it got a deferred noexcept which it shouldn't. Here's the story: In noexcept61.C, we call bar, so we perform overload resolution. When adding the (only) candidate, we need to deduce template arguments, so call fn_type_unification as usually. That deduces U to void (*) (int &, int &) which is correct, but its noexcept-spec is deferred_noexcept. Then we call add_function_candidate (bar), wherein we try to create an implicit conversion sequence for every argument. Since baz<int> is of unknown type, we instantiate_type it; it is a TEMPLATE_ID_EXPR so that calls resolve_address_of_overloaded_function. But we crash there, because target_type contains the deferred_noexcept. So we need to maybe_instantiate_noexcept before we can compare types. resolve_overloaded_unification seemed like the appropriate spot, now fn_type_unification produces the function type with its noexcept-spec instantiated. This shouldn't go against CWG 1330 because here we really need to instantiate the noexcept-spec. This also fixes class-deduction76.C, a dg-ice test I recently added, therefore this fix also fixes c++/90799, yay. gcc/cp/ChangeLog: PR c++/82099 * pt.c (resolve_overloaded_unification): Call maybe_instantiate_noexcept after instantiating the function decl. gcc/testsuite/ChangeLog: PR c++/82099 * g++.dg/cpp1z/class-deduction76.C: Remove dg-ice. * g++.dg/cpp0x/noexcept61.C: New test.
2021-01-05move SLP debug counterRichard Biener1-2/+4
This moves it to catch individual SLP subgraphs 2021-01-05 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_slp_region): Move debug counter to cover individual subgraphs.
2021-01-05tree-optimization/98428 - avoid pre-existing vectors for loop SLPRichard Biener1-3/+2
It wasn't supposed to be enabled and appearantly copying around the checking messed up the condition. 2021-01-05 Richard Biener <rguenther@suse.de> PR tree-optimization/98428 * tree-vect-slp.c (vect_build_slp_tree_1): Properly reject vector lane extracts for loop vectorization.
2021-01-05reassoc: Fix reassociation on 32-bit hosts with > 32767 bbs [PR98514]Jakub Jelinek1-17/+17
Apparently reassoc ICEs on large functions (more than 32767 basic blocks with something to reassociate in those). The problem is that the pass uses long type to store the ranks, and the bb ranks are (number of SSA_NAMEs with default defs + 2 + bb->index) << 16, so with many basic blocks we overflow the ranks and we then have assertions rank is not negative. The following patch just uses int64_t instead of long in the pass, yes, it means slightly higher memory consumption (one array indexed by bb->index is twice as large, and one hash_map from trees to the ranks will grow by 50%, but I think it is better than punting on large functions the reassociation on 32-bit hosts and making it inconsistent e.g. when cross-compiling. Given vec.h uses unsigned for vect element counts, we don't really support more than 4G of SSA_NAMEs or more than 2G of basic blocks in a function, so even with the << 16 we can't really overflow the int64_t rank counters. 2021-01-05 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/98514 * tree-ssa-reassoc.c (bb_rank): Change type from long * to int64_t *. (operand_rank): Change type from hash_map<tree, long> to hash_map<tree, int64_t>. (phi_rank): Change return type from long to int64_t. (loop_carried_phi): Change block_rank variable type from long to int64_t. (propagate_rank): Change return type, rank parameter type and op_rank variable type from long to int64_t. (find_operand_rank): Change return type from long to int64_t and change slot variable type from long * to int64_t *. (insert_operand_rank): Change rank parameter type from long to int64_t. (get_rank): Change return type and rank variable type from long to int64_t. Use PRId64 instead of ld to print the rank. (init_reassoc): Change rank variable type from long to int64_t and adjust correspondingly bb_rank and operand_rank initialization.
2021-01-05phiopt: Optimize x < 0 ? ~y : y to (x >> 31) ^ y [PR96928]Jakub Jelinek3-2/+148
As requested in the PR, the one's complement abs can be done more efficiently without cmov or branching. Had to change the ifcvt-onecmpl-abs-1.c testcase, we no longer optimize it in ifcvt, on x86_64 with -m32 we generate in the end the exact same code, but with -m64: movl %edi, %eax - notl %eax - cmpl %edi, %eax - cmovl %edi, %eax + sarl $31, %eax + xorl %edi, %eax ret 2021-01-05 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/96928 * tree-ssa-phiopt.c (xor_replacement): New function. (tree_ssa_phiopt_worker): Call it. * gcc.dg/tree-ssa/pr96928.c: New test. * gcc.target/i386/ifcvt-onecmpl-abs-1.c: Remove -fdump-rtl-ce1, instead of scanning rtl dump for ifcvt message check assembly for xor instruction.
2021-01-05match.pd: Improve (A / (1 << B)) -> (A >> B) optimization [PR96930]Jakub Jelinek2-2/+16
The following patch improves the A / (1 << B) -> A >> B simplification, as seen in the testcase, if there is unnecessary widening for the division, we just optimize it into a shift on the widened type, but if the lshift is widened too, there is no reason to do that, we can just shift it in the original type and convert after. The tree_nonzero_bits & wi::mask check already ensures it is fine even for signed values. I've split the vr-values optimization into a separate patch as it causes a small regression on two testcases, but this patch fixes what has been reported in the PR alone. 2021-01-05 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/96930 * match.pd ((A / (1 << B)) -> (A >> B)): If A is extended from narrower value which has the same type as 1 << B, perform the right shift on the narrower value followed by extension. * g++.dg/tree-ssa/pr96930.C: New test.
2021-01-05store-merging: Handle vector CONSTRUCTORs using bswap [PR96239]Jakub Jelinek2-3/+115
I've tried to add such helper, but handling over just analysis and letting each pass handle it differently seems complicated given the limitations of the bswap infrastructure. So, this patch just hooks the optimization also into store-merging so that the original testcase from the PR can be fixed. 2021-01-05 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/96239 * gimple-ssa-store-merging.c (maybe_optimize_vector_constructor): New function. (get_status_for_store_merging): Don't return BB_INVALID for blocks with potential bswap optimizable CONSTRUCTORs. (pass_store_merging::execute): Optimize vector CONSTRUCTORs with bswap if possible. * gcc.dg/tree-ssa/pr96239.c: New test.
2021-01-05go: Fix -fgo-embedcfg= option description.Jakub Jelinek1-1/+1
Description of options should be . terminated, the: FAIL: compiler driver --help=go option(s): "^ +-.*[^:.]$" absent from output: " -fgo-embedcfg=<file> List embedded files via go:embed" test even reports that. 2021-01-05 Jakub Jelinek <jakub@redhat.com> * lang.opt (fgo-embedcfg=): Add full stop at the end of description.
2021-01-05tree-optimization/98381 - fix live bool vector extractRichard Biener2-5/+9
This fixes extraction of live bool vector results for the case of integer mode vectors. 2021-01-05 Richard Biener <rguenther@suse.de> PR tree-optimization/98381 * tree.c (vector_element_bits): Properly compute bool vector element size. * tree-vect-loop.c (vectorizable_live_operation): Properly compute the last lane bit offset.
2021-01-05i386: Prevent spurious FP exceptions with _mm_cvt{,t}ps_pi32 [PR98522]Uros Bizjak2-8/+81
Prevent spurious FP exceptions with _mm_cvt{,t}ps_pi32 for TARGET_MMX_WITH_SSE by clearing the top 64 bytes of the input XMM register. 2021-01-05 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/98522 * config/i386/sse.md (sse_cvtps2pi): Redefine as define_insn_and_split. Clear the top 64 bytes of the input XMM register. (sse_cvttps2pi): Ditto. gcc/testsuite PR target/98522 * gcc.target/i386/pr98522.c: New test.
2021-01-05i386: Add _mm256_cmov_si256 [PR98521]Uros Bizjak1-0/+6
Add missing _mm256_cmov_si256 intrinsic to xopintrin.h. 2021-01-05 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/98521 * config/i386/xopintrin.h (_mm256_cmov_si256): New.
2021-01-05[c++]: Improve module-decl diagnostics [PR 98327]Nathan Sidwell4-9/+12
The diagnostic for a misplaced module decl was essentially 'computer says no', which isn't the most helpful. This adjusts it to indicate what would be acceptable. gcc/cp/ * parser.c (cp_parser_module_declaration): Alter diagnostic text to say where is permissable. gcc/testsuite/ * g++.dg/modules/mod-decl-1.C: Adjust. * g++.dg/modules/p0713-2.C: Adjust. * g++.dg/modules/p0713-3.C: Adjust.