aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-09-16vec: don't select partial vectors when unnecessaryAndrea Corallo8-58/+80
gcc/ChangeLog 2020-09-09 Andrea Corallo <andrea.corallo@arm.com> * tree-vect-loop.c (vect_need_peeling_or_partial_vectors_p): New function. (vect_analyze_loop_2): Make use of it not to select partial vectors if no peel is required. (determine_peel_for_niter): Move out some logic into 'vect_need_peeling_or_partial_vectors_p'. gcc/testsuite/ChangeLog 2020-09-09 Andrea Corallo <andrea.corallo@arm.com> * gcc.target/aarch64/sve/cost_model_10.c: New test. * gcc.target/aarch64/sve/clastb_8.c: Update test for new vectorization strategy. * gcc.target/aarch64/sve/cost_model_5.c: Likewise. * gcc.target/aarch64/sve/struct_vect_14.c: Likewise. * gcc.target/aarch64/sve/struct_vect_15.c: Likewise. * gcc.target/aarch64/sve/struct_vect_16.c: Likewise. * gcc.target/aarch64/sve/struct_vect_17.c: Likewise.
2020-09-16rtl_data: Add sp_is_clobbered_by_asmH.J. Lu4-7/+39
Add sp_is_clobbered_by_asm to rtl_data to inform backends that the stack pointer is clobbered by asm statement. gcc/ PR target/97032 * cfgexpand.c (asm_clobber_reg_kind): Set sp_is_clobbered_by_asm to true if the stack pointer is clobbered by asm statement. * emit-rtl.h (rtl_data): Add sp_is_clobbered_by_asm. * config/i386/i386.c (ix86_get_drap_rtx): Set need_drap to true if the stack pointer is clobbered by asm statement. gcc/testsuite/ PR target/97032 * gcc.target/i386/pr97032.c: New test.
2020-09-16testsuite/97066 - minor change to bypass plusminus-with-convert ruleFeng Xue2-2/+2
The following testcases will be simplified by the new rule (T)(A) +- (T)(B) -> (T)(A +- B), so could not keep code pattern expected by test-check. Adjust test code to suppress simplification. 2020-09-16 Feng Xue <fxue@os.amperecomputing.com> gcc/testsuite/ PR testsuite/97066 * gcc.dg/ifcvt-3.c: Modified to suppress simplification. * gcc.dg/tree-ssa/20030807-10.c: Likewise.
2020-09-16IBM Z: Fix *vec_tf_to_v1tf constraintsIlya Leoshkevich1-1/+1
Certain alternatives of *vec_tf_to_v1tf use "v" constraint for its TFmode source operand. Therefore it is assigned to VEC_REGS class, and when it is reloaded using *movtf_64, whose relevant alternatives need FP_REGS, LRA loops and ICE happens. The reason is that register class mismatch causes LRA to emit another reload, which triggers this issue again. Fix by using "f" constraint, which is more appropriate for FP register pairs anyway. gcc/ChangeLog: 2020-09-02 Ilya Leoshkevich <iii@linux.ibm.com> * config/s390/vector.md(*vec_tf_to_v1tf): Use "f" instead of "v" for the source operand.
2020-09-16C-SKY: Refine target name for elf target testJojo R1-1/+1
gcc/testsuite/ChangeLog: * lib/target-supports.exp (check_profiling_available): Refine name of elf target.
2020-09-16C-SKY: Set use_gcc_stdint=wrap for elf targetJojo R1-0/+1
gcc/ChangeLog: * config.gcc (C-SKY): Set use_gcc_stdint=wrap for elf target.
2020-09-16remove STMT_VINFO_NUM_SLP_USESRichard Biener5-67/+41
This removes STMT_VINFO_NUM_SLP_USES by pushing the setting of the shared stmt_vec_info vector type to where we actually need it which is alignment analysis and vectorizable_* analysis (where we could eventually elide it for non-load/store operations). In particular "uses" in the cache and in disqualified SLP subgraphs should no longer provide conflicting vector types this way. 2020-09-16 Richard Biener <rguenther@suse.de> * tree-vectorizer.h (_stmt_vec_info::num_slp_uses): Remove. (STMT_VINFO_NUM_SLP_USES): Likewise. (vect_free_slp_instance): Adjust. (vect_update_shared_vectype): Declare. * tree-vectorizer.c (vec_info::~vec_info): Adjust. * tree-vect-loop.c (vect_analyze_loop_2): Likewise. (vectorizable_live_operation): Use vector type from SLP_TREE_REPRESENTATIVE. (vect_transform_loop): Adjust. * tree-vect-data-refs.c (vect_slp_analyze_node_alignment): Set the shared vector type. * tree-vect-slp.c (vect_free_slp_tree): Remove final_p parameter, remove STMT_VINFO_NUM_SLP_USES updating. (vect_free_slp_instance): Adjust. (vect_create_new_slp_node): Remove STMT_VINFO_NUM_SLP_USES updating. (vect_update_shared_vectype): Always compare with the present vector type, update if NULL. (vect_build_slp_tree_1): Do not update the shared vector type here. (vect_build_slp_tree_2): Adjust. (slp_copy_subtree): Likewise. (vect_attempt_slp_rearrange_stmts): Likewise. (vect_analyze_slp_instance): Likewise. (vect_analyze_slp): Likewise. (vect_slp_analyze_node_operations_1): Update the shared vector type. (vect_slp_analyze_operations): Adjust. (vect_slp_analyze_bb_1): Likewise.
2020-09-16C-SKY: Support multilib for mfloat-abi=.Jojo R2-9/+12
gcc/ChangeLog: * config/csky/t-csky-linux (CSKY_MULTILIB_OSDIRNAMES): Use mfloat-abi. (MULTILIB_OPTIONS): Likewise. * config/csky/t-csky-elf (MULTILIB_OPTIONS): Likewise. (MULTILIB_EXCEPTIONS): Likewise.
2020-09-16arm: Avoid unused parameter warningJakub Jelinek1-2/+2
2020-09-16 Jakub Jelinek <jakub@redhat.com> * config/arm/arm.c (arm_option_restore): Comment out opts argument name to avoid unused parameter warnings.
2020-09-16options, lto: Optimize streaming of optimization nodesJakub Jelinek1-7/+10
When working on the previous patch, I've noticed that all cl_optimization fields appart from strings are streamed with bp_pack_value (..., 64); so we waste quite a lot of space, given that many of the options are just booleans or char options and there are 450-ish of them. Fixed by streaming the number of bits the corresponding fields have. While for char fields we have also range information, except for 3 it is either -128, 127 or 0, 255, so it didn't seem worth it to bother with using range-ish packing. 2020-09-16 Jakub Jelinek <jakub@redhat.com> * optc-save-gen.awk: In cl_optimization_stream_out use bp_pack_var_len_{int,unsigned} instead of bp_pack_value. In cl_optimization_stream_in use bp_unpack_var_len_{int,unsigned} instead of bp_unpack_value. Formatting fix.
2020-09-16store-merging: Consider also overlapping stores earlier in the by bitpos ↵Jakub Jelinek3-10/+222
sorting [PR97053] As the testcases show, if we have something like: MEM <char[12]> [&b + 8B] = {}; MEM[(short *) &b] = 5; _5 = *x_4(D); MEM <long long unsigned int> [&b + 2B] = _5; MEM[(char *)&b + 16B] = 88; MEM[(int *)&b + 20B] = 1; then in sort_by_bitpos the stores are almost like in the given order, except the first store is after the = _5; store. We can't coalesce the = 5; store with = _5;, because the latter is MEM_REF, while the former INTEGER_CST, and we can't coalesce the = _5 store with the = {} store because the former is MEM_REF, the latter INTEGER_CST. But we happily coalesce the remaining 3 stores, which is wrong, because the = _5; store overlaps those and is in between them in the program order. We already have code to deal with similar cases in check_no_overlap, but we deal only with the following stores in sort_by_bitpos order, not the earlier ones. The following patch checks also the earlier ones. In coalesce_immediate_stores it computes the first one that needs to be checked (all the ones whose bitpos + bitsize is smaller or equal to merged_store->start don't need to be checked and don't need to be checked even for any following attempts because of the sort_by_bitpos sorting) and the end of that (that is the first store in the merged_store). 2020-09-16 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/97053 * gimple-ssa-store-merging.c (check_no_overlap): Add FIRST_ORDER, START, FIRST_EARLIER and LAST_EARLIER arguments. Return false if any stores between FIRST_EARLIER inclusive and LAST_EARLIER exclusive has order in between FIRST_ORDER and LAST_ORDER and overlaps the to be merged store. (imm_store_chain_info::try_coalesce_bswap): Add FIRST_EARLIER argument. Adjust check_no_overlap caller. (imm_store_chain_info::coalesce_immediate_stores): Add first_earlier and last_earlier variables, adjust them during iterations. Adjust check_no_overlap callers, call check_no_overlap even when extending overlapping stores by extra INTEGER_CST stores. * gcc.dg/store_merging_31.c: New test. * gcc.dg/store_merging_32.c: New test.
2020-09-16C-SKY: Fix wrong ld name with option -mfloat-abi=hard.Jojo R1-1/+1
gcc/ChangeLog: * config/csky/csky-linux-elf.h (GLIBC_DYNAMIC_LINKER): Use mfloat-abi.
2020-09-15rs6000: Remove useless insns fed into lvx/stvx [PR97019]Kewen Lin2-54/+176
This patch is to extend the existing function find_alignment_op to check all defintions of base_reg are AND operations with mask -16B to force the alignment. If all are satifised, it passes all AND operations and instructions to function recombine_lvx_pattern and recombine_stvx_pattern, they can remove all useless ANDs further. Bootstrapped/regtested on powerpc64le-linux-gnu P8. gcc/ChangeLog: PR target/97019 * config/rs6000/rs6000-p8swap.c (find_alignment_op): Adjust to support multiple defintions which are all AND operations with the mask -16B. (recombine_lvx_pattern): Adjust to handle multiple AND operations from find_alignment_op. (recombine_stvx_pattern): Likewise. gcc/testsuite/ChangeLog: PR target/97019 * gcc.target/powerpc/pr97019.c: New test.
2020-09-16C-SKY: Support -mfloat-abi=hard.Jojo R6-20/+200
gcc/ChangeLog: * config/csky/csky.md (CSKY_NPARM_FREGS): New. (call_value_internal_vs/d): New. (untyped_call): New. * config/csky/csky.h (TARGET_SINGLE_FPU): New. (TARGET_DOUBLE_FPU): New. (FUNCTION_VARG_REGNO_P): New. (CSKY_VREG_MODE_P): New. (FUNCTION_VARG_MODE_P): New. (CUMULATIVE_ARGS): Add extra regs info. (INIT_CUMULATIVE_ARGS): Use csky_init_cumulative_args. (FUNCTION_ARG_REGNO_P): Use FUNCTION_VARG_REGNO_P. * config/csky/csky-protos.h (csky_init_cumulative_args): Extern. * config/csky/csky.c (csky_cpu_cpp_builtins): Support TARGET_HARD_FLOAT_ABI. (csky_function_arg): Likewise. (csky_num_arg_regs): Likewise. (csky_function_arg_advance): Likewise. (csky_function_value): Likewise. (csky_libcall_value): Likewise. (csky_function_value_regno_p): Likewise. (csky_arg_partial_bytes): Likewise. (csky_setup_incoming_varargs): Likewise. (csky_init_cumulative_args): New. gcc/testsuite/ChangeLog: * gcc.dg/builtin-apply2.c : Skip if CSKY. * gcc.dg/torture/stackalign/builtin-apply-2.c : Likewise.
2020-09-15rs6000: Fix misnamed built-inBill Schmidt1-1/+1
The description in rs6000-builtin.def provides for a builtin named __builtin_altivec_xst_len_r. However, it is hand-defined in altivec_init_builtins as __builtin_xst_len_r, against the usual naming practice. Fix that. 2020-09-15 Bill Schmidt <wschmidt@linux.ibm.com> gcc/ * config/rs6000/rs6000-call.c (altivec_init_builtins): Fix name of __builtin_altivec_xst_len_r.
2020-09-15libgo: additional type/const references in sysinfo.cThan McIntosh1-1/+1
Add a few more explicit references to enumeration constants (RUSAGE_SELF, DT_UNKNOWN) in sysinfo.c to insure that their hosting enums are emitted into DWARF, when using a clang host compiler during the gollvm build. Updates golang/go#41382. Updates golang/go#41404. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/254941
2020-09-16Daily bump.GCC Administrator6-1/+138
2020-09-15analyzer: fix ICE when merging constraints w/o transitivity [PR96650]David Malcolm5-1/+129
PR analyzer/96650 reports an assertion failure when merging the intersection of two sets of constraints, due to the resulting constraints being infeasible. It turns out that the two input sets were each infeasible if transitivity were considered, but -fanalyzer-transitivity was off. However for this case, the merging code was "discovering" the transitive infeasibility of the intersection of the constraints even when -fanalyzer-transitivity is off, triggering an assertion failure. I attempted various fixes for this, but each of them would have introduced O(N^2) logic into the constraint-handling code into the -fno-analyzer-transitivity case (with N == the number of constraints). This patch fixes the ICE by tweaking the assertion, so that we silently drop such constraints if -fanalyzer-transitivity is off. gcc/analyzer/ChangeLog: PR analyzer/96650 * constraint-manager.cc (merger_fact_visitor::on_fact): Replace assertion that add_constraint succeeded with an assertion that if it fails, -fanalyzer-transitivity is off. gcc/testsuite/ChangeLog: PR analyzer/96650 * gcc.dg/analyzer/pr96650-1-notrans.c: New test. * gcc.dg/analyzer/pr96650-1-trans.c: New test. * gcc.dg/analyzer/pr96650-2-notrans.c: New test. * gcc.dg/analyzer/pr96650-2-trans.c: New test.
2020-09-15rtlanal: fix subreg handling in set_noop_p ()Ilya Leoshkevich1-0/+4
The following s390 rtx is errneously considered a no-op: (set (subreg:DF (reg:TF %f0) 8) (subreg:DF (reg:V1TF %f0) 8)) Here, SET_DEST is a second register in a floating-point register pair, and SET_SRC is the second half of a vector register, so they refer to different bits. Fix by treating subregs of registers in different modes conservatively. gcc/ChangeLog: 2020-09-11 Ilya Leoshkevich <iii@linux.ibm.com> * rtlanal.c (set_noop_p): Treat subregs of registers in different modes conservatively.
2020-09-15make swap argument of vect_get_and_check_slp_defs readonlyRichard Biener1-5/+5
Since some time we're only using this argument to communicate from vect_build_slp_tree_1 to vect_get_and_check_slp_defs. This makes the direction of information flow clear. 2020-09-15 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_get_and_check_slp_defs): Make swap argument by-value and do not change it. (vect_build_slp_tree_2): Adjust, set swap to NULL after last use.
2020-09-15c++: Partially revert: local externs in templates do not get template headNathan Sidwell1-5/+9
Turns out I didn't get OMP reductions correct. To address those I need to do some reorganization, so this patch just reverts the OMP-specific pieces of the local decl changes. gcc/cp/ * pt.c (push_template_decl_real): OMP reductions retain a template header. (tsubst_function_decl): Likewise.
2020-09-15tree-optimization/94234 - add plusminus-with-convert patternFeng Xue2-0/+57
Add a rule (T)(A) +- (T)(B) -> (T)(A +- B), which works only when (A +- B) could be folded to a simple value. By this rule, a plusminus-mult-with-convert expression could be handed over to the rule (A * C) +- (B * C) -> (A +- B). 2020-09-15 Feng Xue <fxue@os.amperecomputing.com> gcc/ PR tree-optimization/94234 * match.pd (T)(A) +- (T)(B) -> (T)(A +- B): New simplification. gcc/testsuite/ PR tree-optimization/94234 * gcc.dg/pr94234-3.c: New test.
2020-09-15gcc.target/i386/pr78904-4a.c: Compile with -mtune=genericH.J. Lu1-1/+1
commit e95395926a84a2406faefe0995295d199d595440 Author: Uros Bizjak <ubizjak@gmail.com> Date: Thu Jun 18 20:12:48 2020 +0200 i386: Fix mode of ZERO_EXTRACT RTXes, remove ext_register_operand predicate. caused FAIL: gcc.target/i386/pr78904-4a.c scan-assembler [ \t]movb[\t ]+%.h, t when compiled with --target_board='unix{-m32\ -march=cascadelake}'. With -mtune=generic: movzwl 4(%esp), %edx movl 8(%esp), %eax movb %dh, t(%eax) ret With -mtune=cascadelake: movzbl 5(%esp), %edx movl 8(%esp), %eax movb %dl, t(%eax) ret Add -mtune=generic for --target_board='unix{-m32\ -march=cascadelake}'. * gcc.target/i386/pr78904-4a.c: Compile with -mtune=generic.
2020-09-15bb-reorder: Fix for ICEs caused by 69ca5f3a9882Segher Boessenkool1-0/+4
After the previous patch we are left with an unreachable BB. This will ICE if either we have -fschedule-fusion, or we do not have peephole2. 2020-09-15 Segher Boessenkool <segher@kernel.crashing.org> PR rtl-optimization/96475 * bb-reorder.c (duplicate_computed_gotos): If we did anything, run cleanup_cfg.
2020-09-15Allow more BB vectorizationRichard Biener3-30/+98
The following allows more BB vectorization by generally building leafs from scalars rather than giving up. Note this is only a first step towards this and as can be seen with the exception for node splitting it is generally hard to get this heuristic sound. I've added variants of the bb-slp-48.c testcase to make sure we still try permuting for example. 2020-09-15 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_build_slp_tree_2): Also consider building an operand from scalars when building it did not fail fatally but avoid messing with the upcall splitting of groups. * gcc.dg/vect/bb-slp-48.c: New testcase. * gcc.dg/vect/bb-slp-7.c: Adjust.
2020-09-15arm: Fix testisms introduced with fix for pr target/95646Andre Vieira2-8/+5
This patch changes the test to use the effective-target machinery disables the error message "ARMv8-M Security Extensions incompatible with selected FPU" when -mfloat-abi=soft. Further changes 'asm' to '__asm__' to avoid failures with '-std=' options. gcc/ChangeLog: 2020-07-06 Andre Vieira <andre.simoesdiasvieira@arm.com> * config/arm/arm.c (arm_options_perform_arch_sanity_checks): Do not check +D32 for CMSE if -mfloat-abi=soft gcc/testsuite/ChangeLog: 2020-07-06 Andre Vieira <andre.simoesdiasvieira@arm.com> * gcc.target/arm/pr95646.c: Fix testism.
2020-09-15Retune mask <->integer cost for non-AVX512 micro-architecture.liuhongt1-44/+44
gcc/ChangeLog: PR target/96744 * config/i386/x86-tune-costs.h (struct processor_costs): Increase mask <-> integer cost for non AVX512 target to avoid spill gpr to mask. Also retune mask <-> integer and mask_load/store for skylake_cost.
2020-09-15i386: Fix up vector mul and div with broadcasts in -masm=intel modeJakub Jelinek2-2/+20
These patterns printed bogus <>s around the {1to16} and similar strings. 2020-09-15 Jakub Jelinek <jakub@redhat.com> PR target/97028 * config/i386/sse.md (mul<mode>3<mask_name>_bcs, <avx512>_div<mode>3<mask_name>_bcst): Use <avx512bcst> instead of <<avx512bcst>>. * gcc.target/i386/avx512f-pr97028.c: Untested fix.
2020-09-15OpenMP/Fortran: Fix (re)mapping of allocatable/pointer arrays [PR96668]Tobias Burnus10-20/+53
gcc/cp/ChangeLog: PR fortran/96668 * cp-gimplify.c (cxx_omp_finish_clause): Add bool openacc arg. * cp-tree.h (cxx_omp_finish_clause): Likewise * semantics.c (handle_omp_for_class_iterator): Update call. gcc/fortran/ChangeLog: PR fortran/96668 * trans.h (gfc_omp_finish_clause): Add bool openacc arg. * trans-openmp.c (gfc_omp_finish_clause): Ditto. Use GOMP_MAP_ALWAYS_POINTER with PSET for pointers. (gfc_trans_omp_clauses): Like the latter and also if the always modifier is used. gcc/ChangeLog: PR fortran/96668 * gimplify.c (gimplify_omp_for): Add 'bool openacc' argument; update omp_finish_clause calls. (gimplify_adjust_omp_clauses_1, gimplify_adjust_omp_clauses, gimplify_expr, gimplify_omp_loop): Update omp_finish_clause and/or gimplify_for calls. * langhooks-def.h (lhd_omp_finish_clause): Add bool openacc arg. * langhooks.c (lhd_omp_finish_clause): Likewise. * langhooks.h (lhd_omp_finish_clause): Likewise. * omp-low.c (scan_sharing_clauses): Keep GOMP_MAP_TO_PSET cause for 'declare target' vars. include/ChangeLog: PR fortran/96668 * gomp-constants.h (GOMP_MAP_ALWAYS_POINTER_P): Define. libgomp/ChangeLog: PR fortran/96668 * libgomp.h (struct target_var_desc): Add has_null_ptr_assoc member. * target.c (gomp_map_vars_existing): Add always_to_flag flag. (gomp_map_vars_existing): Update call to it. (gomp_map_fields_existing): Likewise (gomp_map_vars_internal): Update PSET handling such that if a nullptr is now allocated or if GOMP_MAP_POINTER is used PSET is updated and pointer remapped. (GOMP_target_enter_exit_data): Hanlde GOMP_MAP_ALWAYS_POINTER like GOMP_MAP_POINTER. * testsuite/libgomp.fortran/map-alloc-ptr-1.f90: New test. * testsuite/libgomp.fortran/map-alloc-ptr-2.f90: New test.
2020-09-15tree-optimization/94234 - Fold plusminus_mult expr with multi-use operandsFeng Xue3-11/+60
2020-09-03 Feng Xue <fxue@os.amperecomputing.com> gcc/ PR tree-optimization/94234 * genmatch.c (dt_simplify::gen_1): Emit check on final simplification result when "!" is specified on toplevel output expr. * match.pd ((A * C) +- (B * C) -> (A +- B) * C): Allow folding on expr with multi-use operands if final result is a simple gimple value. gcc/testsuite/ PR tree-optimization/94234 * gcc.dg/pr94234-2.c: New test.
2020-09-15Daily bump.GCC Administrator9-1/+267
2020-09-14doc: fix spelling of -fprofile-reproducibilitySergei Trofimovich1-4/+5
gcc/ChangeLog: * doc/invoke.texi: fix '-fprofile-reproducibility' option spelling in manual.
2020-09-14c++: Use VAR_OR_FUNCTION_DECL_P.Marek Polacek1-2/+1
gcc/cp/ChangeLog: * pt.c (push_template_decl_real): Use VAR_OR_FUNCTION_DECL_P.
2020-09-14bpf: use the expected instruction for NOPsJose E. Marchesi2-1/+20
The BPF ISA doesn't have a no-operation instruction, but in practice the Linux kernel verifier performs some optimizations that rely on these instructions to be encoded in a particular way. As it turns out, we were using the "wrong" instruction in GCC. This patch makes GCC to generate the expected instruction for NOP (a `ja 0') and also adds a test to make sure this is the case. Tested in bpf-unknown-none targets. 2020-09-14 Jose E. Marchesi <jose.marchesi@oracle.com> gcc/ * config/bpf/bpf.md ("nop"): Re-define as `ja 0'. gcc/testsuite/ * gcc.target/bpf/nop-1.c: New test.
2020-09-14Darwin, X86, testsuite: Fix pr87767 tests for Darwin.Iain Sandoe8-1/+8
The tests assume non-PIC for m32 (which means that they fail on default PIC targets, like Darwin). There is also a missing space before the closing '}' on one of the dg-require-effective-target which means that test fails on machines without avx512f. gcc/testsuite/ChangeLog: * gcc.target/i386/avx512f-broadcast-pr87767-1.c: Make the test run as non-dynamic for m32 Darwin. * gcc.target/i386/avx512f-broadcast-pr87767-3.c: Likewise. * gcc.target/i386/avx512f-broadcast-pr87767-5.c: Likewise. * gcc.target/i386/avx512f-broadcast-pr87767-7.c: Likewise. * gcc.target/i386/avx512vl-broadcast-pr87767-1.c: Likewise. * gcc.target/i386/avx512vl-broadcast-pr87767-3.c: Likewise. * gcc.target/i386/avx512vl-broadcast-pr87767-5.c: Likewise. * gcc.target/i386/avx512f-broadcast-pr87767-6.c: Adjust dg-requires clause.
2020-09-14c++: local externs in templates do not get template headNathan Sidwell1-20/+27
Now we consistently mark local externs with DECL_LOCAL_DECL_P, we can teach the template machinery not to give them a TEMPLATE_DECL head, and the instantiation machinery treat them as the local specialiations they are. (openmp UDRs also fall into this category, and are dealt with similarly.) gcc/cp/ * pt.c (push_template_decl_real): Don't attach a template head to local externs. (tsubst_function_decl): Add support for headless local extern decls. (tsubst_decl): Add support for headless local extern decls.
2020-09-14analyzer: add -param=analyzer-max-constraints=David Malcolm2-0/+7
On attempting to run the full test suite with -fanalyzer via make check RUNTESTFLAGS="-v -v --target_board=unix/-fanalyzer" I saw it get stuck on: gcc.c-torture/compile/20001226-1.c It turns out this was on a debug build, rather than a release build; but a release build with -fanalyzer took: real 1m33.689s user 1m30.239s sys 0m2.727s as compared to: real 0m2.361s user 0m2.107s sys 0m0.214s without -fanalyzer. This torture test performs 64 * 64 uniqely-coded comparisons between elements of a pair of arrays until it finds an element that's different, leading to an accumulation of 4096 constraints along the path where no difference is found. "perf" shows most of the time is spent in canonicalizing and copying constraint_manager instances, presumably as it copies and merges states with increasingly more complex sets of constraints as it analyzes further along the "no differences yet" path. This patch crudely works around this by adding a -param=analyzer-max-constraints= limit, defaulting to 20, above which constraints will be silently dropped. With this -fanalyzer takes: real 0m6.935s user 0m6.413s sys 0m0.396s on the above case. gcc/analyzer/ChangeLog: * analyzer.opt (-param=analyzer-max-constraints=): New param. * constraint-manager.cc (constraint_manager::add_constraint_internal): Silently reject attempts to add constraints when the above limit is reached.
2020-09-14analyzer: fix constraint explosion on many-cased switch [PR96653]David Malcolm2-33/+1105
PR analyzer/96653 reports a CPU-time and memory explosion in -fanalyzer seen in Linux 5.9-rc1:drivers/media/v4l2-core/v4l2-ctrls.c on a switch statement with many cases. The issue is some old code in constraint_manager::get_or_add_equiv_class for ensuring that comparisons between equivalence classes containing constants work correctly. The old code added constraints for every pair of ECs containing constants, leading to O(N^2) constraints (for N constants). Given that get_or_add_equiv_class also involves O(N) comparisons, this led to at least O(N^3) CPU time, and O(N^2) memory consumption when handling the "default" case, where N is the number of other cases in the switch statement. The state rewrite of r11-2694-g808f4dfeb3a95f50f15e71148e5c1067f90a126d added checking for comparisons between constants, making these explicit constraints redundant, but failed to remove the code mentioned above. This patch removes it, fixing the blow-up of constraints in the default case. gcc/analyzer/ChangeLog: PR analyzer/96653 * constraint-manager.cc (constraint_manager::get_or_add_equiv_class): Don't accumulate transitive closure of all constraints on constants. gcc/testsuite/ChangeLog: PR analyzer/96653 * gcc.dg/analyzer/pr96653.c: New test.
2020-09-14analyzer: add regression test for leak false positiveDavid Malcolm1-0/+34
Downstream bug report: https://bugzilla.redhat.com/show_bug.cgi?id=1878600 describes a false positive from -Wanalyzer-file-leak seen with gcc 10.2, but which has been fixed in gcc 11. This patch adds the reproducer as a regression test. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/rhbz1878600.c: New test.
2020-09-14analyzer: fix ICE on setjmp with non-pointer-type [PR97029]David Malcolm3-1/+12
gcc/analyzer/ChangeLog: PR analyzer/97029 * analyzer.cc (is_setjmp_call_p): Require the initial arg to be a pointer. * region-model.cc (region_model::deref_rvalue): Assert that the svalue is of pointer type. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/pr97029.c: New test.
2020-09-14Fix dangling references in thunks at -O0Eric Botcazou6-6/+52
When a thunk cannot be emitted in assembly directly, expand_thunk generates regular GIMPLE code but unconditionally forces a tail call to the target of the thunk. That's theoretically OK because the thunk essentially forwards its parameters to the target, but in practice the RTL expander can spill parameters passed by reference on the stack in assign_parm_setup_reg. gcc/ChangeLog: * cgraphunit.c (cgraph_node::expand_thunk): Make sure to set cfun->tail_call_marked when forcing a tail call. * function.c (assign_parm_setup_reg): Always use a register to load a parameter passed by reference if cfun->tail_call_marked. gcc/testsuite/ChangeLog: * gnat.dg/thunk1.adb: New test. * gnat.dg/thunk1_pkg1.ads: New helper. * gnat.dg/thunk1_pkg2.ads: Likewise. * gnat.dg/thunk1_pkg2.adb: Likewise.
2020-09-14Rename mffgpr/mftgpr insn types and remove Power6 references.Pat Haugen7-71/+37
The following is mostly a mechanical change to rename the mffgpr/mftgpr insn types to mtvsr/mfvsr to be more clear. It also removes Power6 references to those insn types since we no longer generate those instructions. 2020-09-14 Pat Haugen <pthaugen@linux.ibm.com> gcc/ * config/rs6000/power10.md (power10-mffgpr, power10-mftgpr): Rename to power10-mtvsr/power10-mfvsr. * config/rs6000/power6.md (X2F_power6, power6-mftgpr, power6-mffgpr): Remove. * config/rs6000/power8.md (power8-mffgpr, power8-mftgpr): Rename to power8-mtvsr/power8-mfvsr. * config/rs6000/power9.md (power9-mffgpr, power9-mftgpr): Rename to power9-mtvsr/power9-mfvsr. * config/rs6000/rs6000.c (rs6000_adjust_cost): Remove Power6 TYPE_MFFGPR cases. * config/rs6000/rs6000.md (mffgpr, mftgpr, zero_extendsi<mode>2, extendsi<mode>2, @signbit<mode>2_dm, lfiwax, lfiwzx, *movsi_internal1, movsi_from_sf, *movdi_from_sf_zero_ext, *mov<mode>_internal, movsd_hardfloat, movsf_from_si, *mov<mode>_hardfloat64, p8_mtvsrwz, p8_mtvsrd_df, p8_mtvsrd_sf, p8_mfvsrd_3_<mode>, *movdi_internal64, unpack<mode>_dm): Rename mffgpr/mftgpr to mtvsr/mfvsr. * config/rs6000/vsx.md (vsx_mov<mode>_64bit, vsx_extract_<mode>, vsx_extract_si, *vsx_extract_<mode>_p8): Likewise.
2020-09-14arm: Fix up gcc.target/arm/lto/pr96939_* FAILJakub Jelinek2-30/+3
The following patch on top of the https://gcc.gnu.org/pipermail/gcc-patches/2020-September/553801.html patch fixes the gcc.target/arm/lto/pr96939_* test in certain ARM configurations. As said in the above mentioned patch, the generic code takes care of saving/restoring TargetVariables or Target Save options, so this just arranges for the generic code to save those instead of needing the arm backend to do it manually. 2020-09-14 Jakub Jelinek <jakub@redhat.com> * config/arm/arm.opt (x_arm_arch_string, x_arm_cpu_string, x_arm_tune_string): Remove TargetSave entries. (march=, mcpu=, mtune=): Add Save keyword. * config/arm/arm.c (arm_option_save): Remove. (TARGET_OPTION_SAVE): Don't redefine. (arm_option_restore): Don't restore x_arm_*_string here.
2020-09-14libgccjit: Regenerate documentation for new entry point.Andrea Corallo1-516/+564
Fix missing doc regeneration that should have been done by 4ecc0061c4 "libgccjit: Add new gcc_jit_global_set_initializer entry point" <https://gcc.gnu.org/onlinedocs/jit/internals/index.html#submitting-patches>. gcc/jit/ChangeLog 2020-09-14 Andrea Corallo <andrea.corallo@arm.com> * docs/_build/texinfo/libgccjit.texi: Regenerate.
2020-09-14options: Save and restore opts_set for Optimization and Target optionsJakub Jelinek31-157/+583
> Seems a latent issue. > Neither cl_optimization_{save,restore} nor cl_target_option_{save,restore} > (nor any of the target hooks they call) saves or restores any opts_set > values, so I think opts_set can be trusted only during option processing (if > at all), but not later. > So, short term a fix would be IMHO just stop using opts_set altogether in > arm_configure_build_target, it doesn't make much sense to me, it should test > if those strings are non-NULL instead, or at least do that when it is > invoked from arm_option_restore (e.g. could be done by calling it with > opts instead of &global_options_set ). > Longer term, the question is if cl_optimization_{save,restore} and > cl_target_option_{save,restore} shouldn't be changed not to only > save/restore the options, but also save the opts_set flags. > It could be done e.g. by adding a bool array or set of bool members > to struct cl_optimization and struct cl_target_option , or even more compact > by using bitmasks, pack each 64 adjacent option flags into a UHWI element > of an array. So, I've tried under debugger how it behaves and seems global_options_set is really an or of whether an option has been ever seen as explicit, either on the command line or in any of the option pragmas or optimize/target attributes seen so far, so it isn't something that can be relied on. The following patch implements the saving/restoring of the opts_set bits (though only for the options/variables saved by the generic options-save.c code, for the target specific stuff that isn't handled by the generic code the opts_set argument is now passed to the hook and the backends can choose e.g. to use a TargetSave variable to save the flags either individually or together in some bitmask (or ignore it if they never need opts_set for the options). This patch itself doesn't fix the testcase failing on arm, but a follow up patch will. 2020-09-14 Jakub Jelinek <jakub@redhat.com> gcc/ * opt-read.awk: Also initialize extra_target_var_types array. * opth-gen.awk: Emit explicit_mask arrays to struct cl_optimization and cl_target_option. Adjust cl_optimization_save, cl_optimization_restore, cl_target_option_save and cl_target_option_restore declarations. * optc-save-gen.awk: Add opts_set argument to cl_optimization_save, cl_optimization_restore, cl_target_option_save and cl_target_option_restore functions and save or restore opts_set next to the opts values into or from explicit_mask arrays. In cl_target_option_eq and cl_optimization_option_eq compare explicit_mask arrays, in cl_target_option_hash and cl_optimization_hash hash them and in cl_target_option_stream_out, cl_target_option_stream_in, cl_optimization_stream_out and cl_optimization_stream_in stream them. * tree.h (build_optimization_node, build_target_option_node): Add opts_set argument. * tree.c (build_optimization_node): Add opts_set argument, pass it to cl_optimization_save. (build_target_option_node): Add opts_set argument, pass it to cl_target_option_save. * function.c (invoke_set_current_function_hook): Adjust cl_optimization_restore caller. * ipa-inline-transform.c (inline_call): Adjust cl_optimization_restore and build_optimization_node callers. * target.def (TARGET_OPTION_SAVE, TARGET_OPTION_RESTORE): Add opts_set argument. * target-globals.c (save_target_globals_default_opts): Adjust cl_optimization_restore callers. * toplev.c (process_options): Adjust build_optimization_node and cl_optimization_restore callers. (target_reinit): Adjust cl_optimization_restore caller. * tree-streamer-in.c (lto_input_ts_function_decl_tree_pointers): Adjust build_optimization_node and cl_optimization_restore callers. * doc/tm.texi: Updated. * config/aarch64/aarch64.c (aarch64_override_options): Adjust build_target_option_node caller. (aarch64_option_save, aarch64_option_restore): Add opts_set argument. (aarch64_set_current_function): Adjust cl_target_option_restore caller. (aarch64_option_valid_attribute_p): Adjust cl_target_option_save, cl_target_option_restore, cl_optimization_restore, build_optimization_node and build_target_option_node callers. * config/aarch64/aarch64-c.c (aarch64_pragma_target_parse): Adjust cl_target_option_restore and build_target_option_node callers. * config/arm/arm.c (arm_option_save, arm_option_restore): Add opts_set argument. (arm_option_override): Adjust cl_target_option_save, build_optimization_node and build_target_option_node callers. (arm_set_current_function): Adjust cl_target_option_restore caller. (arm_valid_target_attribute_tree): Adjust build_target_option_node caller. (add_attribute): Formatting fix. (arm_valid_target_attribute_p): Adjust cl_optimization_restore, cl_target_option_restore, arm_valid_target_attribute_tree and build_optimization_node callers. * config/arm/arm-c.c (arm_pragma_target_parse): Adjust cl_target_option_restore callers. * config/csky/csky.c (csky_option_override): Adjust build_target_option_node and cl_target_option_save callers. * config/gcn/gcn.c (gcn_fixup_accel_lto_options): Adjust build_optimization_node and cl_optimization_restore callers. * config/i386/i386-builtins.c (get_builtin_code_for_version): Adjust cl_target_option_save and cl_target_option_restore callers. * config/i386/i386-c.c (ix86_pragma_target_parse): Adjust build_target_option_node and cl_target_option_restore callers. * config/i386/i386-options.c (ix86_function_specific_save, ix86_function_specific_restore): Add opts_set arguments. (ix86_valid_target_attribute_tree): Adjust build_target_option_node caller. (ix86_valid_target_attribute_p): Adjust build_optimization_node, cl_optimization_restore, cl_target_option_restore, ix86_valid_target_attribute_tree and build_optimization_node callers. (ix86_option_override_internal): Adjust build_target_option_node caller. (ix86_reset_previous_fndecl, ix86_set_current_function): Adjust cl_target_option_restore callers. * config/i386/i386-options.h (ix86_function_specific_save, ix86_function_specific_restore): Add opts_set argument. * config/nios2/nios2.c (nios2_option_override): Adjust build_target_option_node caller. (nios2_option_save, nios2_option_restore): Add opts_set argument. (nios2_valid_target_attribute_tree): Adjust build_target_option_node caller. (nios2_valid_target_attribute_p): Adjust build_optimization_node, cl_optimization_restore, cl_target_option_save and cl_target_option_restore callers. (nios2_set_current_function, nios2_pragma_target_parse): Adjust cl_target_option_restore callers. * config/pru/pru.c (pru_option_override): Adjust build_target_option_node caller. (pru_set_current_function): Adjust cl_target_option_restore callers. * config/rs6000/rs6000.c (rs6000_debug_reg_global): Adjust cl_target_option_save caller. (rs6000_option_override_internal): Adjust build_target_option_node caller. (rs6000_valid_attribute_p): Adjust build_optimization_node, cl_optimization_restore, cl_target_option_save, cl_target_option_restore and build_target_option_node callers. (rs6000_pragma_target_parse): Adjust cl_target_option_restore and build_target_option_node callers. (rs6000_activate_target_options): Adjust cl_target_option_restore callers. (rs6000_function_specific_save, rs6000_function_specific_restore): Add opts_set argument. * config/s390/s390.c (s390_function_specific_restore): Likewise. (s390_option_override_internal): Adjust s390_function_specific_restore caller. (s390_option_override, s390_valid_target_attribute_tree): Adjust build_target_option_node caller. (s390_valid_target_attribute_p): Adjust build_optimization_node, cl_optimization_restore and cl_target_option_restore callers. (s390_activate_target_options): Adjust cl_target_option_restore caller. * config/s390/s390-c.c (s390_cpu_cpp_builtins): Adjust cl_target_option_save caller. (s390_pragma_target_parse): Adjust build_target_option_node and cl_target_option_restore callers. gcc/c-family/ * c-attribs.c (handle_optimize_attribute): Adjust cl_optimization_save, cl_optimization_restore and build_optimization_node callers. * c-pragma.c (handle_pragma_optimize): Adjust build_optimization_node caller. (handle_pragma_push_options): Adjust build_optimization_node and build_target_option_node callers. (handle_pragma_pop_options, handle_pragma_reset_options): Adjust cl_optimization_restore callers. gcc/go/ * go-gcc.cc (Gcc_backend::function): Adjust cl_optimization_save, cl_optimization_restore and build_optimization_node callers. gcc/ada/ * gcc-interface/trans.c (gigi): Adjust build_optimization_node caller.
2020-09-14Daily bump.GCC Administrator2-1/+6
2020-09-13Improve costs for DImode shifts of interger constants.John David Anglin1-12/+21
2020-09-13 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * config/pa/pa.c (hppa_rtx_costs) [ASHIFT, ASHIFTRT, LSHIFTRT]: Provide accurate costs for DImode shifts of integer constants.
2020-09-13Daily bump.GCC Administrator5-1/+70
2020-09-12d: Return promoted types in d_type_promotes_to when linkage is not DIain Buclaw4-3/+113
This enables warnings to be shown when a bad type is passed to va_arg inside an extern(C) or extern(C++) function. gcc/d/ChangeLog: PR d/97002 * d-codegen.cc (d_build_call): Set input_location on CALL_EXPR. * d-lang.cc: Include function.h. (d_type_promotes_to): Do default conversions for C and C++ functions. * intrinsics.cc (expand_intrinsic_vaarg): Use build1_loc to build VA_ARG_EXPR. gcc/testsuite/ChangeLog: PR d/97002 * gdc.dg/pr97002.d: New test.
2020-09-12d: Build TYPE_DECLs for non-numeric enum types.Iain Buclaw3-11/+24
This is done so that the DWARF pass will emit a DW_TAG_typedef where the member type of an enum can't be represented in an ENUMERAL_TYPE. gcc/d/ChangeLog: * d-builtins.cc (d_build_d_type_nodes): Call build_ctype() on all basic front-end types. * decl.cc (DeclVisitor::visit (EnumDeclaration *)): Always add decl to current binding level. (build_type_decl): Build TYPE_DECL as a typedef if not for an enum or record type. * types.cc (TypeVisitor::visit (TypeEnum *)): Set underlying type for ENUMERAL_TYPEs. Build TYPE_DECL for non-numeric enums.