public inbox for libstdc++-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/aldyh/heads/ranger-staging)] Merge commit '968ec08efefeea6fbc0cdc379e98ce3e28904083' into me/ranger-staging
@ 2020-10-02  9:41 Aldy Hernandez
  0 siblings, 0 replies; only message in thread
From: Aldy Hernandez @ 2020-10-02  9:41 UTC (permalink / raw)
  To: gcc-cvs, libstdc++-cvs

https://gcc.gnu.org/g:8322a85bf68d1508da58aeb61b0852b7634ee765

commit 8322a85bf68d1508da58aeb61b0852b7634ee765
Merge: 9abe16354e2 968ec08efef
Author: Aldy Hernandez <aldyh@redhat.com>
Date:   Fri Oct 2 10:07:59 2020 +0200

    Merge commit '968ec08efefeea6fbc0cdc379e98ce3e28904083' into me/ranger-staging

Diff:

 ChangeLog                                          |    4 +
 MAINTAINERS                                        |    1 +
 contrib/ChangeLog                                  |   10 +
 contrib/clang-format                               |    2 +-
 contrib/mklog.py                                   |    9 +-
 fixincludes/ChangeLog                              |   20 +
 fixincludes/fixfixes.c                             |    4 +-
 fixincludes/fixincl.x                              |   65 +-
 fixincludes/inclhack.def                           |   31 +-
 fixincludes/tests/base/sys/inttypes.h              |   14 +
 fixincludes/tests/base/sys/socket.h                |    2 +
 gcc/ChangeLog                                      | 1970 +++++++++++++++++++-
 gcc/DATESTAMP                                      |    2 +-
 gcc/Makefile.in                                    |    5 +
 gcc/ada/ChangeLog                                  |  107 +-
 gcc/ada/fe.h                                       |    1 +
 gcc/ada/gcc-interface/decl.c                       |   75 +-
 gcc/ada/gcc-interface/gigi.h                       |    5 +
 gcc/ada/gcc-interface/misc.c                       |   13 +-
 gcc/ada/gcc-interface/targtyps.c                   |   10 +
 gcc/ada/gcc-interface/trans.c                      |   50 +-
 gcc/ada/gcc-interface/utils.c                      |   39 +-
 gcc/alias.c                                        |   10 +-
 gcc/alias.h                                        |    1 +
 gcc/analyzer/ChangeLog                             |  329 ++++
 gcc/analyzer/analysis-plan.cc                      |    1 +
 gcc/analyzer/analyzer-logging.cc                   |    2 +
 gcc/analyzer/analyzer.cc                           |    9 +-
 gcc/analyzer/analyzer.h                            |    4 +-
 gcc/analyzer/analyzer.opt                          |   12 +
 gcc/analyzer/call-string.cc                        |   31 +
 gcc/analyzer/call-string.h                         |    2 +
 gcc/analyzer/checker-path.cc                       |   30 +-
 gcc/analyzer/constraint-manager.cc                 |  127 +-
 gcc/analyzer/constraint-manager.h                  |    6 +
 gcc/analyzer/diagnostic-manager.cc                 |  128 +-
 gcc/analyzer/diagnostic-manager.h                  |    4 +
 gcc/analyzer/engine.cc                             |  590 +++++-
 gcc/analyzer/exploded-graph.h                      |   33 +-
 gcc/analyzer/pending-diagnostic.cc                 |    1 +
 gcc/analyzer/program-point.cc                      |   75 +-
 gcc/analyzer/program-point.h                       |    4 +
 gcc/analyzer/program-state.cc                      |  101 +-
 gcc/analyzer/program-state.h                       |   10 +-
 gcc/analyzer/region-model-impl-calls.cc            |   48 +
 gcc/analyzer/region-model-manager.cc               |    1 +
 gcc/analyzer/region-model-reachability.cc          |    1 +
 gcc/analyzer/region-model.cc                       |  135 +-
 gcc/analyzer/region-model.h                        |   60 +-
 gcc/analyzer/region.cc                             |   12 +
 gcc/analyzer/sm-file.cc                            |    1 +
 gcc/analyzer/sm-malloc.cc                          |    9 +-
 gcc/analyzer/sm-pattern-test.cc                    |    1 +
 gcc/analyzer/sm-sensitive.cc                       |    1 +
 gcc/analyzer/sm-signal.cc                          |    7 +
 gcc/analyzer/sm-taint.cc                           |    1 +
 gcc/analyzer/sm.cc                                 |   36 +
 gcc/analyzer/sm.h                                  |    3 +
 gcc/analyzer/state-purge.cc                        |    1 +
 gcc/analyzer/store.cc                              |  118 ++
 gcc/analyzer/store.h                               |    7 +
 gcc/analyzer/supergraph.cc                         |  112 ++
 gcc/analyzer/supergraph.h                          |    6 +
 gcc/analyzer/svalue.cc                             |   12 +
 gcc/attribs.c                                      |  284 ++-
 gcc/attribs.h                                      |   67 +-
 gcc/bb-reorder.c                                   |    4 +
 gcc/builtins.c                                     |  349 +++-
 gcc/builtins.def                                   |   20 +-
 gcc/builtins.h                                     |   18 +-
 gcc/c-family/ChangeLog                             |  141 +-
 gcc/c-family/c-attribs.c                           |  777 ++++++--
 gcc/c-family/c-common.c                            |   24 +
 gcc/c-family/c-common.def                          |   24 +
 gcc/c-family/c-common.h                            |   58 +-
 gcc/c-family/c-dump.c                              |   38 +
 gcc/c-family/c-gimplify.c                          |  422 +++++
 gcc/c-family/c-indentation.c                       |   61 +-
 gcc/c-family/c-pragma.c                            |   13 +-
 gcc/c-family/c-pretty-print.c                      |  153 +-
 gcc/c-family/c-warn.c                              |  566 ++++++
 gcc/c-family/c.opt                                 |   23 +-
 gcc/c/ChangeLog                                    |   58 +-
 gcc/c/c-decl.c                                     |  241 ++-
 gcc/c/c-lang.h                                     |    3 +-
 gcc/c/c-objc-common.h                              |    2 +
 gcc/c/c-parser.c                                   |  152 +-
 gcc/c/c-tree.h                                     |   23 +-
 gcc/c/c-typeck.c                                   |  227 +--
 gcc/calls.c                                        |  289 +--
 gcc/cfgexpand.c                                    |   14 +-
 gcc/cfgloop.c                                      |    4 +-
 gcc/cfgloop.h                                      |    8 +-
 gcc/cfgloopmanip.c                                 |    3 +-
 gcc/cgraph.c                                       |   25 +-
 gcc/cgraph.h                                       |    3 +
 gcc/cgraphunit.c                                   |    6 +-
 gcc/collect2.c                                     |   26 +-
 gcc/common.opt                                     |    6 +-
 gcc/common/config/aarch64/aarch64-common.c         |    7 +-
 gcc/common/config/i386/cpuinfo.h                   |   16 +
 gcc/common/config/i386/i386-common.c               |   65 +-
 gcc/common/config/i386/i386-cpuinfo.h              |    3 +
 gcc/common/config/i386/i386-isas.h                 |    3 +
 gcc/config.gcc                                     |    7 +-
 gcc/config.in                                      |   13 +
 gcc/config/aarch64/aarch64-arches.def              |    1 +
 gcc/config/aarch64/aarch64-builtins.c              |   59 +-
 gcc/config/aarch64/aarch64-c.c                     |    7 +-
 gcc/config/aarch64/aarch64-cores.def               |   10 +
 gcc/config/aarch64/aarch64-option-extensions.def   |    2 +-
 gcc/config/aarch64/aarch64-protos.h                |   20 +
 gcc/config/aarch64/aarch64-simd-builtins.def       |    5 +-
 gcc/config/aarch64/aarch64-tune.md                 |    2 +-
 gcc/config/aarch64/aarch64.c                       |  209 ++-
 gcc/config/aarch64/aarch64.h                       |    5 +
 gcc/config/aarch64/aarch64.md                      |  102 +-
 gcc/config/aarch64/arm_neon.h                      |  250 ++-
 gcc/config/arm/arm-c.c                             |    4 +-
 gcc/config/arm/arm-cpus.in                         |   55 +
 gcc/config/arm/arm-protos.h                        |    1 -
 gcc/config/arm/arm-tables.opt                      |   15 +
 gcc/config/arm/arm-tune.md                         |    6 +-
 gcc/config/arm/arm.c                               |  110 +-
 gcc/config/arm/arm.h                               |   45 +
 gcc/config/arm/arm.md                              |   14 +-
 gcc/config/arm/arm.opt                             |   15 +-
 gcc/config/arm/arm_mve.h                           |  167 +-
 gcc/config/arm/constraints.md                      |    9 +-
 gcc/config/arm/iterators.md                        |    8 -
 gcc/config/arm/neon.md                             |   47 +-
 gcc/config/arm/predicates.md                       |   12 +
 gcc/config/arm/thumb2.md                           |   51 +-
 gcc/config/arm/vec-common.md                       |   42 +-
 gcc/config/arm/vfp.md                              |   36 +-
 gcc/config/bpf/bpf.md                              |   27 +-
 gcc/config/csky/csky-elf.h                         |   10 +-
 gcc/config/csky/csky-linux-elf.h                   |    2 +-
 gcc/config/csky/csky-protos.h                      |    2 +
 gcc/config/csky/csky.c                             |  100 +-
 gcc/config/csky/csky.h                             |   34 +-
 gcc/config/csky/csky.md                            |   84 +
 gcc/config/csky/csky.opt                           |    4 +
 gcc/config/csky/t-csky-elf                         |   13 +-
 gcc/config/csky/t-csky-linux                       |    8 +-
 gcc/config/darwin-protos.h                         |    2 +-
 gcc/config/darwin.c                                |    3 +-
 gcc/config/gcn/gcn-passes.def                      |   19 -
 gcc/config/gcn/gcn-tree.c                          |  119 --
 gcc/config/gcn/gcn.c                               |   13 +-
 gcc/config/gcn/gcn.md                              |    2 +
 gcc/config/gcn/t-gcn-hsa                           |    1 -
 gcc/config/i386/amxbf16intrin.h                    |   52 +
 gcc/config/i386/amxint8intrin.h                    |   61 +
 gcc/config/i386/amxtileintrin.h                    |   98 +
 gcc/config/i386/avx512vp2intersectintrin.h         |   23 +
 gcc/config/i386/avx512vp2intersectvlintrin.h       |   23 +
 gcc/config/i386/cpuid.h                            |    3 +
 gcc/config/i386/enqcmdintrin.h                     |    8 +-
 gcc/config/i386/i386-builtins.c                    |    6 +-
 gcc/config/i386/i386-c.c                           |   18 +-
 gcc/config/i386/i386-options.c                     |   79 +-
 gcc/config/i386/i386-options.h                     |    4 +-
 gcc/config/i386/i386.c                             |    8 +-
 gcc/config/i386/i386.h                             |   25 +-
 gcc/config/i386/i386.md                            |   20 +-
 gcc/config/i386/i386.opt                           |   14 +-
 gcc/config/i386/immintrin.h                        |    6 +
 gcc/config/i386/pconfigintrin.h                    |   23 +
 gcc/config/i386/sse.md                             |    6 +-
 gcc/config/i386/t-rtems                            |    8 +-
 gcc/config/i386/tsxldtrkintrin.h                   |   23 +
 gcc/config/i386/wbnoinvdintrin.h                   |   23 +
 gcc/config/i386/x86-tune-costs.h                   |   90 +-
 gcc/config/linux-protos.h                          |    2 +-
 gcc/config/linux.c                                 |    3 +-
 gcc/config/msp430/msp430.c                         |  224 ++-
 gcc/config/nios2/nios2.c                           |   27 +-
 gcc/config/nvptx/nvptx.c                           |   44 +-
 gcc/config/nvptx/nvptx.md                          |   34 +
 gcc/config/pa/pa-hpux11.h                          |    5 -
 gcc/config/pa/pa.c                                 |   33 +-
 gcc/config/pa/pa.md                                |  140 +-
 gcc/config/pa/pa32-linux.h                         |    5 +
 gcc/config/pa/pa64-hpux.h                          |   12 +-
 gcc/config/pru/pru.c                               |    6 +-
 gcc/config/riscv/riscv-c.c                         |    9 +-
 gcc/config/riscv/riscv.h                           |    2 +-
 gcc/config/rs6000/linux64.h                        |   17 +-
 gcc/config/rs6000/power10.md                       |    8 +-
 gcc/config/rs6000/power6.md                        |   21 -
 gcc/config/rs6000/power8.md                        |    8 +-
 gcc/config/rs6000/power9.md                        |    8 +-
 gcc/config/rs6000/ppc-asm.h                        |    9 +
 gcc/config/rs6000/predicates.md                    |    2 +-
 gcc/config/rs6000/rs6000-c.c                       |    3 +
 gcc/config/rs6000/rs6000-call.c                    |    2 +-
 gcc/config/rs6000/rs6000-internal.h                |    2 +-
 gcc/config/rs6000/rs6000-logue.c                   |   21 +-
 gcc/config/rs6000/rs6000-p8swap.c                  |  147 +-
 gcc/config/rs6000/rs6000-protos.h                  |    7 +-
 gcc/config/rs6000/rs6000.c                         |  225 ++-
 gcc/config/rs6000/rs6000.md                        |  159 +-
 gcc/config/rs6000/smmintrin.h                      |   30 +
 gcc/config/rs6000/vsx.md                           |   14 +-
 gcc/config/s390/s390-c.c                           |    7 +-
 gcc/config/s390/s390.c                             |   43 +-
 gcc/config/s390/s390.md                            |   54 +-
 gcc/config/s390/vector.md                          |    2 +-
 gcc/configure                                      |   17 +-
 gcc/configure.ac                                   |   13 +-
 gcc/convert.c                                      |    8 +-
 gcc/cp/ChangeLog                                   |  419 +++++
 gcc/cp/call.c                                      |   34 +-
 gcc/cp/constexpr.c                                 |    9 +-
 gcc/cp/constraint.cc                               |   28 +-
 gcc/cp/coroutines.cc                               |    2 +-
 gcc/cp/cp-gimplify.c                               |  471 +----
 gcc/cp/cp-objcp-common.c                           |   13 +-
 gcc/cp/cp-tree.def                                 |   31 +-
 gcc/cp/cp-tree.h                                   |  104 +-
 gcc/cp/cxx-pretty-print.c                          |   78 -
 gcc/cp/decl.c                                      |  404 ++--
 gcc/cp/decl2.c                                     |    3 -
 gcc/cp/dump.c                                      |   31 -
 gcc/cp/friend.c                                    |   12 +-
 gcc/cp/lambda.c                                    |    7 +-
 gcc/cp/name-lookup.c                               |  647 ++++---
 gcc/cp/name-lookup.h                               |   59 +-
 gcc/cp/parser.c                                    |  166 +-
 gcc/cp/pt.c                                        |  675 ++++---
 gcc/cp/ptree.c                                     |    6 +-
 gcc/cp/rtti.c                                      |   11 +-
 gcc/cp/semantics.c                                 |   26 +-
 gcc/cp/tree.c                                      |   30 +-
 gcc/cp/typeck2.c                                   |    2 +-
 gcc/d/ChangeLog                                    |   36 +
 gcc/d/d-builtins.cc                                |    8 +
 gcc/d/d-codegen.cc                                 |    1 +
 gcc/d/d-convert.cc                                 |    4 +-
 gcc/d/d-lang.cc                                    |   58 +-
 gcc/d/decl.cc                                      |   57 +-
 gcc/d/intrinsics.cc                                |    2 +-
 gcc/d/lang.opt                                     |    6 +-
 gcc/d/types.cc                                     |    5 +-
 gcc/doc/analyzer.texi                              |    6 +-
 gcc/doc/cppenv.texi                                |    2 +-
 gcc/doc/extend.texi                                |   59 +-
 gcc/doc/generic.texi                               |   56 +-
 gcc/doc/invoke.texi                                |  268 ++-
 gcc/doc/sourcebuild.texi                           |    9 +
 gcc/doc/tm.texi                                    |   11 +-
 gcc/emit-rtl.h                                     |    3 +
 gcc/expr.c                                         |   18 +-
 gcc/fortran/ChangeLog                              |  128 ++
 gcc/fortran/decl.c                                 |    9 +
 gcc/fortran/expr.c                                 |   26 +-
 gcc/fortran/f95-lang.c                             |    4 +-
 gcc/fortran/interface.c                            |    4 +
 gcc/fortran/iresolve.c                             |   14 -
 gcc/fortran/symbol.c                               |    2 +-
 gcc/fortran/trans-array.c                          |   15 +-
 gcc/fortran/trans-decl.c                           |   26 +-
 gcc/fortran/trans-expr.c                           |   29 +-
 gcc/fortran/trans-intrinsic.c                      |  167 ++
 gcc/fortran/trans-io.c                             |   46 +-
 gcc/fortran/trans-openmp.c                         |   68 +-
 gcc/fortran/trans-stmt.c                           |   49 +-
 gcc/fortran/trans.c                                |   23 +-
 gcc/fortran/trans.h                                |    6 +-
 gcc/function.c                                     |   17 +-
 gcc/gengtype.c                                     |    2 +-
 gcc/genmatch.c                                     |   10 +-
 gcc/gensupport.c                                   |    2 +-
 gcc/ggc-common.c                                   |   28 +-
 gcc/ggc-page.c                                     |   17 +-
 gcc/gimple-array-bounds.cc                         |  428 ++++-
 gcc/gimple-isel.cc                                 |   90 +-
 gcc/gimple-loop-versioning.cc                      |    3 +-
 gcc/gimple-range-cache.cc                          |   24 +-
 gcc/gimple-range-cache.h                           |    4 +-
 gcc/gimple-range-edge.cc                           |    4 +-
 gcc/gimple-range-edge.h                            |    2 +-
 gcc/gimple-ssa-sprintf.c                           |   56 +-
 gcc/gimple-ssa-store-merging.c                     |   76 +-
 gcc/gimplify.c                                     |   25 +-
 gcc/go/ChangeLog                                   |    6 +
 gcc/go/go-gcc.cc                                   |    8 +-
 gcc/go/gofrontend/MERGE                            |    2 +-
 gcc/go/gofrontend/expressions.cc                   |   50 +-
 gcc/go/gofrontend/gogo.cc                          |    4 +
 gcc/go/gofrontend/statements.cc                    |   27 +-
 gcc/go/gofrontend/statements.h                     |    4 +-
 gcc/hash-table.h                                   |    2 +-
 gcc/input.c                                        |    2 +
 gcc/internal-fn.c                                  |   45 +-
 gcc/internal-fn.def                                |    2 +
 gcc/ipa-fnsummary.c                                |   90 +-
 gcc/ipa-fnsummary.h                                |    2 +
 gcc/ipa-inline-transform.c                         |   13 +-
 gcc/ipa-inline.c                                   |    3 -
 gcc/ipa-modref-tree.c                              |  253 +++
 gcc/ipa-modref-tree.h                              |  515 +++++
 gcc/ipa-modref.c                                   | 1697 +++++++++++++++++
 gcc/ipa-modref.h                                   |   52 +
 gcc/ipa-predicate.h                                |   10 +-
 gcc/ipa-prop.c                                     |    6 +-
 gcc/ipa-pure-const.c                               |   10 +-
 gcc/ira-build.c                                    |   12 +-
 gcc/ira-color.c                                    |    4 +-
 gcc/ira.c                                          |    8 +-
 gcc/jit/ChangeLog                                  |   40 +
 gcc/jit/docs/_build/texinfo/libgccjit.texi         | 1080 ++++++-----
 gcc/jit/docs/topics/compatibility.rst              |    7 +
 gcc/jit/docs/topics/expressions.rst                |   21 +
 gcc/jit/jit-playback.c                             |  107 +-
 gcc/jit/jit-playback.h                             |   17 +
 gcc/jit/jit-recording.c                            |  143 +-
 gcc/jit/jit-recording.h                            |   38 +-
 gcc/jit/libgccjit++.h                              |   10 +
 gcc/jit/libgccjit.c                                |   39 +
 gcc/jit/libgccjit.h                                |   15 +
 gcc/jit/libgccjit.map                              |    7 +-
 gcc/langhooks-def.h                                |    2 +-
 gcc/langhooks.c                                    |    2 +-
 gcc/langhooks.h                                    |    2 +-
 gcc/loop-unroll.c                                  |    3 +-
 gcc/lra-constraints.c                              |   12 +-
 gcc/lto-section-in.c                               |    1 +
 gcc/lto-streamer-out.c                             |    2 +-
 gcc/lto-streamer.h                                 |    1 +
 gcc/match.pd                                       |   54 +-
 gcc/objc/ChangeLog                                 |   14 +
 gcc/objc/objc-act.c                                |    6 +-
 gcc/objc/objc-gnu-runtime-abi-01.c                 |    4 +-
 gcc/objc/objc-next-runtime-abi-01.c                |    4 +-
 gcc/objcp/ChangeLog                                |   11 +
 gcc/objcp/objcp-decl.c                             |    4 +-
 gcc/omp-expand.c                                   |  514 +++--
 gcc/omp-low.c                                      |    4 +-
 gcc/omp-offload.c                                  |   51 +-
 gcc/opt-read.awk                                   |    1 +
 gcc/optabs.c                                       |   35 +-
 gcc/optabs.h                                       |    4 +
 gcc/optc-save-gen.awk                              |  387 +++-
 gcc/opth-gen.awk                                   |   19 +-
 gcc/opts.c                                         |    8 +
 gcc/params.opt                                     |   16 +
 gcc/passes.def                                     |    4 +
 gcc/predict.c                                      |    9 +-
 gcc/print-tree.c                                   |    2 +-
 gcc/profile.c                                      |    8 +-
 gcc/range-op.cc                                    |   15 +
 gcc/rtlanal.c                                      |    4 +
 gcc/sel-sched-ir.c                                 |  112 +-
 gcc/selftest-run-tests.c                           |    1 +
 gcc/selftest.h                                     |    1 +
 gcc/system.h                                       |    3 +-
 gcc/target-globals.c                               |    4 +-
 gcc/target.def                                     |   13 +-
 gcc/targhooks.c                                    |    9 +-
 gcc/targhooks.h                                    |    6 +-
 gcc/testsuite/ChangeLog                            | 1239 +++++++++++-
 gcc/testsuite/c-c++-common/Warray-bounds-6.c       |   19 +-
 gcc/testsuite/c-c++-common/Warray-bounds.c         |    2 +-
 .../c-c++-common/Wduplicated-branches-15.c         |   32 +
 .../c-c++-common/Wmisleading-indentation-5.c       |   56 +
 .../c-c++-common/Wsizeof-pointer-memaccess1.c      |    4 +-
 .../c-c++-common/builtin-has-attribute-3.c         |   20 +-
 gcc/testsuite/c-c++-common/ident-1b.c              |    1 +
 gcc/testsuite/c-c++-common/ident-2b.c              |    1 +
 gcc/testsuite/g++.dg/analyzer/placement-new.C      |   26 +
 gcc/testsuite/g++.dg/asan/pr97145.C                |    7 +
 gcc/testsuite/g++.dg/concepts/diagnostic15.C       |   16 +
 gcc/testsuite/g++.dg/concepts/local-extern.C       |   39 +
 gcc/testsuite/g++.dg/cpp0x/decltype-96652.C        |   14 +
 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv14.C  |   10 +
 gcc/testsuite/g++.dg/cpp0x/move-return4.C          |   17 +
 gcc/testsuite/g++.dg/cpp0x/vt-58156.C              |   13 +
 gcc/testsuite/g++.dg/cpp1y/constexpr-90199.C       |   28 +
 gcc/testsuite/g++.dg/cpp1y/new1.C                  |    4 +-
 gcc/testsuite/g++.dg/cpp1z/class-deduction73.C     |   41 +
 gcc/testsuite/g++.dg/cpp1z/class-deduction74.C     |   31 +
 gcc/testsuite/g++.dg/cpp2a/concepts-lambda13.C     |   18 +
 gcc/testsuite/g++.dg/cpp2a/concepts-lambda14.C     |   25 +
 gcc/testsuite/g++.dg/cpp2a/concepts-pr68828.C      |   35 +
 gcc/testsuite/g++.dg/cpp2a/concepts-pr86002.C      |   19 +
 gcc/testsuite/g++.dg/cpp2a/concepts-pr91525.C      |   17 +
 gcc/testsuite/g++.dg/cpp2a/concepts-ttp2.C         |   11 +
 gcc/testsuite/g++.dg/cpp2a/concepts-variadic1.C    |   28 +
 gcc/testsuite/g++.dg/cpp2a/consteval18.C           |   26 +
 .../g++.dg/cpp2a/constexpr-indeterminate1.C        |   46 +
 gcc/testsuite/g++.dg/cpp2a/constexpr-new14.C       |   73 +
 gcc/testsuite/g++.dg/cpp2a/desig17.C               |   19 +
 .../g++.dg/cpp2a/is-constant-evaluated11.C         |   16 +
 gcc/testsuite/g++.dg/debug/dwarf2/align-1.C        |    2 +-
 gcc/testsuite/g++.dg/debug/dwarf2/align-2.C        |    2 +-
 gcc/testsuite/g++.dg/debug/dwarf2/align-3.C        |    2 +-
 gcc/testsuite/g++.dg/debug/dwarf2/align-4.C        |    2 +-
 gcc/testsuite/g++.dg/debug/dwarf2/align-5.C        |    2 +-
 gcc/testsuite/g++.dg/debug/dwarf2/align-6.C        |    2 +-
 .../debug/dwarf2/defaulted-member-function-1.C     |    2 +-
 .../debug/dwarf2/defaulted-member-function-2.C     |    2 +-
 .../debug/dwarf2/defaulted-member-function-3.C     |    2 +-
 gcc/testsuite/g++.dg/debug/dwarf2/inline-var-1.C   |   12 +-
 gcc/testsuite/g++.dg/debug/dwarf2/inline-var-2.C   |    2 +-
 gcc/testsuite/g++.dg/debug/dwarf2/inline-var-3.C   |   29 +
 .../g++.dg/debug/dwarf2/noreturn-function.C        |    2 +-
 gcc/testsuite/g++.dg/debug/dwarf2/ptrdmem-1.C      |    4 +-
 gcc/testsuite/g++.dg/debug/dwarf2/ref-2.C          |    4 +-
 gcc/testsuite/g++.dg/debug/dwarf2/ref-3.C          |   10 +-
 gcc/testsuite/g++.dg/debug/dwarf2/ref-4.C          |    6 +-
 gcc/testsuite/g++.dg/debug/dwarf2/refqual-1.C      |    4 +-
 gcc/testsuite/g++.dg/debug/dwarf2/refqual-2.C      |    4 +-
 gcc/testsuite/g++.dg/ext/attr-access.C             |   12 +-
 gcc/testsuite/g++.dg/ext/attrib62.C                |    7 +
 gcc/testsuite/g++.dg/ext/timevar1.C                |    4 +-
 gcc/testsuite/g++.dg/ext/timevar2.C                |    4 +-
 gcc/testsuite/g++.dg/gcov/pr97069.C                |   20 +
 gcc/testsuite/g++.dg/gomp/udr-2.C                  |    1 +
 gcc/testsuite/g++.dg/other/i386-2.C                |    3 +-
 gcc/testsuite/g++.dg/other/i386-3.C                |    3 +-
 gcc/testsuite/g++.dg/spellcheck-inttypes.C         |    3 +
 gcc/testsuite/g++.dg/template/local-fn3.C          |   17 +
 gcc/testsuite/g++.dg/template/local-fn4.C          |   21 +
 gcc/testsuite/g++.dg/template/local-var1.C         |   20 +
 gcc/testsuite/g++.dg/template/pr97105.C            |    6 +
 gcc/testsuite/g++.dg/tree-ssa/pr96979.C            |   48 +
 gcc/testsuite/g++.dg/vect/pr97255.cc               |   44 +
 .../g++.dg/warn/Wctad-maybe-unsupported.C          |   88 +
 .../g++.dg/warn/Wctad-maybe-unsupported.h          |    4 +
 .../g++.dg/warn/Wctad-maybe-unsupported2.C         |    6 +
 .../g++.dg/warn/Wctad-maybe-unsupported3.C         |    6 +
 gcc/testsuite/g++.dg/warn/Wrange-loop-construct.C  |  207 ++
 gcc/testsuite/g++.dg/warn/Wuninitialized-11.C      |   26 +
 gcc/testsuite/g++.old-deja/g++.pt/friend34.C       |    5 +-
 gcc/testsuite/g++.target/i386/pr97054.C            |   96 +
 gcc/testsuite/gcc.c-torture/compile/pr71109.c      |    1 +
 gcc/testsuite/gcc.c-torture/compile/pr83051-2.c    |    2 +
 gcc/testsuite/gcc.c-torture/compile/pr89663-1.c    |    1 +
 gcc/testsuite/gcc.c-torture/compile/pr89663-2.c    |    1 +
 gcc/testsuite/gcc.c-torture/compile/pr96796.c      |    1 +
 gcc/testsuite/gcc.c-torture/compile/pr97243.c      |   10 +
 gcc/testsuite/gcc.c-torture/execute/pr97073.c      |   21 +
 gcc/testsuite/gcc.dg/Warray-bounds-30.c            |    3 +-
 gcc/testsuite/gcc.dg/Warray-bounds-63.c            |   54 +
 gcc/testsuite/gcc.dg/Warray-bounds-64.c            |   60 +
 gcc/testsuite/gcc.dg/Warray-bounds-65.c            |  202 ++
 gcc/testsuite/gcc.dg/Warray-bounds-66.c            |  257 +++
 gcc/testsuite/gcc.dg/Warray-bounds-67.c            |   36 +
 gcc/testsuite/gcc.dg/Warray-parameter-2.c          |   45 +
 gcc/testsuite/gcc.dg/Warray-parameter-3.c          |   89 +
 gcc/testsuite/gcc.dg/Warray-parameter-4.c          |  119 ++
 gcc/testsuite/gcc.dg/Warray-parameter-5.c          |   14 +
 gcc/testsuite/gcc.dg/Warray-parameter-6.c          |    9 +
 gcc/testsuite/gcc.dg/Warray-parameter-7.c          |   25 +
 gcc/testsuite/gcc.dg/Warray-parameter-8.c          |   36 +
 gcc/testsuite/gcc.dg/Warray-parameter.c            |  187 ++
 .../gcc.dg/Wbuiltin-declaration-mismatch-9.c       |    3 +
 gcc/testsuite/gcc.dg/Wnonnull-4.c                  |  173 ++
 gcc/testsuite/gcc.dg/Wstringop-overflow-23.c       |   16 +-
 gcc/testsuite/gcc.dg/Wstringop-overflow-24.c       |    8 +-
 gcc/testsuite/gcc.dg/Wstringop-overflow-40.c       |  120 ++
 gcc/testsuite/gcc.dg/Wstringop-overflow-42.c       |    4 +
 gcc/testsuite/gcc.dg/Wstringop-overflow-43.c       |  178 ++
 gcc/testsuite/gcc.dg/Wstringop-overflow-44.c       |  129 ++
 gcc/testsuite/gcc.dg/Wvla-parameter-2.c            |   75 +
 gcc/testsuite/gcc.dg/Wvla-parameter-3.c            |   68 +
 gcc/testsuite/gcc.dg/Wvla-parameter-4.c            |   99 +
 gcc/testsuite/gcc.dg/Wvla-parameter-5.c            |   22 +
 gcc/testsuite/gcc.dg/Wvla-parameter-6.c            |   34 +
 gcc/testsuite/gcc.dg/Wvla-parameter-7.c            |   36 +
 gcc/testsuite/gcc.dg/Wvla-parameter.c              |  136 ++
 gcc/testsuite/gcc.dg/analyzer/bzip2-arg-parse-1.c  |   95 +
 gcc/testsuite/gcc.dg/analyzer/feasibility-2.c      |   20 +
 gcc/testsuite/gcc.dg/analyzer/getchar-1.c          |   19 +
 .../analyzer/loop-0-up-to-n-by-1-with-iter-obj.c   |    3 +-
 .../gcc.dg/analyzer/loop-n-down-to-1-by-1.c        |    4 +-
 gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1a.c |   20 +-
 gcc/testsuite/gcc.dg/analyzer/memcpy-1.c           |   43 +
 .../analyzer/pr93355-localealias-feasibility.c     |   79 +
 .../analyzer/pr93355-localealias-simplified.c      |   45 +
 .../gcc.dg/analyzer/pr93355-localealias.c          |  391 ++++
 gcc/testsuite/gcc.dg/analyzer/pr94851-1.c          |    3 +-
 gcc/testsuite/gcc.dg/analyzer/pr96646.c            |   24 +
 gcc/testsuite/gcc.dg/analyzer/pr96650-1-notrans.c  |   30 +
 gcc/testsuite/gcc.dg/analyzer/pr96650-1-trans.c    |   30 +
 gcc/testsuite/gcc.dg/analyzer/pr96650-2-notrans.c  |   30 +
 gcc/testsuite/gcc.dg/analyzer/pr96650-2-trans.c    |   30 +
 gcc/testsuite/gcc.dg/analyzer/pr96653.c            | 1104 +++++++++++
 gcc/testsuite/gcc.dg/analyzer/pr96841.c            |   23 +
 gcc/testsuite/gcc.dg/analyzer/pr97029.c            |    7 +
 gcc/testsuite/gcc.dg/analyzer/pr97130.c            |   10 +
 gcc/testsuite/gcc.dg/analyzer/pr97233.c            |    8 +
 gcc/testsuite/gcc.dg/analyzer/rhbz1878600.c        |   34 +
 .../gcc.dg/analyzer/signal-registration-loc.c      |   23 +
 gcc/testsuite/gcc.dg/analyzer/strcpy-1.c           |   18 +
 gcc/testsuite/gcc.dg/analyzer/strdup-1.c           |   21 +
 gcc/testsuite/gcc.dg/analyzer/strndup-1.c          |   21 +
 gcc/testsuite/gcc.dg/atomic/stdatomic-vm.c         |    1 +
 gcc/testsuite/gcc.dg/attr-access-2.c               |  122 ++
 gcc/testsuite/gcc.dg/attr-access-none.c            |    2 +-
 gcc/testsuite/gcc.dg/attr-access-read-write-2.c    |    4 +-
 gcc/testsuite/gcc.dg/attr-alloc_align-5.c          |   23 +
 gcc/testsuite/gcc.dg/attr-alloc_size-13.c          |   34 +
 gcc/testsuite/gcc.dg/attr-section.c                |   13 +
 gcc/testsuite/gcc.dg/builtin-apply2.c              |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c        |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/align-2.c        |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/align-3.c        |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/align-4.c        |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/align-5.c        |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/align-6.c        |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/align-as-1.c     |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c   |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c  |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c        |    4 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/inline5.c        |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/inline6.c        |   69 +
 gcc/testsuite/gcc.dg/debug/dwarf2/lang-c89.c       |    2 +-
 .../debug/dwarf2/noreturn-function-attribute.c     |    2 +-
 .../debug/dwarf2/noreturn-function-keyword.c       |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-5.c      |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-6.c      |    2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-7.c      |   16 +
 gcc/testsuite/gcc.dg/debug/dwarf2/pr41445-8.c      |   11 +
 gcc/testsuite/gcc.dg/debug/dwarf2/pr71855.c        |    2 +-
 gcc/testsuite/gcc.dg/dfp/composite-type.c          |    3 +
 gcc/testsuite/gcc.dg/format/pr96935.c              |    9 +
 gcc/testsuite/gcc.dg/gimplefe-44.c                 |    1 +
 gcc/testsuite/gcc.dg/gomp/block-7.c                |   12 +-
 gcc/testsuite/gcc.dg/ifcvt-3.c                     |    2 +-
 gcc/testsuite/gcc.dg/independent-cloneids-1.c      |   18 +-
 gcc/testsuite/gcc.dg/ipa/ipa-pta-13.c              |    2 +-
 gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c               |    2 +-
 gcc/testsuite/gcc.dg/ipa/ipa-sra-12.c              |    2 +-
 gcc/testsuite/gcc.dg/ipa/ipa-sra-13.c              |    2 +-
 gcc/testsuite/gcc.dg/ipa/ipa-sra-14.c              |    2 +-
 gcc/testsuite/gcc.dg/ipa/ipa-sra-15.c              |    2 +-
 gcc/testsuite/gcc.dg/ipa/remref-2a.c               |    2 +-
 gcc/testsuite/gcc.dg/ipa/symver1.c                 |    1 +
 gcc/testsuite/gcc.dg/lto/modref-1_0.c              |   14 +
 gcc/testsuite/gcc.dg/lto/modref-1_1.c              |   13 +
 gcc/testsuite/gcc.dg/pr87314-1.c                   |    4 +-
 gcc/testsuite/gcc.dg/pr94234-2.c                   |   39 +
 gcc/testsuite/gcc.dg/pr94234-3.c                   |   42 +
 gcc/testsuite/gcc.dg/pr94600-1.c                   |    7 +-
 gcc/testsuite/gcc.dg/pr94600-3.c                   |    7 +-
 gcc/testsuite/gcc.dg/pr96453.c                     |   22 +
 gcc/testsuite/gcc.dg/pr96466.c                     |   19 +
 gcc/testsuite/gcc.dg/pr97078.c                     |    9 +
 gcc/testsuite/gcc.dg/pr97192.c                     |   16 +
 gcc/testsuite/gcc.dg/pr97238.c                     |   12 +
 gcc/testsuite/gcc.dg/spellcheck-inttypes.c         |    2 +-
 gcc/testsuite/gcc.dg/store_merging_31.c            |   27 +
 gcc/testsuite/gcc.dg/store_merging_32.c            |  129 ++
 gcc/testsuite/gcc.dg/tls/thr-cse-1.c               |    5 +-
 gcc/testsuite/gcc.dg/torture/pr57147-1.c           |    4 +-
 gcc/testsuite/gcc.dg/torture/pr57147-3.c           |    3 +-
 gcc/testsuite/gcc.dg/torture/pr97135.c             |   21 +
 .../gcc.dg/torture/stackalign/builtin-apply-2.c    |    2 +-
 gcc/testsuite/gcc.dg/tree-ssa/20030807-10.c        |    2 +-
 gcc/testsuite/gcc.dg/tree-ssa/local-pure-const.c   |    2 +-
 gcc/testsuite/gcc.dg/tree-ssa/modref-1.c           |   45 +
 gcc/testsuite/gcc.dg/tree-ssa/modref-2.c           |   26 +
 gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-88.c         |   18 +
 gcc/testsuite/gcc.dg/uninit-37.c                   |  154 ++
 gcc/testsuite/gcc.dg/vect/bb-slp-48.c              |   55 +
 gcc/testsuite/gcc.dg/vect/bb-slp-49.c              |   28 +
 gcc/testsuite/gcc.dg/vect/bb-slp-7.c               |    3 +-
 gcc/testsuite/gcc.dg/vect/pr37027.c                |    2 +-
 gcc/testsuite/gcc.dg/vect/pr67790.c                |    1 +
 gcc/testsuite/gcc.dg/vect/pr92324-4.c              |    2 +
 gcc/testsuite/gcc.dg/vect/pr92558.c                |    2 +
 gcc/testsuite/gcc.dg/vect/pr95495.c                |    2 +
 gcc/testsuite/gcc.dg/vect/pr97081-2.c              |   32 +
 gcc/testsuite/gcc.dg/vect/pr97081.c                |   26 +
 gcc/testsuite/gcc.dg/vect/pr97085.c                |   13 +
 gcc/testsuite/gcc.dg/vect/pr97139.c                |   27 +
 gcc/testsuite/gcc.dg/vect/pr97173.c                |   19 +
 gcc/testsuite/gcc.dg/vect/pr97236.c                |   43 +
 gcc/testsuite/gcc.dg/vect/pr97241.c                |   19 +
 gcc/testsuite/gcc.dg/vect/slp-reduc-1.c            |    2 +-
 gcc/testsuite/gcc.dg/vect/slp-reduc-2.c            |    1 +
 gcc/testsuite/gcc.dg/vect/slp-reduc-3.c            |    1 +
 gcc/testsuite/gcc.dg/vect/slp-reduc-4.c            |    1 +
 gcc/testsuite/gcc.dg/vect/slp-reduc-5.c            |    2 +-
 gcc/testsuite/gcc.dg/vect/slp-reduc-7.c            |    2 +-
 gcc/testsuite/gcc.dg/vect/vect-reduc-in-order-4.c  |    1 +
 gcc/testsuite/gcc.dg/vect/vect-simd-17.c           |  304 +++
 gcc/testsuite/gcc.dg/vect/vect-simd-18.c           |   40 +
 gcc/testsuite/gcc.dg/vect/vect-simd-19.c           |   40 +
 gcc/testsuite/gcc.dg/vect/vect-simd-20.c           |   43 +
 gcc/testsuite/gcc.target/aarch64/acle/armv8-r.c    |    6 +
 .../aarch64/advsimd-intrinsics/arm-neon-ref.h      |    8 +-
 .../aarch64/advsimd-intrinsics/vreinterpret_p128.c |   19 +
 .../aarch64/advsimd-intrinsics/vtrn_half.c         |    3 -
 .../aarch64/advsimd-intrinsics/vuzp_half.c         |    3 -
 .../aarch64/advsimd-intrinsics/vzip_half.c         |    3 -
 gcc/testsuite/gcc.target/aarch64/movtf_1.c         |   87 +
 gcc/testsuite/gcc.target/aarch64/movti_1.c         |   87 +
 gcc/testsuite/gcc.target/aarch64/pr96313.c         |    8 +
 gcc/testsuite/gcc.target/aarch64/pr96968.c         |   28 +
 gcc/testsuite/gcc.target/aarch64/pr97150.c         |   14 +
 .../gcc.target/aarch64/scalar_intrinsics.c         |    6 +-
 .../gcc.target/aarch64/simd/trn_zip_p64_1.c        |   44 +
 .../gcc.target/aarch64/simd/vadd_poly_1.c          |   50 +
 .../gcc.target/aarch64/simd/vceq_poly_1.c          |   29 +
 .../gcc.target/aarch64/simd/vcls_unsigned_1.c      |   54 +
 .../gcc.target/aarch64/simd/vldrq_p128_1.c         |   13 +
 .../gcc.target/aarch64/simd/vrndns_f32_1.c         |   13 +
 .../gcc.target/aarch64/simd/vstrq_p128_1.c         |   12 +
 .../gcc.target/aarch64/stack-protector-3.c         |   45 +
 .../gcc.target/aarch64/stack-protector-4.c         |    6 +
 .../gcc.target/aarch64/stack-protector-5.c         |   23 +
 .../gcc.target/aarch64/stack-protector-6.c         |    8 +
 .../gcc.target/aarch64/stack-protector-7.c         |   25 +
 gcc/testsuite/gcc.target/aarch64/sve/clastb_8.c    |    5 +-
 .../gcc.target/aarch64/sve/cost_model_10.c         |   12 +
 .../gcc.target/aarch64/sve/cost_model_5.c          |    4 +-
 gcc/testsuite/gcc.target/aarch64/sve/pr96915.c     |   11 +
 .../gcc.target/aarch64/sve/struct_vect_14.c        |    8 +-
 .../gcc.target/aarch64/sve/struct_vect_15.c        |    8 +-
 .../gcc.target/aarch64/sve/struct_vect_16.c        |    8 +-
 .../gcc.target/aarch64/sve/struct_vect_17.c        |    8 +-
 .../gcc.target/arm/armv8_1m-fp16-move-1.c          |  418 +++++
 .../gcc.target/arm/armv8_1m-fp32-move-1.c          |  420 +++++
 .../gcc.target/arm/armv8_1m-fp64-move-1.c          |  426 +++++
 .../gcc.target/arm/armv8_2-fp16-arith-2.c          |   20 +-
 gcc/testsuite/gcc.target/arm/csinc-1.c             |   24 +
 gcc/testsuite/gcc.target/arm/csinv-1.c             |   24 +
 gcc/testsuite/gcc.target/arm/csneg.c               |   34 +
 gcc/testsuite/gcc.target/arm/lob1.c                |    2 +-
 gcc/testsuite/gcc.target/arm/lob2.c                |    2 +-
 gcc/testsuite/gcc.target/arm/lob3.c                |    2 +-
 gcc/testsuite/gcc.target/arm/lob4.c                |    2 +-
 gcc/testsuite/gcc.target/arm/lob5.c                |    2 +-
 gcc/testsuite/gcc.target/arm/lob6.c                |    2 +-
 gcc/testsuite/gcc.target/arm/lto/pr96939_0.c       |   15 +
 gcc/testsuite/gcc.target/arm/lto/pr96939_1.c       |   10 +
 .../arm/mve/intrinsics/mve-vldstr16-no-writeback.c |    5 +-
 .../gcc.target/arm/mve/intrinsics/mve_fp_vaddq_n.c |   47 +
 .../gcc.target/arm/mve/intrinsics/mve_vaddq_n.c    |   31 +
 .../arm/mve/intrinsics/vaddq_m_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vaddq_m_n_f32-1.c           |   12 +
 .../arm/mve/intrinsics/vaddq_x_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vaddq_x_n_f32-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpeqq_m_n_f16-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpeqq_m_n_f32-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpeqq_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpeqq_n_f32-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpgeq_m_n_f16-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpgeq_m_n_f32-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpgeq_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpgeq_n_f32-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpgtq_m_n_f16-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpgtq_m_n_f32-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpgtq_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpgtq_n_f32-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpleq_m_n_f16-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpleq_m_n_f32-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpleq_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpleq_n_f32-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpltq_m_n_f16-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpltq_m_n_f32-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpltq_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpltq_n_f32-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpneq_m_n_f16-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpneq_m_n_f32-1.c         |   12 +
 .../arm/mve/intrinsics/vcmpneq_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vcmpneq_n_f32-1.c           |   12 +
 .../arm/mve/intrinsics/vfmaq_m_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vfmaq_m_n_f32-1.c           |   12 +
 .../gcc.target/arm/mve/intrinsics/vfmaq_n_f16-1.c  |   12 +
 .../gcc.target/arm/mve/intrinsics/vfmaq_n_f32-1.c  |   12 +
 .../arm/mve/intrinsics/vfmasq_m_n_f16-1.c          |   12 +
 .../arm/mve/intrinsics/vfmasq_m_n_f32-1.c          |   12 +
 .../gcc.target/arm/mve/intrinsics/vfmasq_n_f16-1.c |   12 +
 .../gcc.target/arm/mve/intrinsics/vfmasq_n_f32-1.c |   12 +
 .../arm/mve/intrinsics/vmaxnmavq_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vmaxnmavq_f32-1.c           |   12 +
 .../arm/mve/intrinsics/vmaxnmavq_p_f16-1.c         |   12 +
 .../arm/mve/intrinsics/vmaxnmavq_p_f32-1.c         |   12 +
 .../gcc.target/arm/mve/intrinsics/vmaxnmvq_f16-1.c |   12 +
 .../gcc.target/arm/mve/intrinsics/vmaxnmvq_f32-1.c |   12 +
 .../arm/mve/intrinsics/vmaxnmvq_p_f16-1.c          |   12 +
 .../arm/mve/intrinsics/vmaxnmvq_p_f32-1.c          |   12 +
 .../arm/mve/intrinsics/vminnmavq_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vminnmavq_f32-1.c           |   12 +
 .../arm/mve/intrinsics/vminnmavq_p_f16-1.c         |   12 +
 .../arm/mve/intrinsics/vminnmavq_p_f32-1.c         |   12 +
 .../gcc.target/arm/mve/intrinsics/vminnmvq_f16-1.c |   12 +
 .../gcc.target/arm/mve/intrinsics/vminnmvq_f32-1.c |   12 +
 .../arm/mve/intrinsics/vminnmvq_p_f16-1.c          |   12 +
 .../arm/mve/intrinsics/vminnmvq_p_f32-1.c          |   12 +
 .../arm/mve/intrinsics/vmulq_m_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vmulq_m_n_f32-1.c           |   12 +
 .../gcc.target/arm/mve/intrinsics/vmulq_n_f16-1.c  |   12 +
 .../gcc.target/arm/mve/intrinsics/vmulq_n_f32-1.c  |   12 +
 .../arm/mve/intrinsics/vmulq_x_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vmulq_x_n_f32-1.c           |   12 +
 .../arm/mve/intrinsics/vsetq_lane_f16-1.c          |   13 +
 .../arm/mve/intrinsics/vsetq_lane_f32-1.c          |   13 +
 .../arm/mve/intrinsics/vsubq_m_n_f16-1.c           |   12 +
 .../arm/mve/intrinsics/vsubq_m_n_f32-1.c           |   12 +
 .../gcc.target/arm/mve/intrinsics/vsubq_n_f16-1.c  |   12 +
 .../gcc.target/arm/mve/intrinsics/vsubq_n_f32-1.c  |   12 +
 .../arm/mve/intrinsics/vsubq_x_n_f16-1.c           |   13 +
 .../arm/mve/intrinsics/vsubq_x_n_f32-1.c           |   13 +
 gcc/testsuite/gcc.target/arm/pr95646.c             |   11 +-
 gcc/testsuite/gcc.target/arm/stack-protector-3.c   |   38 +
 gcc/testsuite/gcc.target/arm/stack-protector-4.c   |    6 +
 gcc/testsuite/gcc.target/arm/stack-protector-5.c   |   21 +
 gcc/testsuite/gcc.target/arm/stack-protector-6.c   |    8 +
 gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-1.c   |    2 +-
 gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-2.c   |    2 +-
 gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-3.c   |    2 +-
 gcc/testsuite/gcc.target/arm/thumb2-cond-cmp-4.c   |    2 +-
 gcc/testsuite/gcc.target/bpf/diag-sdiv.c           |   12 +
 gcc/testsuite/gcc.target/bpf/diag-smod.c           |   12 +
 gcc/testsuite/gcc.target/bpf/nop-1.c               |   14 +
 gcc/testsuite/gcc.target/bpf/xbpf-sdiv-1.c         |   14 +
 gcc/testsuite/gcc.target/bpf/xbpf-smod-1.c         |   14 +
 gcc/testsuite/gcc.target/i386/amx-check.h          |  185 ++
 gcc/testsuite/gcc.target/i386/amxbf16-asmatt-1.c   |   13 +
 gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c |    9 +
 gcc/testsuite/gcc.target/i386/amxbf16-dpbf16ps-2.c |   85 +
 gcc/testsuite/gcc.target/i386/amxint8-asmatt-1.c   |   19 +
 gcc/testsuite/gcc.target/i386/amxint8-asmintel-1.c |   15 +
 gcc/testsuite/gcc.target/i386/amxint8-dpbssd-2.c   |   64 +
 gcc/testsuite/gcc.target/i386/amxint8-dpbsud-2.c   |   63 +
 gcc/testsuite/gcc.target/i386/amxint8-dpbusd-2.c   |   63 +
 gcc/testsuite/gcc.target/i386/amxint8-dpbuud-2.c   |   63 +
 gcc/testsuite/gcc.target/i386/amxtile-2.c          |   48 +
 gcc/testsuite/gcc.target/i386/amxtile-asmatt-1.c   |   30 +
 gcc/testsuite/gcc.target/i386/amxtile-asmintel-1.c |   24 +
 .../gcc.target/i386/avx512f-broadcast-pr87767-1.c  |    1 +
 .../gcc.target/i386/avx512f-broadcast-pr87767-3.c  |    1 +
 .../gcc.target/i386/avx512f-broadcast-pr87767-5.c  |    1 +
 .../gcc.target/i386/avx512f-broadcast-pr87767-6.c  |    2 +-
 .../gcc.target/i386/avx512f-broadcast-pr87767-7.c  |    1 +
 gcc/testsuite/gcc.target/i386/avx512f-pr97028.c    |   18 +
 .../gcc.target/i386/avx512vl-broadcast-pr87767-1.c |    1 +
 .../gcc.target/i386/avx512vl-broadcast-pr87767-3.c |    1 +
 .../gcc.target/i386/avx512vl-broadcast-pr87767-5.c |    1 +
 gcc/testsuite/gcc.target/i386/funcspec-56.inc      |    6 +
 gcc/testsuite/gcc.target/i386/l_fma_double_1.c     |    2 +-
 gcc/testsuite/gcc.target/i386/l_fma_double_2.c     |    2 +-
 gcc/testsuite/gcc.target/i386/l_fma_double_3.c     |    2 +-
 gcc/testsuite/gcc.target/i386/l_fma_double_4.c     |    2 +-
 gcc/testsuite/gcc.target/i386/l_fma_double_5.c     |    2 +-
 gcc/testsuite/gcc.target/i386/l_fma_double_6.c     |    2 +-
 gcc/testsuite/gcc.target/i386/l_fma_float_1.c      |    2 +-
 gcc/testsuite/gcc.target/i386/l_fma_float_2.c      |    2 +-
 gcc/testsuite/gcc.target/i386/l_fma_float_3.c      |    2 +-
 gcc/testsuite/gcc.target/i386/l_fma_float_4.c      |    2 +-
 gcc/testsuite/gcc.target/i386/l_fma_float_5.c      |    2 +-
 gcc/testsuite/gcc.target/i386/l_fma_float_6.c      |    2 +-
 gcc/testsuite/gcc.target/i386/m128-check.h         |    1 +
 gcc/testsuite/gcc.target/i386/movdir64b.c          |   23 +
 gcc/testsuite/gcc.target/i386/movdiri32.c          |   20 +
 gcc/testsuite/gcc.target/i386/movdiri64.c          |   20 +
 gcc/testsuite/gcc.target/i386/pr78904-4a.c         |    2 +-
 gcc/testsuite/gcc.target/i386/pr82673.c            |    2 +-
 gcc/testsuite/gcc.target/i386/pr95021-3.c          |    2 +-
 gcc/testsuite/gcc.target/i386/pr96814.c            |   19 +
 gcc/testsuite/gcc.target/i386/pr96827.c            |   41 +
 gcc/testsuite/gcc.target/i386/pr96861.c            |   38 +
 gcc/testsuite/gcc.target/i386/pr97032.c            |   23 +
 gcc/testsuite/gcc.target/i386/sse-12.c             |    2 +-
 gcc/testsuite/gcc.target/i386/sse-13.c             |    2 +-
 gcc/testsuite/gcc.target/i386/sse-14.c             |    2 +-
 gcc/testsuite/gcc.target/i386/sse-22.c             |    5 +-
 gcc/testsuite/gcc.target/i386/sse-23.c             |    3 +-
 gcc/testsuite/gcc.target/i386/sse2-mmx-pinsrw.c    |    8 +-
 gcc/testsuite/gcc.target/i386/x86-64-v2.c          |  116 ++
 gcc/testsuite/gcc.target/i386/x86-64-v3-haswell.c  |   18 +
 gcc/testsuite/gcc.target/i386/x86-64-v3-skylake.c  |   21 +
 gcc/testsuite/gcc.target/i386/x86-64-v3.c          |  116 ++
 gcc/testsuite/gcc.target/i386/x86-64-v4.c          |  116 ++
 gcc/testsuite/gcc.target/i386/xsave-avx-1.c        |   12 +
 .../gcc.target/msp430/operand-modifiers-bad.c      |   15 +
 .../gcc.target/msp430/operand-modifiers.c          |  167 +-
 gcc/testsuite/gcc.target/nvptx/int128.c            |   15 +
 .../gcc.target/powerpc/p9-vec-length-epil-1.c      |    4 +-
 .../gcc.target/powerpc/p9-vec-length-epil-7.c      |    2 +-
 .../gcc.target/powerpc/p9-vec-length-epil-8.c      |    4 +-
 .../gcc.target/powerpc/p9-vec-length-full-6.c      |    9 +-
 gcc/testsuite/gcc.target/powerpc/pr96139-a.c       |    4 +-
 gcc/testsuite/gcc.target/powerpc/pr96139-b.c       |    4 +-
 gcc/testsuite/gcc.target/powerpc/pr96139-c.c       |    2 +-
 gcc/testsuite/gcc.target/powerpc/pr97019.c         |   83 +
 gcc/testsuite/gcc.target/powerpc/sse4_1-pinsrb.c   |  110 ++
 gcc/testsuite/gcc.target/powerpc/sse4_1-pinsrd.c   |   73 +
 gcc/testsuite/gcc.target/powerpc/sse4_1-pinsrq.c   |   67 +
 gcc/testsuite/gcc.target/riscv/predef-3.c          |    6 +-
 gcc/testsuite/gcc.target/riscv/predef-6.c          |    6 +-
 gcc/testsuite/gcc.target/riscv/shorten-memrefs-8.c |   27 +
 gcc/testsuite/gcc.target/s390/load-and-test-fp-1.c |   21 +-
 gcc/testsuite/gcc.target/s390/load-and-test-fp-2.c |   17 +-
 gcc/testsuite/gcc.target/s390/load-and-test-fp.h   |   12 +
 gcc/testsuite/gdc.dg/Waddress.d                    |   12 +
 gcc/testsuite/gdc.dg/Wcastresult1.d                |   18 +
 gcc/testsuite/gdc.dg/Wcastresult2.d                |   12 +
 gcc/testsuite/gdc.dg/pr97002.d                     |   55 +
 gcc/testsuite/gfortran.dg/alloc_comp_result_2.f90  |    3 +-
 gcc/testsuite/gfortran.dg/alloc_comp_result_3.f90  |   75 +
 gcc/testsuite/gfortran.dg/check_bits_2.f90         |   38 +
 gcc/testsuite/gfortran.dg/contiguous_11.f90        |   45 +
 gcc/testsuite/gfortran.dg/contiguous_4.f90         |    6 +-
 gcc/testsuite/gfortran.dg/contiguous_7.f90         |   16 +-
 gcc/testsuite/gfortran.dg/gomp/openmp-simd-6.f90   |   62 +
 gcc/testsuite/gfortran.dg/pr97036.f90              |   27 +
 gcc/testsuite/gfortran.dg/pr97095.f                |   27 +
 gcc/testsuite/gfortran.dg/select_type_50.f90       |   52 +
 gcc/testsuite/gnat.dg/addr16.adb                   |   14 +
 gcc/testsuite/gnat.dg/addr16_pkg.ads               |    9 +
 gcc/testsuite/gnat.dg/concat4.adb                  |   17 +
 gcc/testsuite/gnat.dg/discr59.adb                  |   24 +
 gcc/testsuite/gnat.dg/discr59_pkg1.ads             |   35 +
 gcc/testsuite/gnat.dg/discr59_pkg2.ads             |   15 +
 gcc/testsuite/gnat.dg/pack27.adb                   |   10 +
 gcc/testsuite/gnat.dg/pack27_pkg.ads               |   33 +
 gcc/testsuite/gnat.dg/specs/discr7.ads             |   14 +
 gcc/testsuite/gnat.dg/specs/size_clause5.ads       |   16 +
 gcc/testsuite/gnat.dg/thunk1.adb                   |    9 +
 gcc/testsuite/gnat.dg/thunk1_pkg1.ads              |    7 +
 gcc/testsuite/gnat.dg/thunk1_pkg2.adb              |   10 +
 gcc/testsuite/gnat.dg/thunk1_pkg2.ads              |   14 +
 gcc/testsuite/go.test/test/fixedbugs/issue4458.go  |    2 +-
 gcc/testsuite/jit.dg/all-non-failing-tests.h       |    7 +
 gcc/testsuite/jit.dg/test-global-set-initializer.c |   78 +
 gcc/testsuite/lib/target-supports.exp              |   77 +-
 gcc/testsuite/obj-c++.dg/syntax-error-9.mm         |    2 +-
 gcc/timevar.c                                      |    8 +-
 gcc/timevar.def                                    |    2 +
 gcc/toplev.c                                       |   10 +-
 gcc/tree-eh.c                                      |   18 +-
 gcc/tree-if-conv.c                                 |  107 +-
 gcc/tree-pass.h                                    |    2 +
 gcc/tree-predcom.c                                 |    3 +-
 gcc/tree-pretty-print.c                            |    4 +-
 gcc/tree-ssa-alias.c                               |  200 +-
 gcc/tree-ssa-alias.h                               |    2 +-
 gcc/tree-ssa-ccp.c                                 |   22 +-
 gcc/tree-ssa-copy.c                                |   27 +-
 gcc/tree-ssa-loop-ch.c                             |    3 +-
 gcc/tree-ssa-loop-im.c                             |   11 +-
 gcc/tree-ssa-loop-ivcanon.c                        |    9 +-
 gcc/tree-ssa-loop-manip.c                          |    3 +-
 gcc/tree-ssa-loop-niter.c                          |   20 +-
 gcc/tree-ssa-loop-prefetch.c                       |    7 +-
 gcc/tree-ssa-math-opts.c                           |    8 +-
 gcc/tree-ssa-propagate.c                           |   15 +-
 gcc/tree-ssa-propagate.h                           |    2 -
 gcc/tree-ssa-reassoc.c                             |    2 +-
 gcc/tree-ssa-sccvn.c                               |   38 +
 gcc/tree-ssa-strlen.c                              |   14 +-
 gcc/tree-ssa-structalias.c                         |    2 +
 gcc/tree-ssa-uninit.c                              |   66 +-
 gcc/tree-streamer-in.c                             |    9 +-
 gcc/tree-switch-conversion.c                       |   40 +-
 gcc/tree-switch-conversion.h                       |    7 +-
 gcc/tree-vect-data-refs.c                          |    5 +
 gcc/tree-vect-loop-manip.c                         |   83 +-
 gcc/tree-vect-loop.c                               |  298 +--
 gcc/tree-vect-patterns.c                           |   11 +-
 gcc/tree-vect-slp.c                                |  393 ++--
 gcc/tree-vect-stmts.c                              |   20 +-
 gcc/tree-vectorizer.c                              |   10 +-
 gcc/tree-vectorizer.h                              |   16 +-
 gcc/tree.c                                         |   16 +-
 gcc/tree.h                                         |   15 +-
 gcc/value-prof.c                                   |    5 +-
 gcc/value-query.cc                                 |    1 +
 gcc/value-query.h                                  |   59 +-
 gcc/value-range.cc                                 |   19 +-
 gcc/value-range.h                                  |   36 +-
 gcc/varpool.c                                      |    2 +-
 gcc/vec.h                                          |   13 +
 include/ChangeLog                                  |   14 +
 include/dwarf2.def                                 |   11 +
 include/dwarf2.h                                   |   25 +-
 include/gomp-constants.h                           |    3 +
 libatomic/ChangeLog                                |   12 +
 libatomic/config/nvptx/host-config.h               |   56 +
 libatomic/config/nvptx/lock.c                      |   56 +
 libatomic/config/t-aix                             |    5 +-
 libatomic/configure.tgt                            |    3 +
 libatomic/libatomic_i.h                            |    2 +
 libbacktrace/ChangeLog                             |  130 ++
 libbacktrace/Makefile.am                           |  107 +-
 libbacktrace/Makefile.in                           |  189 +-
 libbacktrace/config.h.in                           |    3 +
 libbacktrace/configure                             |  242 ++-
 libbacktrace/configure.ac                          |   17 +-
 libbacktrace/dwarf.c                               |   38 +-
 libbacktrace/elf.c                                 | 1740 +++++++++++++++--
 libbacktrace/fileline.c                            |   27 +
 libbacktrace/internal.h                            |   34 +
 libbacktrace/macho.c                               |    6 +
 libbacktrace/mtest.c                               |  410 ++++
 libbacktrace/xztest.c                              |  508 +++++
 libcc1/ChangeLog                                   |   19 +
 libcc1/libcp1plugin.cc                             |   20 +-
 libcpp/ChangeLog                                   |   12 +
 libcpp/include/line-map.h                          |    6 +
 libcpp/lex.c                                       |    4 +-
 libcpp/line-map.c                                  |    2 +-
 libffi/ChangeLog                                   |   12 +
 libffi/src/powerpc/linux64.S                       |    8 +
 libffi/src/powerpc/linux64_closure.S               |   16 +-
 libgcc/ChangeLog                                   |   38 +
 libgcc/config.host                                 |    2 +-
 libgcc/config/aarch64/aarch64-unwind.h             |    3 +-
 libgcc/config/aarch64/libgcc-softfp.ver            |   28 +
 libgcc/config/aarch64/t-softfp                     |    1 +
 libgcc/config/arm/fp16.c                           |   10 +-
 libgcc/config/riscv/t-elf                          |    2 +
 libgcc/config/rs6000/morestack.S                   |   30 +-
 libgcc/config/rs6000/t-linux                       |    7 +-
 libgcc/config/rs6000/t-slibgcc-aix                 |   21 +-
 libgcc/config/rs6000/tramp.S                       |    6 +
 libgcc/libgcov-driver.c                            |    2 +-
 libgfortran/ChangeLog                              |   23 +
 libgfortran/config/t-aix                           |    9 +-
 libgfortran/generated/unpack_c10.c                 |    8 +-
 libgfortran/generated/unpack_c16.c                 |    8 +-
 libgfortran/generated/unpack_c4.c                  |    8 +-
 libgfortran/generated/unpack_c8.c                  |    8 +-
 libgfortran/generated/unpack_i1.c                  |    8 +-
 libgfortran/generated/unpack_i16.c                 |    8 +-
 libgfortran/generated/unpack_i2.c                  |    8 +-
 libgfortran/generated/unpack_i4.c                  |    8 +-
 libgfortran/generated/unpack_i8.c                  |    8 +-
 libgfortran/generated/unpack_r10.c                 |    8 +-
 libgfortran/generated/unpack_r16.c                 |    8 +-
 libgfortran/generated/unpack_r4.c                  |    8 +-
 libgfortran/generated/unpack_r8.c                  |    8 +-
 libgfortran/m4/unpack.m4                           |    8 +-
 libgo/MERGE                                        |    2 +-
 libgo/Makefile.am                                  |    2 +-
 libgo/Makefile.in                                  |    2 +-
 libgo/VERSION                                      |    2 +-
 libgo/configure                                    |   17 +-
 libgo/configure.ac                                 |   10 +-
 libgo/go/cmd/cgo/main.go                           |    2 +
 libgo/go/cmd/go/internal/test/test.go              |    8 +-
 libgo/go/cmd/go/internal/test/testflag.go          |   29 +-
 .../go/testdata/script/link_syso_issue33139.txt    |    3 +-
 libgo/go/cmd/go/testdata/script/test_flags.txt     |  132 ++
 libgo/go/cmd/internal/sys/arch.go                  |   11 +
 libgo/go/cmd/internal/test2json/test2json.go       |   65 +-
 .../internal/test2json/testdata/benchshort.json    |    1 -
 .../go/cmd/internal/test2json/testdata/empty.json  |    0
 .../go/cmd/internal/test2json/testdata/empty.test  |    0
 .../internal/test2json/testdata/issue29755.json    |   38 +
 .../internal/test2json/testdata/issue29755.test    |   27 +
 .../go/cmd/internal/test2json/testdata/panic.json  |   19 +
 .../go/cmd/internal/test2json/testdata/panic.test  |   17 +
 .../go/cmd/internal/test2json/testdata/smiley.json |   22 +-
 .../go/cmd/internal/test2json/testdata/smiley.test |   22 +-
 libgo/go/cmd/internal/test2json/testdata/vet.json  |   22 +-
 libgo/go/cmd/internal/test2json/testdata/vet.test  |   22 +-
 libgo/go/cmd/test2json/main.go                     |    6 +-
 libgo/go/debug/elf/file.go                         |   43 +
 libgo/go/go/internal/gccgoimporter/importer.go     |    2 +-
 libgo/go/go/types/sizes.go                         |    4 +-
 libgo/go/golang.org/x/sys/cpu/cpu_riscv.go         |    7 +
 .../x/tools/go/analysis/passes/asmdecl/asmdecl.go  |    2 +
 libgo/go/internal/bytealg/indexbyte_generic.go     |    2 +-
 libgo/go/internal/bytealg/indexbyte_native.go      |    2 +-
 libgo/go/internal/cpu/cpu_no_init.go               |    1 +
 .../go/internal/cpu/{cpu_ppc64x.go => cpu_ppcx.go} |    2 +-
 libgo/go/internal/poll/copy_file_range_linux.go    |   10 +-
 .../internal/syscall/unix/sysnum_linux_generic.go  |    2 +-
 libgo/go/net/fd_posix.go                           |    2 +-
 libgo/go/net/http/cgi/child.go                     |   36 +-
 libgo/go/net/http/cgi/child_test.go                |   69 +
 libgo/go/net/http/cgi/integration_test.go          |   53 +-
 libgo/go/net/http/fcgi/child.go                    |   39 +-
 libgo/go/net/http/fcgi/fcgi_test.go                |   53 +
 libgo/go/net/interface_aix.go                      |    2 -
 libgo/go/net/mail/message.go                       |   13 +-
 libgo/go/net/mail/message_test.go                  |   32 +
 libgo/go/runtime/checkptr_test.go                  |    1 +
 libgo/go/runtime/gcinfo_test.go                    |    2 +-
 libgo/go/runtime/hash32.go                         |    2 +-
 libgo/go/runtime/lfstack_32bit.go                  |    2 +-
 libgo/go/runtime/lockrank_off.go                   |   10 +
 libgo/go/runtime/mkpreempt.go                      |    6 +
 libgo/go/runtime/mpagealloc_32bit.go               |    2 +-
 libgo/go/runtime/os_aix.go                         |   11 +-
 libgo/go/runtime/testdata/testprog/checkptr.go     |    8 +
 libgo/go/sync/map.go                               |    1 +
 libgo/go/sync/map_test.go                          |   24 +
 libgo/go/syscall/endian_little.go                  |    2 +-
 libgo/go/syscall/export_aix_test.go                |   16 +
 libgo/go/syscall/export_unix_test.go               |    2 +-
 libgo/go/syscall/libcall_aix.go                    |    3 -
 libgo/go/syscall/libcall_glibc.go                  |    2 +-
 libgo/go/syscall/libcall_linux.go                  |    2 +-
 libgo/go/syscall/syscall_aix_ppc.go                |    3 +
 libgo/go/testing/testing.go                        |   29 +-
 libgo/match.sh                                     |    4 +-
 libgo/merge.sh                                     |    4 +-
 libgo/misc/cgo/testcshared/testdata/libgo2/dup2.go |    2 +-
 libgo/misc/cgo/testcshared/testdata/libgo2/dup3.go |    2 +-
 libgo/mksysinfo.sh                                 |    9 +-
 libgo/runtime/go-varargs.c                         |   18 +
 libgo/sysinfo.c                                    |   10 +
 libgo/testsuite/gotest                             |    4 +-
 libgomp/ChangeLog                                  |   77 +
 libgomp/config/gcn/bar.c                           |   15 +-
 libgomp/config/nvptx/atomic.c                      |   18 +
 libgomp/config/nvptx/bar.c                         |   18 +-
 libgomp/config/t-aix                               |    5 +-
 libgomp/libgomp.h                                  |    3 +
 libgomp/parallel.c                                 |    9 +-
 libgomp/plugin/plugin-nvptx.c                      |    1 +
 libgomp/target.c                                   |  184 +-
 libgomp/testsuite/libgomp.c++/pr96390.C            |   49 +
 libgomp/testsuite/libgomp.c++/udr-3.C              |    1 +
 .../nested-parallel-unbalanced.c                   |   31 +
 libgomp/testsuite/libgomp.c-c++-common/pr96390.c   |   26 +
 .../testsuite/libgomp.c-c++-common/reduction-16.c  |    1 +
 libgomp/testsuite/libgomp.c/loop-25.c              |  296 +++
 .../testsuite/libgomp.fortran/declare-target-3.f90 |   45 +
 .../testsuite/libgomp.fortran/map-alloc-ptr-1.f90  |  114 ++
 .../testsuite/libgomp.fortran/map-alloc-ptr-2.f90  |   86 +
 libgomp/testsuite/libgomp.fortran/pr66199-5.f90    |    2 +-
 libiberty/ChangeLog                                |    5 +
 libiberty/dwarfnames.c                             |    7 +
 libitm/config/powerpc/sjlj.S                       |   18 +-
 libphobos/ChangeLog                                |   22 +
 libphobos/Makefile.am                              |   10 +-
 libphobos/Makefile.in                              |   12 +-
 libphobos/configure                                |   15 +-
 libphobos/configure.ac                             |    8 +-
 libphobos/libdruntime/Makefile.am                  |    6 +-
 libphobos/libdruntime/Makefile.in                  |    8 +-
 libphobos/libdruntime/core/thread.d                |   43 +-
 libphobos/libdruntime/gcc/config.d.in              |    3 -
 libphobos/src/Makefile.am                          |    5 +-
 libphobos/src/Makefile.in                          |    7 +-
 libphobos/testsuite/Makefile.in                    |    2 +-
 libphobos/testsuite/testsuite_flags.in             |    2 +-
 libsanitizer/ChangeLog                             |    7 +
 libsanitizer/libbacktrace/backtrace-rename.h       |    3 +
 libstdc++-v3/ChangeLog                             |  453 +++++
 libstdc++-v3/config/abi/pre/gnu.ver                |   10 +-
 libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h        |    7 +-
 libstdc++-v3/config/os/aix/t-aix                   |   12 +-
 libstdc++-v3/doc/html/manual/configure.html        |    3 +-
 libstdc++-v3/doc/html/manual/status.html           |    4 +-
 libstdc++-v3/doc/xml/manual/configure.xml          |    3 +-
 libstdc++-v3/include/Makefile.am                   |    5 +-
 libstdc++-v3/include/Makefile.in                   |    5 +-
 libstdc++-v3/include/bits/align.h                  |  110 ++
 libstdc++-v3/include/bits/atomic_base.h            |   66 +-
 libstdc++-v3/include/bits/atomic_futex.h           |   93 +-
 libstdc++-v3/include/bits/c++config                |   11 +-
 libstdc++-v3/include/bits/codecvt.h                |    4 +-
 libstdc++-v3/include/bits/fs_path.h                |    2 +-
 libstdc++-v3/include/bits/iterator_concepts.h      |    2 +-
 libstdc++-v3/include/bits/locale_conv.h            |    4 +-
 libstdc++-v3/include/bits/locale_facets_nonio.tcc  |   14 +-
 libstdc++-v3/include/bits/range_access.h           |  827 +-------
 libstdc++-v3/include/bits/ranges_algo.h            |    1 +
 libstdc++-v3/include/bits/ranges_algobase.h        |    6 +-
 libstdc++-v3/include/bits/ranges_base.h            |  887 +++++++++
 .../include/bits/{range_cmp.h => ranges_cmp.h}     |    8 +-
 libstdc++-v3/include/bits/ranges_util.h            |  417 +++++
 libstdc++-v3/include/bits/regex_error.h            |    4 +-
 libstdc++-v3/include/bits/stl_algo.h               |    5 +
 libstdc++-v3/include/bits/stl_iterator.h           |   20 +-
 libstdc++-v3/include/c_global/cmath                |    4 +-
 .../include/experimental/bits/shared_ptr.h         |    6 +
 libstdc++-v3/include/experimental/string_view      |    1 +
 libstdc++-v3/include/experimental/type_traits      |    2 +-
 libstdc++-v3/include/ext/atomicity.h               |   35 +-
 libstdc++-v3/include/ext/new_allocator.h           |    2 +-
 libstdc++-v3/include/std/chrono                    |   28 +-
 libstdc++-v3/include/std/condition_variable        |   21 +-
 libstdc++-v3/include/std/functional                |    6 +-
 libstdc++-v3/include/std/memory                    |   60 +-
 libstdc++-v3/include/std/memory_resource           |    6 +-
 libstdc++-v3/include/std/ranges                    |  553 ++----
 libstdc++-v3/include/std/span                      |    5 +-
 libstdc++-v3/include/std/string_view               |    1 +
 libstdc++-v3/include/std/tuple                     |    2 +-
 libstdc++-v3/include/std/type_traits               |   29 +-
 libstdc++-v3/include/std/version                   |   10 +-
 libstdc++-v3/libsupc++/Makefile.am                 |   22 -
 libstdc++-v3/libsupc++/Makefile.in                 |   22 -
 libstdc++-v3/libsupc++/eh_call.cc                  |    4 +-
 libstdc++-v3/libsupc++/guard.cc                    |   47 +-
 libstdc++-v3/src/c++11/futex.cc                    |  119 ++
 libstdc++-v3/src/c++17/fs_path.cc                  |    2 +-
 libstdc++-v3/src/c++17/memory_resource.cc          |  177 +-
 libstdc++-v3/testsuite/18_support/96817.cc         |   39 +
 libstdc++-v3/testsuite/20_util/align/3.cc          |   53 +
 libstdc++-v3/testsuite/20_util/assume_aligned/1.cc |   23 +-
 .../testsuite/20_util/assume_aligned/97132.cc      |   34 +
 .../20_util/function_objects/bind_front/97101.cc   |   41 +
 .../20_util/invoke_result/incomplete_args_neg.cc   |   47 +
 .../20_util/is_invocable/incomplete_args_neg.cc    |   70 +
 .../20_util/is_invocable/incomplete_neg.cc         |   39 +
 .../is_nothrow_invocable/incomplete_args_neg.cc    |   70 +
 .../20_util/is_nothrow_invocable/incomplete_neg.cc |    6 +
 .../20_util/monotonic_buffer_resource/allocate.cc  |   46 +
 libstdc++-v3/testsuite/20_util/tuple/cons/96803.cc |   21 +
 .../unsynchronized_pool_resource/allocate.cc       |   84 +-
 .../testsuite/23_containers/span/back_neg.cc       |   14 +-
 .../testsuite/23_containers/span/front_neg.cc      |   14 +-
 .../testsuite/23_containers/span/index_op_neg.cc   |   14 +-
 .../24_iterators/back_insert_iterator/pr93884.cc   |    1 +
 .../24_iterators/front_insert_iterator/pr93884.cc  |    1 +
 .../testsuite/25_algorithms/for_each/constexpr.cc  |   12 +
 libstdc++-v3/testsuite/25_algorithms/sample/3.cc   |   50 +
 .../testsuite/25_algorithms/search/constexpr.cc    |    4 +
 .../27_io/filesystem/path/append/source.cc         |   10 +
 libstdc++-v3/testsuite/30_threads/async/async.cc   |  118 ++
 .../30_threads/condition_variable/members/68519.cc |   61 +-
 .../std/ranges/adaptors/detail/semiregular_box.cc  |   73 +
 libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc |  128 +-
 .../testsuite/std/ranges/adaptors/elements.cc      |   24 +
 .../testsuite/std/ranges/adaptors/sizeof.cc        |   52 +
 .../testsuite/std/ranges/adaptors/transform.cc     |   24 +
 .../testsuite/std/ranges/iota/iota_view.cc         |    3 +
 .../testsuite/std/ranges/subrange/sizeof.cc        |   28 +
 lto-plugin/ChangeLog                               |    5 +
 1132 files changed, 43367 insertions(+), 8175 deletions(-)

