aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2021-05-22Steve Kargl <kargl@gcc.gnu.org>Andre Vehreschild3-16/+29
PR fortran/98301 - random_init() is broken Correct implementation of random_init() when -fcoarray=lib is given. gcc/fortran/ChangeLog: PR fortran/98301 * trans-decl.c (gfc_build_builtin_function_decls): Move decl. * trans-intrinsic.c (conv_intrinsic_random_init): Use bool for lib-call of caf_random_init instead of logical (4-byte). * trans.h: Add tree var for random_init. libgfortran/ChangeLog: PR fortran/98301 * caf/libcaf.h (_gfortran_caf_random_init): New function. * caf/single.c (_gfortran_caf_random_init): New function. * gfortran.map: Added fndecl. * intrinsics/random_init.f90: Implement random_init.
2021-05-21Fix rs6000 p10 fusion patterns with old attr type namesAaron Sawdey2-4/+4
Somehow I managed to check in a version of genfusion.pl this afternoon that was not updated to the new insn attr type names. Committing as obvious and to make the code match what was posted and reviewed. gcc/ * config/rs6000/genfusion.pl (gen_addadd): Fix incorrect attr types. * config/rs6000/fusion.md: Regenerate file.
2021-05-22Daily bump.GCC Administrator7-1/+417
2021-05-21combine patterns for add-add fusionAaron Sawdey6-3/+135
This patch adds a function to genfusion.pl to add a couple more patterns so combine can do fusion of pairs of add and vaddudm instructions. gcc/ChangeLog: * config/rs6000/genfusion.pl (gen_addadd): New function. * config/rs6000/fusion.md: Regenerate file. * config/rs6000/rs6000-cpus.def: Add OPTION_MASK_P10_FUSION_2ADD to masks. * config/rs6000/rs6000.c (rs6000_option_override_internal): Handle default value of OPTION_MASK_P10_FUSION_2ADD. * config/rs6000/rs6000.opt: Add -mpower10-fusion-2add. gcc/testsuite/ChangeLog: * gcc.target/powerpc/fusion-p10-addadd.c: New file.
2021-05-21Test cases for p10 fusion patternsAaron Sawdey2-0/+271
This adds some test cases to make sure that the combine patterns for p10 fusion are working. gcc/testsuite/ChangeLog: * gcc.target/powerpc/fusion-p10-ldcmpi.c: New file. * gcc.target/powerpc/fusion-p10-2logical.c: New file.
2021-05-21openmp: Fix up firstprivate+lastprivate clause handling [PR99928]Jakub Jelinek7-13/+140
The C/C++ clause splitting happens very early during construct parsing, but only the FEs later on handle possible instantiations, non-static member handling and array section lowering. In the OpenMP 5.0/5.1 rules, whether firstprivate is added to combined target depends on whether it isn't also mentioned in lastprivate or map clauses, but unfortunately I think such checks are much better done only when the FEs perform all the above mentioned changes. So, this patch arranges for the firstprivate clause to be copied or moved to combined target construct (as before), but sets flags on that clause, which tell the FE *finish_omp_clauses and the gimplifier it has been added only conditionally and let the FEs and gimplifier DTRT for these. 2021-05-21 Jakub Jelinek <jakub@redhat.com> PR middle-end/99928 gcc/ * tree.h (OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET): Define. * gimplify.c (enum gimplify_omp_var_data): Fix up GOVD_MAP_HAS_ATTACHMENTS value, add GOVD_FIRSTPRIVATE_IMPLICIT. (omp_lastprivate_for_combined_outer_constructs): If combined target has GOVD_FIRSTPRIVATE_IMPLICIT set for the decl, change it to GOVD_MAP | GOVD_SEEN. (gimplify_scan_omp_clauses): Set GOVD_FIRSTPRIVATE_IMPLICIT for firstprivate clauses with OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT. (gimplify_adjust_omp_clauses): For firstprivate clauses with OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT either clear that bit and OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET too, or remove it and let it be replaced by implicit map clause. gcc/c-family/ * c-omp.c (c_omp_split_clauses): Set OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT on firstprivate clause copy going to target construct, and for target simd set also OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET bit. gcc/c/ * c-typeck.c (c_finish_omp_clauses): Move firstprivate clauses with OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT to the end of the chain. Don't error if a decl is mentioned both in map clause and in such firstprivate clause unless OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET is also set. gcc/cp/ * semantics.c (finish_omp_clauses): Move firstprivate clauses with OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT to the end of the chain. Don't error if a decl is mentioned both in map clause and in such firstprivate clause unless OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET is also set. gcc/testsuite/ * c-c++-common/gomp/pr99928-3.c: Remove all xfails. * c-c++-common/gomp/pr99928-15.c: New test.
2021-05-21openmp: Fix up handling of implicit lastprivate on outer constructs for ↵Jakub Jelinek4-205/+423
implicit linear and lastprivate IVs [PR99928] This patch fixes the handling of lastprivate propagation to outer combined/composite leaf constructs from implicit linear or lastprivate clauses on simd IVs and adds missing testsuite coverage for explicit and implicit lastprivate on simd IVs. 2021-05-21 Jakub Jelinek <jakub@redhat.com> PR middle-end/99928 * gimplify.c (omp_lastprivate_for_combined_outer_constructs): New function. (gimplify_scan_omp_clauses) <case OMP_CLAUSE_LASTPRIVATE>: Use it. (gimplify_omp_for): Likewise. * c-c++-common/gomp/pr99928-6.c: Remove all xfails. * c-c++-common/gomp/pr99928-13.c: New test. * c-c++-common/gomp/pr99928-14.c: New test.
2021-05-21[OpenACC privatization] Reject 'static', 'external' in blocks [PR90115]Thomas Schwinge5-16/+37
gcc/ PR middle-end/90115 * omp-low.c (oacc_privatization_candidate_p): Reject 'static', 'external' in blocks. gcc/testsuite/ PR middle-end/90115 * c-c++-common/goacc/privatization-1-compute-loop.c: Update. * c-c++-common/goacc/privatization-1-compute.c: Likewise. * c-c++-common/goacc/privatization-1-routine_gang-loop.c: Likewise. * c-c++-common/goacc/privatization-1-routine_gang.c: Likewise. libgomp/ PR middle-end/90115 * testsuite/libgomp.oacc-c-c++-common/static-variable-1.c: Update. * testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Likewise.
2021-05-21[OpenACC privatization] Largely extend diagnostics and corresponding ↵Thomas Schwinge22-35/+833
testsuite coverage [PR90115] gcc/ PR middle-end/90115 * flag-types.h (enum openacc_privatization): New. * params.opt (-param=openacc-privatization): New. * doc/invoke.texi (openacc-privatization): Document it. * omp-general.h (get_openacc_privatization_dump_flags): New function. * omp-low.c (oacc_privatization_candidate_p): Add diagnostics. * omp-offload.c (execute_oacc_device_lower) <IFN_UNIQUE_OACC_PRIVATE>: Re-work diagnostics. * target.def (goacc.adjust_private_decl): Add 'location_t' parameter. * doc/tm.texi: Regenerate. * config/gcn/gcn-protos.h (gcn_goacc_adjust_private_decl): Adjust. * config/gcn/gcn-tree.c (gcn_goacc_adjust_private_decl): Likewise. * config/nvptx/nvptx.c (nvptx_goacc_adjust_private_decl): Likewise. Preserve it for... (nvptx_goacc_expand_var_decl): ... use here. gcc/testsuite/ PR middle-end/90115 * c-c++-common/goacc/privatization-1-compute-loop.c: New file. * c-c++-common/goacc/privatization-1-compute.c: Likewise. * c-c++-common/goacc/privatization-1-routine_gang-loop.c: Likewise. * c-c++-common/goacc/privatization-1-routine_gang.c: Likewise. * gfortran.dg/goacc/privatization-1-compute-loop.f90: Likewise. * gfortran.dg/goacc/privatization-1-compute.f90: Likewise. * gfortran.dg/goacc/privatization-1-routine_gang-loop.f90: Likewise. * gfortran.dg/goacc/privatization-1-routine_gang.f90: Likewise. * c-c++-common/goacc-gomp/nesting-1.c: Update. * c-c++-common/goacc/private-reduction-1.c: Likewise. * gfortran.dg/goacc/private-3.f95: Likewise. libgomp/ PR middle-end/90115 * testsuite/libgomp.oacc-fortran/private-atomic-1-vector.f90: New file. * testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c: Update. * testsuite/libgomp.oacc-c-c++-common/host_data-7.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-3.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-4.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-5.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-3.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-4.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-5.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-6.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-vector-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-vector-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-3.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-4.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-5.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-6.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-7.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-g-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-g-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-gwv-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-v-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-w-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/private-atomic-1-gang.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/private-atomic-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/private-variables.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/routine-4.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/static-variable-1.c: Likewise. * testsuite/libgomp.oacc-fortran/acc_on_device-1-1.f90: Likewise. * testsuite/libgomp.oacc-fortran/acc_on_device-1-2.f: Likewise. * testsuite/libgomp.oacc-fortran/acc_on_device-1-3.f: Likewise. * testsuite/libgomp.oacc-fortran/declare-1.f90: Likewise. * testsuite/libgomp.oacc-fortran/host_data-5.F90: Likewise. * testsuite/libgomp.oacc-fortran/if-1.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-1.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-2.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-3.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-6.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-vector-1.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-vector-2.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-1.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-2.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-3.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-4.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-5.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-6.f90: Likewise. * testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-7.f90: Likewise. * testsuite/libgomp.oacc-fortran/optional-private.f90: Likewise. * testsuite/libgomp.oacc-fortran/parallel-dims.f90: Likewise. * testsuite/libgomp.oacc-fortran/private-atomic-1-gang.f90: Likewise. * testsuite/libgomp.oacc-fortran/private-atomic-1-worker.f90: Likewise. * testsuite/libgomp.oacc-fortran/private-variables.f90: Likewise. * testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Likewise. * testsuite/libgomp.oacc-fortran/routine-7.f90: Likewise.
2021-05-21Add '__OPTIMIZE__' DejaGnu selectorThomas Schwinge3-0/+29
gcc/testsuite/ * lib/target-supports.exp (check_effective_target___OPTIMIZE__): New proc. * gcc.c-torture/compile/ssa-unused-1.c: New file. gcc/ * doc/sourcebuild.texi (Other attributes): Document '__OPTIMIZE__' DejaGnu selector.
2021-05-21[OpenACC privatization] Explain OpenACC privatization candidate selection ↵Thomas Schwinge1-3/+42
[PR90115] gcc/ PR middle-end/90115 * omp-low.c (oacc_privatization_candidate_p): New function. (oacc_privatization_scan_clause_chain) (oacc_privatization_scan_decl_chain): Use it. Also 'gcc_checking_assert' that we're not seeing duplicates.
2021-05-21[OpenACC privatization] Skip processing if no work to be done [PR90115]Thomas Schwinge1-1/+2
gcc/ PR middle-end/90115 * omp-offload.c (execute_oacc_device_lower): Skip processing if no work to be done.
2021-05-21[OpenACC privatization] Explain two different configurations [PR90115]Thomas Schwinge1-0/+20
gcc/ PR middle-end/90115 * omp-offload.c (execute_oacc_device_lower): Explain.
2021-05-21[OpenACC privatization] Don't let unhandled 'IFN_UNIQUE_OACC_PRIVATE' linger ↵Thomas Schwinge2-6/+6
[PR90115] Make sure they're all handled in 'execute_oacc_device_lower'. Why we at all can have 'level == -1' cases is a separate bug to be fixed. gcc/ PR middle-end/90115 * omp-offload.c (execute_oacc_device_lower) <IFN_UNIQUE_OACC_PRIVATE>: Diagnose and handle for 'level == -1' case, too. * internal-fn.c (expand_UNIQUE): Don't expect 'IFN_UNIQUE_OACC_PRIVATE'.
2021-05-21[OpenACC privatization] Don't evaluate OpenMP 'for' clauses [PR90115]Thomas Schwinge1-1/+2
gcc/ PR middle-end/90115 * omp-low.c (lower_omp_for): Don't evaluate OpenMP 'for' clauses.
2021-05-21[OpenACC privatization, nvptx] Tighten some aspects [PR90115]Thomas Schwinge1-5/+6
No functional change. gcc/ PR middle-end/90115 * config/nvptx/nvptx.c (nvptx_goacc_adjust_private_decl) (nvptx_goacc_expand_var_decl): Tighten.
2021-05-21openacc: Add support for gang local storage allocation in shared memory ↵Julian Brown12-15/+511
[PR90115] This patch implements a method to track the "private-ness" of OpenACC variables declared in offload regions in gang-partitioned, worker-partitioned or vector-partitioned modes. Variables declared implicitly in scoped blocks and those declared "private" on enclosing directives (e.g. "acc parallel") are both handled. Variables that are e.g. gang-private can then be adjusted so they reside in GPU shared memory. The reason for doing this is twofold: correct implementation of OpenACC semantics, and optimisation, since shared memory might be faster than the main memory on a GPU. Handling of private variables is intimately tied to the execution model for gangs/workers/vectors implemented by a particular target: for current targets, we use (or on mainline, will soon use) a broadcasting/neutering scheme. That is sufficient for code that e.g. sets a variable in worker-single mode and expects to use the value in worker-partitioned mode. The difficulty (semantics-wise) comes when the user wants to do something like an atomic operation in worker-partitioned mode and expects a worker-single (gang private) variable to be shared across each partitioned worker. Forcing use of shared memory for such variables makes that work properly. In terms of implementation, the parallelism level of a given loop is not fixed until the oaccdevlow pass in the offload compiler, so the patch delays fixing the parallelism level of variables declared on or within such loops until the same point. This is done by adding a new internal UNIQUE function (OACC_PRIVATE) that lists (the address of) each private variable as an argument, and other arguments set so as to be able to determine the correct parallelism level to use for the listed variables. This new internal function fits into the existing scheme for demarcating OpenACC loops, as described in comments in the patch. Two new target hooks are introduced: TARGET_GOACC_ADJUST_PRIVATE_DECL and TARGET_GOACC_EXPAND_VAR_DECL. The first can tweak a variable declaration at oaccdevlow time, and the second at expand time. The first or both of these target hooks can be used by a given offload target, depending on its strategy for implementing private variables. This patch updates the TARGET_GOACC_ADJUST_PRIVATE_DECL target hook in the AMD GCN backend to the current name and prototype. (An earlier version of the hook was already present, but dormant.) gcc/ PR middle-end/90115 * doc/tm.texi.in (TARGET_GOACC_EXPAND_VAR_DECL) (TARGET_GOACC_ADJUST_PRIVATE_DECL): Add documentation hooks. * doc/tm.texi: Regenerate. * expr.c (expand_expr_real_1): Expand decls using the expand_var_decl OpenACC hook if defined. * internal-fn.c (expand_UNIQUE): Handle IFN_UNIQUE_OACC_PRIVATE. * internal-fn.h (IFN_UNIQUE_CODES): Add OACC_PRIVATE. * omp-low.c (omp_context): Add oacc_privatization_candidates field. (lower_oacc_reductions): Add PRIVATE_MARKER parameter. Insert before fork. (lower_oacc_head_tail): Add PRIVATE_MARKER parameter. Modify private marker's gimple call arguments, and pass it to lower_oacc_reductions. (oacc_privatization_scan_clause_chain) (oacc_privatization_scan_decl_chain, lower_oacc_private_marker): New functions. (lower_omp_for, lower_omp_target, lower_omp_1): Use these. * omp-offload.c (convert.h): Include. (oacc_loop_xform_head_tail): Treat private-variable markers like fork/join when transforming head/tail sequences. (struct var_decl_rewrite_info): Add struct. (oacc_rewrite_var_decl, is_sync_builtin_call): New functions. (execute_oacc_device_lower): Support rewriting gang-private variables using target hook, and fix up addr_expr and var_decl nodes afterwards. * target.def (adjust_private_decl, expand_var_decl): New hooks. * config/gcn/gcn-protos.h (gcn_goacc_adjust_gangprivate_decl): Rename to... (gcn_goacc_adjust_private_decl): ...this. * config/gcn/gcn-tree.c (gcn_goacc_adjust_gangprivate_decl): Rename to... (gcn_goacc_adjust_private_decl): ...this. Add LEVEL parameter. * config/gcn/gcn.c (TARGET_GOACC_ADJUST_GANGPRIVATE_DECL): Rename definition using gcn_goacc_adjust_gangprivate_decl... (TARGET_GOACC_ADJUST_PRIVATE_DECL): ...to this, using gcn_goacc_adjust_private_decl. * config/nvptx/nvptx.c (tree-pretty-print.h): Include. (gang_private_shared_size): New global variable. (gang_private_shared_align): Likewise. (gang_private_shared_sym): Likewise. (gang_private_shared_hmap): Likewise. (nvptx_option_override): Initialize these. (nvptx_file_end): Output gang_private_shared_sym. (nvptx_goacc_adjust_private_decl, nvptx_goacc_expand_var_decl): New functions. (nvptx_set_current_function): Clear gang_private_shared_hmap. (TARGET_GOACC_ADJUST_PRIVATE_DECL): Define hook. (TARGET_GOACC_EXPAND_VAR_DECL): Likewise. libgomp/ PR middle-end/90115 * testsuite/libgomp.oacc-c-c++-common/private-atomic-1-gang.c: New test. * testsuite/libgomp.oacc-fortran/private-atomic-1-gang.f90: Likewise. * testsuite/libgomp.oacc-fortran/private-atomic-1-worker.f90: Likewise. Co-Authored-By: Chung-Lin Tang <cltang@codesourcery.com> Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
2021-05-21x86: Remove MAX_BITSIZE_MODE_ANY_INTH.J. Lu1-12/+3
It is only defined for i386 and everyone uses the default: #define MAX_BITSIZE_MODE_ANY_INT (64*BITS_PER_UNIT) Whatever problems we had before, they have been fixed now. * config/i386/i386-modes.def (MAX_BITSIZE_MODE_ANY_INT): Removed.
2021-05-21Elide expand_constructor if move by pieces is preferredH.J. Lu3-0/+61
Elide expand_constructor when the constructor is static storage and not mostly zeros and we can move it by pieces prefer to do so since that's usually more efficient than performing a series of stores from immediates. 2021-05-21 Richard Biener <rguenther@suse.de> H.J. Lu <hjl.tools@gmail.com> gcc/ PR middle-end/90773 * expr.c (expand_constructor): Elide expand_constructor if move by pieces is preferred. gcc/testsuite/ * gcc.target/i386/pr90773-24.c: New test. * gcc.target/i386/pr90773-25.c: Likewise.
2021-05-21aarch64: Add attributes for builtins specified in aarch64-builtins.cKyrylo Tkachov1-25/+31
Besides the builtins in aarch64-simd-builtins.def there are a number of builtins defined in aarch64-builtins.c itself. They could also benefit from the attributes generated by aarch64_get_attributes. However aarch64_get_attributes and its helpers are only set up to handle a aarch64_simd_builtin_datum. This patch changes these functions to instead take a flag and mode value that are extracted from aarch64_simd_builtin_datum.flags and aarch64_simd_builtin_datum.mode anyway. Then the various builtin init functions in aarch64-builtins.c can pass down their own FLAG_* flags that they want to derive attributes from. gcc/ChangeLog: * config/aarch64/aarch64-builtins.c (aarch64_call_properties): Take a flag and mode value as arguments. (aarch64_modifies_global_state_p): Likewise. (aarch64_reads_global_state_p): Likewise. (aarch64_could_trap_p): Likewise. (aarch64_get_attributes): Likewise. (aarch64_init_simd_builtins): Adjust callsite of above. (aarch64_init_fcmla_laneq_builtins): Use aarch64_get_attributes to get function attributes to apply to builtins. (aarch64_init_crc32_builtins): Likewise. (aarch64_init_builtin_rsqrt): Likewise.
2021-05-21Add insn types for fusion pairsAaron Sawdey3-148/+168
This adds new values for insn attr type for p10 fusion. The genfusion.pl script is modified to use them, and fusion.md regenerated to capture the new patterns. There are also some formatting only changes to fusion.md that apparently weren't captured after a previous commit of genfusion.pl. gcc/ * config/rs6000/rs6000.md (define_attr "type"): Add types for fusion. * config/rs6000/genfusion.pl (gen_ld_cmpi_p10): Use new fusion types. (gen_2logical): Use new fusion types. * config/rs6000/fusion.md: Regenerate.
2021-05-21i386: Add comparisons for 4-byte vectors [PR100637]Uros Bizjak6-2/+244
2021-05-21 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/100637 * config/i386/i386-expand.c (ix86_expand_sse_movcc): Handle V4QI and V2HI modes. (ix86_expand_sse_movcc): Ditto. * config/i386/mmx.md (*<sat_plusminus:insn><VI_32:mode>3): New instruction pattern. (*eq<VI_32:mode>3): Ditto. (*gt<VI_32:mode>3): Ditto. (*xop_pcmov_<VI_32:mode>): Ditto. (mmx_pblendvb32): Ditto. (mmx_pblendvb64): Rename from mmx_pblendvb. (vec_cmp<VI_32:mode><VI_32:mode>): New expander. (vec_cmpu<VI_32:mode><VI_32:mode>): Ditto. (vcond<VI_32:mode><VI_32:mode>): Ditto. (vcondu<VI_32:mode><VI_32:mode>): Ditto. (vcond_mask_<VI_32:mode><VI_32:mode>): Ditto. gcc/testsuite/ PR target/100637 * g++.target/i386/pr100637-1b.C: New test. * g++.target/i386/pr100637-1w.C: Ditto. * gcc.target/i386/pr100637-2b.c: Ditto. * gcc.target/i386/pr100637-2w.c: Ditto.
2021-05-21Detect illegal conditions in Raise_xxx_Error nodesPiotr Trojanek1-1/+6
Enforce comment from sinfo.ads about the Condition field in N_Raise_xxx_Error nodes. Only an extra sanity check; the behaviour is not affected. gcc/ada/ * gcc-interface/trans.c (Raise_Error_to_gnu): Add an assertion.
2021-05-21Remove discriminant checks in gigiEric Botcazou2-6/+11
gcc/ada/ * gcc-interface/utils.c (gnat_pushdecl): Fix typo in comment. * gcc-interface/utils2.c (build_simple_component_ref): Build NULL_EXPR if the offset of the field has overflowed. (build_component_ref): Add gigi checking assertion that the reference has been built and replace the discriminant check by a Program_Error.
2021-05-21Consistently generate debug info for elaboration variablesEric Botcazou2-36/+40
This makes sure that debug info is generated for elaboration variables, even if the variables are not generated exclusively for this purpose. gcc/ada/ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Named_Integer>: Do not pass default value in call to create_var_decl. <E_Variable>: Likewise. <E_Record_Subtype>: Both pass true for const_flag and false for const_decl_allowed_p in call to create_var_decl. Small tweaks in the generic record type case. (elaborate_expression): Rename need_debug into need_for_debug and adjust throughout. (elaborate_expression_1): Likewise. Pass Needs_Debug_Info instead of need_for_debug in call to create_var_decl. (elaborate_expression_2): Likewise. * gcc-interface/utils.c (maybe_pad_type): Pass false for const_decl_allowed_p in call to create_var_decl.
2021-05-21Replace ? with ?? in warning messagesGhjuvan Lacambre3-30/+30
The former has been deprecated in favor of the latter. gcc/ada/ * gcc-interface/decl.c (gnat_to_gnu_entity): Replace ? with ??. (gnat_to_gnu_param): Likewise. (gnat_to_gnu_subprog_type): Likewise. (warn_on_field_placement): Likewise. (intrin_arglists_compatible_p): Likewise. * gcc-interface/trans.c (Pragma_to_gnu): Likewise. (gnat_to_gnu): Likewise. (validate_unchecked_conversion): Likewise. * gcc-interface/utils.c (maybe_pad_type): Likewise.
2021-05-21Fix internal error on locally derived bit-packed array typeEric Botcazou3-5/+31
This is a regression present on the mainline, 11 and 10 branches, in the form of an ICE on a locally derived bit-packed array type. gcc/ada/ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Process the implementation type of a packed type implemented specially. gcc/testsuite/ * gnat.dg/derived_type7.adb, gnat.dg/derived_type7.ads: New test.
2021-05-21Always translate Is_Pure flag into pure in C senseEric Botcazou1-25/+19
Gigi has historically translated the Is_Pure flag of the front-end into the "const" attribute of GNU C. That's correct for subprograms of pure Ada units, but not fully exact according to the semantics of the flag. gcc/ada/ * gcc-interface/decl.c (gnat_to_gnu_subprog_type): Always translate the Is_Pure flag into the "pure" attribute of GNU C.
2021-05-21Fix segfault at run time on strict-alignment platformsEric Botcazou1-1/+5
This fixes a regression present on the mainline and 11 branch by restricting the problematic change dealing with bitfields whose nomimal subtype is self-referential to the cases where the size is really lower. gcc/ada/ * gcc-interface/trans.c (Call_to_gnu): Restrict previous change to bitfields whose size is not equal to the type size. (gnat_to_gnu): Likewise.
2021-05-21tree-optimization: Improve spaceship_replacement [PR94589]Jakub Jelinek1-11/+64
On Wed, May 19, 2021 at 01:30:31PM -0400, Jason Merrill via Gcc-patches wrote: > Here, when genericizing lexicographical_compare_three_way, we haven't yet > walked the operands, so (a == a) still sees ADDR_EXPR <a>, but this is after > we've changed the type of a to REFERENCE_TYPE. When we try to fold (a == a) > by constexpr evaluation, the constexpr code doesn't understand trying to > take the address of a reference, and we end up crashing. > > Fixed by avoiding constexpr evaluation in genericize_spaceship, by using > fold_build2 instead of build_new_op on scalar operands. Class operands > should have been expanded during parsing. Unfortunately this slightly changed the IL and spaceship_replacement no longer pattern matches it. Here are 3 improvements that make it match: 1) as mentioned in the comment above spaceship_replacement, for strong_ordering, we are pattern matching something like: x == y ? 0 : x < y ? -1 : 1; and for partial_ordering x == y ? 0 : x < y ? -1 : x > y ? 1 : 2; but given the == comparison done first and the other comparisons only if == was false, we actually don't care if the other comparisons are < vs. <= (or > vs. >=), provided the operands of the comparison are the same; we know == is false when doing those and < vs. <= or > vs. >= have the same behavior for NaNs too 2) when y is an integral constant, we should treat x < 5 equivalently to x <= 4 etc. 3) the code punted if cond2_phi_edge wasn't a EDGE_TRUE_VALUE edge, but as the new IL shows, that isn't really needed; given 1) that > and >= are equivalent in the code, any of swapping the comparison operands, changing L[TE]_EXPR to G[TE]_EXPR or vice versa or swapping the EDGE_TRUE_VALUE / EDGE_FALSE_VALUE bits on the edges reverses one of the two comparisons 2021-05-21 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94589 * tree-ssa-phiopt.c (spaceship_replacement): For integral rhs1 and rhs2, treat x <= 4 equivalently to x < 5 etc. In cmp1 and cmp2 (if not the same as cmp3) treat <= the same as < and >= the same as >. Don't require that cond2_phi_edge is true edge, instead take false/true edges into account based on cmp1/cmp2 comparison kinds.
2021-05-21Fix spurious No_Elaboration violation for Size attributeEric Botcazou1-28/+30
We optimize the associated range check but nevertheless flag a violation. gcc/ada/ * gcc-interface/trans.c (Call_to_gnu): Minor tweaks. (gnat_to_gnu_external): Likewise. (Raise_Error_to_gnu): Return an empty statement list if there is a condition and it is always false. (gnat_to_gnu): Do not check for elaboration code a priori during the translation but a posteriori instead.
2021-05-21Fix incorrect SLOC on instructionEric Botcazou1-2/+4
This puts the missing SLOC on a statement generated by a return. gcc/ada/ * gcc-interface/trans.c (gnat_to_gnu) <N_Simple_Return_Statement>: Put a SLOC on the assignment from the return value to the return object in the copy-in/copy-out case.
2021-05-21Use EXACT_DIV_EXPR as much as possibleEric Botcazou3-15/+14
...when the division is exact, typically dividing TYPE_SIZE by BITS_PER_UNIT. gcc/ada/ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Replace CEIL_DIV_EXPR with EXACT_DIV_EXPR. * gcc-interface/misc.c (gnat_type_max_size): Likewise. * gcc-interface/utils.c (maybe_pad_type): Likewise. (finish_record_type): Likewise. And always compute the unit size.
2021-05-21i386: Add minmax and abs patterns for 4-byte vectors [PR100637]Uros Bizjak2-49/+145
2021-05-21 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/100637 * config/i386/mmx.md (SMAXMIN_MMXMODEI): New mode iterator. (<smaxmin:code><SMAXMIN_MMXMODEI:mode>3): Macroize expander from <smaxmin:code>v4hi3> and <smaxmin:code><MMXMODE14:mode>3 using SMAXMIN_MMXMODEI mode iterator. (*<smaxmin:code>v4qi3): New insn pattern. (*<smaxmin:code>v2hi3): Ditto. (SMAXMIN_VI_32): New mode iterator. (<smaxmin:code><SMAXMIN_VI_32>mode3): New expander. (UMAXMIN_MMXMODEI): New mode iterator. (<umaxmin:code><UMAXMIN_MMXMODEI:mode>3): Macroize expander from <umaxmin:code>v8qi3> and <umaxmin:code><MMXMODE24:mode>3 using UMAXMIN_MMXMODEI mode iterator. (*<umaxmin:code>v4qi3): New insn pattern. (*<umaxmin:code>v2hi3): Ditto. (UMAXMIN_VI_32): New mode iterator. (<umaxmin:code><UMAXMIN_VI_32>mode3): New expander. (abs<VI_32:mode>2): New insn pattern. (ssse3_abs<MMXMODEI:mode>2, abs<MMXMODEI:mode>2): Move from ... * config/i386/sse.md: ... here.
2021-05-21Daily bump.GCC Administrator7-1/+287
2021-05-20aix: collect2 text files in archiveDavid Edelsohn1-1/+4
Rust places text files in archives. AIX ld ignores such files with a warning. The collect2 wrapper for ld had been exiting with a fatal error if it scanned an archive that contained a non-COFF file. This patch updates collect2.c to issue a warning and ignore the file member, matching the behavior of AIX ld. GCC can encounter archives created by Rust and should not issue a fatal error. This changes fatal_error to warning, with an implicit location and no associated optimization flag. gcc/ChangeLog: 2021-05-20 Clement Chigot <clement.chigot@atos.net> David Edelsohn <dje.gcc@gmail.com> * collect2.c (scan_prog_file): Issue non-fatal warning for non-COFF files.
2021-05-20c++: designators in single-element init listsJason Merrill5-2/+42
While looking at PR100489, it occurred to me that places that currently use an initializer-list with a single element to initialize an object of the same type shouldn't do that if the element has a designator. gcc/cp/ChangeLog: * call.c (reference_binding): Check for designator. (implicit_conversion_1, build_special_member_call): Likewise. * decl.c (reshape_init_r): Likewise. * pt.c (do_class_deduction): Likewise. * typeck2.c (digest_init_r): Likewise. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/desig19.C: New test.
2021-05-20c++: designated init with anonymous union [PR100489]Jason Merrill3-30/+46
My patch for PR98463 added an assert that tripped on this testcase, because we ended up with a U CONSTRUCTOR with an initializer for a, which is not a member of U. We need to wrap the a initializer in another CONSTRUCTOR for the anonymous union. There was already support for this in process_init_constructor_record, but not in process_init_constructor_union. But since this is about brace elision, it really belongs under reshape_init rather than digest_init, so this patch moves the handling to reshape_init_class, which also handles unions. PR c++/100489 gcc/cp/ChangeLog: * decl.c (reshape_init_class): Handle designator for member of anonymous aggregate here. * typeck2.c (process_init_constructor_record): Not here. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/desig18.C: New test.
2021-05-20c++: Add new warning options for C++ language mismatchesJonathan Wakely7-75/+146
This adds new warning flags, enabled by default: -Wc++11-extensions, -Wc++14-extensions, -Wc++17-extensions, -Wc++20-extensions, and -Wc++23-extensions. The names of the flags are copied from Clang, which already has similar options. No new diagnostics are added, but the new OPT_Wxxx variables are used to control existing pedwarns about occurences of new C++ constructs in code using an old C++ standard dialect. This allows several existing warnings that cannot currently be disabled to be controlled by the appropriate -Wno-xxx flag. For example, it will now be possible to disable warnings about using variadic templates in C++98 code, by using the new -Wno-c++11-extensions option. This will allow libstdc++ headers to disable those warnings unconditionally by using diagnostic pragmas, so that they are not emitted even if -Wsystem-headers is used. Some of the affected diagnostics are currently only given when -Wpedantic is used. Now that we have a more specific warning flag, we could consider making them not depend on -Wpedantic, and only on the new flag. This patch does not do that, as it intends to make no changes to what is accepted/rejected by default. The only effect should be that the new option is shown when -fdiagnostics-show-option is active, and that some warnings can be disabled by using the new flags (and for the warnings that previously only dependend on -Wpedantic, it will now be possible to disable just those warnings while still using -Wpedantic for its other benefits). gcc/c-family/ChangeLog: * c.opt (Wc++11-extensions, Wc++14-extensions) (Wc++17-extensions, Wc++20-extensions, Wc++23-extensions): New options. gcc/cp/ChangeLog: * call.c (maybe_warn_array_conv): Use new warning option. * decl.c (mark_inline_variable, grokdeclarator): Likewise. * error.c (maybe_warn_cpp0x): Likewise. * parser.c (cp_parser_primary_expression) (cp_parser_unqualified_id) (cp_parser_pseudo_destructor_name) (cp_parser_lambda_introducer) (cp_parser_lambda_declarator_opt) (cp_parser_selection_statement) (cp_parser_init_statement) (cp_parser_decomposition_declaration) (cp_parser_function_specifier_opt) (cp_parser_static_assert) (cp_parser_namespace_definition) (cp_parser_using_declaration) (cp_parser_asm_definition) (cp_parser_ctor_initializer_opt_and_function_body) (cp_parser_initializer_list) (cp_parser_type_parameter_key) (cp_parser_member_declaration) (cp_parser_try_block) (cp_parser_std_attribute_spec): Likewise. * pt.c (check_template_variable): Likewise. gcc/ChangeLog: * doc/invoke.texi (-Wno-c++11-extensions) (-Wno-c++14-extensions, -Wno-c++17-extensions) (-Wno-c++20-extensions, -Wno-c++23-extensions): Document new options.
2021-05-20dwarf: new dwarf_debuginfo_p predicateIndu Bhagat15-30/+40
This patch introduces a dwarf_debuginfo_p predicate that abstracts and replaces complex checks on write_symbols. gcc/c-family/ChangeLog: * c-lex.c (init_c_lex): Use dwarf_debuginfo_p. gcc/ChangeLog: * config/c6x/c6x.c (c6x_output_file_unwind): Use dwarf_debuginfo_p. * config/darwin.c (darwin_override_options): Likewise. * config/i386/cygming.h (DBX_REGISTER_NUMBER): Likewise. * config/i386/darwin.h (DBX_REGISTER_NUMBER): Likewise. (DWARF2_FRAME_REG_OUT): Likewise. * config/mips/mips.c (mips_output_filename): Likewise. * config/rs6000/rs6000.c (rs6000_xcoff_declare_function_name): Likewise. (rs6000_dbx_register_number): Likewise. * dbxout.c: Include flags.h. * dwarf2cfi.c (cfi_label_required_p): Likewise. (dwarf2out_do_frame): Likewise. * except.c: Include flags.h. * final.c (dwarf2_debug_info_emitted_p): Likewise. (final_scan_insn_1): Likewise. * flags.h (dwarf_debuginfo_p): New function declaration. * opts.c (dwarf_debuginfo_p): New function definition. * targhooks.c (default_debug_unwind_info): Use dwarf_debuginfo_p. * toplev.c (process_options): Likewise.
2021-05-20opts: change write_symbols to support bitmasksIndu Bhagat10-36/+157
To support multiple debug formats, we need to move away from explicit enumeration of each individual combination of debug formats. gcc/c-family/ChangeLog: * c-opts.c (c_common_post_options): Adjust access to debug_type_names. * c-pch.c (struct c_pch_validity): Use type uint32_t. (pch_init): Renamed member. (c_common_valid_pch): Adjust access to debug_type_names. gcc/ChangeLog: * common.opt: Change type to support bitmasks. * flag-types.h (enum debug_info_type): Rename enumerator constants. (NO_DEBUG): New bitmask. (DBX_DEBUG): Likewise. (DWARF2_DEBUG): Likewise. (XCOFF_DEBUG): Likewise. (VMS_DEBUG): Likewise. (VMS_AND_DWARF2_DEBUG): Likewise. * flags.h (debug_set_to_format): New function declaration. (debug_set_count): Likewise. (debug_set_names): Likewise. * opts.c (debug_type_masks): Array of bitmasks for debug formats. (debug_set_to_format): New function definition. (debug_set_count): Likewise. (debug_set_names): Likewise. (set_debug_level): Update access to debug_type_names. * toplev.c: Likewise. gcc/objc/ChangeLog: * objc-act.c (synth_module_prologue): Use uint32_t instead of enum debug_info_type. gcc/testsuite/ChangeLog: * gcc.dg/pch/valid-1.c: Adjust diagnostic message in testcase. * lib/dg-pch.exp: Adjust diagnostic message.
2021-05-20PR middle-end/100684 - spurious -Wnonnull with -O1 on a C++ lambdaMartin Sebor4-0/+88
gcc/ChangeLog: PR middle-end/100684 * tree-ssa-ccp.c (pass_post_ipa_warn::execute): Handle C++ lambda. gcc/testsuite/ChangeLog: PR middle-end/100684 * g++.dg/warn/Wnonnull13.C: New test. * g++.dg/warn/Wnonnull14.C: New test. * g++.dg/warn/Wnonnull15.C: New test.
2021-05-20Fix a test failure in g++.dg/modules/omp-1_c.CBernd Edlinger1-1/+1
Adjust the line number due to previous commit, which added a line for dg-require-effective-target. 2021-05-20 Bernd Edlinger <bernd.edlinger@hotmail.de> * g++.dg/modules/omp-1_c.C: Fix testcase.
2021-05-20i386: Avoid integer logic insns for 32bit and 64bit vector modes [PR100701]Uros Bizjak3-37/+55
Integer logic instructions clobber flags, do not use them for 32bit and 64bit vector modes. 2021-05-20 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/100701 * config/i386/i386.md (isa): Remove x64_bmi. (enabled): Remove x64_bmi. * config/i386/mmx.md (mmx_andnot<MMXMODEI:mode>3): Remove general register alternative. (*andnot<VI_32:mode>3): Ditto. (*mmx_<any_logic:code><MMXMODEI:mode>3): Ditto. (*<any_logic:code><VI_32:mode>3): Ditto. gcc/testsuite/ PR target/100701 * gcc.target/i386/pr100701.c: New test.
2021-05-20Fortran/OpenMP: Add support for 'close' in map clauseMarcel Vollweiler4-10/+155
gcc/fortran/ChangeLog: * openmp.c (gfc_match_omp_clauses): Support map-type-modifier 'close'. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/map-6.f90: New test. * gfortran.dg/gomp/map-7.f90: New test. * gfortran.dg/gomp/map-8.f90: New test.
2021-05-20Fix gnat.dg spurious failures on PowerPC64 LEEric Botcazou2-2/+2
gcc/testsuite PR testsuite/96488 * gnat.dg/unchecked_convert5.adb: Do not run on PowerPC64 LE. * gnat.dg/unchecked_convert6.adb: Likewise.
2021-05-20arm: Fix build failure by adding includesKewen Lin1-0/+2
Commit r12-939 missed to add the required include files for the newly used type loop_vec_info. This patch is to add the include file "tree-vectorizer.h" which defines loop_vec_info and its required include file "cfgloop.h". gcc/ChangeLog: * config/arm/arm.c: Include head files tree-vectorizer.h and cfgloop.h.
2021-05-20i386: Add mult-high and shift patterns for 4-byte vectors [PR100637]Uros Bizjak3-5/+128
2021-05-20 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/100637 * config/i386/mmx.md (Yv_Yw): Revert adding V4QI and V2HI modes. (*<plusminus:insn><VI_32:mode>3): Use Yw instad of <Yv_Yw> constrint. (<s>mulv4hi3_highpart): New expander. (*<s>mulv2hi3_highpart): New insn pattern. (<s>mulv2hi3_higpart): New expander. (*<any_shift:insn>v2hi3): New insn pattern. (<any_shift:insn>v2hi3): New expander. * config/i386/sse.md (smulhrsv2hi3): New expander. (*smulhrsv2hi3): New insn pattern. gcc/testsuite/ PR target/100637 * gcc.target/i386/pr100637-1w.c (shl, ashr, lshr): New tests.
2021-05-20vect: Replace hardcoded inner loop cost factorKewen Lin9-6/+43
This patch is to replace the current hardcoded weight factor 50, which is applied by the loop vectorizer to the cost of statements in an inner loop relative to the loop being vectorized, with one newly added member inner_loop_cost_factor in loop vinfo. It also introduces one parameter vect-inner-loop-cost-factor whose default value is 50, and is used to initialize the inner_loop_cost_factor member. The motivation here is that: if targets want to have one unique function to gather some information in each add_stmt_cost call, no matter that it's put before or after the cost tweaking part for inner loop, it may have the need to adjust (expand or shrink) the gathered data as the factor. Now the factor is hardcoded, it's not easily maintained. Bootstrapped/regtested on powerpc64le-linux-gnu P9, x86_64-redhat-linux and aarch64-linux-gnu. gcc/ChangeLog: * doc/invoke.texi (vect-inner-loop-cost-factor): Document new parameter. * params.opt (vect-inner-loop-cost-factor): New. * targhooks.c (default_add_stmt_cost): Replace hardcoded factor 50 with LOOP_VINFO_INNER_LOOP_COST_FACTOR, include head file tree-vectorizer.h and its required ones. * config/aarch64/aarch64.c (aarch64_add_stmt_cost): Replace hardcoded factor 50 with LOOP_VINFO_INNER_LOOP_COST_FACTOR. * config/arm/arm.c (arm_add_stmt_cost): Likewise. * config/i386/i386.c (ix86_add_stmt_cost): Likewise. * config/rs6000/rs6000.c (rs6000_add_stmt_cost): Likewise. * tree-vect-loop.c (vect_compute_single_scalar_iteration_cost): Likewise. (_loop_vec_info::_loop_vec_info): Init inner_loop_cost_factor. * tree-vectorizer.h (_loop_vec_info): Add inner_loop_cost_factor. (LOOP_VINFO_INNER_LOOP_COST_FACTOR): New macro.
2021-05-20c: Add support for __FILE_NAME__ macro (PR c/42579)Christophe Lyon3-0/+47
The toolchain provided by ST for stm32 has had support for __FILENAME__ for a while, but clang/llvm has recently implemented support for __FILE_NAME__, so it seems better to use the same macro name in GCC. It happens that the ST patch is similar to the one proposed in PR c/42579. Given these input files: :::::::::::::: mydir/myinc.h :::::::::::::: char* mystringh_file = __FILE__; char* mystringh_filename = __FILE_NAME__; char* mystringh_base_file = __BASE_FILE__; :::::::::::::: mydir/mysrc.c :::::::::::::: char* mystring_file = __FILE__; char* mystring_filename = __FILE_NAME__; char* mystring_base_file = __BASE_FILE__; we produce: $ gcc mydir/mysrc.c -I . -E char* mystringh_file = "./mydir/myinc.h"; char* mystringh_filename = "myinc.h"; char* mystringh_base_file = "mydir/mysrc.c"; char* mystring_file = "mydir/mysrc.c"; char* mystring_filename = "mysrc.c"; char* mystring_base_file = "mydir/mysrc.c"; 2021-05-20 Christophe Lyon <christophe.lyon@linaro.org> Torbjörn Svensson <torbjorn.svensson@st.com> PR c/42579 libcpp/ * include/cpplib.h (cpp_builtin_type): Add BT_FILE_NAME entry. * init.c (builtin_array): Likewise. * macro.c (_cpp_builtin_macro_text): Add support for BT_FILE_NAME. gcc/ * doc/cpp.texi (Common Predefined Macros): Document __FILE_NAME__. gcc/testsuite/ * c-c++-common/spellcheck-reserved.c: Add tests for __FILE_NAME__. * c-c++-common/cpp/file-name-1.c: New test.