aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-08-11Add debug counter for IPA bits CP.Martin Liska2-3/+9
gcc/ChangeLog: * dbgcnt.def (DEBUG_COUNTER): Add ipa_cp_bits. * ipa-cp.c (ipcp_store_bits_results): Use it when we store known bits for parameters.
2020-08-11Daily bump.GCC Administrator6-1/+138
2020-08-10c++: Add unfixed test [PR88003]Marek Polacek1-0/+13
Now that dg-ice is available, let's try it out. gcc/testsuite/ChangeLog: PR c++/88003 * g++.dg/cpp1y/auto-fn61.C: New test.
2020-08-10runtime: revert eqtype for AIXClément Chigot9-10/+43
AIX linker is not able to merge identical type descriptors in a single symbol if there are coming from different object or shared object files. This results into several pointers referencing the same type descriptors. Thus, eqtype is needed to ensure that these different symbols will be considered as the same type descriptor. Fixes golang/go#39276 gcc/go/ChangeLog: * go-c.h (struct go_create_gogo_args): Add need_eqtype field. * go-lang.c (go_langhook_init): Set need_eqtype. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/235697
2020-08-10testsuite: Introduce dg-ice.Marek Polacek4-2/+65
This patch adds a new DejaGNU directive, dg-ice, as outlined in the proposal here: https://gcc.gnu.org/pipermail/gcc-patches/2020-July/550913.html It means that it's expected that the compiler crashes with an internal compiler error when compiling test with such a directive. A minor optimization could be to use -pass-exit-codes and then check for ICE_EXIT_CODE return code instead of using string match. gcc/ChangeLog: * doc/sourcebuild.texi: Document dg-ice. gcc/testsuite/ChangeLog: * lib/gcc-dg.exp (gcc-dg-test-1): Handle dg-ice. (cleanup-after-saved-dg-test): Reset expect_ice. * lib/prune.exp (prune_ices): New. * lib/target-supports-dg.exp (dg-ice): New.
2020-08-10i386: Improve code generation of smin(x,0) with -m32.Roger Sayle2-1/+28
To make amends for the recent (temporary) testsuite failure of my new gcc.target/i386/minmax-9.c when compiled with -m32, this patch improves the -m32 code we generate for the examples in that test case. The trick is to expand smin(x,0) as "x < 0 ? x : 0" instead of the current "x <= 0 ? x : 0", as the former can take advantage of sign_bit_mask operations. 2020-08-10 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * config/i386/i386-expand.c (ix86_expand_int_movcc): Expand signed MIN_EXPR against zero as "x < 0 ? x : 0" instead of "x <= 0 ? x : 0" to enable sign_bit_compare_p optimizations. gcc/testsuite/ChangeLog * gcc.target/i386/minmax-12.c: New test.
2020-08-10Fix NULL pointer dereference in doloop_contained_function_call.Thomas Koenig2-1/+60
gcc/fortran/ChangeLog: PR fortran/96556 * frontend-passes.c (doloop_contained_function_call): Do not dereference a NULL pointer for value.function.esym. gcc/testsuite/ChangeLog: PR fortran/96556 * gfortran.dg/do_check_15.f90: New test.
2020-08-10c++: Fix constexpr evaluation of SPACESHIP_EXPR [PR96497]Jakub Jelinek2-2/+9
The following valid testcase is rejected, because cxx_eval_binary_expression is called on the SPACESHIP_EXPR with lval = true, as the address of the spaceship needs to be passed to a method call. After recursing on the operands and calling genericize_spaceship which turns it into a TARGET_EXPR with initialization, we call cxx_eval_constant_expression on it which succeeds, but then we fall through into code that will VERIFY_CONSTANT (r) which FAILs because it is an address of a variable. Rather than avoiding that for lval = true and SPACESHIP_EXPR, the patch just tail calls cxx_eval_constant_expression - I believe that call should perform all the needed verifications. 2020-08-10 Jakub Jelinek <jakub@redhat.com> PR c++/96497 * constexpr.c (cxx_eval_binary_expression): For SPACESHIP_EXPR, tail call cxx_eval_constant_expression after genericize_spaceship to avoid undesirable further VERIFY_CONSTANT. * g++.dg/cpp2a/spaceship-constexpr3.C: New test.
2020-08-10c++: constraints and address of template-idPatrick Palka6-5/+25
When resolving the address of a template-id, we need to drop functions whose associated constraints are not satisfied, as per [over.over]. We do so in resolve_address_of_overloaded_function, but not in resolve_overloaded_unification or resolve_nondeduced_context, which seems like an oversight. gcc/cp/ChangeLog: * pt.c (resolve_overloaded_unification): Drop functions with unsatisfied constraints. (resolve_nondeduced_context): Likewise. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-fn5.C: New test. * g++.dg/concepts/fn8.C: Generalize dg-error directive to accept "no matching function ..." diagnostic. * g++.dg/cpp2a/concepts-fn1.C: Likewise. * g++.dg/cpp2a/concepts-ts2.C: Likewise. * g++.dg/cpp2a/concepts-ts3.C: Likewise.
2020-08-10Declare gt_* functions inline in value-range.h.Aldy Hernandez1-3/+3
gcc/ChangeLog: * value-range.h (gt_ggc_mx): Declare inline. (gt_pch_nx): Same.
2020-08-10Simplify X * C1 == C2 with wrapping overflowMarc Glisse5-35/+68
Odd numbers are invertible in Z / 2^n Z, so X * C1 == C2 can be rewritten as X == C2 * inv(C1) when overflow wraps. mod_inv should probably be updated to better match the other wide_int functions, but that's a separate issue. 2020-08-10 Marc Glisse <marc.glisse@inria.fr> PR tree-optimization/95433 * match.pd (X * C1 == C2): Handle wrapping overflow. * expr.c (maybe_optimize_mod_cmp): Qualify call to mod_inv. (mod_inv): Move... * wide-int.cc (mod_inv): ... here. * wide-int.h (mod_inv): Declare it. * gcc.dg/tree-ssa/pr95433-2.c: New file.
2020-08-10Fix remove_predictions_associated_with_edgeJan Hubicka1-7/+8
remove_predictions_associated_with_edge currently calls filter_predicitons passing it equal_edge_p. Becase filter_predictions removes all edges where filter returns false, the function does exact oposite. Fixed thus. Bootstrapped/regtested x86_64-linux. gcc/ChangeLog: 2020-08-02 Jan Hubicka <hubicka@ucw.cz> * predict.c (filter_predictions): Document semantics of filter. (equal_edge_p): Rename to ... (not_equal_edge_p): ... this; reverse semantics. (remove_predictions_associated_with_edge): Fix.
2020-08-10Correct ChangeLog foul ups.Paul Thomas2-26/+0
2020-08-10This patch fixes PR96312. Cures a used uninitialized warning.Paul Thomas2-6/+51
2020-08-10 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/96312 * trans-expr.c (fcncall_realloc_result): Only compare shapes if lhs was allocated.. gcc/testsuite/ PR fortran/96312 * gfortran.dg/pr96312.f90: New test.
2020-08-10This patch fixes PR96102. See the explanatory comment in the testcase.Paul Thomas2-0/+37
2020-08-10 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/96102 * resolve.c (check_host_association): Replace the gcc_assert with an error for internal procedures. gcc/testsuite/ PR fortran/96102 * gfortran.dg/pr96102.f90: New test.
2020-08-10Using UNSPEC for vector compare to mask register.liuhongt5-112/+26
For rtx like (eq:HI (V8SI 90) (V8SI 91)), cse will take it as a boolean value and try to do some optimization. But it is not true for vector compare, also other places in rtl passes hold the same assumption. 2020-07-20 Hongtao Liu <hongtao.liu@intel.com> gcc/ PR target/96243 * config/i386/i386-expand.c (ix86_expand_sse_cmp): Refine for maskcmp. (ix86_expand_mask_vec_cmp): Change prototype. * config/i386/i386-protos.h (ix86_expand_mask_vec_cmp): Change prototype. * config/i386/i386.c (ix86_print_operand): Remove operand modifier 'I'. * config/i386/sse.md (*<avx512>_cmp<mode>3<mask_scalar_merge_name><round_saeonly_name>): Deleted. (*<avx512>_cmp<mode>3<mask_scalar_merge_name>): Ditto. (*<avx512>_ucmp<mode>3<mask_scalar_merge_name>): Ditto. (*<avx512>_ucmp<mode>3<mask_scalar_merge_name>, avx512f_maskcmp<mode>3): Ditto. gcc/testsuite * gcc.target/i386/pr92865-1.c: Adjust testcase.
2020-08-10Daily bump.GCC Administrator3-1/+21
2020-08-09middle-end: Correct calculation of mul_widen_cost and mul_highpart_cost.Roger Sayle2-2/+4
This patch fixes a subtle bug in the depths of GCC's synth_mult, where the middle-end queries whether (how well) the target supports widening and highpart multiplications by calling targetm.rtx_costs. The code in init_expmed and init_expmed_one_mode iterates over various RTL patterns querying the cost of each. To avoid generating & garbage collecting too much junk, it reuses the same RTL over and over, but adjusting the modes between each call. Alas this reuse of state is a little fragile, and at some point a change to init_expmed_one_conv has resulted in the state (mode of a register) being changed, but not reset before being used again. Using the old software engineering/defensive programming maxim of "why fix a bug just once, if it can be fixed in multiple places", this patch both restores the original value in init_expmed_one_conv, and also sets it to the expected value in init_expmed_one_mode. This should hopefully signal the need to be careful of invariants for anyone modifying this code in future. 2020-08-09 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * expmed.c (init_expmed_one_conv): Restore all->reg's mode. (init_expmed_one_mode): Set all->reg to desired mode. gcc/testsuite/ChangeLog PR target/71321 * gcc.target/i386/pr71321.c: Check that the code doesn't use the 4B zero displacement lea, not that it uses lea.
2020-08-09testsuite, Darwin: XFAIL runs for two timode conversion tests.Iain Sandoe2-0/+2
X86 Darwin fails these at present, because (to work around PR80556) we insert libSystem ahead of libgcc. The libSystem implementation has a similar bug to one that was fixed for GCC. We need to fix 80556 properly, and then this issue will go away - we will be able to use the libgcc impl as intended. XFAIL the run for now, to reduce testsuite noise. gcc/testsuite/ChangeLog: * gcc.dg/torture/fp-int-convert-timode-3.c: XFAIL run. * gcc.dg/torture/fp-int-convert-timode-4.c: Likewise.
2020-08-09gcc.dg/pr44194-1.c: Skip for mmix.Hans-Peter Nilsson1-0/+1
The test makes sense only for targets that return the "struct { int a, b, c; }" in registers (not in memory). Starting a skip-construct is IMHO better than another iteration of that obscuring "{ ... && { ! mytarget-*-* } }". New targets can just append to the list without additional {}:s. I chose not to "convert" any of the previous exclusions, as without targets to test, I'd surely mess up {}-pairs. A new effective_target would be even better, but such a check_effective_target_returns_struct_in_memory (or complementary, _in_registers) would surely have to be parametrized on the size and type of the returned blob. Maybe best to restrict to just x86_64, as seems to have been the original problem target. gcc/testsuite: * gcc.dg/pr44194-1.c: Skip for mmix.
2020-08-09Daily bump.GCC Administrator3-1/+36
2020-08-09gcc.dg/pr30957-1.c: xfail for mmix.Hans-Peter Nilsson1-2/+2
IV (loop2_unroll) doesn't like the mmix port. The feelings are mutual. For mmix, gcc.dg/pr30957-1.c fails (runtime and rtl-scan) for these reasons: - IV doesn't handle the zero-extension-by-shift sequences generated by middle-end (expr.c:convert_mode_scalar) in the absence of zero-extend patterns in a port. - (when adding such patterns) IV doesn't understand the subreg constructs generated by middle-end in the absence of addsi3 and compare/branch in SImode (int). - (when hacking pr30957-1.c to iterate using a register-mode type) IV doesn't understand the admittedly weird SFmode operations (performing in DFmode, then truncating, for lack of SFmode operations, but presence of truncdfsf2 and float_extendsfdf2) in order to perform the "Expanding Accumulator" optimization. When also editing the type in the test to be double instead of float, the test passes. While at least the last point seems like a valid reason to just skip the test for mmix, it also seems possible that IV (and maybe convert_mode_scalar by e.g. adding REG_EQUIV notes) be improved to be both smarter and dumber to actually make the test pass, so I think it's better to use xfail. Smarter: understanding zero-extend- by-shift and subregged operations better, and "seeing" the accumulation through the DF/SFmode truncations and expansions. Dumber: ignoring the cost; unrolling the several operations per SFmode add anyway. I'm considering adding a variant of this test with "double" and "__SIZE_TYPE__" iteration types, as that passes for mmix as-is. Maybe as a mmix-specific test; the world has suffered enough from the questionable gcc.dg/pr30957-1.c (see the test and its history). gcc/testsuite: * gcc.dg/pr30957-1.c: xfail for mmix.
2020-08-08rs6000: MMA built-ins reject typedefs of MMA typesPeter Bergner2-17/+51
We do not allow conversions between the MMA types and other types. However, we are being too strict in not matching MMA types with typdefs of those types. Use TYPE_CANONICAL to see through the types to their canonical types before comparing them. 2020-08-08 Peter Bergner <bergner@linux.ibm.com> gcc/ PR target/96530 * config/rs6000/rs6000.c (rs6000_invalid_conversion): Use canonical types for type comparisons. Refactor code to simplify it. gcc/testsuite/ PR target/96530 * gcc.target/powerpc/pr96530.c: New test.
2020-08-08openmp: Handle clauses with gimple sequences in convert_nonlocal_omp_clauses ↵Jakub Jelinek1-10/+36
properly If the walk_body on the various sequences of reduction, lastprivate and/or linear clauses needs to create a temporary variable, we should declare that variable in that sequence rather than outside, where it would need to be privatized inside of the construct. 2020-08-08 Jakub Jelinek <jakub@redhat.com> PR fortran/93553 * tree-nested.c (convert_nonlocal_omp_clauses): For OMP_CLAUSE_REDUCTION, OMP_CLAUSE_LASTPRIVATE and OMP_CLAUSE_LINEAR save info->new_local_var_chain around walks of the clause gimple sequences and declare_vars if needed into the sequence. 2020-08-08 Tobias Burnus <tobias@codesourcery.com> PR fortran/93553 * testsuite/libgomp.fortran/pr93553.f90: New test.
2020-08-08openmp: Avoid floating point comparison at the end of bb with ↵Jakub Jelinek2-4/+41
-fnon-call-exceptions The following testcase ICEs with -fexceptions -fnon-call-exceptions because in that mode floating point comparisons should not be done at the end of bb in GIMPLE_COND. Fixed by forcing it into a bool SSA_NAME and comparing that against false. 2020-08-08 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/96424 * omp-expand.c: Include tree-eh.h. (expand_omp_for_init_vars): Handle -fexceptions -fnon-call-exceptions by forcing floating point comparison into a bool temporary. * c-c++-common/gomp/pr96424.c: New test.
2020-08-07libgo: update to Go1.15rc2 releaseIan Lance Taylor1-1/+1
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/247517
2020-08-08Daily bump.GCC Administrator3-1/+103
2020-08-07Disable some VEC_COND_EXPR transformations after vector loweringMarc Glisse3-9/+31
ARM understands VEC_COND_EXPR<v == w, -1, 0> but not a plain v == w which is fed to something other than VEC_COND_EXPR (say BIT_IOR_EXPR). This patch avoids introducing the second kind of statement after the vector lowering pass, which is the last chance to turn v == w back into something the target handles. This is just a workaround to avoid ICEs, a v == w produced before vector lowering will yield pretty bad code. Either the arm target needs to learn to handle vector comparisons (aarch64 already does), or the middle-end needs to fall back to vcond when plain comparisons are not supported (or ...). 2020-08-07 Marc Glisse <marc.glisse@inria.fr> * generic-match-head.c (optimize_vectors_before_lowering_p): New function. * gimple-match-head.c (optimize_vectors_before_lowering_p): Likewise. * match.pd ((v ? w : 0) ? a : b, c1 ? c2 ? a : b : b): Use it.
2020-08-07tree-optimization/96514 - avoid if-converting control-altering callsRichard Biener2-0/+32
This avoids if-converting when encountering control-altering calls. 2020-08-07 Richard Biener <rguenther@suse.de> PR tree-optimization/96514 * tree-if-conv.c (if_convertible_bb_p): If the last stmt is a call that is control-altering, fail. * gcc.dg/pr96514.c: New testcase.
2020-08-07bpf: remove trailing whitespaces from source filesJose E. Marchesi49-65/+55
This patch is a little cleanup that removes trailing whitespaces from the bpf backend source files. 2020-08-07 Jose E. Marchesi <jose.marchesi@oracle.com> gcc/ * config/bpf/bpf.md: Remove trailing whitespaces. * config/bpf/constraints.md: Likewise. * config/bpf/predicates.md: Likewise. gcc/testsuite/ * gcc.target/bpf/diag-funargs-2.c: Remove trailing whitespaces. * gcc.target/bpf/skb-ancestor-cgroup-id.c: Likewise. * gcc.target/bpf/helper-xdp-adjust-meta.c: Likewise. * gcc.target/bpf/helper-xdp-adjust-head.c: Likewise. * gcc.target/bpf/helper-tcp-check-syncookie.c: Likewise. * gcc.target/bpf/helper-sock-ops-cb-flags-set.c * gcc.target/bpf/helper-sysctl-set-new-value.c: Likewise. * gcc.target/bpf/helper-sysctl-get-new-value.c: Likewise. * gcc.target/bpf/helper-sysctl-get-name.c: Likewise. * gcc.target/bpf/helper-sysctl-get-current-value.c: Likewise. * gcc.target/bpf/helper-strtoul.c: Likewise. * gcc.target/bpf/helper-strtol.c: Likewise. * gcc.target/bpf/helper-sock-map-update.c: Likewise. * gcc.target/bpf/helper-sk-storage-get.c: Likewise. * gcc.target/bpf/helper-sk-storage-delete.c: Likewise. * gcc.target/bpf/helper-sk-select-reuseport.c: Likewise. * gcc.target/bpf/helper-sk-release.c: Likewise. * gcc.target/bpf/helper-sk-redirect-map.c: Likewise. * gcc.target/bpf/helper-sk-lookup-upd.c: Likewise. * gcc.target/bpf/helper-sk-lookup-tcp.c: Likewise. * gcc.target/bpf/helper-skb-change-head.c: Likewise. * gcc.target/bpf/helper-skb-cgroup-id.c: Likewise. * gcc.target/bpf/helper-skb-adjust-room.c: Likewise. * gcc.target/bpf/helper-set-hash.c: Likewise. * gcc.target/bpf/helper-setsockopt.c: Likewise. * gcc.target/bpf/helper-redirect-map.c: Likewise. * gcc.target/bpf/helper-rc-repeat.c: Likewise. * gcc.target/bpf/helper-rc-keydown.c: Likewise. * gcc.target/bpf/helper-probe-read-str.c: Likewise. * gcc.target/bpf/helper-perf-prog-read-value.c: Likewise. * gcc.target/bpf/helper-perf-event-read-value.c: Likewise. * gcc.target/bpf/helper-override-return.c: Likewise. * gcc.target/bpf/helper-msg-redirect-map.c: Likewise. * gcc.target/bpf/helper-msg-pull-data.c: Likewise. * gcc.target/bpf/helper-msg-cork-bytes.c: Likewise. * gcc.target/bpf/helper-msg-apply-bytes.c: Likewise. * gcc.target/bpf/helper-lwt-seg6-store-bytes.c: Likewise. * gcc.target/bpf/helper-lwt-seg6-adjust-srh.c: Likewise. * gcc.target/bpf/helper-lwt-seg6-action.c: Likewise. * gcc.target/bpf/helper-lwt-push-encap.c: Likewise. * gcc.target/bpf/helper-get-socket-uid.c: Likewise. * gcc.target/bpf/helper-get-socket-cookie.c: Likewise. * gcc.target/bpf/helper-get-local-storage.c: Likewise. * gcc.target/bpf/helper-get-current-cgroup-id.c: Likewise. * gcc.target/bpf/helper-getsockopt.c: Likewise. * gcc.target/bpf/diag-funargs-3.c: Likewise.
2020-08-07[testsuite] Add gcc.dg/ia64-sync-5.cKwok Cheung Yeung1-0/+83
There currently is no sync_char_short-enabled run test that tests __sync_val_compare_and_swap. Fix this by copying ia64-sync-3.c and modifying it for char/short. Tested on x86_64. 2020-08-06 Kwok Cheung Yeung <kcy@codesourcery.com> Tom de Vries <tdevries@suse.de> gcc/testsuite/ChangeLog: * gcc.dg/ia64-sync-5.c: New test.
2020-08-07Power10: Add BRD, BRW, and BRH support.Michael Meissner4-20/+80
This patch adds support for the ISA 3.1 (power10) instructions that does a byte swap of values in GPR registers. gcc/ 2020-08-07 Michael Meissner <meissner@linux.ibm.com> * config/rs6000/rs6000.md (bswaphi2_reg): Add ISA 3.1 support. (bswapsi2_reg): Add ISA 3.1 support. (bswapdi2): Rename bswapdi2_xxbrd to bswapdi2_brd. (bswapdi2_brd,bswapdi2_xxbrd): Rename. Add ISA 3.1 support. gcc/testsuite/ 2020-08-07 Michael Meissner <meissner@linux.ibm.com> * gcc.target/powerpc/bswap-brd.c: New test. * gcc.target/powerpc/bswap-brw.c: New test. * gcc.target/powerpc/bswap-brh.c: New test.
2020-08-07PR96493, powerpc local call linkage failureAlan Modra2-1/+34
This corrects current_file_function_operand, an operand predicate used to determine whether a symbol_ref is safe to use with the local_call patterns. Calls between pcrel and non-pcrel code need to go via linker stubs. In the case of non-pcrel code to pcrel the stub saves r2 but there needs to be a nop after the branch for the r2 restore. So the local_call patterns can't be used there. For pcrel code to non-pcrel the local_call patterns could still be used, but I thought it better to not use them since the call isn't direct. Code generated by the corresponding call_nonlocal_aix for pcrel is identical anyway. Incidentally, without the TREE_CODE () == FUNCTION_DECL test, gcc.c-torture/compile/pr37433.c and pr37433-1.c ICE. Also, if you make the test more strict by disallowing an op without a SYMBOL_REF_DECL then a bunch of go and split-stack tests fail. That's because a prologue call to __morestack can't have a following nop. (__morestack calls its caller at a fixed offset from the __morestack call!) gcc/ PR target/96493 * config/rs6000/predicates.md (current_file_function_operand): Don't accept functions that differ in r2 usage. gcc/testsuite/ * gcc.target/powerpc/pr96493.c: New file.
2020-08-07Daily bump.GCC Administrator3-1/+252
2020-08-07mmix: fix gcc.dg/loop-9.c by more accurate move insnsHans-Peter Nilsson1-12/+36
It looks like gcc.dg/loop-9.c kind-of works as sentinel for sane move-instruction generation for a port. Looking at the FAIL: gcc.dg/loop-9.c scan-rtl-dump loop2_invariant "Decided" FAIL: gcc.dg/loop-9.c scan-rtl-dump loop2_invariant "without introducing a new temporary register" it seems the problem is that in the loop: for (i = 0; i < 100; i++) a[i] = 18.4242; the move insn corresponding to "a[i] = 18.4242" happens to be generated as a move of a constant to a memory address, using no registers except for the address (edited): (insn 9 8 10 3 (set (mem:DF (reg:DI 269 [ ivtmp::9 ])) (const_double:DF 1.84241999e+1)) "x/loop-9.c":9:10 6 {movdf}) To wit, at the loop2 pass there's no register-initialization to move out of the loop! The insn above isn't accurate and has to be fixed up at register allocation time to make constraints match. While there are insns to set memory to constant in MMIX, that's limited to 64-bit moves corresponding to the integer bit-patterns for 0..255, and 18.4242 isn't one of them. (Only 0.0 matches; the bit-patterns for 0..255 would IIUC be interpreted as denormal floating-point numbers a.k.a. subnormal numbers and don't seem worthwhile to handle.) The fault is with the port, for not requiring a register for an operand that actually requires an intermediate register, in order to enable pre-register-allocation passes to do their job. The movdf pattern (actually, all MMIX movM), only required the destination to be a non-immediate operand and the source to be a general_operand, i.e. anything-to-anything. Better force the source to be a register, when asked to generate such a move insn. Also, make operands stay sane by using the matching insn condition to require one of the operands to be a register pre-register-allocation (for sake of combine-like passes that cook up "simplified" insns, possibly losing the use of a register). Looking no deeper than at the results of test-runs with different variants, I see that the latter "safety latch" has no effect on the test-results (at 919c9d4bd3db7da0), but it just feels like the right thing to do. Similarly, there's no effect on test-suite results, to do the same not just for movdf but for all moves. gcc: * config/mmix/mmix.md (MM): New mode_iterator. ("mov<mode>"): New expander to expand for all MM-modes. ("*movqi_expanded", "*movhi_expanded", "*movsi_expanded") ("*movsf_expanded", "*movdf_expanded"): Rename from the corresponding mov<M> named pattern. Add to the condition that either operand must be a register_operand. ("*movdi_expanded"): Similar, but also allow STCO in the condition.
2020-08-06arm: Clear canary value after stack_protect_test [PR96191]Richard Sandiford4-5/+78
The stack_protect_test patterns were leaving the canary value in the temporary register, meaning that it was often still in registers on return from the function. An attacker might therefore have been able to use it to defeat stack-smash protection for a later function. gcc/ PR target/96191 * config/arm/arm.md (arm_stack_protect_test_insn): Zero out operand 2 after use. * config/arm/thumb1.md (thumb1_stack_protect_test_insn): Likewise. gcc/testsuite/ * gcc.target/arm/stack-protector-1.c: New test. * gcc.target/arm/stack-protector-2.c: Likewise.
2020-08-06rs6000: Don't ICE when spilling an MMA accumulatorPeter Bergner2-8/+30
When we spill an accumulator that has a known zero value, LRA will emit a new (set (reg:PXI ...) 0) insn, but it does not use the mma_xxsetaccz pattern to do it, leading to an unrecognized insn ICE. The solution here is to move the xxsetaccz instruction into the movpxi pattern and have the xxsetaccz pattern call the move pattern. 2020-08-06 Peter Bergner <bergner@linux.ibm.com> gcc/ PR target/96446 * config/rs6000/mma.md (*movpxi): Add xxsetaccz generation. Disable split for zero constant source operand. (mma_xxsetaccz): Change to define_expand. Call gen_movpxi. gcc/testsuite/ PR target/96446 * gcc.target/powerpc/pr96446.c: New test.
2020-08-06x86: Restrict new gcc.target/i386/minmax-9.c test to !ia32.Roger Sayle1-1/+1
As reported by Jakub Jelinek, this test fails with -m32. Sorry for any inconvenience. 2020-08-06 Roger Sayle <roger@nextmovesoftware.com> gcc/testsuite/ChangeLog * gcc.target/i386/minmax-9.c: Restrict test to !ia32.
2020-08-06reassoc: Improve maybe_optimize_range_tests [PR96480]Jakub Jelinek2-10/+101
On the following testcase, if the IL before reassoc would be: ... <bb 4> [local count: 354334800]: if (x_3(D) == 2) goto <bb 7>; [34.00%] else goto <bb 5>; [66.00%] <bb 5> [local count: 233860967]: if (x_3(D) == 3) goto <bb 7>; [34.00%] else goto <bb 6>; [66.00%] <bb 6> [local count: 79512730]: <bb 7> [local count: 1073741824]: # prephitmp_7 = PHI <1(3), 1(4), 1(5), 1(2), 0(6)> then we'd optimize it properly, but as bb 5-7 is instead: <bb 5> [local count: 233860967]: if (x_3(D) == 3) goto <bb 6>; [34.00%] else goto <bb 7>; [66.00%] <bb 6> [local count: 79512730]: <bb 7> [local count: 1073741824]: # prephitmp_7 = PHI <1(3), 1(4), 0(5), 1(2), 1(6)> (i.e. the true/false edges on the last bb with condition swapped and ditto for the phi args), we don't recognize it. If bb 6 is empty, there should be no functional difference between the two IL representations. This patch handles those special cases. 2020-08-06 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/96480 * tree-ssa-reassoc.c (suitable_cond_bb): Add TEST_SWAPPED_P argument. If TEST_BB ends in cond and has one edge to *OTHER_BB and another through an empty bb to that block too, if PHI args don't match, retry them through the other path from TEST_BB. (maybe_optimize_range_tests): Adjust callers. Handle such LAST_BB through inversion of the condition. * gcc.dg/tree-ssa/pr96480.c: New test.
2020-08-06bpf: more flexible support for kernel helpersJose E. Marchesi112-787/+750
This patch changes the existing support for BPF kernel helpers to be more flexible, in two main ways. First, there is no longer a hardcoded list of kernel helpers defined in the compiler internals. This is replaced by a new target-specific attribute `kernel_helper' that the user can use to define her own helpers, annotating function prototypes. Second, following feedback from the kernel hackers, the pre-defined helpers in the distributed bpf-helpers.h are no longer available conditionally depending on the kernel version used in -mkernel. The command-line option stays for now, as it may be useful for other things. Target tests and documentation updated. 2020-08-06 Jose E. Marchesi <jose.marchesi@oracle.com> gcc/ * config/bpf/bpf-helpers.h (KERNEL_HELPER): Define. (KERNEL_VERSION): Remove. * config/bpf/bpf-helpers.def: Delete. * config/bpf/bpf.c (bpf_handle_fndecl_attribute): New function. (bpf_attribute_table): Define. (bpf_helper_names): Delete. (bpf_helper_code): Likewise. (enum bpf_builtins): Adjust to new helpers mechanism. (bpf_output_call): Likewise. (bpf_init_builtins): Likewise. (bpf_init_builtins): Likewise. * doc/extend.texi (BPF Function Attributes): New section. (BPF Kernel Helpers): Delete section. gcc/testsuite/ * gcc.target/bpf/helper-bind.c: Adjust to new kernel helpers mechanism. * gcc.target/bpf/helper-bpf-redirect.c: Likewise. * gcc.target/bpf/helper-clone-redirect.c: Likewise. * gcc.target/bpf/helper-csum-diff.c: Likewise. * gcc.target/bpf/helper-csum-update.c: Likewise. * gcc.target/bpf/helper-current-task-under-cgroup.c: Likewise. * gcc.target/bpf/helper-fib-lookup.c: Likewise. * gcc.target/bpf/helper-get-cgroup-classid.c: Likewise. * gcc.target/bpf/helper-get-current-cgroup-id.c: Likewise. * gcc.target/bpf/helper-get-current-comm.c: Likewise. * gcc.target/bpf/helper-get-current-pid-tgid.c: Likewise. * gcc.target/bpf/helper-get-current-task.c: Likewise. * gcc.target/bpf/helper-get-current-uid-gid.c: Likewise. * gcc.target/bpf/helper-get-hash-recalc.c: Likewise. * gcc.target/bpf/helper-get-listener-sock.c: Likewise. * gcc.target/bpf/helper-get-local-storage.c: Likewise. * gcc.target/bpf/helper-get-numa-node-id.c: Likewise. * gcc.target/bpf/helper-get-prandom-u32.c: Likewise. * gcc.target/bpf/helper-get-route-realm.c: Likewise. * gcc.target/bpf/helper-get-smp-processor-id.c: Likewise. * gcc.target/bpf/helper-get-socket-cookie.c: Likewise. * gcc.target/bpf/helper-get-socket-uid.c: Likewise. * gcc.target/bpf/helper-get-stack.c: Likewise. * gcc.target/bpf/helper-get-stackid.c: Likewise. * gcc.target/bpf/helper-getsockopt.c: Likewise. * gcc.target/bpf/helper-ktime-get-ns.c: Likewise. * gcc.target/bpf/helper-l3-csum-replace.c: Likewise. * gcc.target/bpf/helper-l4-csum-replace.c: Likewise. * gcc.target/bpf/helper-lwt-push-encap.c: Likewise. * gcc.target/bpf/helper-lwt-seg6-action.c: Likewise. * gcc.target/bpf/helper-lwt-seg6-adjust-srh.c: Likewise. * gcc.target/bpf/helper-lwt-seg6-store-bytes.c: Likewise. * gcc.target/bpf/helper-map-delete-elem.c: Likewise. * gcc.target/bpf/helper-map-lookup-elem.c: Likewise. * gcc.target/bpf/helper-map-peek-elem.c: Likewise. * gcc.target/bpf/helper-map-pop-elem.c: Likewise. * gcc.target/bpf/helper-map-push-elem.c: Likewise. * gcc.target/bpf/helper-map-update-elem.c: Likewise. * gcc.target/bpf/helper-msg-apply-bytes.c: Likewise. * gcc.target/bpf/helper-msg-cork-bytes.c: Likewise. * gcc.target/bpf/helper-msg-pop-data.c: Likewise. * gcc.target/bpf/helper-msg-pull-data.c: Likewise. * gcc.target/bpf/helper-msg-push-data.c: Likewise. * gcc.target/bpf/helper-msg-redirect-hash.c: Likewise. * gcc.target/bpf/helper-msg-redirect-map.c: Likewise. * gcc.target/bpf/helper-override-return.c: Likewise. * gcc.target/bpf/helper-perf-event-output.c: Likewise. * gcc.target/bpf/helper-perf-event-read-value.c: Likewise. * gcc.target/bpf/helper-perf-event-read.c: Likewise. * gcc.target/bpf/helper-perf-prog-read-value.c: Likewise. * gcc.target/bpf/helper-probe-read-str.c: Likewise. * gcc.target/bpf/helper-probe-read.c: Likewise. * gcc.target/bpf/helper-probe-write-user.c: Likewise. * gcc.target/bpf/helper-rc-keydown.c: Likewise. * gcc.target/bpf/helper-rc-pointer-rel.c: Likewise. * gcc.target/bpf/helper-rc-repeat.c: Likewise. * gcc.target/bpf/helper-redirect-map.c: Likewise. * gcc.target/bpf/helper-set-hash-invalid.c: Likewise. * gcc.target/bpf/helper-set-hash.c: Likewise. * gcc.target/bpf/helper-setsockopt.c: Likewise. * gcc.target/bpf/helper-sk-fullsock.c: Likewise. * gcc.target/bpf/helper-sk-lookup-tcp.c: Likewise. * gcc.target/bpf/helper-sk-lookup-upd.c: Likewise. * gcc.target/bpf/helper-sk-redirect-hash.c: Likewise. * gcc.target/bpf/helper-sk-redirect-map.c: Likewise. * gcc.target/bpf/helper-sk-release.c: Likewise. * gcc.target/bpf/helper-sk-select-reuseport.c: Likewise. * gcc.target/bpf/helper-sk-storage-delete.c: Likewise. * gcc.target/bpf/helper-sk-storage-get.c: Likewise. * gcc.target/bpf/helper-skb-adjust-room.c: Likewise. * gcc.target/bpf/helper-skb-cgroup-id.c: Likewise. * gcc.target/bpf/helper-skb-change-head.c: Likewise. * gcc.target/bpf/helper-skb-change-proto.c: Likewise. * gcc.target/bpf/helper-skb-change-tail.c: Likewise. * gcc.target/bpf/helper-skb-change-type.c: Likewise. * gcc.target/bpf/helper-skb-ecn-set-ce.c: Likewise. * gcc.target/bpf/helper-skb-get-tunnel-key.c: Likewise. * gcc.target/bpf/helper-skb-get-tunnel-opt.c: Likewise. * gcc.target/bpf/helper-skb-get-xfrm-state.c: Likewise. * gcc.target/bpf/helper-skb-load-bytes-relative.c: Likewise. * gcc.target/bpf/helper-skb-load-bytes.c: Likewise. * gcc.target/bpf/helper-skb-pull-data.c: Likewise. * gcc.target/bpf/helper-skb-set-tunnel-key.c: Likewise. * gcc.target/bpf/helper-skb-set-tunnel-opt.c: Likewise. * gcc.target/bpf/helper-skb-store-bytes.c: Likewise. * gcc.target/bpf/helper-skb-under-cgroup.c: Likewise. * gcc.target/bpf/helper-skb-vlan-pop.c: Likewise. * gcc.target/bpf/helper-skb-vlan-push.c: Likewise. * gcc.target/bpf/helper-skc-lookup-tcp.c: Likewise. * gcc.target/bpf/helper-sock-hash-update.c: Likewise. * gcc.target/bpf/helper-sock-map-update.c: Likewise. * gcc.target/bpf/helper-sock-ops-cb-flags-set.c: Likewise. * gcc.target/bpf/helper-spin-lock.c: Likewise. * gcc.target/bpf/helper-spin-unlock.c: Likewise. * gcc.target/bpf/helper-strtol.c: Likewise. * gcc.target/bpf/helper-strtoul.c: Likewise. * gcc.target/bpf/helper-sysctl-get-current-value.c: Likewise. * gcc.target/bpf/helper-sysctl-get-name.c: Likewise. * gcc.target/bpf/helper-sysctl-get-new-value.c: Likewise. * gcc.target/bpf/helper-sysctl-set-new-value.c: Likewise. * gcc.target/bpf/helper-tail-call.c: Likewise. * gcc.target/bpf/helper-tcp-check-syncookie.c: Likewise. * gcc.target/bpf/helper-tcp-sock.c: Likewise. * gcc.target/bpf/helper-trace-printk.c: Likewise. * gcc.target/bpf/helper-xdp-adjust-head.c: Likewise. * gcc.target/bpf/helper-xdp-adjust-meta.c: Likewise. * gcc.target/bpf/helper-xdp-adjust-tail.c: Likewise. * gcc.target/bpf/skb-ancestor-cgroup-id.c: Likewise.
2020-08-06tree-optimization/96491 - avoid store commoning across abnormal edgesRichard Biener2-1/+31
This avoids store commoning across abnormal edges since that easily can disrupt abnormal coalescing because it might create overlapping lifetime of variables. 2020-08-06 Richard Biener <rguenther@suse.de> PR tree-optimization/96491 * tree-ssa-sink.c (sink_common_stores_to_bb): Avoid sinking across abnormal edges. * gcc.dg/torture/pr96491.c: New testcase.
2020-08-06tree-optimization/96483 - fix ICE in PRE with POLY_INT_CSTRichard Biener1-0/+1
This adds a missing case for PRE expression re-materialization. 2020-08-06 Richard Biener <rguenther@suse.de> PR tree-optimization/96483 * tree-ssa-pre.c (create_component_ref_by_pieces_1): Handle POLY_INT_CST.
2020-08-06Remove std::map use from graphiteRichard Biener1-19/+11
This replaces the use of std::map with hash_map for mapping ISL ids to SSA names. 2020-08-06 Richard Biener <rguenther@suse.de> * graphite-isl-ast-to-gimple.c (ivs_params): Use hash_map instead of std::map. (ivs_params_clear): Adjust. (gcc_expression_from_isl_ast_expr_id): Likewise. (graphite_create_new_loop): Likewise. (add_parameters_to_ivs_params): Likewise.
2020-08-06x86_64: Integer min/max improvements.Roger Sayle5-19/+146
This patch tweaks the way that min and max are expanded, so that the semantics of these operations are visible to the early RTL optimization passes, until split into explicit comparison and conditional move instructions. The good news is that i386.md already contains all of the required logic (many thanks to Richard Biener and Uros Bizjak), but this is currently only enabled to scalar-to-vector (STV) synthesis of min/max instructions. This change enables this functionality for all TARGET_CMOVE architectures for SImode, HImode and DImode. 2020-08-06 Roger Sayle <roger@nextmovesoftware.com> Uroš Bizjak <ubizjak@gmail.com> gcc/ChangeLog * config/i386/i386.md (MAXMIN_IMODE): No longer needed. (<maxmin><mode>3): Support SWI248 and general_operand for second operand, when TARGET_CMOVE. (<maxmin><mode>3_1 splitter): Optimize comparisons against 0, 1 and -1 to use "test" instead of "cmp". (*<maxmin>di3_doubleword): Likewise, allow general_operand and enable on TARGET_CMOVE. (peephole2): Convert clearing a register after a flag setting instruction into an xor followed by the original flag setter. gcc/testsuite/ChangeLog * gcc.target/i386/minmax-8.c: New test. * gcc.target/i386/minmax-9.c: New test. * gcc.target/i386/minmax-10.c: New test. * gcc.target/i386/minmax-11.c: New test.
2020-08-06ipa-fnsummary: Include <vector> the proper wayGerald Pfeifer1-1/+1
This fixes a bootstrap error with clang 10 that would complain /usr/include/c++/v1/typeinfo:346:5: error: no member named 'fancy_abort' in namespace 'std::__1'; did you mean simply 'fancy_abort'? It mirrors how this is handled in gcov.c and indirectly includes <vector> via system.h. gcc/ChangeLog: * ipa-fnsummary.c (INCLUDE_VECTOR): Define. Remove direct inclusion of <vector>.
2020-08-06vect/rs6000: Support vector with length cost modelingKewen Lin5-15/+127
This patch is to add the cost modeling for vector with length, it mainly follows what we generate for vector with length in functions vect_set_loop_controls_directly and vect_gen_len at the worst case. For Power, the length is expected to be in bits 0-7 (high bits), we have to model the cost of shifting bits, which is implemented in adjust_vect_cost_per_loop. Bootstrapped/regtested on powerpc64le-linux-gnu (P9) with explicit param vect-partial-vector-usage=1. gcc/ChangeLog: * config/rs6000/rs6000.c (rs6000_adjust_vect_cost_per_loop): New function. (rs6000_finish_cost): Call rs6000_adjust_vect_cost_per_loop. * tree-vect-loop.c (vect_estimate_min_profitable_iters): Add cost modeling for vector with length. (vect_rgroup_iv_might_wrap_p): New function, factored out from... * tree-vect-loop-manip.c (vect_set_loop_controls_directly): ...this. Update function comment. * tree-vect-stmts.c (vect_gen_len): Update function comment. * tree-vectorizer.h (vect_rgroup_iv_might_wrap_p): New declare.
2020-08-06vect: Skip epilogue loops for dbgcnt check [PR96451]Kewen Lin1-1/+2
As the PR shows, commit r11-2453 exposed one issue that vectorizer wants to vectorize the epilogue loop and leaves the if-cvt body there, but later dbgcnt check disables it, the left scalar mask_store statement causes ICE. As Richard pointed out in that PR, the dbgcnt is to count original scalar loops, so this fix is to make it skip the epilogue loops. gcc/ChangeLog: * tree-vectorizer.c (try_vectorize_loop_1): Skip the epilogue loops for dbgcnt check.
2020-08-06Daily bump.GCC Administrator5-1/+291
2020-08-05c++: cxx_eval_vec_init after zero-initialization [PR96282]Patrick Palka4-1/+59
In the first testcase below, expand_aggr_init_1 sets up t's default constructor such that the ctor first zero-initializes the entire base b, followed by calling b's default constructor, the latter of which just default-initializes the array member b::m via a VEC_INIT_EXPR. So upon constexpr evaluation of this latter VEC_INIT_EXPR, ctx->ctor is nonempty due to the prior zero-initialization, and we proceed in cxx_eval_vec_init to append new constructor_elts to the end of ctx->ctor without first checking if a matching constructor_elt already exists. This leads to ctx->ctor having two matching constructor_elts for each index. This patch fixes this issue by truncating a zero-initialized array CONSTRUCTOR in cxx_eval_vec_init_1 before we begin appending array elements to it. We propagate its zeroed out state during evaluation by clearing CONSTRUCTOR_NO_CLEARING on each new appended aggregate element. gcc/cp/ChangeLog: PR c++/96282 * constexpr.c (cxx_eval_vec_init_1): Truncate ctx->ctor and then clear CONSTRUCTOR_NO_CLEARING on each appended element initializer if we're initializing a previously zero-initialized array object. gcc/testsuite/ChangeLog: PR c++/96282 * g++.dg/cpp0x/constexpr-array26.C: New test. * g++.dg/cpp0x/constexpr-array27.C: New test. * g++.dg/cpp2a/constexpr-init18.C: New test. Co-authored-by: Jason Merrill <jason@redhat.com>
2020-08-05Added test case to make sure that legal cases still pass.Thomas Koenig1-0/+56
gcc/testsuite/ChangeLog: PR fortran/96469 * gfortran.dg/do_check_14.f90: New test.