diff --cc gcc/gimple-range-cache.cc
index 112671c8a87,00000000000..40383626678
mode 100644,000000..100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@@ -1,877 -1,0 +1,877 @@@
 +/* Gimple ranger SSA cache implementation.
 +   Copyright (C) 2017-2020 Free Software Foundation, Inc.
 +   Contributed by Andrew MacLeod <amacleod@redhat.com>.
 +
 +This file is part of GCC.
 +
 +GCC is free software; you can redistribute it and/or modify
 +it under the terms of the GNU General Public License as published by
 +the Free Software Foundation; either version 3, or (at your option)
 +any later version.
 +
 +GCC is distributed in the hope that it will be useful,
 +but WITHOUT ANY WARRANTY; without even the implied warranty of
 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 +GNU General Public License for more details.
 +
 +You should have received a copy of the GNU General Public License
 +along with GCC; see the file COPYING3.  If not see
 +<http://www.gnu.org/licenses/>.  */
 +
 +#include "config.h"
 +#include "system.h"
 +#include "coretypes.h"
 +#include "backend.h"
 +#include "insn-codes.h"
 +#include "tree.h"
 +#include "gimple.h"
 +#include "ssa.h"
 +#include "gimple-pretty-print.h"
 +#include "gimple-range.h"
 +
 +// During contructor, allocate the vector of ssa_names.
 +
 +non_null_ref::non_null_ref ()
 +{
 +  m_nn.create (0);
 +  m_nn.safe_grow_cleared (num_ssa_names);
 +  bitmap_obstack_initialize (&m_bitmaps);
 +}
 +
 +// Free any bitmaps which were allocated,a swell as the vector itself.
 +
 +non_null_ref::~non_null_ref ()
 +{
 +  bitmap_obstack_release (&m_bitmaps);
 +  m_nn.release ();
 +}
 +
 +// Return true if NAME has a non-null dereference in block bb.  If this is the
 +// first query for NAME, calculate the summary first.
 +
 +bool
 +non_null_ref::non_null_deref_p (tree name, basic_block bb)
 +{
 +  if (!POINTER_TYPE_P (TREE_TYPE (name)))
 +    return false;
 +
 +  unsigned v = SSA_NAME_VERSION (name);
 +  if (!m_nn[v])
 +    process_name (name);
 +
 +  return bitmap_bit_p (m_nn[v], bb->index);
 +}
 +
 +// Allocate an populate the bitmap for NAME.  An ON bit for a block
 +// index indicates there is a non-null reference in that block.  In
 +// order to populate the bitmap, a quick run of all the immediate uses
 +// are made and the statement checked to see if a non-null dereference
 +// is made on that statement.
 +
 +void
 +non_null_ref::process_name (tree name)
 +{
 +  unsigned v = SSA_NAME_VERSION (name);
 +  use_operand_p use_p;
 +  imm_use_iterator iter;
 +  bitmap b;
 +
 +  // Only tracked for pointers.
 +  if (!POINTER_TYPE_P (TREE_TYPE (name)))
 +    return;
 +
 +  // Already processed if a bitmap has been allocated.
 +  if (m_nn[v])
 +    return;
 +
 +  b = BITMAP_ALLOC (&m_bitmaps);
 +
 +  // Loop over each immediate use and see if it implies a non-null value.
 +  FOR_EACH_IMM_USE_FAST (use_p, iter, name)
 +    {
 +      gimple *s = USE_STMT (use_p);
 +      unsigned index = gimple_bb (s)->index;
 +      tree value;
 +      enum tree_code comp_code;
 +
 +      // If bit is already set for this block, dont bother looking again.
 +      if (bitmap_bit_p (b, index))
 +	continue;
 +
 +      // If we can infer a != 0 range, then set the bit for this BB
 +      if (infer_value_range (s, name, &comp_code, &value))
 +	{
 +	  if (comp_code == NE_EXPR && integer_zerop (value))
 +	    bitmap_set_bit (b, index);
 +	}
 +    }
 +
 +  m_nn[v] = b;
 +}
 +
 +// -------------------------------------------------------------------------
 +
 +// This class implements a cache of ranges indexed by basic block.  It
 +// represents all that is known about an SSA_NAME on entry to each
 +// block.  It caches a range-for-type varying range so it doesn't need
 +// to be reformed all the time.  If a range is ever always associated
 +// with a type, we can use that instead.  Whenever varying is being
 +// set for a block, the cache simply points to this cached one rather
 +// than create a new one each time.
 +
 +class ssa_block_ranges
 +{
 +public:
-   ssa_block_ranges (tree t, irange_pool *pool);
++  ssa_block_ranges (tree t, irange_allocator *);
 +  ~ssa_block_ranges ();
 +
 +  void set_bb_range (const basic_block bb, const irange &r);
 +  void set_bb_varying (const basic_block bb);
 +  bool get_bb_range (irange &r, const basic_block bb);
 +  bool bb_range_p (const basic_block bb);
 +
 +  void dump(FILE *f);
 +private:
 +  vec<irange *> m_tab;
 +  irange *m_type_range;
 +  tree m_type;
-   irange_pool *m_irange_pool;
++  irange_allocator *m_irange_allocator;
 +};
 +
 +
 +// Initialize a block cache for an ssa_name of type T.
 +
