public inbox for gcc-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).