- ssa_block_ranges::ssa_block_ranges (tree t, irange_pool *pool)
++ssa_block_ranges::ssa_block_ranges (tree t, irange_allocator *allocator)
 +{
 +  gcc_checking_assert (TYPE_P (t));
 +  m_type = t;
-   m_irange_pool = pool;
++  m_irange_allocator = allocator;
 +
 +  m_tab.create (0);
 +  m_tab.safe_grow_cleared (last_basic_block_for_fn (cfun));
 +
 +  // Create the cached type range.
-   m_type_range = m_irange_pool->allocate (2);
++  m_type_range = m_irange_allocator->allocate (2);
 +  m_type_range->set_varying (t);
 +
 +  m_tab[ENTRY_BLOCK_PTR_FOR_FN (cfun)->index] = m_type_range;
 +}
 +
 +// Destruct block range.
 +
 +ssa_block_ranges::~ssa_block_ranges ()
 +{
 +  m_tab.release ();
 +}
 +
 +// Set the range for block BB to be R.
 +
 +void
 +ssa_block_ranges::set_bb_range (const basic_block bb, const irange &r)
 +{
-   irange *m = m_irange_pool->allocate (r);
++  irange *m = m_irange_allocator->allocate (r);
 +  m_tab[bb->index] = m;
 +}
 +
 +// Set the range for block BB to the range for the type.
 +
 +void
 +ssa_block_ranges::set_bb_varying (const basic_block bb)
 +{
 +  m_tab[bb->index] = m_type_range;
 +}
 +
 +// Return the range associated with block BB in R.  Return false if
 +// there is no range.
 +
 +bool
 +ssa_block_ranges::get_bb_range (irange &r, const basic_block bb)
 +{
 +  irange *m = m_tab[bb->index];
 +  if (m)
 +    {
 +      r = *m;
 +      return true;
 +    }
 +  return false;
 +}
 +
 +// Return true if a range is present.
 +
 +bool
 +ssa_block_ranges::bb_range_p (const basic_block bb)
 +{
 +  return m_tab[bb->index] != NULL;
 +}
 +
 +
 +// Print the list of known ranges for file F in a nice format.
 +
 +void
 +ssa_block_ranges::dump (FILE *f)
 +{
 +  basic_block bb;
 +  int_range_max r;
 +
 +  FOR_EACH_BB_FN (bb, cfun)
 +    if (get_bb_range (r, bb))
 +      {
 +	fprintf (f, "BB%d  -> ", bb->index);
 +	r.dump (f);
 +	fprintf (f, "\n");
 +      }
 +}
 +
 +// -------------------------------------------------------------------------
 +
 +// Initialize the block cache.
 +
 +block_range_cache::block_range_cache ()
 +{
 +  m_ssa_ranges.create (0);
 +  m_ssa_ranges.safe_grow_cleared (num_ssa_names);
-   m_irange_pool = new irange_pool;
++  m_irange_allocator = new irange_allocator;
 +}
 +
 +// Remove any m_block_caches which have been created.
 +
 +block_range_cache::~block_range_cache ()
 +{
 +  unsigned x;
 +  for (x = 0; x < m_ssa_ranges.length (); ++x)
 +    {
 +      if (m_ssa_ranges[x])
 +	delete m_ssa_ranges[x];
 +    }
-   delete m_irange_pool;
++  delete m_irange_allocator;
 +  // Release the vector itself.
 +  m_ssa_ranges.release ();
 +}
 +
 +// Return a reference to the m_block_cache for NAME.  If it has not been
 +// accessed yet, allocate it.
 +
 +ssa_block_ranges &
 +block_range_cache::get_block_ranges (tree name)
 +{
 +  unsigned v = SSA_NAME_VERSION (name);
 +  if (v >= m_ssa_ranges.length ())
 +    m_ssa_ranges.safe_grow_cleared (num_ssa_names + 1);
 +
 +  if (!m_ssa_ranges[v])
-     m_ssa_ranges[v] = new ssa_block_ranges (TREE_TYPE (name), m_irange_pool);
++    m_ssa_ranges[v] = new ssa_block_ranges (TREE_TYPE (name), m_irange_allocator);
 +
 +  return *(m_ssa_ranges[v]);
 +}
 +
 +// Set the range for NAME on entry to block BB to R.
 +
 +void
 +block_range_cache::set_bb_range (tree name, const basic_block bb,
 +				 const irange &r)
 +{
 +  return get_block_ranges (name).set_bb_range (bb, r);
 +}
 +
 +// Set the range for NAME on entry to block BB to varying.
 +
 +void
 +block_range_cache::set_bb_varying (tree name, const basic_block bb)
 +{
 +  return get_block_ranges (name).set_bb_varying (bb);
 +}
 +
 +// Return the range for NAME on entry to BB in R.  Return true if there
 +// is one.
 +
 +bool
 +block_range_cache::get_bb_range (irange &r, tree name, const basic_block bb)
 +{
 +  return get_block_ranges (name).get_bb_range (r, bb);
 +}
 +
 +// Return true if NAME has a range set in block BB.
 +
 +bool
 +block_range_cache::bb_range_p (tree name, const basic_block bb)
 +{
 +  return get_block_ranges (name).bb_range_p (bb);
 +}
 +
 +// Print all known block caches to file F.
 +
 +void
 +block_range_cache::dump (FILE *f)
 +{
 +  unsigned x;
 +  for (x = 0; x < m_ssa_ranges.length (); ++x)
 +    {
 +      if (m_ssa_ranges[x])
 +	{
 +	  fprintf (f, " Ranges for ");
 +	  print_generic_expr (f, ssa_name (x), TDF_NONE);
 +	  fprintf (f, ":\n");
 +	  m_ssa_ranges[x]->dump (f);
 +	  fprintf (f, "\n");
 +	}
 +    }
 +}
 +
 +// Print all known ranges on entry to blobk BB to file F.
 +
 +void
 +block_range_cache::dump (FILE *f, basic_block bb, bool print_varying)
 +{
 +  unsigned x;
 +  int_range_max r;
 +  bool summarize_varying = false;
 +  for (x = 1; x < m_ssa_ranges.length (); ++x)
 +    {
 +      if (!gimple_range_ssa_p (ssa_name (x)))
 +	continue;
 +      if (m_ssa_ranges[x] && m_ssa_ranges[x]->get_bb_range (r, bb))
 +	{
 +	  if (!print_varying && r.varying_p ())
 +	    {
 +	      summarize_varying = true;
 +	      continue;
 +	    }
 +	  print_generic_expr (f, ssa_name (x), TDF_NONE);
 +	  fprintf (f, "\t");
 +	  r.dump(f);
 +	  fprintf (f, "\n");
 +	}
 +    }
 +  // If there were any varying entries, lump them all together.
 +  if (summarize_varying)
 +    {
 +      fprintf (f, "VARYING_P on entry : ");
 +      for (x = 1; x < num_ssa_names; ++x)
 +	{
 +	  if (!gimple_range_ssa_p (ssa_name (x)))
 +	    continue;
 +	  if (m_ssa_ranges[x] && m_ssa_ranges[x]->get_bb_range (r, bb))
 +	    {
 +	      if (r.varying_p ())
 +		{
 +		  print_generic_expr (f, ssa_name (x), TDF_NONE);
 +		  fprintf (f, "  ");
 +		}
 +	    }
 +	}
 +      fprintf (f, "\n");
 +    }
 +}
 +
 +// -------------------------------------------------------------------------
 +
 +// Initialize a global cache.
 +
 +ssa_global_cache::ssa_global_cache ()
 +{
 +  m_tab.create (0);
 +  m_tab.safe_grow_cleared (num_ssa_names);
-   m_irange_pool = new irange_pool;
++  m_irange_allocator = new irange_allocator;
 +}
 +
 +// Deconstruct a global cache.
 +
 +ssa_global_cache::~ssa_global_cache ()
 +{
 +  m_tab.release ();
-   delete m_irange_pool;
++  delete m_irange_allocator;
 +}
 +
 +// Retrieve the global range of NAME from cache memory if it exists. 
 +// Return the value in R.
 +
 +bool
 +ssa_global_cache::get_global_range (irange &r, tree name) const
 +{
 +  unsigned v = SSA_NAME_VERSION (name);
 +  if (v >= m_tab.length ())
 +    return false;
 +
 +  irange *stow = m_tab[v];
 +  if (!stow)
 +    return false;
 +  r = *stow;
 +  return true;
 +}
 +
 +// Set the range for NAME to R in the global cache.
 +
 +void
 +ssa_global_cache::set_global_range (tree name, const irange &r)
 +{
 +  unsigned v = SSA_NAME_VERSION (name);
 +  if (v >= m_tab.length ())
 +    m_tab.safe_grow_cleared (num_ssa_names + 1);
 +
 +  irange *m = m_tab[v];
 +  if (m && m->fits_p (r))
 +    *m = r;
 +  else
-     m_tab[v] = m_irange_pool->allocate (r);
++    m_tab[v] = m_irange_allocator->allocate (r);
 +}
 +
 +// Set the range for NAME to R in the glonbal cache.
 +
 +void
 +ssa_global_cache::clear_global_range (tree name)
 +{
 +  unsigned v = SSA_NAME_VERSION (name);
 +  if (v >= m_tab.length ())
 +    m_tab.safe_grow_cleared (num_ssa_names + 1);
 +  m_tab[v] = NULL;
 +}
 +
 +// Clear the global cache.
 +
 +void
 +ssa_global_cache::clear ()
 +{
 +  memset (m_tab.address(), 0, m_tab.length () * sizeof (irange *));
 +}
 +
 +// Dump the contents of the global cache to F.
 +
 +void
 +ssa_global_cache::dump (FILE *f)
 +{
 +  unsigned x;
 +  int_range_max r;
 +  fprintf (f, "Non-varying global ranges:\n");
 +  fprintf (f, "=========================:\n");
 +  for ( x = 1; x < num_ssa_names; x++)
 +    if (gimple_range_ssa_p (ssa_name (x)) &&
 +	get_global_range (r, ssa_name (x))  && !r.varying_p ())
 +      {
 +	print_generic_expr (f, ssa_name (x), TDF_NONE);
 +	fprintf (f, "  : ");
 +	r.dump (f);
 +	fprintf (f, "\n");
 +      }
 +  fputc ('\n', f);
 +}
 +
 +// --------------------------------------------------------------------------
 +
 +ranger_cache::ranger_cache (range_query &q) : query (q)
 +{
 +  m_workback.create (0);
 +  m_workback.safe_grow_cleared (last_basic_block_for_fn (cfun));
 +  m_update_list.create (0);
 +  m_update_list.safe_grow_cleared (last_basic_block_for_fn (cfun));
 +  m_update_list.truncate (0);
 +  m_poor_value_list.create (0);
 +  m_poor_value_list.safe_grow_cleared (20);
 +  m_poor_value_list.truncate (0);
 +}
 +
 +ranger_cache::~ranger_cache ()
 +{
 +  m_poor_value_list.release ();
 +  m_workback.release ();
 +  m_update_list.release ();
 +}
 +
 +// Push a request for a new lookup in block BB of name.  Return true if
 +// the request is actually made (ie, isn't a duplicate).
 +
 +bool
 +ranger_cache::push_poor_value (basic_block bb, tree name)
 +{
 +  if (m_poor_value_list.length ())
 +    {
 +      // Don't push anything else to the same block.  If there are multiple 
 +      // things required, another request will come during a later evaluation
 +      // and this prevents oscillation building uneccessary depth.
 +      if ((m_poor_value_list.last ()).bb == bb)
 +	return false;
 +    }
 +
 +  struct update_record rec;
 +  rec.bb = bb;
 +  rec.calc = name;
 +  m_poor_value_list.safe_push (rec);
 +  return true;
 +}
 +
 +//  Provide lookup for the gori-computes class to access the best known range
 +//  of an ssa_name in any given basic block.  Note, this does no additonal
 +//  lookups, just accesses the data that is already known.
 +
 +void
 +ranger_cache::ssa_range_in_bb (irange &r, tree name, basic_block bb)
 +{
 +  gimple *s = SSA_NAME_DEF_STMT (name);
 +  basic_block def_bb = ((s && gimple_bb (s)) ? gimple_bb (s) :
 +					       ENTRY_BLOCK_PTR_FOR_FN (cfun));
 +  if (bb == def_bb)
 +    {
 +      // NAME is defined in this block, so request its current value
 +      if (!m_globals.get_global_range (r, name))
 +	{
 +	  // If it doesn't have a value calculated, it means it's a
 +	  // "poor" value being used in some calculation.  Queue it up
 +	  // as a poor value to be improved later.
 +	  r = gimple_range_global (name);
 +	  if (push_poor_value (bb, name))
 +	    {
 +	      if (DEBUG_RANGE_CACHE)
 +		{
 +		  fprintf (dump_file,
 +			   "*CACHE* no global def in bb %d for ", bb->index);
 +		  print_generic_expr (dump_file, name, TDF_SLIM);
 +		  fprintf (dump_file, " depth : %d\n",
 +			   m_poor_value_list.length ());
 +		}
 +	    }
 +	 }
 +    }
 +  // Look for the on-entry value of name in BB from the cache.
 +  else if (!m_on_entry.get_bb_range (r, name, bb))
 +    {
 +      // If it has no entry then mark this as a poor value.
 +      if (push_poor_value (bb, name))
 +	{
 +	  if (DEBUG_RANGE_CACHE)
 +	    {
 +	      fprintf (dump_file,
 +		       "*CACHE* no on entry range in bb %d for ", bb->index);
 +	      print_generic_expr (dump_file, name, TDF_SLIM);
 +	      fprintf (dump_file, " depth : %d\n", m_poor_value_list.length ());
 +	    }
 +	}
 +      // Try to pick up any known global value as a best guess for now.
 +      if (!m_globals.get_global_range (r, name))
 +	r = gimple_range_global (name);
 +    }
 +
 +  // Check if pointers have any non-null dereferences.  Non-call
 +  // exceptions mean we could throw in the middle of the block, so just
 +  // punt for now on those.
 +  if (r.varying_p () && m_non_null.non_null_deref_p (name, bb) &&
 +      !cfun->can_throw_non_call_exceptions)
 +    r = range_nonzero (TREE_TYPE (name));
 +}
 +
 +// Return a static range for NAME on entry to basic block BB in R.  If
 +// calc is true, fill any cache entries required between BB and the
 +// def block for NAME.  Otherwise, return false if the cache is empty.
 +
 +bool
 +ranger_cache::block_range (irange &r, basic_block bb, tree name, bool calc)
 +{
 +  gcc_checking_assert (gimple_range_ssa_p (name));
 +
 +  if (calc)
 +    {
 +      gimple *def_stmt = SSA_NAME_DEF_STMT (name);
 +      basic_block def_bb = NULL;
 +      if (def_stmt)
 +	def_bb = gimple_bb (def_stmt);;
 +      if (!def_bb)
 +	{
 +	  // If we get to the entry block, this better be a default def
 +	  // or range_on_entry was called for a block not dominated by
 +	  // the def.  
 +	  gcc_checking_assert (SSA_NAME_IS_DEFAULT_DEF (name));
 +	  def_bb = ENTRY_BLOCK_PTR_FOR_FN (cfun);
 +	}
 +
 +      // There is no range on entry for the definition block.
 +      if (def_bb == bb)
 +	return false;
 +
 +      // Otherwise, go figure out what is known in predecessor blocks.
 +      fill_block_cache (name, bb, def_bb);
 +      gcc_checking_assert (m_on_entry.bb_range_p (name, bb));
 +    }
 +  return m_on_entry.get_bb_range (r, name, bb);
 +}
 +
 +// Add BB to the list of blocks to update, unless it's already in the list.
 +
 +void
 +ranger_cache::add_to_update (basic_block bb)
 +{
 +  if (!m_update_list.contains (bb))
 +    m_update_list.quick_push (bb);
 +}
 +
 +// If there is anything in the iterative update_list, continue
 +// processing NAME until the list of blocks is empty.
 +
 +void
 +ranger_cache::iterative_cache_update (tree name)
 +{
 +  basic_block bb;
 +  edge_iterator ei;
 +  edge e;
 +  int_range_max new_range;
 +  int_range_max current_range;
 +  int_range_max e_range;
 +
 +  // Process each block by seeing if its calculated range on entry is
 +  // the same as its cached value. If there is a difference, update
 +  // the cache to reflect the new value, and check to see if any
 +  // successors have cache entries which may need to be checked for
 +  // updates.
 +
 +  while (m_update_list.length () > 0)
 +    {
 +      bb = m_update_list.pop ();
 +      gcc_checking_assert (m_on_entry.bb_range_p (name, bb));
 +      m_on_entry.get_bb_range (current_range, name, bb);
 +
 +      // Calculate the "new" range on entry by unioning the pred edges.
 +      new_range.set_undefined ();
 +      FOR_EACH_EDGE (e, ei, bb->preds)
 +	{
 +	  if (DEBUG_RANGE_CACHE)
 +	    fprintf (dump_file, "   edge %d->%d :", e->src->index, bb->index);
 +	  // Get whatever range we can for this edge.
 +	  if (!outgoing_edge_range_p (e_range, e, name))
 +	    {
 +	      ssa_range_in_bb (e_range, name, e->src);
 +	      if (DEBUG_RANGE_CACHE)
 +		{
 +		  fprintf (dump_file, "No outgoing edge range, picked up ");
 +		  e_range.dump(dump_file);
 +		  fprintf (dump_file, "\n");
 +		}
 +	    }
 +	  else
 +	    {
 +	      if (DEBUG_RANGE_CACHE)
 +		{
 +		  fprintf (dump_file, "outgoing range :");
 +		  e_range.dump(dump_file);
 +		  fprintf (dump_file, "\n");
 +		}
 +	    }
 +	  new_range.union_ (e_range);
 +	  if (new_range.varying_p ())
 +	    break;
 +	}
 +
 +      if (DEBUG_RANGE_CACHE)
 +	{
 +	  fprintf (dump_file, "FWD visiting block %d for ", bb->index);
 +	  print_generic_expr (dump_file, name, TDF_SLIM);
 +	  fprintf (dump_file, "  starting range : ");
 +	  current_range.dump (dump_file);
 +	  fprintf (dump_file, "\n");
 +	}
 +
 +      // If the range on entry has changed, update it.
 +      if (new_range != current_range)
 +	{
 +	  if (DEBUG_RANGE_CACHE) 
 +	    {
 +	      fprintf (dump_file, "      Updating range to ");
 +	      new_range.dump (dump_file);
 +	      fprintf (dump_file, "\n      Updating blocks :");
 +	    }
 +	  m_on_entry.set_bb_range (name, bb, new_range);
 +	  // Mark each successor that has a range to re-check its range
 +	  FOR_EACH_EDGE (e, ei, bb->succs)
 +	    if (m_on_entry.bb_range_p (name, e->dest))
 +	      {
 +		if (DEBUG_RANGE_CACHE) 
 +		  fprintf (dump_file, " bb%d",e->dest->index);
 +		add_to_update (e->dest);
 +	      }
 +	  if (DEBUG_RANGE_CACHE) 
 +	    fprintf (dump_file, "\n");
 +	}
 +    }
 +    if (DEBUG_RANGE_CACHE)
 +      {
 +	fprintf (dump_file, "DONE visiting blocks for ");
 +	print_generic_expr (dump_file, name, TDF_SLIM);
 +	fprintf (dump_file, "\n");
 +      }
 +}
 +
 +// Make sure that the range-on-entry cache for NAME is set for block BB.
 +// Work back through the CFG to DEF_BB ensuring the range is calculated
 +// on the block/edges leading back to that point.
 +
 +void
 +ranger_cache::fill_block_cache (tree name, basic_block bb, basic_block def_bb)
 +{
 +  edge_iterator ei;
 +  edge e;
 +  int_range_max block_result;
 +  int_range_max undefined;
 +  unsigned poor_list_start = m_poor_value_list.length ();  
 +
 +  // At this point we shouldn't be looking at the def, entry or exit block.
 +  gcc_checking_assert (bb != def_bb && bb != ENTRY_BLOCK_PTR_FOR_FN (cfun) &&
 +		       bb != EXIT_BLOCK_PTR_FOR_FN (cfun));
 +
 +  // If the block cache is set, then we've already visited this block.
 +  if (m_on_entry.bb_range_p (name, bb))
 +    return;
 +
 +  // Visit each block back to the DEF.  Initialize each one to UNDEFINED.
 +  // m_visited at the end will contain all the blocks that we needed to set
 +  // the range_on_entry cache for.
 +  m_workback.truncate (0);
 +  m_workback.quick_push (bb);
 +  undefined.set_undefined ();
 +  m_on_entry.set_bb_range (name, bb, undefined);
 +  gcc_checking_assert (m_update_list.length () == 0);
 +
 +  if (DEBUG_RANGE_CACHE)
 +    {
 +      fprintf (dump_file, "\n");
 +      print_generic_expr (dump_file, name, TDF_SLIM);
 +      fprintf (dump_file, " : ");
 +    }
 +
 +  while (m_workback.length () > 0)
 +    {
 +      basic_block node = m_workback.pop ();
 +      if (DEBUG_RANGE_CACHE)
 +	{
 +	  fprintf (dump_file, "BACK visiting block %d for ", node->index);
 +	  print_generic_expr (dump_file, name, TDF_SLIM);
 +	  fprintf (dump_file, "\n");
 +	}
 +
 +      FOR_EACH_EDGE (e, ei, node->preds)
 +	{
 +	  basic_block pred = e->src;
 +	  int_range_max r;
 +
 +	  if (DEBUG_RANGE_CACHE)
 +	    fprintf (dump_file, "  %d->%d ",e->src->index, e->dest->index);
 +
 +	  // If the pred block is the def block add this BB to update list.
 +	  if (pred == def_bb)
 +	    {
 +	      add_to_update (node);
 +	      continue;
 +	    }
 +
 +	  // If the pred is entry but NOT def, then it is used before
 +	  // defined, it'll get set to [] and no need to update it.
 +	  if (pred == ENTRY_BLOCK_PTR_FOR_FN (cfun))
 +	    {
 +	      if (DEBUG_RANGE_CACHE)
 +		fprintf (dump_file, "entry: bail.");
 +	      continue;
 +	    }
 +
 +	  // Regardless of whether we have visited pred or not, if the
 +	  // pred has a non-null reference, revisit this block.
 +	  if (m_non_null.non_null_deref_p (name, pred))
 +	    {
 +	      if (DEBUG_RANGE_CACHE)
 +		fprintf (dump_file, "nonnull: update ");
 +	      add_to_update (node);
 +	    }
 +
 +	  // If the pred block already has a range, or if it can contribute
 +	  // something new. Ie, the edge generates a range of some sort.
 +	  if (m_on_entry.get_bb_range (r, name, pred))
 +	    {
 +	      if (DEBUG_RANGE_CACHE)
 +		fprintf (dump_file, "has cache, ");
 +	      if (!r.undefined_p () || has_edge_range_p (e, name))
 +		{
 +		  add_to_update (node);
 +		  if (DEBUG_RANGE_CACHE)
 +		    fprintf (dump_file, "update. ");
 +		}
 +	      continue;
 +	    }
 +
 +	  if (DEBUG_RANGE_CACHE)
 +	    fprintf (dump_file, "pushing undefined pred block. ");
 +	  // If the pred hasn't been visited (has no range), add it to
 +	  // the list.
 +	  gcc_checking_assert (!m_on_entry.bb_range_p (name, pred));
 +	  m_on_entry.set_bb_range (name, pred, undefined);
 +	  m_workback.quick_push (pred);
 +	}
 +    }
 +
 +  if (DEBUG_RANGE_CACHE)
 +    fprintf (dump_file, "\n");
 +
 +  // Now fill in the marked blocks with values.
 +  iterative_cache_update (name);
 +  if (DEBUG_RANGE_CACHE)
 +    fprintf (dump_file, "  iterative update done.\n");
 +
 +  // Now that the cache has been updated, check to see if there were any 
 +  // SSA_NAMES used in filling the cache which were "poor values".
 +  // We can evaluate them, and inject any new values into the iteration 
 +  // list, and see if it improves any on-entry values.
 +  if (poor_list_start !=  m_poor_value_list.length ())
 +    {
 +      gcc_checking_assert (poor_list_start < m_poor_value_list.length ());
 +      while (poor_list_start < m_poor_value_list.length ())
 +	{
 +	  // Find a range for this unresolved value.   
 +	  // Note, this may spawn new cache filling cycles, but by the time it
 +	  // is finished, the work vectors will all be back to the same state
 +	  // as before the call.  The update record vector will always be
 +	  // returned to the current state upon return.
 +	  struct update_record rec = m_poor_value_list.pop ();
 +	  basic_block calc_bb = rec.bb;
 +	  int_range_max tmp;
 +
 +	  // The update work list should be empty at this point.
 +	  gcc_checking_assert (m_update_list.length () == 0);
 +
 +	  if (DEBUG_RANGE_CACHE)
 +	    {
 +	      fprintf (dump_file, "(%d:%d)Calculating ",
 +		       m_poor_value_list.length () + 1, poor_list_start);
 +	      print_generic_expr (dump_file, name, TDF_SLIM);
 +	      fprintf (dump_file, " used poor value for ");
 +	      print_generic_expr (dump_file, rec.calc, TDF_SLIM);
 +	      fprintf (dump_file, " in bb%d, trying to improve:\n",
 +		       calc_bb->index);
 +	    }
 +
 +	  // It must have at least one edge, pick edge 0.  we just want to
 +	  // calculate a range at the exit from the block so the caches feeding
 +	  // this block will be filled up. 
 +	  gcc_checking_assert (EDGE_SUCC (calc_bb, 0));
 +	  query.range_on_edge (tmp, EDGE_SUCC (calc_bb, 0), rec.calc);
 +	  
 +	  if (DEBUG_RANGE_CACHE)
 +	    fprintf (dump_file, "    Checking successors of bb%d :",
 +		     calc_bb->index);
 +
 +	  // Try recalculating any successor blocks with the new value.
 +	  // Note that even if this value is refined from the initial value,
 +	  // it may not affect the calculation, but the iterative update
 +	  // will resolve that efficently.
 +	  FOR_EACH_EDGE (e, ei, calc_bb->succs)
 +	    {
 +	      if (DEBUG_RANGE_CACHE)
 +		fprintf (dump_file, "bb%d: ", e->dest->index);
 +	      // Only update active cache entries.
 +	      if (m_on_entry.bb_range_p (name, e->dest))
 +		{
 +		  if (DEBUG_RANGE_CACHE)
 +		    fprintf (dump_file, "update ");
 +		  add_to_update (e->dest);
 +		}
 +	    }
 +	  if (DEBUG_RANGE_CACHE)
 +	    fprintf (dump_file, "\n");
 +	  // Now see if there is a new value.
 +	  iterative_cache_update (name);
 +	}
 +    }
 + 
 +}
diff --cc gcc/gimple-range-cache.h
index 87656dd2bf4,00000000000..29ab01e2a98
mode 100644,000000..100644
--- a/gcc/gimple-range-cache.h
+++ b/gcc/gimple-range-cache.h
@@@ -1,120 -1,0 +1,120 @@@
 +/* Header file for gimple ranger SSA cache.
 +   Copyright (C) 2017-2020 Free Software Foundation, Inc.
 +   Contributed by Andrew MacLeod <amacleod@redhat.com>.
 +
 +This file is part of GCC.
 +
 +GCC is free software; you can redistribute it and/or modify it under
 +the terms of the GNU General Public License as published by the Free
 +Software Foundation; either version 3, or (at your option) any later
 +version.
 +
 +GCC is distributed in the hope that it will be useful, but WITHOUT ANY
 +WARRANTY; without even the implied warranty of MERCHANTABILITY or
 +FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 + for more details.
 +
 +You should have received a copy of the GNU General Public License
 +along with GCC; see the file COPYING3.  If not see
 +<http://www.gnu.org/licenses/>.  */
 +
 +#ifndef GCC_SSA_RANGE_CACHE_H
 +#define GCC_SSA_RANGE_CACHE_H
 +
 +#include "gimple-range-gori.h" 
 +
 +// Class used to track non-null references of an SSA name.  A vector
 +// of bitmaps indexed by SSA name is maintained.  When indexed by
 +// basic block, an on-bit indicates there is a non-null dereference
 +// for that SSA in that block.
 +
 +class non_null_ref
 +{
 +public:
 +  non_null_ref ();
 +  ~non_null_ref ();
 +  bool non_null_deref_p (tree name, basic_block bb);
 +private:
 +  vec <bitmap> m_nn;
 +  void process_name (tree name);
 +  bitmap_obstack m_bitmaps;
 +};
 +
 +// This class manages a vector of pointers to ssa_block ranges.  It
 +// provides the basis for the "range on entry" cache for all
 +// SSA names.
 +
 +class block_range_cache
 +{
 +public:
 +  block_range_cache ();
 +  ~block_range_cache ();
 +
 +  void set_bb_range (tree name, const basic_block bb, const irange &r);
 +  void set_bb_varying (tree name, const basic_block bb);
 +  bool get_bb_range (irange &r, tree name, const basic_block bb);
 +  bool bb_range_p (tree name, const basic_block bb);
 +
 +  void dump (FILE *f);
 +  void dump (FILE *f, basic_block bb, bool print_varying = true);
 +private:
 +  vec<class ssa_block_ranges *> m_ssa_ranges;
 +  ssa_block_ranges &get_block_ranges (tree name);
-   irange_pool *m_irange_pool;
++  irange_allocator *m_irange_allocator;
 +};
 +
 +// This global cache is used with the range engine as markers for what
 +// has been visited during this incarnation.  Once the ranger evaluates
 +// a name, it is typically not re-evaluated again.
 +
 +class ssa_global_cache
 +{
 +public:
 +  ssa_global_cache ();
 +  ~ssa_global_cache ();
 +  bool get_global_range (irange &r, tree name) const;
 +  void set_global_range (tree name, const irange &r);
 +  void clear_global_range (tree name);
 +  void clear ();
 +  void dump (FILE *f = stderr);
 +private:
 +  vec<irange *> m_tab;
-   class irange_pool *m_irange_pool;
++  class irange_allocator *m_irange_allocator;
 +};
 +
 +// This class provides all the caches a global ranger may need, and makes 
 +// them available for gori-computes to query so outgoing edges can be
 +// properly calculated.
 +
 +class ranger_cache : public gori_compute_cache
 +{
 +public:
 +  ranger_cache (class range_query &q);
 +  ~ranger_cache ();
 +
 +  virtual void ssa_range_in_bb (irange &r, tree name, basic_block bb);
 +  bool block_range (irange &r, basic_block bb, tree name, bool calc = true);
 +
 +  ssa_global_cache m_globals;
 +  block_range_cache m_on_entry;
 +  non_null_ref m_non_null;
 +private:
 +  void add_to_update (basic_block bb);
 +  void fill_block_cache (tree name, basic_block bb, basic_block def_bb);
 +  void iterative_cache_update (tree name);
 +
 +  vec<basic_block> m_workback;
 +  vec<basic_block> m_update_list;
 +
 +  // Iterative "poor value" calculations.
 +  struct update_record
 +  {
 +    basic_block bb;	// Block which value needs to be calculated in.
 +    tree calc;		// SSA_NAME which needs its value calculated.
 +  };
 +  bool push_poor_value (basic_block bb, tree name);
 +  vec<update_record> m_poor_value_list;
 +  class range_query &query;
 +};
 +
 +#endif // GCC_SSA_RANGE_CACHE_H
diff --cc gcc/gimple-range-edge.cc
index e4653c8ce88,00000000000..a8e1e16cf43
mode 100644,000000..100644
--- a/gcc/gimple-range-edge.cc
+++ b/gcc/gimple-range-edge.cc
@@@ -1,197 -1,0 +1,197 @@@
 +/* Gimple range edge functionaluity.
 +   Copyright (C) 2020 Free Software Foundation, Inc.
 +   Contributed by Andrew MacLeod <amacleod@redhat.com>
 +   and Aldy Hernandez <aldyh@redhat.com>.
 +
 +This file is part of GCC.
 +
 +GCC is free software; you can redistribute it and/or modify
 +it under the terms of the GNU General Public License as published by
 +the Free Software Foundation; either version 3, or (at your option)
 +any later version.
 +
 +GCC is distributed in the hope that it will be useful,
 +but WITHOUT ANY WARRANTY; without even the implied warranty of
 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 +GNU General Public License for more details.
 +
 +You should have received a copy of the GNU General Public License
 +along with GCC; see the file COPYING3.  If not see
 +<http://www.gnu.org/licenses/>.  */
 +
 +
 +#include "config.h"
 +#include "system.h"
 +#include "coretypes.h"
 +#include "backend.h"
 +#include "tree.h"
 +#include "gimple.h"
 +#include "ssa.h"
 +#include "gimple-pretty-print.h"
 +#include "gimple-iterator.h"
 +#include "tree-cfg.h"
 +#include "gimple-range.h"
 +
 +// If there is a range control statment at the end of block BB, return it.
 +// Otherwise return NULL.
 +
 +gimple *
 +gimple_outgoing_range_stmt_p (basic_block bb)
 +{
 +  gimple_stmt_iterator gsi = gsi_last_nondebug_bb (bb);
 +  if (!gsi_end_p (gsi))
 +    {
 +      gimple *s = gsi_stmt (gsi);
 +      if (is_a<gcond *> (s) && gimple_range_handler (s))
 +	return gsi_stmt (gsi);
 +      gswitch *sw = dyn_cast<gswitch *> (s);
 +      if (sw && irange::supports_type_p (TREE_TYPE (gimple_switch_index (sw))))
 +	return gsi_stmt (gsi);
 +    }
 +  return NULL;
 +}
 +
 +
 +outgoing_range::outgoing_range ()
 +{
 +  m_edge_table = NULL;
 +}
 +
 +outgoing_range::~outgoing_range ()
 +{
 +  if (m_edge_table)
 +    delete m_edge_table;
 +}
 +
 +
 +// Get a range for a switch edge E from statement S and return it in R.
 +// Use a cached value if it exists, or calculate it if not.
 +
 +bool
 +outgoing_range::get_edge_range (irange &r, gimple *s, edge e)
 +{
 +  gcc_checking_assert (is_a<gswitch *> (s));
 +  gswitch *sw = as_a<gswitch *> (s);
 +
 +  // ADA currently has cases where the index is 64 bits and the case
 +  // arguments are 32 bit, causing a trap when we create a case_range.
 +  // Until this is resolved (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87798)
 +  // punt on switches where the labels dont match the argument.
 +  if (gimple_switch_num_labels (sw) > 1 && 
 +      TYPE_PRECISION (TREE_TYPE (CASE_LOW (gimple_switch_label (sw, 1)))) !=
 +      TYPE_PRECISION (TREE_TYPE (gimple_switch_index (sw))))
 +    return false;
 +
 +   if (!m_edge_table)
 +     m_edge_table = new hash_map<edge, irange *> (n_edges_for_fn (cfun));
 +
 +   irange **val = m_edge_table->get (e);
 +   if (!val)
 +     {
 +       calc_switch_ranges (sw);
 +       val = m_edge_table->get (e);
 +       gcc_checking_assert (val);
 +     }
 +    r = **val;
 +  return true;
 +}
 +
 +
 +// Calculate all switch edges from SW and cache them in the hash table.
 +
 +void
 +outgoing_range::calc_switch_ranges (gswitch *sw)
 +{
 +  bool existed;
 +  unsigned x, lim;
 +  lim = gimple_switch_num_labels (sw);
 +  tree type = TREE_TYPE (gimple_switch_index (sw));
 +  
 +  edge default_edge = gimple_switch_default_edge (cfun, sw);
 +  irange *&default_slot = m_edge_table->get_or_insert (default_edge, &existed);
 +
 +  // This should be the first call into this switch.  For the default
 +  // range case, start with varying and intersect each other case from
 +  // it.
 +
 +  gcc_checking_assert (!existed);
 +
 +  // Allocate an int_range_max for default case.
-   default_slot = range_pool.allocate (255);
++  default_slot = range_allocator.allocate (255);
 +  default_slot->set_varying (type);
 +
 +  for (x = 1; x < lim; x++)
 +    {
 +      edge e = gimple_switch_edge (cfun, sw, x);
 +
 +      // If this edge is the same as the default edge, do nothing else.
 +      if (e == default_edge)
 +	continue;
 +
 +      tree low = CASE_LOW (gimple_switch_label (sw, x));
 +      tree high = CASE_HIGH (gimple_switch_label (sw, x));
 +      if (!high)
 +	high = low;
 +
 +      // Remove the case range from the default case.
 +      int_range_max def_range (low, high);
 +      range_cast (def_range, type);
 +      def_range.invert ();
 +      default_slot->intersect (def_range);
 +
 +      // Create/union this case with anything on else on the edge.
 +      int_range_max case_range (low, high);
 +      range_cast (case_range, type);
 +      irange *&slot = m_edge_table->get_or_insert (e, &existed);
 +      if (existed)
 +	{
 +	  case_range.union_ (*slot);
 +	  if (slot->fits_p (case_range))
 +	    {
 +	      *slot = case_range;
 +	      continue;
 +	    }
 +	}
 +      // If there was an existing range and it doesn't fit, we lose the memory.
 +      // It'll get reclaimed when the obstack is freed.  This seems less
 +      // intrusive than allocating max ranges for each case.
-       slot = range_pool.allocate (case_range);
++      slot = range_allocator.allocate (case_range);
 +    }
 +}
 +
 +
 +// Calculate the range forced on on edge E by control flow, return it
 +// in R.  Return the statment which defines the range, otherwise
 +// return NULL
 +
 +gimple *
 +outgoing_range::edge_range_p (irange &r, edge e)
 +{
 +  // Determine if there is an outgoing edge.
 +  gimple *s = gimple_outgoing_range_stmt_p (e->src);
 +  if (!s)
 +    return NULL;
 +
 +  if (is_a<gcond *> (s))
 +    {
 +      if (e->flags & EDGE_TRUE_VALUE)
 +	r = int_range<2> (boolean_true_node, boolean_true_node);
 +      else if (e->flags & EDGE_FALSE_VALUE)
 +	r = int_range<2> (boolean_false_node, boolean_false_node);
 +      else
 +	gcc_unreachable ();
 +      return s;
 +    }
 +
 +  gcc_checking_assert (is_a<gswitch *> (s));
 +  gswitch *sw = as_a<gswitch *> (s);
 +  tree type = TREE_TYPE (gimple_switch_index (sw));
 +
 +  if (!irange::supports_type_p (type))
 +    return NULL;
 +
 +  if (get_edge_range (r, sw, e))
 +    return s;
 +
 +  return NULL;
 +}
diff --cc gcc/gimple-range-edge.h
index e31008f9920,00000000000..5f3831a9db1
mode 100644,000000..100644
--- a/gcc/gimple-range-edge.h
+++ b/gcc/gimple-range-edge.h
@@@ -1,55 -1,0 +1,55 @@@
 +/* Gimple range edge header file.
 +   Copyright (C) 2020 Free Software Foundation, Inc.
 +   Contributed by Andrew MacLeod <amacleod@redhat.com>
 +   and Aldy Hernandez <aldyh@redhat.com>.
 +
 +This file is part of GCC.
 +
 +GCC is free software; you can redistribute it and/or modify
 +it under the terms of the GNU General Public License as published by
 +the Free Software Foundation; either version 3, or (at your option)
 +any later version.
 +
 +GCC is distributed in the hope that it will be useful,
 +but WITHOUT ANY WARRANTY; without even the implied warranty of
 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 +GNU General Public License for more details.
 +
 +You should have received a copy of the GNU General Public License
 +along with GCC; see the file COPYING3.  If not see
 +<http://www.gnu.org/licenses/>.  */
 +
 +#ifndef GIMPLE_RANGE_EDGE_H
 +#define GIMPLE_RANGE_EDGE_H
 +
 +// This class is used to query ranges on constant edges in GIMPLE.
 +//
 +// For a COND_EXPR, the TRUE edge will return [1,1] and the false edge a [0,0].
 +//
 +// For SWITCH_EXPR, it is awkward to calculate ranges.  When a request
 +// is made, the entire switch is evalauted and the results cached. 
 +// Any future requests to that switch will use the cached value, providing
 +// dramatic decrease in computation time.
 +//
 +// The API is simple, just ask for the range on the edge.
 +// The return value is NULL for no range, or the branch statement which the
 +// edge gets the range from, along with the range.
 +
 +class outgoing_range
 +{
 +public:
 +  outgoing_range ();
 +  ~outgoing_range ();
 +  gimple *edge_range_p (irange &r, edge e);
 +private:
 +  void calc_switch_ranges (gswitch *sw);
 +  bool get_edge_range (irange &r, gimple *s, edge e);
 +
 +  hash_map<edge, irange *> *m_edge_table;
-   irange_pool range_pool;
++  irange_allocator range_allocator;
 +}; 
 +
 +// If there is a range control statment at the end of block BB, return it.
 +gimple *gimple_outgoing_range_stmt_p (basic_block bb);
 +
 +#endif  // GIMPLE_RANGE_EDGE_H


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-10-02  9:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-02  9:41 [gcc(refs/users/aldyh/heads/ranger-staging)] Merge commit '968ec08efefeea6fbc0cdc379e98ce3e28904083' into me/ranger-staging Aldy Hernandez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).