Imported Upstream version 4.9.3 87/42987/1 upstream upstream/4.9.3
authorYury Usishchev <y.usishchev@samsung.com>
Mon, 29 Jun 2015 12:16:05 +0000 (15:16 +0300)
committerYury Usishchev <y.usishchev@samsung.com>
Mon, 29 Jun 2015 12:16:05 +0000 (15:16 +0300)
Change-Id: I5cd46051f62b1d2b23f81ce68a85915618fedd67

871 files changed:
ChangeLog
INSTALL/binaries.html
INSTALL/build.html
INSTALL/configure.html
INSTALL/download.html
INSTALL/finalinstall.html
INSTALL/gfdl.html
INSTALL/index.html
INSTALL/old.html
INSTALL/prerequisites.html
INSTALL/specific.html
INSTALL/test.html
LAST_UPDATED
MD5SUMS
Makefile.def
Makefile.in
NEWS
boehm-gc/ChangeLog
config/ChangeLog
configure
configure.ac
contrib/ChangeLog
contrib/reghunt/ChangeLog
contrib/regression/ChangeLog
fixincludes/ChangeLog
gcc/BASE-VER
gcc/ChangeLog
gcc/DATESTAMP
gcc/ada/ChangeLog
gcc/ada/back_end.adb
gcc/ada/gcc-interface/Makefile.in
gcc/ada/gcc-interface/decl.c
gcc/ada/gcc-interface/trans.c
gcc/ada/gcc-interface/utils.c
gcc/ada/gcc-interface/utils2.c
gcc/ada/mlib-utl.adb
gcc/alias.c
gcc/builtins.c
gcc/c-family/ChangeLog
gcc/c-family/c-ada-spec.c
gcc/c-family/c-common.c
gcc/c-family/c-omp.c
gcc/c-family/c-opts.c
gcc/c-family/c-ubsan.c
gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/c/c-parser.c
gcc/c/c-typeck.c
gcc/cfgrtl.c
gcc/cgraphunit.c
gcc/collect2.c
gcc/combine.c
gcc/common.opt
gcc/config.gcc
gcc/config.in
gcc/config/aarch64/aarch64-elf-raw.h
gcc/config/aarch64/aarch64-linux.h
gcc/config/aarch64/aarch64-protos.h
gcc/config/aarch64/aarch64-simd.md
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.md
gcc/config/aarch64/aarch64.opt
gcc/config/aarch64/atomics.md
gcc/config/aarch64/iterators.md
gcc/config/alpha/alpha.c
gcc/config/alpha/alpha.md
gcc/config/arm/arm.c
gcc/config/arm/arm.h
gcc/config/arm/arm.md
gcc/config/arm/linux-elf.h
gcc/config/arm/t-aprofile
gcc/config/avr/avr-dimode.md
gcc/config/avr/avr-fixed.md
gcc/config/avr/avr-protos.h
gcc/config/avr/avr.c
gcc/config/avr/avr.md
gcc/config/avr/driver-avr.c
gcc/config/i386/avx2intrin.h
gcc/config/i386/driver-i386.c
gcc/config/i386/emmintrin.h
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/config/i386/mmx.md
gcc/config/i386/predicates.md
gcc/config/i386/sse.md
gcc/config/ia64/ia64.c
gcc/config/microblaze/linux.h
gcc/config/mips/mips.h
gcc/config/nios2/linux.h
gcc/config/nios2/nios2.c
gcc/config/pa/constraints.md
gcc/config/pa/pa-linux.h
gcc/config/pa/pa.c
gcc/config/pa/pa.md
gcc/config/pa/predicates.md
gcc/config/rs6000/altivec.h
gcc/config/rs6000/altivec.md
gcc/config/rs6000/crypto.md
gcc/config/rs6000/darwin.h
gcc/config/rs6000/default64.h
gcc/config/rs6000/driver-rs6000.c
gcc/config/rs6000/htm.md
gcc/config/rs6000/htmxlintrin.h
gcc/config/rs6000/linux64.h
gcc/config/rs6000/rs6000-builtin.def
gcc/config/rs6000/rs6000-c.c
gcc/config/rs6000/rs6000-cpus.def
gcc/config/rs6000/rs6000-protos.h
gcc/config/rs6000/rs6000-tables.opt
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/rs6000.md
gcc/config/rs6000/rs6000.opt
gcc/config/rs6000/rtems.h
gcc/config/rs6000/t-fprules
gcc/config/rs6000/t-linux
gcc/config/rs6000/t-rtems
gcc/config/rs6000/vsx.md
gcc/config/rs6000/xcoff.h
gcc/config/rx/rx.c
gcc/config/rx/rx.h
gcc/config/s390/2827.md
gcc/config/s390/s390.c
gcc/config/s390/s390.md
gcc/config/s390/s390.opt
gcc/config/sh/sh-mem.cc
gcc/config/sh/sh-protos.h
gcc/config/sh/sh.c
gcc/config/sh/sh.md
gcc/config/sh/sh_optimize_sett_clrt.cc
gcc/config/sh/sh_treg_combine.cc
gcc/config/sh/t-sh
gcc/config/sparc/leon.md
gcc/config/sparc/sparc-opts.h
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.h
gcc/config/sparc/sparc.md
gcc/config/sparc/sparc.opt
gcc/config/sparc/t-rtems
gcc/configure
gcc/configure.ac
gcc/convert.c
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/cp-tree.h
gcc/cp/cvt.c
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/init.c
gcc/cp/lambda.c
gcc/cp/mangle.c
gcc/cp/name-lookup.c
gcc/cp/parser.c
gcc/cp/pt.c
gcc/cp/repo.c
gcc/cp/semantics.c
gcc/cp/tree.c
gcc/cp/typeck.c
gcc/cse.c
gcc/df.h
gcc/doc/aot-compile.1
gcc/doc/cpp.1
gcc/doc/cpp.info
gcc/doc/cpp.texi
gcc/doc/cppinternals.info
gcc/doc/cppinternals.texi
gcc/doc/extend.texi
gcc/doc/fsf-funding.7
gcc/doc/g++.1
gcc/doc/gc-analyze.1
gcc/doc/gcc.1
gcc/doc/gcc.info
gcc/doc/gcc.texi
gcc/doc/gccinstall.info
gcc/doc/gccint.info
gcc/doc/gccint.texi
gcc/doc/gcj-dbtool.1
gcc/doc/gcj.1
gcc/doc/gcov.1
gcc/doc/gcov.texi
gcc/doc/gfortran.1
gcc/doc/gij.1
gcc/doc/gpl.7
gcc/doc/grmic.1
gcc/doc/install.texi
gcc/doc/invoke.texi
gcc/doc/jcf-dump.1
gcc/doc/jv-convert.1
gcc/doc/md.texi
gcc/doc/rebuild-gcj-db.1
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/dse.c
gcc/dwarf2out.c
gcc/dwarf2out.h
gcc/expmed.c
gcc/expr.c
gcc/fold-const.c
gcc/fortran/ChangeLog
gcc/fortran/class.c
gcc/fortran/decl.c
gcc/fortran/dependency.c
gcc/fortran/gfortran.h
gcc/fortran/gfortran.info
gcc/fortran/gfortranspec.c
gcc/fortran/interface.c
gcc/fortran/intrinsic.texi
gcc/fortran/module.c
gcc/fortran/resolve.c
gcc/fortran/simplify.c
gcc/fortran/symbol.c
gcc/fortran/trans-array.c
gcc/fortran/trans-decl.c
gcc/fortran/trans-expr.c
gcc/fortran/trans-openmp.c
gcc/fortran/trans-stmt.c
gcc/fortran/trans-types.c
gcc/fortran/trans.h
gcc/function.c
gcc/function.h
gcc/gcc.c
gcc/gcov-dump.c
gcc/gcov.c
gcc/gengtype-lex.c
gcc/go/ChangeLog
gcc/go/gofrontend/export.cc
gcc/go/gofrontend/export.h
gcc/go/gofrontend/gogo.cc
gcc/go/gofrontend/gogo.h
gcc/go/gofrontend/import-archive.cc
gcc/go/gofrontend/import.cc
gcc/go/gofrontend/unsafe.cc
gcc/graphite-clast-to-gimple.c
gcc/graphite-interchange.c
gcc/graphite-optimize-isl.c
gcc/graphite-poly.c
gcc/graphite-sese-to-poly.c
gcc/ipa-inline-analysis.c
gcc/ipa-inline-transform.c
gcc/ipa-pure-const.c
gcc/ipa.c
gcc/ira-build.c
gcc/ira-conflicts.c
gcc/ira-int.h
gcc/ira.c
gcc/java/ChangeLog
gcc/java/jcf-dump.c
gcc/jump.c
gcc/lra-assigns.c
gcc/lra-constraints.c
gcc/lra-int.h
gcc/lra-lives.c
gcc/lra.c
gcc/lto-cgraph.c
gcc/lto-streamer-out.c
gcc/lto/ChangeLog
gcc/objc/ChangeLog
gcc/objcp/ChangeLog
gcc/omp-low.c
gcc/po/ChangeLog
gcc/recog.c
gcc/ree.c
gcc/reload.c
gcc/rtlanal.c
gcc/simplify-rtx.c
gcc/symtab.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/gomp/pr60823-4.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/pr56493.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/pr57653-2.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/pr57653-2.h [new file with mode: 0644]
gcc/testsuite/c-c++-common/pr57653.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/pr57653.h [new file with mode: 0644]
gcc/testsuite/c-c++-common/pr61553.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/tsan/atomic_stack.c
gcc/testsuite/c-c++-common/tsan/fd_pipe_race.c
gcc/testsuite/c-c++-common/tsan/mutexset1.c
gcc/testsuite/c-c++-common/tsan/race_on_barrier.c
gcc/testsuite/c-c++-common/tsan/race_on_mutex.c
gcc/testsuite/c-c++-common/tsan/race_on_mutex2.c
gcc/testsuite/c-c++-common/tsan/simple_race.c
gcc/testsuite/c-c++-common/tsan/simple_stack.c
gcc/testsuite/c-c++-common/tsan/sleep_sync.c
gcc/testsuite/c-c++-common/tsan/tiny_race.c
gcc/testsuite/c-c++-common/tsan/tls_race.c
gcc/testsuite/c-c++-common/tsan/tsan_barrier.h [new file with mode: 0644]
gcc/testsuite/c-c++-common/tsan/write_in_reader_lock.c
gcc/testsuite/c-c++-common/ubsan/overflow-sub-3.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/ubsan/pr56917.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/ubsan/pr65984.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/ubsan/undefined-2.c [new file with mode: 0644]
gcc/testsuite/g++.dg/abi/aarch64_guard1.C
gcc/testsuite/g++.dg/abi/anon4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/alias-decl-44.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/constexpr-63265.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/deleted9.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/initlist89.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-decltype2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice3.C
gcc/testsuite/g++.dg/cpp0x/override1.C
gcc/testsuite/g++.dg/cpp0x/ref-qual16.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/rv-array1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/variadic165.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1y/auto-fn26.C [new file with mode: 0644]
gcc/testsuite/g++.dg/gcov/gcov-15.C [new file with mode: 0644]
gcc/testsuite/g++.dg/gomp/tpl-target-update.C [new file with mode: 0644]
gcc/testsuite/g++.dg/init/array39.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr63551.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr63587-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr63587-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr63838.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr64068.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr64896.C [new file with mode: 0644]
gcc/testsuite/g++.dg/lookup/using55.C [new file with mode: 0644]
gcc/testsuite/g++.dg/lto/pr65193_0.C [new file with mode: 0644]
gcc/testsuite/g++.dg/lto/pr65549_0.C [new file with mode: 0644]
gcc/testsuite/g++.dg/opt/flifetime-dse1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/other/anon7.C [new file with mode: 0644]
gcc/testsuite/g++.dg/other/const4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/other/dump-ada-spec-3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/pr54442.C [new file with mode: 0644]
gcc/testsuite/g++.dg/pr64037.C [new file with mode: 0644]
gcc/testsuite/g++.dg/pr64688-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/pr65049.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/non-dependent14.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/offsetof3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/recurse4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/ref9.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/repo11.C [new file with mode: 0644]
gcc/testsuite/g++.dg/tree-ssa/pr63841.C [new file with mode: 0644]
gcc/testsuite/g++.dg/tsan/atomic_free.C
gcc/testsuite/g++.dg/tsan/atomic_free2.C
gcc/testsuite/g++.dg/tsan/cond_race.C
gcc/testsuite/g++.dg/tsan/tsan_barrier.h [new file with mode: 0644]
gcc/testsuite/g++.dg/ubsan/pr63913.C [new file with mode: 0644]
gcc/testsuite/g++.dg/warn/Warray-bounds-6.C [new file with mode: 0644]
gcc/testsuite/g++.dg/warn/Wunused-var-22.C [new file with mode: 0644]
gcc/testsuite/g++.dg/warn/register-parm-1.C [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr63608.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr64067.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr64269.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr65163.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr65680.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr63659.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr64979.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr65427.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr66233.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/20141029-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/Warray-bounds-12.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/Warray-bounds-13.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/PR64559.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/pr63551.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/pr64041.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/lto/pr64373_0.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr51879-12.c
gcc/testsuite/gcc.dg/pr52769.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr61058.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr62167-run.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr62167.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr63593.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr63637-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr63637-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr63637-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr63637-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr63637-5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr63637-6.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr63665.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr63762.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr64536.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr64563.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr64663.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr64766.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr64778.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr65063.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr65228.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tls/pr66470.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tm/pr64391.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr62238.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr63738.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr64199.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr64365.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr66123.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr66272.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/stdarg-7.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/bb-slp-24.c
gcc/testsuite/gcc.dg/vect/bb-slp-25.c
gcc/testsuite/gcc.dg/vect/bb-slp-29.c
gcc/testsuite/gcc.dg/vect/bb-slp-32.c
gcc/testsuite/gcc.dg/vect/bb-slp-9.c
gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a-pr63175.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a.c
gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-33.c
gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c
gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c
gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-outer-fir.c
gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr64909.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-6-global.c
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-6.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-43.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-57.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-61.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-1.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-2.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-3.c
gcc/testsuite/gcc.dg/vect/pr16105.c
gcc/testsuite/gcc.dg/vect/pr20122.c
gcc/testsuite/gcc.dg/vect/pr33804.c
gcc/testsuite/gcc.dg/vect/pr33953.c
gcc/testsuite/gcc.dg/vect/pr56787.c
gcc/testsuite/gcc.dg/vect/pr58508.c
gcc/testsuite/gcc.dg/vect/pr59354.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr61634.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr62021.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr63605.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr64421.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr64493.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr64495.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr65518.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr66251.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/slp-25.c
gcc/testsuite/gcc.dg/vect/vect-105-big-array.c
gcc/testsuite/gcc.dg/vect/vect-105.c
gcc/testsuite/gcc.dg/vect/vect-27.c
gcc/testsuite/gcc.dg/vect/vect-29.c
gcc/testsuite/gcc.dg/vect/vect-33.c
gcc/testsuite/gcc.dg/vect/vect-42.c
gcc/testsuite/gcc.dg/vect/vect-44.c
gcc/testsuite/gcc.dg/vect/vect-48.c
gcc/testsuite/gcc.dg/vect/vect-50.c
gcc/testsuite/gcc.dg/vect/vect-52.c
gcc/testsuite/gcc.dg/vect/vect-56.c
gcc/testsuite/gcc.dg/vect/vect-60.c
gcc/testsuite/gcc.dg/vect/vect-72.c
gcc/testsuite/gcc.dg/vect/vect-75-big-array.c
gcc/testsuite/gcc.dg/vect/vect-75.c
gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c
gcc/testsuite/gcc.dg/vect/vect-77-global.c
gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c
gcc/testsuite/gcc.dg/vect/vect-78-global.c
gcc/testsuite/gcc.dg/vect/vect-93.c
gcc/testsuite/gcc.dg/vect/vect-95.c
gcc/testsuite/gcc.dg/vect/vect-96.c
gcc/testsuite/gcc.dg/vect/vect-cond-1.c
gcc/testsuite/gcc.dg/vect/vect-cond-3.c
gcc/testsuite/gcc.dg/vect/vect-cond-4.c
gcc/testsuite/gcc.dg/vect/vect-cselim-1.c
gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c
gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c
gcc/testsuite/gcc.dg/vect/vect-nest-cycle-1.c
gcc/testsuite/gcc.dg/vect/vect-nest-cycle-2.c
gcc/testsuite/gcc.dg/vect/vect-outer-3a-big-array.c
gcc/testsuite/gcc.dg/vect/vect-outer-3a.c
gcc/testsuite/gcc.dg/vect/vect-outer-5.c
gcc/testsuite/gcc.dg/vect/vect-outer-fir-big-array.c
gcc/testsuite/gcc.dg/vect/vect-outer-fir-lb-big-array.c
gcc/testsuite/gcc.dg/vect/vect-outer-fir-lb.c
gcc/testsuite/gcc.dg/vect/vect-outer-fir.c
gcc/testsuite/gcc.dg/vect/vect-peel-3.c
gcc/testsuite/gcc.dg/vect/vect-peel-4.c
gcc/testsuite/gcc.dg/vect/vect-pr61917.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-pre-interact.c
gcc/testsuite/gcc.target/aarch64/pr62308.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/pr63424.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/pr64304.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/pr65235_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sisd-shft-neg_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/symbol-range.c [new file with mode: 0644]
gcc/testsuite/gcc.target/alpha/pr66140.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/constant-pool.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/divzero.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/pr64453.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/pr65647-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/pr65647.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/torture/pr63633-ice-mult.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/torture/pr64331.c [new file with mode: 0644]
gcc/testsuite/gcc.target/avr/torture/pr64452.c [new file with mode: 0644]
gcc/testsuite/gcc.target/h8300/h8300.exp
gcc/testsuite/gcc.target/h8300/pragma-isr.c
gcc/testsuite/gcc.target/h8300/pragma-isr2.c
gcc/testsuite/gcc.target/i386/avx2-pr64286.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx256-unaligned-load-7.c
gcc/testsuite/gcc.target/i386/avx256-unaligned-store-7.c
gcc/testsuite/gcc.target/i386/bmi2-bzhi-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/builtin_target.c
gcc/testsuite/gcc.target/i386/memcpy-strategy-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/memset-strategy-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr57003.c
gcc/testsuite/gcc.target/i386/pr59927.c
gcc/testsuite/gcc.target/i386/pr60516.c
gcc/testsuite/gcc.target/i386/pr60851.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr63538.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr63637-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr63637-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr63637-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr63637-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr63637-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr63637-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr63661.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr63947.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr64387.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr64409.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr64513.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr65990.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr66275.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr66470.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/sse-14.c
gcc/testsuite/gcc.target/i386/sse-22.c
gcc/testsuite/gcc.target/i386/sse-25.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/builtins-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/builtins-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/htm-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/htm-builtin-1.c
gcc/testsuite/gcc.target/powerpc/pr53199.c
gcc/testsuite/gcc.target/powerpc/pr60158.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr64505.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr65456.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr65787.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-10.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-11.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-12.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-13.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-14.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-17.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-18.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-7.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-8.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/swaps-p8-9.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/vsx-vectorize-2.c
gcc/testsuite/gcc.target/powerpc/vsx-vectorize-4.c
gcc/testsuite/gcc.target/powerpc/vsx-vectorize-6.c
gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c
gcc/testsuite/gcc.target/s390/20140327-1.c
gcc/testsuite/gcc.target/s390/hotpatch-1.c
gcc/testsuite/gcc.target/s390/hotpatch-10.c
gcc/testsuite/gcc.target/s390/hotpatch-11.c
gcc/testsuite/gcc.target/s390/hotpatch-12.c
gcc/testsuite/gcc.target/s390/hotpatch-13.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-14.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-15.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-17.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-18.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-19.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-2.c
gcc/testsuite/gcc.target/s390/hotpatch-20.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-21.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-22.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-23.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-24.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-25.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-26.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-27.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-28.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-3.c
gcc/testsuite/gcc.target/s390/hotpatch-4.c
gcc/testsuite/gcc.target/s390/hotpatch-5.c
gcc/testsuite/gcc.target/s390/hotpatch-6.c
gcc/testsuite/gcc.target/s390/hotpatch-7.c
gcc/testsuite/gcc.target/s390/hotpatch-8.c
gcc/testsuite/gcc.target/s390/hotpatch-9.c
gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c
gcc/testsuite/gcc.target/s390/hotpatch-compile-10.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-compile-11.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-compile-12.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-compile-13.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-compile-14.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-compile-15.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-compile-16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c
gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c
gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c
gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c
gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c
gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c
gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c
gcc/testsuite/gcc.target/s390/hotpatch-compile-9.c [new file with mode: 0644]
gcc/testsuite/gcc.target/s390/htm-nofloat-1.c
gcc/testsuite/gcc.target/s390/pr57559.c
gcc/testsuite/gcc.target/s390/pr57960.c
gcc/testsuite/gcc.target/s390/s390.exp
gcc/testsuite/gcc.target/sh/pr51244-20-sh2a.c
gcc/testsuite/gcc.target/sh/pr51244-20.c
gcc/testsuite/gcc.target/sh/pr53988.c
gcc/testsuite/gcc.target/sh/pr64507.c [new file with mode: 0644]
gcc/testsuite/gcc.target/sh/torture/pr63783-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/sh/torture/pr63783-2.c [new file with mode: 0644]
gcc/testsuite/gfortran.dg/allocate_with_mold_1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/class_allocate_17.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/class_allocate_18.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/coarray_36.f [new file with mode: 0644]
gcc/testsuite/gfortran.dg/coarray_37.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/dependency_45.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/entry_20.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/finalize_28.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/internal_pack_15.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/namelist_86.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pointer_remapping_9.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr64528.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr64530.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr65450.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr65504.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/proc_ptr_comp_44.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/proc_ptr_comp_45.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/typebound_call_26.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/typebound_operator_20.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/unlimited_polymorphic_2.f03
gcc/testsuite/gfortran.dg/unlimited_polymorphic_20.f03 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/unlimited_polymorphic_23.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/use_rename_8.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/used_types_27.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/vect/vect-2.f90
gcc/testsuite/gfortran.dg/vect/vect-3.f90
gcc/testsuite/gfortran.dg/vect/vect-4.f90
gcc/testsuite/gfortran.dg/vect/vect-5.f90
gcc/testsuite/gfortran.fortran-torture/compile/pr66251.f90 [new file with mode: 0644]
gcc/testsuite/gnat.dg/loop_optimization18.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/loop_optimization18.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/loop_optimization18_pkg.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/opt45.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/opt47.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/unchecked_convert1.adb
gcc/testsuite/go.test/go-test.exp
gcc/testsuite/lib/target-supports.exp
gcc/trans-mem.c
gcc/tree-data-ref.c
gcc/tree-data-ref.h
gcc/tree-eh.c
gcc/tree-loop-distribution.c
gcc/tree-predcom.c
gcc/tree-ssa-dom.c
gcc/tree-ssa-forwprop.c
gcc/tree-ssa-reassoc.c
gcc/tree-ssa-strlen.c
gcc/tree-ssa-tail-merge.c
gcc/tree-stdarg.c
gcc/tree-vect-data-refs.c
gcc/tree-vect-generic.c
gcc/tree-vect-loop.c
gcc/tree-vect-slp.c
gcc/tree-vect-stmts.c
gcc/tree-vectorizer.h
gcc/tree-vrp.c
gcc/tree.c
gcc/tsan.c
gcc/ubsan.c
gcc/var-tracking.c
gcc/varasm.c
gcc/web.c
gnattools/ChangeLog
include/ChangeLog
intl/ChangeLog
libada/ChangeLog
libatomic/ChangeLog
libatomic/fop_n.c
libbacktrace/ChangeLog
libbacktrace/configure
libbacktrace/configure.ac
libcilkrts/ChangeLog
libcilkrts/configure
libcilkrts/configure.ac
libcpp/ChangeLog
libcpp/files.c
libcpp/line-map.c
libcpp/po/ChangeLog
libcpp/po/ja.gmo
libcpp/po/ja.po
libdecnumber/ChangeLog
libffi/ChangeLog
libgcc/ChangeLog
libgcc/config/arm/bpabi-v6m.S
libgcc/config/arm/bpabi.S
libgcc/config/i386/cpuinfo.c
libgcc/config/libbid/ChangeLog
libgcc/config/mips/mips16.S
libgcc/config/nios2/linux-unwind.h
libgcc/config/pa/linux-atomic.c
libgcc/config/sh/lib1funcs.S
libgfortran/ChangeLog
libgfortran/io/fbuf.c
libgfortran/io/fbuf.h
libgfortran/io/io.h
libgfortran/io/list_read.c
libgfortran/io/transfer.c
libgfortran/io/write.c
libgo/configure
libgo/configure.ac
libgo/go/debug/elf/elf.go
libgo/go/debug/elf/file.go
libgo/go/debug/elf/file_test.go
libgo/go/debug/elf/testdata/go-relocation-test-gcc447-ppc64.obj [new file with mode: 0644]
libgo/go/go/build/syslist.go
libgo/mksysinfo.sh
libgo/runtime/go-caller.c
libgomp/ChangeLog
libgomp/configure
libgomp/configure.ac
libgomp/configure.tgt
libgomp/testsuite/libgomp.c++/atomic-16.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c++/pr64824.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c++/pr64868.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c++/target-4.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c/atomic-18.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/pr64734.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/pr64824.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/pr64868.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/pr66133.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/target-10.c [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/pr63938-1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/pr63938-2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/pr65597.f90 [new file with mode: 0644]
libiberty/ChangeLog
libitm/ChangeLog
libitm/configure.tgt
libjava/ChangeLog
libjava/classpath/ChangeLog
libjava/classpath/doc/gappletviewer.1
libjava/classpath/doc/gjar.1
libjava/classpath/doc/gjarsigner.1
libjava/classpath/doc/gjavah.1
libjava/classpath/doc/gjdoc.1
libjava/classpath/doc/gkeytool.1
libjava/classpath/doc/gnative2ascii.1
libjava/classpath/doc/gorbd.1
libjava/classpath/doc/grmid.1
libjava/classpath/doc/grmiregistry.1
libjava/classpath/doc/gserialver.1
libjava/classpath/doc/gtnameserv.1
libjava/libltdl/ChangeLog
libobjc/ChangeLog
libquadmath/ChangeLog
libquadmath/configure
libquadmath/configure.ac
libsanitizer/ChangeLog
libsanitizer/configure
libsanitizer/configure.ac
libssp/ChangeLog
libstdc++-v3/ChangeLog
libstdc++-v3/config/cpu/aarch64/atomic_word.h [new file with mode: 0644]
libstdc++-v3/config/cpu/powerpc/atomic_word.h
libstdc++-v3/configure.host
libstdc++-v3/doc/html/api.html
libstdc++-v3/doc/html/faq.html
libstdc++-v3/doc/html/index.html
libstdc++-v3/doc/html/manual/abi.html
libstdc++-v3/doc/html/manual/algorithms.html
libstdc++-v3/doc/html/manual/api.html
libstdc++-v3/doc/html/manual/appendix.html
libstdc++-v3/doc/html/manual/appendix_contributing.html
libstdc++-v3/doc/html/manual/appendix_free.html
libstdc++-v3/doc/html/manual/appendix_gpl.html
libstdc++-v3/doc/html/manual/appendix_porting.html
libstdc++-v3/doc/html/manual/atomics.html
libstdc++-v3/doc/html/manual/backwards.html
libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
libstdc++-v3/doc/html/manual/concurrency.html
libstdc++-v3/doc/html/manual/containers.html
libstdc++-v3/doc/html/manual/debug_mode_using.html
libstdc++-v3/doc/html/manual/diagnostics.html
libstdc++-v3/doc/html/manual/documentation_hacking.html
libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
libstdc++-v3/doc/html/manual/ext_preface.html
libstdc++-v3/doc/html/manual/extensions.html
libstdc++-v3/doc/html/manual/facets.html
libstdc++-v3/doc/html/manual/index.html
libstdc++-v3/doc/html/manual/intro.html
libstdc++-v3/doc/html/manual/io.html
libstdc++-v3/doc/html/manual/iterators.html
libstdc++-v3/doc/html/manual/localization.html
libstdc++-v3/doc/html/manual/memory.html
libstdc++-v3/doc/html/manual/numerics.html
libstdc++-v3/doc/html/manual/parallel_mode.html
libstdc++-v3/doc/html/manual/parallel_mode_using.html
libstdc++-v3/doc/html/manual/policy_data_structures.html
libstdc++-v3/doc/html/manual/policy_data_structures_design.html
libstdc++-v3/doc/html/manual/policy_data_structures_using.html
libstdc++-v3/doc/html/manual/profile_mode.html
libstdc++-v3/doc/html/manual/profile_mode_design.html
libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
libstdc++-v3/doc/html/manual/status.html
libstdc++-v3/doc/html/manual/std_contents.html
libstdc++-v3/doc/html/manual/strings.html
libstdc++-v3/doc/html/manual/support.html
libstdc++-v3/doc/html/manual/test.html
libstdc++-v3/doc/html/manual/using.html
libstdc++-v3/doc/html/manual/using_exceptions.html
libstdc++-v3/doc/html/manual/using_headers.html
libstdc++-v3/doc/html/manual/utilities.html
libstdc++-v3/doc/xml/manual/evolution.xml
libstdc++-v3/include/bits/basic_string.h
libstdc++-v3/include/bits/regex.h
libstdc++-v3/include/bits/regex.tcc
libstdc++-v3/include/bits/regex_compiler.h
libstdc++-v3/include/bits/regex_compiler.tcc
libstdc++-v3/include/bits/regex_executor.tcc
libstdc++-v3/include/bits/stl_algo.h
libstdc++-v3/include/bits/stl_algobase.h
libstdc++-v3/include/bits/stl_uninitialized.h
libstdc++-v3/include/debug/array
libstdc++-v3/include/experimental/optional
libstdc++-v3/include/parallel/algo.h
libstdc++-v3/include/parallel/numeric
libstdc++-v3/include/profile/array
libstdc++-v3/include/std/array
libstdc++-v3/include/std/atomic
libstdc++-v3/include/std/chrono
libstdc++-v3/include/std/functional
libstdc++-v3/include/std/future
libstdc++-v3/include/std/istream
libstdc++-v3/include/std/ostream
libstdc++-v3/include/std/scoped_allocator
libstdc++-v3/include/std/shared_mutex
libstdc++-v3/include/std/thread
libstdc++-v3/include/std/tuple
libstdc++-v3/include/tr1/functional
libstdc++-v3/libsupc++/eh_personality.cc
libstdc++-v3/testsuite/20_util/duration/literals/65499.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/function/63840.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/scoped_allocator/65279.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/64476.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/tuple/61947.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/uses_allocator/cons_neg.cc
libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc
libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc
libstdc++-v3/testsuite/25_algorithms/is_permutation/64646.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/fpos/14775.cc
libstdc++-v3/testsuite/27_io/rvalue_streams-2.cc [new file with mode: 0644]
libstdc++-v3/testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc [moved from libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_bracket_01.cc with 67% similarity]
libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/cstring.cc
libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/string.cc
libstdc++-v3/testsuite/28_regex/basic_regex/imbue/string.cc [new file with mode: 0644]
libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/64140.cc [new file with mode: 0644]
libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/string_position_01.cc
libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/64303.cc [new file with mode: 0644]
libstdc++-v3/testsuite/28_regex/match_results/swap.cc [new file with mode: 0644]
libstdc++-v3/testsuite/28_regex/traits/char/lookup_classname.cc
libstdc++-v3/testsuite/28_regex/traits/char/lookup_collatename.cc
libstdc++-v3/testsuite/28_regex/traits/wchar_t/user_defined.cc
libstdc++-v3/testsuite/29_atomics/atomic/64658.cc [new file with mode: 0644]
libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
libstdc++-v3/testsuite/30_threads/shared_lock/cons/5.cc
libstdc++-v3/testsuite/30_threads/shared_lock/cons/6.cc
libstdc++-v3/testsuite/30_threads/shared_lock/locking/3.cc
libstdc++-v3/testsuite/30_threads/shared_lock/locking/4.cc
libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/3.cc [new file with mode: 0644]
libstdc++-v3/testsuite/30_threads/this_thread/58038.cc [new file with mode: 0644]
libstdc++-v3/testsuite/30_threads/this_thread/60421.cc [new file with mode: 0644]
libstdc++-v3/testsuite/experimental/feat-cxx14.cc
libstdc++-v3/testsuite/experimental/optional/requirements.cc
libstdc++-v3/testsuite/lib/dg-options.exp
libstdc++-v3/testsuite/lib/libstdc++.exp
libstdc++-v3/testsuite/tr1/3_function_objects/function/63840.cc [new file with mode: 0644]
libvtv/ChangeLog
lto-plugin/ChangeLog
maintainer-scripts/ChangeLog
zlib/ChangeLog

index 4a457e4..1744831 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-05-03  Matthias Klose  <doko@ubuntu.com>
+
+       * configure.ac: Match $host configured with triplets.
+       * configure: Regenerate.
+
+2014-12-04  Tobias Burnus  <burnus@net-b.de>
+
+       * configure.ac: Permit also ISL 0.14 with CLooG.
+       * Makefile.def: Make more dependent on mpfr, mpc, isl, and cloog.
+       * Makefile.in: Regenerate.
+       * configure: Regenerate.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index fb6c15a..2f305f9 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index 1f7f22f..857419e 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index e1c8587..bd4afc7 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index 40847ed..650929c 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index 9f592e4..d5b7f80 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index d87a789..02477a0 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index 2812c77..85c96d3 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -126,7 +126,7 @@ not yet been merged into the main part of this manual.
 <hr />
 <p><p><a href="./index.html">Return to the GCC Installation page</a>
 </p>
-<p>Copyright &copy; 1988-2014 Free Software Foundation, Inc.
+<p>Copyright &copy; 1988-2015 Free Software Foundation, Inc.
 </p><br>
 <p>Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index 9891930..bf73bac 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index 3b9cf58..e54780b 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index f85373a..73df4e2 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -623,13 +623,24 @@ not support option <samp>-mabi=ilp32</samp>.
 <p>To enable a workaround for the Cortex-A53 erratum number 835769 by default
 (for all CPUs regardless of -mcpu option given) at configure time use the
 <samp>--enable-fix-cortex-a53-835769</samp> option.  This will enable the fix by
-default and can be explicitly disabled during during compilation by passing the
+default and can be explicitly disabled during compilation by passing the
 <samp>-mno-fix-cortex-a53-835769</samp> option.  Conversely,
 <samp>--disable-fix-cortex-a53-835769</samp> will disable the workaround by
 default.  The workaround is disabled by default if neither of
 <samp>--enable-fix-cortex-a53-835769</samp> or
 <samp>--disable-fix-cortex-a53-835769</samp> is given at configure time.
 </p>
+<p>To enable a workaround for the Cortex-A53 erratum number 843419 by default
+(for all CPUs regardless of -mcpu option given) at configure time use the
+<samp>--enable-fix-cortex-a53-843419</samp> option.  This workaround is applied at
+link time.  Enabling the workaround will cause GCC to pass the relevant option
+to the linker.  It can be explicitly disabled during compilation by passing the
+<samp>-mno-fix-cortex-a53-843419</samp> option.  Conversely,
+<samp>--disable-fix-cortex-a53-843419</samp> will disable the workaround by default.
+The workaround is disabled by default if neither of
+<samp>--enable-fix-cortex-a53-843419</samp> or
+<samp>--disable-fix-cortex-a53-843419</samp> is given at configure time.
+</p>
 <hr />
 <!-- rs6000-ibm-aix*, powerpc-ibm-aix* --><a name="x_002dibm_002daix"></a><a name="g_t_002a_002dibm_002daix_002a"></a>
 <h3 class="heading">*-ibm-aix*</h3>
index 3cd3ad5..b9a49cf 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index b089e00..2ebca87 100644 (file)
@@ -1 +1 @@
-Obtained from SVN: tags/gcc_4_9_2_release revision 216910
+Obtained from SVN: tags/gcc_4_9_3_release revision 225078
diff --git a/MD5SUMS b/MD5SUMS
index 317a90c..97f0179 100644 (file)
--- a/MD5SUMS
+++ b/MD5SUMS
@@ -1,5 +1,5 @@
 # This file contains the MD5 checksums of the files in the 
-# gcc-4.9.2.tar.bz2 tarball.
+# gcc-4.9.3.tar.bz2 tarball.
 #
 # Besides verifying that all files in the tarball were correctly expanded,
 # it also can be used to determine if any files have changed since the
@@ -16,30 +16,30 @@ bda40697a9e2e23c4a52125fc1cc713d  .dir-locals.el
 fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
 d32239bcb673463ab874e80d47fae504  COPYING3
 6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
-0b4a01b27157debd96f4e6d2d0307f37  ChangeLog
+dcf8644b7185d8bfc850b996a576f6cf  ChangeLog
 09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
 79ef16e405f5873970e04cee49091ff8  INSTALL/README
-ee22328b5b8e1d30a99070a44c9eb0df  INSTALL/binaries.html
-b4159705a4fcdcdd4206ba181650da85  INSTALL/build.html
-bf8c899b7abf164cb641f6dd76fe5c7c  INSTALL/configure.html
-ad0da2a62365cd68d5cc8cb8e6b7bacb  INSTALL/download.html
-4931f56b1c3ac129e43d740b1a12176c  INSTALL/finalinstall.html
-f00a988fc283b7fb820bce2168a679d0  INSTALL/gfdl.html
-fde4bf5486546212c8df4ea2df4837a6  INSTALL/index.html
-c3ca0021459a5551e39f1ef07088c458  INSTALL/old.html
-f94a4e91cfbfc8f33562eec45c728dd7  INSTALL/prerequisites.html
-dfed3a93572da02d6931564034b6b38f  INSTALL/specific.html
-3f2440807456f284886e1c11d75950b2  INSTALL/test.html
-cb72da670e25ec4acc68188270a751c7  LAST_UPDATED
+0c4b65958eeb60576941b9ac74f107c7  INSTALL/binaries.html
+55b7dd593f825d1e18f8300dfb6d9135  INSTALL/build.html
+c7f0bcac711b53ec526aa7462ed62e84  INSTALL/configure.html
+d2fd0b75a80bbbc1039adf5905907d92  INSTALL/download.html
+22470239483dc4a8209ae0e7aedb975a  INSTALL/finalinstall.html
+eeca39b775f90e9aba3299ac7ca5226b  INSTALL/gfdl.html
+dc724af1087ecfe674057e134fb96f24  INSTALL/index.html
+1312e5d2d766e7329830119e414c6dc0  INSTALL/old.html
+18426c8161a0727970e58fae85d7462d  INSTALL/prerequisites.html
+b2a5a4d2a4f45a040ee13af01b54cd69  INSTALL/specific.html
+ecf1d0a55509986c460eb99faf99fa15  INSTALL/test.html
+0f40e81508b9faea87cd500386979481  LAST_UPDATED
 5df43eb77ba93510a6adee7bd06bd774  MAINTAINERS
-e6078d46d3729f3f514954081bfd9480  Makefile.def
-356452c2d3677e10f0047801465f2ea7  Makefile.in
+f16f33768674699c5cf92a8ca06744d5  Makefile.def
+1e713ad7c4b220e69fd0dc77d8060c6a  Makefile.in
 f3a76b2dae23759df8f4bf5f1088f950  Makefile.tpl
-f8c42f563b2320a10edb26313d1dd281  NEWS
+316a89552e2010523cfcde0315ad180b  NEWS
 80d26bc3b1ad4f6969a96a24c9181bf5  README
 b510a5285eb05298b5f3d9f5ae920588  boehm-gc/AmigaOS.c
 2caafacabf758bb76a9dfce1fc544b97  boehm-gc/BCC_MAKEFILE
-cb164958a9be5b6d4fe87d12a6d64675  boehm-gc/ChangeLog
+b821d6f1d53442abb5183e302cb9bdc6  boehm-gc/ChangeLog
 c18075e3729cd116028480307a8e845d  boehm-gc/EMX_MAKEFILE
 3b7cc3be9ed3c2135bbda990e8a69303  boehm-gc/MacOS.c
 5cf7764626b7dd7272b2fe11403d1b6a  boehm-gc/MacProjects.sit.hqx
@@ -218,7 +218,7 @@ b04a1232318128ebd7c630fca10d02e5  boehm-gc/threads.mk.in
 eea34cf893bb060ee20189e256a8065a  config.guess
 040359150cf11493f973a46d8a25b06b  config.rpath
 9e38dc3cc2b4e471ea192c8984fb0cd1  config.sub
-b0f3f7dcabc42f0820ed64d8bbb29fc0  config/ChangeLog
+900ae5ac06e2393a3183425057584786  config/ChangeLog
 0fcd4badfe2a2191778bdf5ab94aa40c  config/acinclude.m4
 9238d23c68259d195b332db71892d242  config/acx.m4
 6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
@@ -300,9 +300,9 @@ b0d2f2e937c16091b330451e6883c4b6  config/tcl.m4
 b6afa5c33fb98edfaf591dd38d198b0d  config/warnings.m4
 7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
 e249d18c447a8372fd1ed5f084284d6b  config/zlib.m4
-af368250c3bbec6c919ac8427e7d1bb7  configure
-d64f2d1eefbf586f0c4b3bac7edb9053  configure.ac
-a450d301503c4a72a3096e6c4e1d42c6  contrib/ChangeLog
+63e913e27fbfee8962ff656ebc7b1447  configure
+93584659b041680f4a3067ca529601f0  configure.ac
+103400c5efef132fe6ea3718d738f4bd  contrib/ChangeLog
 7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
 e0ea80d7094bf66610f2f60db444f9a1  contrib/analyze_brprob
 998f0112578f801ac84646f060e18f89  contrib/check_GNU_style.sh
@@ -334,7 +334,7 @@ fa945bac89ee68b410027dcfe1312f4b  contrib/index-prop
 0fb5c8c3cd465d8bd57b55b2548c683a  contrib/paranoia.cc
 9083c56c1c89c5bec355a27f78e49807  contrib/patch_tester.sh
 87a19b40fbd220938cf6c23c42c255e2  contrib/prepare_patch.sh
-3ff5ca0dd3e42f41e6d477430d7f6c06  contrib/reghunt/ChangeLog
+0a852375c3bfb58f54ee7ce9778fba2b  contrib/reghunt/ChangeLog
 cf247a580e49d212518de409793db0a8  contrib/reghunt/bin/gcc-build-full
 724e70ea3e80f87f2a201bbe2f1eef37  contrib/reghunt/bin/gcc-build-simple
 3f2318bae7562a4ad1639e686916a545  contrib/reghunt/bin/gcc-cleanup
@@ -393,7 +393,7 @@ f251d49dd87647250fcd74dd50b7835f  contrib/reghunt/examples/common.config
 e2829fc4af4f433a6a328a62d5ce8066  contrib/reghunt/examples/reg-watch
 afd863c2ec84c906e20f9b9787b1f0fe  contrib/reghunt/examples/reg-watch.awk
 8955535523d4b5f48006bcb851ba9b4b  contrib/reghunt/examples/testall
-d6aa9f6bbb8a77f0f52219c005997c97  contrib/regression/ChangeLog
+1c56943890d7f3bb257c0321c62d1a3b  contrib/regression/ChangeLog
 30553bfced1b2b46bf7ca01ef6ba69d1  contrib/regression/GCC_Regression_Tester.wdgt/Default.png
 ad38ddd771df222eb9d413e3c7f6a751  contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
 777bd286c147cc02861811f66b9a4440  contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
@@ -417,7 +417,7 @@ e00fa8f7dd72b80ca5a64130e85fe4f4  contrib/uninclude
 6ed51d5edccbae74c6500732f8a40540  contrib/update-copyright.py
 7cb42cbdf8becd280d1e16191416fb62  contrib/warn_summary
 21504de31981a67b5b93b265029d1865  depcomp
-42f76a1383b3d0765c78c6e92e338e2f  fixincludes/ChangeLog
+4d00e9f755d470cf3b2b579214bddc51  fixincludes/ChangeLog
 c23ba4c4f4ca4dfcdd9b4155e4626da7  fixincludes/Makefile.in
 4eb8fdda3b3e303c7aa822d341495822  fixincludes/README
 455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
@@ -551,12 +551,12 @@ a5e817d35ded04a0fb03999b50c0e89e  fixincludes/tests/base/tgmath.h
 955462b555900ecd3934223c64e21fa7  fixincludes/tests/base/types/vxTypesBase.h
 c78e762f2c91f2af991feda7d3d7f4b2  fixincludes/tests/base/unistd.h
 f9abccf4b8b7eac82a99bb1f9ef6832f  gcc/ABOUT-GCC-NLS
-b76a7d23139c6deeebfb7ea22eb27b50  gcc/BASE-VER
+8469288315b53a9539ab167633c8e9ab  gcc/BASE-VER
 59530bdf33659b29e73d4adb9f9f6552  gcc/COPYING
 a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
 d32239bcb673463ab874e80d47fae504  gcc/COPYING3
 6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
-d47cf44045a8bf9440a96864c2e22d7f  gcc/ChangeLog
+af0ae041a86e80c831594c9cb4e4e38a  gcc/ChangeLog
 a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
 d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
 240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
@@ -580,7 +580,7 @@ fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/ChangeLog.graphite
 3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
 e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
 739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
-5bafa516ff228d3a23e0bcd7cf79e4cf  gcc/DATESTAMP
+6049774da9d491a624b3646a7cfa7b9b  gcc/DATESTAMP
 d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
 eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
 30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
@@ -592,7 +592,7 @@ ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
 65b0958f3e11d2f408011ac52955b811  gcc/acinclude.m4
 8dcfee0fc9b019ed7810de9926841795  gcc/aclocal.m4
 30995d78221b41ce62c92b2f601b4ebb  gcc/ada/9drpc.adb
-4759708c82ced77c18b100eef49cdc76  gcc/ada/ChangeLog
+64e376334754800fbdcd0f2cd0e7aecf  gcc/ada/ChangeLog
 683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
 7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
 cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
@@ -1203,7 +1203,7 @@ e9493d3a637bfb32aece7ae254196a2d  gcc/ada/ali.ads
 23f816694b6572dc985e5886946596d7  gcc/ada/atree.ads
 df469a2e79033c7828d60e6c567ac5c5  gcc/ada/atree.h
 32be50d674a4fb546a7e63ae09a84ac3  gcc/ada/aux-io.c
-cd87b6d7560883a9d3ca7db38a6351db  gcc/ada/back_end.adb
+8b037deeec71e63727d46b3394c277f0  gcc/ada/back_end.adb
 e1c3157d39f921398dc374e9b85baa13  gcc/ada/back_end.ads
 fd0b0e300cf0a7c9a32c9e1fe862ca7c  gcc/ada/bcheck.adb
 98cd146fde62237f7d4d21fe1b9765c5  gcc/ada/bcheck.ads
@@ -1559,22 +1559,22 @@ d7eca93022b3adc8f4a61dbe910e95d2  gcc/ada/g-zspche.adb
 b45654446bc74bb68ae4adef78906e9b  gcc/ada/g-zspche.ads
 698b837b776abdf33504479af8506a50  gcc/ada/g-zstspl.ads
 ec9434db1d60180addfe46d2744f6380  gcc/ada/gcc-interface/Make-lang.in
-c7513fa4215e55ec6302debfeb9d2964  gcc/ada/gcc-interface/Makefile.in
+71b846717da049700d46e08965200a8a  gcc/ada/gcc-interface/Makefile.in
 d47cdfac076a7e474979da4139393b39  gcc/ada/gcc-interface/ada-tree.def
 a283b124426371820055dc3a8082b6a8  gcc/ada/gcc-interface/ada-tree.h
 51c95420b5900990141d2e5705582197  gcc/ada/gcc-interface/ada.h
 4cbfd794461da0feb1b8661ec623b6c6  gcc/ada/gcc-interface/config-lang.in
 cf89e8e38d01ca91bfed6c342ee1c569  gcc/ada/gcc-interface/cuintp.c
-066b283247c0ff1923d93a22cc9da062  gcc/ada/gcc-interface/decl.c
+65823be2cec769c86a940ccf87c3d7fe  gcc/ada/gcc-interface/decl.c
 c413d4d50e9563859f4d751a4404b705  gcc/ada/gcc-interface/gadaint.h
 b18231cb03f2f97b42fb46387ca5d9be  gcc/ada/gcc-interface/gigi.h
 551c6c4d04e4f9c63340554e826c7bed  gcc/ada/gcc-interface/lang-specs.h
 f4ffb206fe0e51f054ea66a5daaa32ff  gcc/ada/gcc-interface/lang.opt
 c34631d0635fe85f8015d681e1a9f5da  gcc/ada/gcc-interface/misc.c
 4ce109758af9fd09626d5277a2507764  gcc/ada/gcc-interface/targtyps.c
-c1e11cf924f59cc38344d4300a1d5ea5  gcc/ada/gcc-interface/trans.c
-671bbb5c023f9271e36e25a93de01aba  gcc/ada/gcc-interface/utils.c
-7b11749f4e6d3dd14546d219cb372cb0  gcc/ada/gcc-interface/utils2.c
+c5a3457919b60b16aee4f8f22cb35b6e  gcc/ada/gcc-interface/trans.c
+6d5dbeb0c66d66015abc5a8d3f01255f  gcc/ada/gcc-interface/utils.c
+53cd6fbec48ec31fcec395b8f323630e  gcc/ada/gcc-interface/utils2.c
 78e1564fc6e18145efeeea01940a4cb4  gcc/ada/get_scos.adb
 baa8fdaf8d693eb6c5a7e42944887584  gcc/ada/get_scos.ads
 cf46dd5d765fdd1a0dfeedecb7a30853  gcc/ada/get_spark_xrefs.adb
@@ -1712,7 +1712,7 @@ cc86feb39c20bcbabdef44803c7178d4  gcc/ada/mlib-tgt-vms_common.adb
 6088b4c0f12b63703de8ad91e8832b88  gcc/ada/mlib-tgt-vms_common.ads
 5b2a31fd8905162dfd6378350a9c5cc5  gcc/ada/mlib-tgt.adb
 adee377e7abf1df6b7e2d71c307b8548  gcc/ada/mlib-tgt.ads
-a32fbe267355ac37f1fd02178b1ea96b  gcc/ada/mlib-utl.adb
+c7658eeb1fbb2aecf3027869d54619e8  gcc/ada/mlib-utl.adb
 9c02336e2d6dcce14ecb552fdf2ab0a8  gcc/ada/mlib-utl.ads
 741ff3d080328d9dfdbafc7395900834  gcc/ada/mlib.adb
 4fcf391d5cba5059d3abf696bca529c0  gcc/ada/mlib.ads
@@ -2707,7 +2707,7 @@ dff6c45dedc5b25498e3b38f561e4cc7  gcc/ada/xref_lib.ads
 0493a7ed666c4b102be665a8e328be35  gcc/ada/xutil.adb
 2c8b2f1975e4e064d3803db6dbd516cb  gcc/ada/xutil.ads
 fdfbd24619483000b7e04929c29feebb  gcc/addresses.h
-ea19de2a367c59c3e9ca2ffb169870f9  gcc/alias.c
+bc09ee30e57e9f7ab0427b8db7ffe650  gcc/alias.c
 f806ef31303c8073c9399221837a0cca  gcc/alias.h
 62460fd310b0c679995a9f3e7a5dd196  gcc/alloc-pool.c
 381b28a1bdd5698b2aa6b37bbe7bd591  gcc/alloc-pool.h
@@ -2724,15 +2724,15 @@ ad3169d3a580696f6480a7d86c8d0e34  gcc/bitmap.h
 0c1f33ae2da3716f67ce61924c81e074  gcc/bt-load.c
 af0e8c840fa48a6200875c0df80dd7f7  gcc/builtin-attrs.def
 4a5945618431b5c84500f7b0e9f69819  gcc/builtin-types.def
-435c31f0e374dedc231c9bfea1ee4de0  gcc/builtins.c
+5bb4e9f0f243e7b64732978ff94a2193  gcc/builtins.c
 709447be4b984f09869436e1af94d606  gcc/builtins.def
 4b25cb43c45b2775bf3398cad0b2f997  gcc/builtins.h
-a4f0fc0b8a1ef68cc6b56f010f382e1a  gcc/c-family/ChangeLog
+927e5ff8d5141dee866d4063e140c7d3  gcc/c-family/ChangeLog
 22037a5d7bda1a2cf1c34a813bad655b  gcc/c-family/array-notation-common.c
-522dd88f1775b9c27c88bdec1b215f33  gcc/c-family/c-ada-spec.c
+48d6ed64df57da982f2317402d404124  gcc/c-family/c-ada-spec.c
 10157e4802b298ec57f6bbe626694034  gcc/c-family/c-ada-spec.h
 005a6e6078a443f37358315735999e75  gcc/c-family/c-cilkplus.c
-04c859c6ab476e4cd6f03fffc36a8abe  gcc/c-family/c-common.c
+bf2aac54335b02e1b34f9cd84cd7917a  gcc/c-family/c-common.c
 3ce0acd449868895cda4785a578266e2  gcc/c-family/c-common.def
 2f64edf02605a36ddcb4643da27c6200  gcc/c-family/c-common.h
 309d7a6ddfc15b1ae38e85f81163a164  gcc/c-family/c-cppbuiltin.c
@@ -2742,8 +2742,8 @@ d903f037f15d1a4333bff696b8b4951a  gcc/c-family/c-format.c
 6bf6002f4935e375e1805af1611d8567  gcc/c-family/c-gimplify.c
 a3c101e11d8d2321151be53333283c58  gcc/c-family/c-lex.c
 5c6cd6a62c649574128a4651f621a0b0  gcc/c-family/c-objc.h
-6fcd9cdd64b600cd292be161b04ea969  gcc/c-family/c-omp.c
-9dadf710ab87357edd7ac40326f605d2  gcc/c-family/c-opts.c
+58118b938591ec4ac7e204fa9c8183b5  gcc/c-family/c-omp.c
+f61beb8b5789078d8f0656cacf166b58  gcc/c-family/c-opts.c
 6f8ef838c68a594024f4c12c021f38be  gcc/c-family/c-pch.c
 a764fac4f453e4c326786cf0400015da  gcc/c-family/c-ppoutput.c
 dce0ba09fb1c4c409b75ef665ff94efc  gcc/c-family/c-pragma.c
@@ -2754,26 +2754,26 @@ dce0ba09fb1c4c409b75ef665ff94efc  gcc/c-family/c-pragma.c
 89379381924e64939d52e3f69171db31  gcc/c-family/c-target-def.h
 53cd05ccfe61b63e855984941b93f9bf  gcc/c-family/c-target.def
 41b6d8f23b203fbeb7dc03f9f86269f5  gcc/c-family/c-target.h
-35fa7f735c892b1e4a3796ee671ae44a  gcc/c-family/c-ubsan.c
+88c7c5e2cb6498dbbe0ce4c654df16d1  gcc/c-family/c-ubsan.c
 5e987c2ba2a8d61b8987b6d98bc4db30  gcc/c-family/c-ubsan.h
 66230eb8b0ca2c560ef380d4b667008a  gcc/c-family/c.opt
 8041b1cda8919775362c4465096c609b  gcc/c-family/cilk.c
 85b441a3f28a2bd4e2ca99f03490e65e  gcc/c-family/cppspec.c
 00be2969ca302d49f76b65173590c942  gcc/c-family/stub-objc.c
-8e5fca854e891a880e62572c9bd0facb  gcc/c/ChangeLog
+99ecea74bca9a56f61db0d36f263d1ae  gcc/c/ChangeLog
 5d46413a194e3bb9b8b12f6e49e911c3  gcc/c/Make-lang.in
 da8410bebd4f145d0e880682525f4855  gcc/c/c-array-notation.c
 f8a2e7536c39b4d1e3f4b1d5ee6d62c5  gcc/c/c-aux-info.c
 3bda18438dfe79a5fcacb0ec192cf602  gcc/c/c-convert.c
-3cc1c7d292032aaf8d66085b8dc20ce3  gcc/c/c-decl.c
+3c1794259719dc0853e1914867febbf7  gcc/c/c-decl.c
 80705e9d8c52ab1b2501574d0dc8ab67  gcc/c/c-errors.c
 12ec429c86710adfcfe5eed23174aead  gcc/c/c-lang.c
 8b01b74da83bfb4d6dc1127114c72f94  gcc/c/c-lang.h
 e8fa0ec0164ceb8a90d6ae74f9c7fd1b  gcc/c/c-objc-common.c
 941499386ac0a23999c942a8986f8e61  gcc/c/c-objc-common.h
-0467b538d3ab2aa4019eff3e4293f6ec  gcc/c/c-parser.c
+e23135c8c5c5b5403727aa6cfac2e138  gcc/c/c-parser.c
 66a995603b2cd1394afbfb29b90fe209  gcc/c/c-tree.h
-83341ccb8851e7b7d4d97dd8101fb769  gcc/c/c-typeck.c
+bbd32bf692648cc452d40d3cd2082082  gcc/c/c-typeck.c
 62032db4c55340bd16e7f80d99c0b016  gcc/c/config-lang.in
 597ddbe49d6b3528aa5670f785ed61e8  gcc/c/gccspec.c
 e972cc617a462165838c95421a29ca5e  gcc/caller-save.c
@@ -2792,12 +2792,12 @@ a6a0c9ebc641dfa71f1f2e5188b0da21  gcc/cfghooks.c
 8c0ea72e2cb82d8984053a8bbb661547  gcc/cfgloop.h
 4465b1eb3d111a823235d7e5458b8889  gcc/cfgloopanal.c
 a7a8e23de07e7514d4e470f630ee8e1e  gcc/cfgloopmanip.c
-0dec1bf60fb09e18cda16146df5e275d  gcc/cfgrtl.c
+fbecb7722699922ab7f9db8ea7fd59d5  gcc/cfgrtl.c
 444bde39f32fb5b9671d26f44171421f  gcc/cgraph.c
 631fff2536ef3c000bfe0bc23e88b5af  gcc/cgraph.h
 fcb9af5cf8a6d1c7a195ca1c007c9e3f  gcc/cgraphbuild.c
 487d0c828fa6d2d81d7fab7c77af7433  gcc/cgraphclones.c
-70d53639d84d02c84a5141b1d637fcd0  gcc/cgraphunit.c
+2793d3e7c375b13c8f3e11fa51c6c317  gcc/cgraphunit.c
 554526d022cd2d03e42412e6886c1338  gcc/cif-code.def
 f264c8d0b8b475e306ad180dadec1a98  gcc/cilk-builtins.def
 05497e8da0a9b1c9dfb1957920b812c7  gcc/cilk-common.c
@@ -2805,11 +2805,11 @@ fd91f1075764509190a114c7732f5775  gcc/cilk.h
 e62fef6724193c69731f6541320dc6e6  gcc/cilkplus.def
 197da04a2db09c8b329afbe422faf719  gcc/collect2-aix.c
 f0fff0035c48bf460268a3e13ee6af37  gcc/collect2-aix.h
-70c607be2947f24ba4fbf0820ebd247d  gcc/collect2.c
+b6773a126733d1fc1b9a30ac20f98889  gcc/collect2.c
 f925b9d3bc0775367c24b644d8e35002  gcc/collect2.h
 d37c34609a296ebc9dd4d677348419ea  gcc/combine-stack-adj.c
-7477ad9438742a77e965dd5bb722f35c  gcc/combine.c
-bc34d644ab9d1299c59daeb7a59e1087  gcc/common.opt
+bd722e7fde32fa874a74ec433e7ee6b5  gcc/combine.c
+6fb797249d5246d9ba69af1e20e95b46  gcc/common.opt
 a0c9b1ade89a8b10502b808eda27512d  gcc/common/common-target-def.h
 82f688c1c764b568b712d183e502bc24  gcc/common/common-target.def
 d12cc81c521b5a7c418a796f196a16db  gcc/common/common-target.h
@@ -2863,42 +2863,42 @@ ef0ef64208ca9035f93ed6d6e9606df6  gcc/common/config/xstormy16/xstormy16-common.c
 2ebc5e4eccb7d2c52897dd83a4be28a7  gcc/compare-elim.c
 e82a81c423eccb73f4e9f04c09a5cae1  gcc/conditions.h
 a40ac599c845be41c961d15dfd9559b3  gcc/config.build
-8c8cb3790b753071d81811bee03f7466  gcc/config.gcc
+7119c03a6a90516a1af42c54b796dcc3  gcc/config.gcc
 9eba81e694fe412bcfa8aafa6743a568  gcc/config.host
-844939897f9a01558ce5f9f36bf0e344  gcc/config.in
+b6cab5295deaaef945420195c91ae548  gcc/config.in
 8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
 21a150941d104bd2b16b4b064132b82b  gcc/config/aarch64/aarch64-arches.def
 526b5bd7fea44716301891aad5581e68  gcc/config/aarch64/aarch64-builtins.c
 fa8ac6bece011754d6e9cd8fa724af78  gcc/config/aarch64/aarch64-cores.def
-79287aa831c8692a259b3fc99493fc1f  gcc/config/aarch64/aarch64-elf-raw.h
+19f2c3d21617a2826b76e5582962c881  gcc/config/aarch64/aarch64-elf-raw.h
 0da8426685ba7860c8cacd8f15a98f78  gcc/config/aarch64/aarch64-elf.h
-85c8c3eae742da65f11bd9d16f771b4a  gcc/config/aarch64/aarch64-linux.h
+795d01ff5da342725530900d9b344c24  gcc/config/aarch64/aarch64-linux.h
 19acc0c5b8eaf2ec35cb01753657f65d  gcc/config/aarch64/aarch64-modes.def
 719c650d0bf63bbe2a04c38aad30d8ca  gcc/config/aarch64/aarch64-option-extensions.def
 a3008f913374a88b9de4022df0b84d4c  gcc/config/aarch64/aarch64-opts.h
-23503c857ba2f6f5142af3c7d911df0b  gcc/config/aarch64/aarch64-protos.h
+fed69ad295f02f1fc1d45b7939c6a7ae  gcc/config/aarch64/aarch64-protos.h
 0a8a4231dd82bedb83a9d89591dfd07f  gcc/config/aarch64/aarch64-simd-builtins.def
-54b700ee22320096da9d63f42e51a54c  gcc/config/aarch64/aarch64-simd.md
+c721289c5b875328925bd324e966d9eb  gcc/config/aarch64/aarch64-simd.md
 d0075eefdaf65db63dacef89ea39e1ea  gcc/config/aarch64/aarch64-tune.md
-d0e384cdcbabf4fdd1cecfad5292a7f9  gcc/config/aarch64/aarch64.c
+b881b2b0e149381b1b84c9d74ad0074a  gcc/config/aarch64/aarch64.c
 36e04e0a812dde95d35d39474d669de6  gcc/config/aarch64/aarch64.h
-47bc05c9585e39fb952003b9817ecf0f  gcc/config/aarch64/aarch64.md
-b7855968d5732d61f7512a92a58a3598  gcc/config/aarch64/aarch64.opt
+6c172d3bf8d67a803be8a72eeb69a95e  gcc/config/aarch64/aarch64.md
+b05f3a81e9d56b3b02e53935d31c5463  gcc/config/aarch64/aarch64.opt
 42403bae711918a5d5447659db661bc3  gcc/config/aarch64/arm_neon.h
-563bb636b7b9dfcfc4fb5fd31576726b  gcc/config/aarch64/atomics.md
+8022d0dfaefe9140acaafd3005b0334b  gcc/config/aarch64/atomics.md
 e1792eef6442fd7efd11eb48c3c9a450  gcc/config/aarch64/biarchilp32.h
 c206feb1f06af29cb310e7af1a86d8ee  gcc/config/aarch64/biarchlp64.h
 b01df6d05d957e306ba5c14f633d2320  gcc/config/aarch64/constraints.md
 61def47e552d5a0279fbbe8a7a5fc8ad  gcc/config/aarch64/gentune.sh
-b926ec451030164965e6a358f15deaad  gcc/config/aarch64/iterators.md
+7ff7c234adbd36721ae53af6e67b43ec  gcc/config/aarch64/iterators.md
 0d943cb735d61d6bb3c8b3260e47805c  gcc/config/aarch64/predicates.md
 a381f4f44bffba3068dea2bcf86b1c37  gcc/config/aarch64/t-aarch64
 c5163265d2d83b8fe360d25202a8b342  gcc/config/aarch64/t-aarch64-linux
 9d0a5d95304a9bd6b70b0e316bd30832  gcc/config/alpha/alpha-modes.def
 b1dbf3309f3744b073c14d10174ad350  gcc/config/alpha/alpha-protos.h
-718370bc105011b843caf56c9aca49f1  gcc/config/alpha/alpha.c
+44ec73482b11ce3af274071b08576983  gcc/config/alpha/alpha.c
 26d7e3357f7c361c8e6343bd33837415  gcc/config/alpha/alpha.h
-b88e1217fbf0f3dae5b18f17063bf733  gcc/config/alpha/alpha.md
+f93bc903e85faf39ad6458e85cf2a348  gcc/config/alpha/alpha.md
 0112499d08da07e950408270a411f17b  gcc/config/alpha/alpha.opt
 a4e4522b66118868b69da96248c8c307  gcc/config/alpha/constraints.md
 73a886f75a13ec1312100c0b05eddfce  gcc/config/alpha/driver-alpha.c
@@ -2951,9 +2951,9 @@ cf094505e37b191ba07edb74fbac88b1  gcc/config/arm/arm-modes.def
 93d123035540f98d03c5f095753a582a  gcc/config/arm/arm-protos.h
 d4141d32e48618aa5ba56b67b3b6f221  gcc/config/arm/arm-tables.opt
 d5d7db112e25b2d92afea2a696a57ff9  gcc/config/arm/arm-tune.md
-c14e6651b08c69b5f69fd87656e8a4a3  gcc/config/arm/arm.c
-4c8130737c990b8939f9a33c1f6314d5  gcc/config/arm/arm.h
-b83c49c047401a19450be6ec09d158fa  gcc/config/arm/arm.md
+0f329ddcb2d5d3a8427453fccacf1853  gcc/config/arm/arm.c
+0e13fae99124bb56183853c266b3c5b0  gcc/config/arm/arm.h
+5486ecb44311a1019422931b9d104bc1  gcc/config/arm/arm.md
 7ec80248e2019885ec3fa78e3d2df3b7  gcc/config/arm/arm.opt
 55a87c11458722539f3821c53f4b8c5f  gcc/config/arm/arm1020e.md
 7c28931b2e524e1b44678ca8334d5d54  gcc/config/arm/arm1026ejs.md
@@ -2995,7 +2995,7 @@ baac023f963fbf3f3056d327e5a7f0c2  gcc/config/arm/gentune.sh
 0a29e3add3cde2528f46f0ea3e4a9d16  gcc/config/arm/ldmstm.md
 15a62603ee5291a6e33533c06353786e  gcc/config/arm/ldrdstrd.md
 11a002db4ff19e479f0d124cdafb860a  gcc/config/arm/linux-eabi.h
-1659d9b210406f8ab375e650ec9524b4  gcc/config/arm/linux-elf.h
+85694e210fae684fa23961e3370ce56c  gcc/config/arm/linux-elf.h
 c0316bad2e142d642f4edea6c49a1661  gcc/config/arm/linux-gas.h
 b7897a497d5fe972d6d7d42299cf7334  gcc/config/arm/marvell-f-iwmmxt.md
 b1c28c557bd726126ce8dc1cca03d981  gcc/config/arm/marvell-pj4.md
@@ -3009,7 +3009,7 @@ e062772cc17dc38f590c49d66b7495e5  gcc/config/arm/rtems-eabi.h
 f1380539ece11e800120f6dd294810c0  gcc/config/arm/semi.h
 d35fb7d9952e1dc4c5dac14c03fb142a  gcc/config/arm/symbian.h
 7b86c240b684e9b5a159ba532c64befb  gcc/config/arm/sync.md
-3f673f43a5e50eb46f9851da3e54856f  gcc/config/arm/t-aprofile
+6c2e6da04b9a445110e7e5390dc11b46  gcc/config/arm/t-aprofile
 286baa03bff536aaf5a4a60d5b1f03e3  gcc/config/arm/t-arm
 3b1396ec75c2a2056e6f63bdb005b7bb  gcc/config/arm/t-arm-elf
 4dc427c456af5e56b1ac39bda8969af6  gcc/config/arm/t-bpabi
@@ -3033,22 +3033,22 @@ a17a638dc98f3f18b0e13448c69e1e65  gcc/config/arm/x-arm
 b5a2b09861de6689113db05b64719022  gcc/config/avr/avr-arch.h
 2643f8b817df1b5cb3b39737fdb810ad  gcc/config/avr/avr-c.c
 8b8a7041f9af051e650a9caa8a73e3f7  gcc/config/avr/avr-devices.c
-5b18e57e6b772fc6eff612a345599f23  gcc/config/avr/avr-dimode.md
-6360195f2f3c5789d2f40cea7408f84f  gcc/config/avr/avr-fixed.md
+33f5b4c5d3b12c120f3c1752faf1e6da  gcc/config/avr/avr-dimode.md
+ca91afc31bfc11f2c36a82781295860a  gcc/config/avr/avr-fixed.md
 0ea9e1292fa63ad32d73b8c1ea6175e9  gcc/config/avr/avr-log.c
 48400c902cb5f518f34efe8178f569b4  gcc/config/avr/avr-mcus.def
 f2654233df6eb02ba173ff479c08e9a5  gcc/config/avr/avr-modes.def
-f18b33ac6648ea748c8b996ee866aa3a  gcc/config/avr/avr-protos.h
+639e976c748eff02463058eb225a6bda  gcc/config/avr/avr-protos.h
 5ebe500ff3ac2700f5b1bc9c761a0c87  gcc/config/avr/avr-stdint.h
 7344d18acafd2951ffbf2c0a9f014f08  gcc/config/avr/avr-tables.opt
-039808b0d14099c7c5d41b144f7db0f0  gcc/config/avr/avr.c
+6e649f4257b029bbed327bf816123a0f  gcc/config/avr/avr.c
 9f36e271302a29de37eae1f2ce2b1b0c  gcc/config/avr/avr.h
-b3c1d232d44ccf6c28b1837014118c8e  gcc/config/avr/avr.md
+d81b3790f1378bc30845cbfbe16de2cb  gcc/config/avr/avr.md
 421709cbe0735ad8406c0430cf5087d8  gcc/config/avr/avr.opt
 d661391f9cbec6e8f6a68663a2f1eef7  gcc/config/avr/avrlibc.h
 df7d2059ef5d7a0c8b8680202c92f0c8  gcc/config/avr/builtins.def
 1ceb27f32bf3a856d48533894d2b21c8  gcc/config/avr/constraints.md
-e5b761e47443f676e8589f6e925d638e  gcc/config/avr/driver-avr.c
+7d2aa14e5ca1680fdfc98aacb11550a7  gcc/config/avr/driver-avr.c
 8b609630042b5a0695e37a3c641c07e0  gcc/config/avr/elf.h
 559715cfb805104d69c872c30d5b505f  gcc/config/avr/gen-avr-mmcu-texi.c
 a1d8b32faabb2b3faa1ac80645a0a08f  gcc/config/avr/genmultilib.awk
@@ -3214,7 +3214,7 @@ a097695cd4032a0967d8b8a5f1ee3b38  gcc/config/i386/ammintrin.h
 798b157c140a6bb8e98eb85fb7c91ec1  gcc/config/i386/athlon.md
 37d3f839c07c1f1c2b51a1c202e57014  gcc/config/i386/atom.md
 e54228c7a87234b7ffbb5aaf3016142f  gcc/config/i386/att.h
-d36468f7ca47d3c8687d75cdde580ae5  gcc/config/i386/avx2intrin.h
+768aef239b4071873a413287e958259e  gcc/config/i386/avx2intrin.h
 919367aa53222e5f9ad8310310ad4bee  gcc/config/i386/avx512cdintrin.h
 3b0093913177912fa95727759330f906  gcc/config/i386/avx512erintrin.h
 b9c8e9b0f3832c46b7299173330457df  gcc/config/i386/avx512fintrin.h
@@ -3245,8 +3245,8 @@ f662aa7a9eab8bad5800512a3187b0c8  gcc/config/i386/darwin64.h
 e7c8adf4ccaf394835acedd1e77b0be5  gcc/config/i386/djgpp-stdint.h
 ed2a20210c9db85baa32cfae1070d72a  gcc/config/i386/djgpp.h
 b5c747e37b508b664a1ff09f6e55f235  gcc/config/i386/djgpp.opt
-30aaa9020aa579656febe50b7375e5d8  gcc/config/i386/driver-i386.c
-8ee7873e94be2782003bd626af507dea  gcc/config/i386/emmintrin.h
+10a50b2a386751a4d4d7d26068150817  gcc/config/i386/driver-i386.c
+e8847ba7f602deea49feaabdc1563292  gcc/config/i386/emmintrin.h
 c10561ee6fc509ac4572687dc0f67e76  gcc/config/i386/f16cintrin.h
 301045a5d299805e520b98e6c019c4eb  gcc/config/i386/fma4intrin.h
 72fc9354eeb6cafbfc4838ac12aed188  gcc/config/i386/fmaintrin.h
@@ -3271,9 +3271,9 @@ a206f895a51dca0acbbd5c40439f43ac  gcc/config/i386/i386-c.c
 fbc0e51208d80f573c53d5b2172b2750  gcc/config/i386/i386-modes.def
 1fc953e4fa5bc7c93802f7952b7dafbc  gcc/config/i386/i386-opts.h
 b2009cc823c7348862f1dd5b62268874  gcc/config/i386/i386-protos.h
-21c2f74767233343b81792ea45ca10b0  gcc/config/i386/i386.c
+e3f37f437ca746a07ae0e0cea3316b1e  gcc/config/i386/i386.c
 c429bcf230f751ddfb4fb8624b5ae0b3  gcc/config/i386/i386.h
-1247d497684c65b3b9c3400cd424e4e2  gcc/config/i386/i386.md
+e762db8dd4baa128ef3c0b1eda20777d  gcc/config/i386/i386.md
 8ae240f9350420a2a75307b02b20422a  gcc/config/i386/i386.opt
 ddbc3d63f2446262d897ba8f20043c58  gcc/config/i386/i386elf.h
 f95e6938a9ae3f77651a61e489d957cb  gcc/config/i386/ia32intrin.h
@@ -3298,7 +3298,7 @@ d17b901c2f628cb44f5a234eb3572a92  gcc/config/i386/mingw.opt
 17134943d15d722dccd7c33d27496b58  gcc/config/i386/mingw32.h
 97f47580518fbe15e82cf9bd4741669f  gcc/config/i386/mm3dnow.h
 e4e116de997ab92599e67a55612e8c65  gcc/config/i386/mmintrin.h
-6417b98a54d4b0b7a5161245196159f4  gcc/config/i386/mmx.md
+7b8bc8a2d30329c327276758e6d1a37c  gcc/config/i386/mmx.md
 79cc0264e32352c931965f9ec1424a7a  gcc/config/i386/msformat-c.c
 66a8082c9eeaa39451ac7037d1c923ad  gcc/config/i386/netbsd-elf.h
 0057f3f2ff6d11c01f9d5524df374f98  gcc/config/i386/netbsd64.h
@@ -3312,7 +3312,7 @@ c30fb07d33e4b3628288606058bdc14a  gcc/config/i386/pmm_malloc.h
 2a6c12c0b5f27bb251eb93b00a41f296  gcc/config/i386/pmmintrin.h
 fc207a5f3cc468e72fe9dd815d195361  gcc/config/i386/popcntintrin.h
 ae280ac8454d999d1819d0e5b1fb7952  gcc/config/i386/ppro.md
-4244897288e1ee87ec9aa9ef8ddab8c3  gcc/config/i386/predicates.md
+33075561b49baa6a4def29d9be1af3d5  gcc/config/i386/predicates.md
 81ad22a959e416d728651869649b3474  gcc/config/i386/prfchwintrin.h
 8171eb4392b9cf3c988f8c90d553a5d1  gcc/config/i386/rdos.h
 9acc66b92bad5555ca8dea5281b685e6  gcc/config/i386/rdos64.h
@@ -3325,7 +3325,7 @@ e2e4278637f3de3d6bbf0a4043dadeae  gcc/config/i386/smmintrin.h
 ef795df3639f8ff0931f6c2a40a7acfb  gcc/config/i386/sol2-9.h
 8e3330fa2506c81435317fd9a639a22a  gcc/config/i386/sol2-bi.h
 621820dc7fb9845f1212cc16f4d53d58  gcc/config/i386/sol2.h
-f20bd2077f0c8f9af7672f2405e71a33  gcc/config/i386/sse.md
+a724b531fc124516bae3bc5258638bb4  gcc/config/i386/sse.md
 dc052e20181c4044f802280a292afa5b  gcc/config/i386/ssemath.h
 7957f594f4bd0207d2bd2d4fe422ac13  gcc/config/i386/stringop.def
 ee73a69f574ee8852ac94cb66b02d4e6  gcc/config/i386/stringop.opt
@@ -3386,7 +3386,7 @@ db7de9b9c1f65b8d245e530709b4edec  gcc/config/ia64/ia64-c.c
 cf665d2b283d1ee10288d79865f8751c  gcc/config/ia64/ia64-modes.def
 7d0f55f65a67d3de87deb0e9e6493840  gcc/config/ia64/ia64-opts.h
 a4c4ef91d91c903475d30e79149b384b  gcc/config/ia64/ia64-protos.h
-c2efe94bbf4fb1aad2c5a746cc8d8042  gcc/config/ia64/ia64.c
+86eae0f0dc13ca47baa1499a8b076958  gcc/config/ia64/ia64.c
 88ade684e86d62c84320f0315351583b  gcc/config/ia64/ia64.h
 fca91ca5acae7d2f9235915e3e110c49  gcc/config/ia64/ia64.md
 d3bb595b8693168eb537a864fe649c13  gcc/config/ia64/ia64.opt
@@ -3538,7 +3538,7 @@ c80b0c1af9f23b7d98cc33d21ca754bc  gcc/config/mep/mep.h
 c18b9947b2bd49da18a3f16fb38847b8  gcc/config/mep/predicates.md
 0100b66b4315e9c7799583879f09dc62  gcc/config/mep/t-mep
 76476b05fbeb9ddcb9f0a55563eec47f  gcc/config/microblaze/constraints.md
-9a7d9a0473572fde09cb7e825292182a  gcc/config/microblaze/linux.h
+62f03db6d2ea5831a77ac0bab95ffdec  gcc/config/microblaze/linux.h
 c331ecdf330d50f1467b622795815587  gcc/config/microblaze/microblaze-c.c
 8a02ce4886fd81a2dfcb9ed1c9a3f119  gcc/config/microblaze/microblaze-protos.h
 f6ffd791eaf256dfcb55dd75eb59e080  gcc/config/microblaze/microblaze.c
@@ -3597,7 +3597,7 @@ ab1522b4c50918c73f6eb40ba20bc2fb  gcc/config/mips/micromips.md
 bf9b0b8f76e85b5e18c8f7e7d5e3298a  gcc/config/mips/mips-ps-3d.md
 8a5769414d30d955f9ba567f5c62b66a  gcc/config/mips/mips-tables.opt
 ade749f2a3cc5d5b387ca05cc0afb297  gcc/config/mips/mips.c
-c910751523df5439af89a71de8f654b5  gcc/config/mips/mips.h
+95945db6d43e980fa5d9465409e31672  gcc/config/mips/mips.h
 64ba7e9cb5005290fd29e0d9e4ff9baa  gcc/config/mips/mips.md
 3850d694946d7fe26bce2c6c5523ef2f  gcc/config/mips/mips.opt
 a0baba45ddda190c9888a74633eb9ddf  gcc/config/mips/mti-elf.h
@@ -3704,10 +3704,10 @@ ec624b498a34279e8f982b29f9a338af  gcc/config/netbsd.opt
 b7d976992060b59d0ef7031a94475df5  gcc/config/nios2/constraints.md
 ef734234c709297b1fb7f68b54c6d3de  gcc/config/nios2/elf.h
 ddc88bf2b6aa464fe12463a0467299d5  gcc/config/nios2/elf.opt
-a554533a8a4c62024e70cddeae7f9f80  gcc/config/nios2/linux.h
+5fcbb416fd81b40e933e2bb073c029fe  gcc/config/nios2/linux.h
 bdb5690b9489043f377d0b027866d632  gcc/config/nios2/nios2-opts.h
 81f361431b70346e221ffb5a3fadbfd6  gcc/config/nios2/nios2-protos.h
-3c5d35934d410c5ec99380b4042bf7e2  gcc/config/nios2/nios2.c
+d75c4f5d09c7374bc1cc80a9a8eb51dd  gcc/config/nios2/nios2.c
 effa2659186284c82183b154159731ae  gcc/config/nios2/nios2.h
 aacfd56c32155a3c89376f9860c4c486  gcc/config/nios2/nios2.md
 d84f7c77858ab2f1fa90eaa8a21121a2  gcc/config/nios2/nios2.opt
@@ -3720,7 +3720,7 @@ d835d08884a2846e70bef505767bd3f1  gcc/config/nios2/t-rtems
 3d4a70d0decf61f1fba17df545cea7f5  gcc/config/openbsd-stdint.h
 f7bb7f7f147625a5b6edfa228e4975d4  gcc/config/openbsd.h
 c4bc281692620dbdd49314c82f5cd5cb  gcc/config/openbsd.opt
-78078310edbafb4829e35df0ed4eee79  gcc/config/pa/constraints.md
+bb599d773497d634a6c1c1ab5abc6836  gcc/config/pa/constraints.md
 1103eb7d3db99e522007a69f004901bc  gcc/config/pa/elf.h
 f75b3808e61037470c299999f80ab17d  gcc/config/pa/pa-64.h
 fc680972974a952a67b99d56a406bc35  gcc/config/pa/pa-hpux.h
@@ -3734,14 +3734,14 @@ d42e61dd077eb171a4600d761f089fd0  gcc/config/pa/pa-hpux1111.h
 ea0c65f7174646be3014f571d6409dc0  gcc/config/pa/pa-hpux1111.opt
 5db0cd4003e83bcca4e2675731ee4786  gcc/config/pa/pa-hpux1131.h
 f2d88fb6fac9932a61f98e5a1f724d40  gcc/config/pa/pa-hpux1131.opt
-07b5c2563400853d691da54523b31813  gcc/config/pa/pa-linux.h
+250e696fa04aedc45683ef96107a309c  gcc/config/pa/pa-linux.h
 f825cae6939397978fe066ad5beb8f0f  gcc/config/pa/pa-modes.def
 5d4ac2f1ba181ac0c4b6801af9908408  gcc/config/pa/pa-openbsd.h
 ba0b28ec9ca0db449b765f4c41c48610  gcc/config/pa/pa-opts.h
 a14eb94548fa5fab203ddd082ea498cd  gcc/config/pa/pa-protos.h
-1afa7c4e51d568f627fb124c7d020d8a  gcc/config/pa/pa.c
+00b4f1cebcc58591af1a281eb0c7cc75  gcc/config/pa/pa.c
 57ed354a34c60b3fcbcce5bc957918c1  gcc/config/pa/pa.h
-744da0538c0656e380cfd512ef0d45f2  gcc/config/pa/pa.md
+199533ce81a25869b5d5250711bf53e2  gcc/config/pa/pa.md
 122ca1131c181f7e4004d70c9c72c5fa  gcc/config/pa/pa.opt
 36ab8c2fadb427355864ae7e5d337240  gcc/config/pa/pa32-linux.h
 048af6536d63bf10ff72be604072bbd9  gcc/config/pa/pa32-openbsd.h
@@ -3751,7 +3751,7 @@ f5c309e8bf4fc4e232432e5b2ae00480  gcc/config/pa/pa64-hpux.opt
 a9854dd0891365f5d24fbe7c0d71dca1  gcc/config/pa/pa64-linux.h
 dc91e65eeff8fad66e737b0d08c3ac23  gcc/config/pa/pa64-regs.h
 a9a6afd79b827565ffb8de8330b4cfe6  gcc/config/pa/pa64-start.h
-c810a2f470435b27f608f0f9bb569246  gcc/config/pa/predicates.md
+e8024fc5c8fb2b7a7c440f6c48c46c0c  gcc/config/pa/predicates.md
 50b7bc8995fefcc459e46bc9a0b021a5  gcc/config/pa/som.h
 4104beb84cb7f3a8a5915652c3da66c5  gcc/config/pa/t-dce-thr
 6fd25f8c665d2d7390ea94c01dcb8e34  gcc/config/pa/t-linux
@@ -3810,21 +3810,21 @@ da95b468bbb3ed8f1a148d2549452a56  gcc/config/rs6000/aix52.h
 e6ce7b8fd7aaeddaa95722dd2257db20  gcc/config/rs6000/aix53.h
 a126c516a8ecc213c4eae1949e1a2e15  gcc/config/rs6000/aix61.h
 7ba56f31fe475125fb79489a951e14c5  gcc/config/rs6000/aix64.opt
-f99b25eefb9db62d51f310e5b787ff5a  gcc/config/rs6000/altivec.h
-1192053208c260da1ab12bbc3642d9c6  gcc/config/rs6000/altivec.md
+14bce5e0c1fb0a41d364b71e916b7b29  gcc/config/rs6000/altivec.h
+23a5981747e7d48427c5b37d80e40353  gcc/config/rs6000/altivec.md
 87ecd670e3f1a8e2186f29d0b3ee3720  gcc/config/rs6000/biarch64.h
 07348cec6e9bf39592be4fad5e165f02  gcc/config/rs6000/cell.md
 8bb1050e894eebfabd915a2179f7a689  gcc/config/rs6000/constraints.md
-6e21ae4a815a579a22ff8c49721dbf43  gcc/config/rs6000/crypto.md
-a7f17f99b55ded344530481667186c4e  gcc/config/rs6000/darwin.h
+84608ebffe5bba11e86f6cf4997a4422  gcc/config/rs6000/crypto.md
+3aa23091f8ceedf167bbe0a7359e727a  gcc/config/rs6000/darwin.h
 72fbc3c1f5e430d1f58570ac8b20ea0f  gcc/config/rs6000/darwin.md
 d99ffcd0ce9424a55a2fea384bb1686e  gcc/config/rs6000/darwin.opt
 0c64a85e50a98b115a867f59798c9b61  gcc/config/rs6000/darwin64.h
 02ca5caa36de5edf56fe24dbbda6b294  gcc/config/rs6000/darwin7.h
 5cbd6ff218133094f33d29711429a7bf  gcc/config/rs6000/darwin8.h
-1d8de40ad03abb984184f2bd449a4029  gcc/config/rs6000/default64.h
+f52ff97bc4fac70d3899553b99647de8  gcc/config/rs6000/default64.h
 e0c3e640aac757ec2f33aee03cea2181  gcc/config/rs6000/dfp.md
-2441ed646ceea5331ee440418bd26204  gcc/config/rs6000/driver-rs6000.c
+6a61b13e7ef97ec4ed09217709819256  gcc/config/rs6000/driver-rs6000.c
 c8949ac54fd92b36837415b4558f7448  gcc/config/rs6000/e300c2c3.md
 1f15aab6bf2c740614cb66d636c01a19  gcc/config/rs6000/e500.h
 d12ede4132ab613ad1d008f59b8f1355  gcc/config/rs6000/e500mc.md
@@ -3840,11 +3840,11 @@ d44bd2790575631b763973cdb9dff3e2  gcc/config/rs6000/eabisim.h
 f993244bbc210c86997e1f962ce62a05  gcc/config/rs6000/genopt.sh
 46cf29a42c9dea21b80a0d2adaf86045  gcc/config/rs6000/host-darwin.c
 49e9ca19e3ce57f746c48f645ddb6629  gcc/config/rs6000/host-ppc64-darwin.c
-608b42e39abfee0956b074f3b05d898c  gcc/config/rs6000/htm.md
+256f5dde071c508a5d829eb444aac2e7  gcc/config/rs6000/htm.md
 fc49e7468c18e626771f399690584b01  gcc/config/rs6000/htmintrin.h
-ce27605188d04634347cddbe29359656  gcc/config/rs6000/htmxlintrin.h
+f4007546c290f32867fd5c475f8b6e75  gcc/config/rs6000/htmxlintrin.h
 94b9c339bd047a988fc31eeb870b056b  gcc/config/rs6000/linux.h
-ac0cf244133fc96e27290b8d7b383eea  gcc/config/rs6000/linux64.h
+d53b465a5bfca8e6a5c9928794888739  gcc/config/rs6000/linux64.h
 e8976be8a2c554ec952fa2578c39aba7  gcc/config/rs6000/linux64.opt
 efbf97c308f72dfb7bb6047134505acf  gcc/config/rs6000/linuxaltivec.h
 95daa41f2604b3efbc6f6a11fda3ceb1  gcc/config/rs6000/linuxspe.h
@@ -3863,20 +3863,20 @@ ecc63691ee399be45afbeb50ef539bb7  gcc/config/rs6000/power8.md
 0eca30e0219caa2c3b9107b8a8934167  gcc/config/rs6000/ppc-asm.h
 a399e486f9d1ec320a662bd4afffd037  gcc/config/rs6000/ppu_intrinsics.h
 8b4dadf3b5c91d47334f6044cc830715  gcc/config/rs6000/predicates.md
-a727574906ad78e966f6cf33cd1b9fbe  gcc/config/rs6000/rs6000-builtin.def
-abed19d5d0fc8a2003c5ab0125ddab29  gcc/config/rs6000/rs6000-c.c
-b8e72be81712f25cfaede9887cc18d63  gcc/config/rs6000/rs6000-cpus.def
+65ee134517c17d602994fbd462032f94  gcc/config/rs6000/rs6000-builtin.def
+3857fffda70e73dd35b2ec8efdc85a3c  gcc/config/rs6000/rs6000-c.c
+3dd9d527f49e0a73733eccc88799feee  gcc/config/rs6000/rs6000-cpus.def
 2b7ac7ddb1e383347e8684708991a45c  gcc/config/rs6000/rs6000-linux.c
 7d06c2b54e7e78a9a57c2f9719e0d468  gcc/config/rs6000/rs6000-modes.def
 09c1fbf640b3bad5ae3bb2300301eaa8  gcc/config/rs6000/rs6000-opts.h
-a365b40bcdb38106b8b53409a8cea24f  gcc/config/rs6000/rs6000-protos.h
-91c3c0b251bd8b64407d2c54008592a3  gcc/config/rs6000/rs6000-tables.opt
-5488ca84f9addb53c0380e91a88ec6d6  gcc/config/rs6000/rs6000.c
-552729128e27f1de8e7436faa65a47f7  gcc/config/rs6000/rs6000.h
-7aca4fbc7a328d00c46474a961896c7e  gcc/config/rs6000/rs6000.md
-7343b7045580eba4411121ec1934ecad  gcc/config/rs6000/rs6000.opt
+71bf545b328d48bc9a7bbed163207d52  gcc/config/rs6000/rs6000-protos.h
+1ec709f5cdc858145ccb17e8a38497df  gcc/config/rs6000/rs6000-tables.opt
+517ec659ac2cea07de268ec91ffed334  gcc/config/rs6000/rs6000.c
+aa7d58eb039c67e094af888a367e1c51  gcc/config/rs6000/rs6000.h
+4e54c4e59892147512b9ad1cc0f46978  gcc/config/rs6000/rs6000.md
+ffdc949de33a0bcd882fb620d47d1a55  gcc/config/rs6000/rs6000.opt
 4449f37807aeb14832c50529169a3ffe  gcc/config/rs6000/rs64.md
-f33e13ba9553f9dffed8aa05d8df34d1  gcc/config/rs6000/rtems.h
+e245aca686f10465a79c3937804bfc22  gcc/config/rs6000/rtems.h
 cb02b8ce90d00a87e31299037abf8e7f  gcc/config/rs6000/secureplt.h
 aeae742b02e4f6ac96fa1a3d18fad193  gcc/config/rs6000/si2vmx.h
 117e373fbd1a8c11c1e98ab7f73b71cd  gcc/config/rs6000/singlefp.h
@@ -3891,9 +3891,9 @@ a9f8e6036f73260991227c777d01a371  gcc/config/rs6000/sync.md
 e30e471a82371a08e24c8c1d16cdd4a2  gcc/config/rs6000/t-aix52
 f3250b9720d1149346f1ef8e21b52ea9  gcc/config/rs6000/t-darwin64
 636250eb91fc5dada4804efcd525fc02  gcc/config/rs6000/t-darwin8
-3a13b3a69d4bd632ba40be147edb9f6e  gcc/config/rs6000/t-fprules
+cfee179e0072bada3e89cd5a98d60404  gcc/config/rs6000/t-fprules
 04bc92518cda300be436f5315d1a158a  gcc/config/rs6000/t-freebsd64
-79eef7dcb96a36a5066fa254e5bc7178  gcc/config/rs6000/t-linux
+91ab90cceeb86332e94d0767b0e4d5f7  gcc/config/rs6000/t-linux
 9c86c35accdf22b4002bb0b2bc1d0dbd  gcc/config/rs6000/t-linux64
 71c0a0470047f0171a3bb4c483eb2b72  gcc/config/rs6000/t-linux64bele
 489699b655594f05bae0b429fd261edb  gcc/config/rs6000/t-linux64le
@@ -3905,7 +3905,7 @@ d9a64dd70bd8444e4f490a7ee9695d6a  gcc/config/rs6000/t-ppccomm
 07f170943154e2ba7349c748a43b14b0  gcc/config/rs6000/t-ppcgas
 1b8aba690a39464c4ea9c647d73d6983  gcc/config/rs6000/t-ppcos
 236bbd09beefc8a54f483692c0ae08e6  gcc/config/rs6000/t-rs6000
-bd63e396a0745bf42e3d2ed13786a543  gcc/config/rs6000/t-rtems
+ec0f59e7e3265e3a5f0b51408439166c  gcc/config/rs6000/t-rtems
 732982adc6e3e26f8765d0284e3e847a  gcc/config/rs6000/t-spe
 276efece0ce2ed5de0bbc75023f46adb  gcc/config/rs6000/t-vxworks
 f11925c88524d2fd457bf77944da1302  gcc/config/rs6000/t-vxworksae
@@ -3913,14 +3913,14 @@ d23864248497f7f5544c2e1916dc402d  gcc/config/rs6000/t-xilinx
 b1f48ff99abc14b3f61842bd2ad8cb9f  gcc/config/rs6000/titan.md
 0ac3e3c82b12030f8797bf598d14a7df  gcc/config/rs6000/vec_types.h
 afa1b08d7889dfa24025d27c5ebcf9d2  gcc/config/rs6000/vector.md
-628e9c007b529d06730ad6723abd38e1  gcc/config/rs6000/vsx.md
+b7fcbc0042cc51d6659928390b0ebb42  gcc/config/rs6000/vsx.md
 0c2404e4c53d11d18595ce802fcd85df  gcc/config/rs6000/vxworks.h
 5c2f724024335c015d76fe32d3da6de9  gcc/config/rs6000/x-aix
 af875b9bcb1ec1da1f33d5e34df8ca7b  gcc/config/rs6000/x-darwin
 9ffcc92667a16102520a017eabc7d7d2  gcc/config/rs6000/x-darwin64
 3f42272f4bcf66031ebf71a6c876adb8  gcc/config/rs6000/x-linux-relax
 1aff8cb3714b63b6c3367f552dae743f  gcc/config/rs6000/x-rs6000
-e96a736663df72a44ca98273b81a32c5  gcc/config/rs6000/xcoff.h
+3b420cc96142474c61caac1e983383ee  gcc/config/rs6000/xcoff.h
 7292bc32e7f6e978e34d98746bb65f9f  gcc/config/rs6000/xfpu.h
 e921244f996542b710957fd7ab4e7c8f  gcc/config/rs6000/xfpu.md
 1efdbc0666cd2a766427ef67bbb15773  gcc/config/rs6000/xilinx.h
@@ -3932,8 +3932,8 @@ e32f17005427bb0f246f390e31202982  gcc/config/rx/predicates.md
 2908b4896a0c5f29fb83ddd0ec134017  gcc/config/rx/rx-modes.def
 497aa878dcc665aba03afb79ed0de398  gcc/config/rx/rx-opts.h
 f0a4eaa2792f14550cc1c3d984e90d37  gcc/config/rx/rx-protos.h
-86f977966597db1b989f70fe9129ef24  gcc/config/rx/rx.c
-3d140ada1daddd1b3cf636f7132acdca  gcc/config/rx/rx.h
+fed1c492b21cd7ed3a4002513ae8ed6c  gcc/config/rx/rx.c
+4163f6e1a49ef22946862c55221f7c30  gcc/config/rx/rx.h
 0b8330991221da64cd428e695f2723ba  gcc/config/rx/rx.md
 28bfefa3cbfc2296f7f1b4b25b22581a  gcc/config/rx/rx.opt
 063ffc264af162c97a5ae2f392b19eae  gcc/config/rx/t-rx
@@ -3941,7 +3941,7 @@ d042f3e87097c57cf493616011701b3a  gcc/config/s390/2064.md
 4bc9b75fb73218038b8543322d7b958d  gcc/config/s390/2084.md
 b057aa7a7fa1576fa972f2ad68f0c98f  gcc/config/s390/2097.md
 c9eba1dddaf8e815900e04653b282916  gcc/config/s390/2817.md
-bcbb0936de3bdb1ab1961d1b0b767c6a  gcc/config/s390/2827.md
+482a6bfc56e8e77d3fd761036a3be76b  gcc/config/s390/2827.md
 655a3065d5aded3b420f164b8b25e3df  gcc/config/s390/constraints.md
 2599f87e8af03a8ed84a93d64993608c  gcc/config/s390/htmintrin.h
 641c2843449747ed278ab4c3dd062f11  gcc/config/s390/htmxlintrin.h
@@ -3950,10 +3950,10 @@ cc93df03c784c5a49ca77f01bbbc9733  gcc/config/s390/linux.h
 57bad8bcac22bb78df6ecf3b53370469  gcc/config/s390/s390-modes.def
 49a2cfdf53188f656d24a8ad697873d2  gcc/config/s390/s390-opts.h
 82fd6c34fc03031047a13f5c6d3f228a  gcc/config/s390/s390-protos.h
-a97e8d69c9daf70a2e4e1f56b0b9ff56  gcc/config/s390/s390.c
+d3e474c856243aa9b29f79a789b819bc  gcc/config/s390/s390.c
 0353983af6ca89a9cec67205af7b95db  gcc/config/s390/s390.h
-cf594643ef5ce32fc9067a32b0bd0edf  gcc/config/s390/s390.md
-d1482033ddb063e793079a0c90155f6c  gcc/config/s390/s390.opt
+24c842b4aa11fada3bdaf713337746a4  gcc/config/s390/s390.md
+bde9c4d8a1f0970d87763c7e9b8a408c  gcc/config/s390/s390.opt
 207d1b330e72f07842f7f9c60cd2b0ab  gcc/config/s390/s390intrin.h
 723c7114350973aafbea58aebe38a3b8  gcc/config/s390/s390x.h
 551847ee4c38fa1a7e95fd93cdb32f17  gcc/config/s390/t-linux64
@@ -3987,20 +3987,20 @@ c2781f02b4a6976d410fbd737422bc7e  gcc/config/sh/embed-elf.h
 b644e85ba3df3974bb85d2bca41dda2e  gcc/config/sh/rtems.h
 fd503e66901381fd4a42832d0d3a26d0  gcc/config/sh/rtemself.h
 52e785550870ece323d5233ecefdac2b  gcc/config/sh/sh-c.c
-815bc614203e150615c85713d1aa605a  gcc/config/sh/sh-mem.cc
+7855970e9917c8096dd8a01d2a8d4899  gcc/config/sh/sh-mem.cc
 ee56adc86b26db0a967855a075947e96  gcc/config/sh/sh-modes.def
-e0d982724069321bc7bdc47869642298  gcc/config/sh/sh-protos.h
-6cad1a807dd53c28abd058bedd0f09a0  gcc/config/sh/sh.c
+5bd6ce2800f0450b5bc5e130b493aa95  gcc/config/sh/sh-protos.h
+bb6537b2c36a980abe322d8e80a0a0f0  gcc/config/sh/sh.c
 c4e8a30076baf764ee83c7a1427cad1c  gcc/config/sh/sh.h
-a2069c17f42941b0b95ea1e93e5b5ce5  gcc/config/sh/sh.md
+64d477853be43e1c0e0f7d9b9221bf2f  gcc/config/sh/sh.md
 5a4168cadbbaedf655f0be6fc04108b9  gcc/config/sh/sh.opt
 44bd005825aeb2b89bc19b3d5faf1be3  gcc/config/sh/sh1.md
 0244ba832a19341b6bd43ed51e610544  gcc/config/sh/sh4-300.md
 18834cd7d0139e5c43233e1617ed297f  gcc/config/sh/sh4.md
 2e789473eebf2bba5fcf1d3bffde0ab5  gcc/config/sh/sh4a.md
 65ee2bee9a0c866cfa991a1841322885  gcc/config/sh/sh64.h
-09376a5af690ec90dc5901ac0386d1a2  gcc/config/sh/sh_optimize_sett_clrt.cc
-0779c09a66b02d2c62ea39e64fa1dfad  gcc/config/sh/sh_treg_combine.cc
+1580a5c2650d4c6526fa29dac07d2ade  gcc/config/sh/sh_optimize_sett_clrt.cc
+78a57f1fb0f60d1cac05c3d5b9982a70  gcc/config/sh/sh_treg_combine.cc
 b9616edc80eac9677cf561f56c17647c  gcc/config/sh/shmedia.h
 f58eddab99e1003535cf9ee35bed8416  gcc/config/sh/shmedia.md
 ae39f187dc6fb196d784b1e072cf2d3b  gcc/config/sh/sshmedia.h
@@ -4010,7 +4010,7 @@ ae39f187dc6fb196d784b1e072cf2d3b  gcc/config/sh/sshmedia.h
 d136f788a5f1c0fd4a8cf495f33aabd8  gcc/config/sh/t-linux
 959d48612dfaf31382c677435816d011  gcc/config/sh/t-netbsd-sh5-64
 ad88281b142c81e6c7017a842c281d5f  gcc/config/sh/t-rtems
-87ccc44575eaeaf8edb0d2c11a64e160  gcc/config/sh/t-sh
+86db3e7822dd8574a9ef15aba40ca399  gcc/config/sh/t-sh
 c44bf50c0ddeb5e7812797cba1198b04  gcc/config/sh/t-sh64
 9f0e9638f478c08d204c5dce468c95ce  gcc/config/sh/t-vxworks
 691e043b1d3b669386ec1ac67cc8f7e5  gcc/config/sh/ushmedia.h
@@ -4033,7 +4033,7 @@ dbd1114778d0427aa4d2150155200e4b  gcc/config/sparc/default-64.h
 0117c0e683d058c584d85e353075fd5d  gcc/config/sparc/driver-sparc.c
 1c98f0f53e81c117490b80cbdbbce258  gcc/config/sparc/freebsd.h
 8ff8094f383224e4ad783c303608116c  gcc/config/sparc/hypersparc.md
-d4482133950f8367db1b23bdf4637e63  gcc/config/sparc/leon.md
+539fd9ed5043b07ca7ea9e4492c294d2  gcc/config/sparc/leon.md
 21d15dc8f93ba7c648c29c358d43d3fc  gcc/config/sparc/linux.h
 ed5499f93835d6a8f36783627eb13de1  gcc/config/sparc/linux64.h
 b43a1d58162b2e406a3556338f14abcb  gcc/config/sparc/long-double-switch.opt
@@ -4050,12 +4050,12 @@ a7f11fb79691ee2c896b0cf2880ed295  gcc/config/sparc/predicates.md
 32f6597f1f5b263864b6b709ccf8a7f6  gcc/config/sparc/sp64-elf.h
 4c9272c156a54169682c4d78519e0574  gcc/config/sparc/sparc-c.c
 fe11466ca359c98303d1d5a77efc7277  gcc/config/sparc/sparc-modes.def
-b3a2f800b64aa009f99321dfb6a0f3b6  gcc/config/sparc/sparc-opts.h
+b03b1bbc0afc22361bd6fd67b87bc53d  gcc/config/sparc/sparc-opts.h
 10784bdb9b36f0c0d8072f1299f9fa9c  gcc/config/sparc/sparc-protos.h
-80cf8d1da0e7beece46d81df37a27494  gcc/config/sparc/sparc.c
-056e9cce1df0c82fbbf3df07ca8247c8  gcc/config/sparc/sparc.h
-809a67243ab306f705824adc49250783  gcc/config/sparc/sparc.md
-0fc21233cd7245bdd222051524ce0840  gcc/config/sparc/sparc.opt
+0677ac87943db1604aafcaf8d148fd68  gcc/config/sparc/sparc.c
+768c714c81f6643bca728ce5552c857d  gcc/config/sparc/sparc.h
+1b0eae546e592ed97bbfa3763ae7bc79  gcc/config/sparc/sparc.md
+171251295cb3e869a92330de54b1b440  gcc/config/sparc/sparc.opt
 a4e9378ba096bbe768f431e5efe542fe  gcc/config/sparc/sparclet.md
 23633c532af69df48b8945cd85fa8e89  gcc/config/sparc/supersparc.md
 a676af1bc45577fdda993605eb950a13  gcc/config/sparc/sync.md
@@ -4066,7 +4066,7 @@ c220a70c033b2f3839f5da1eaf86bd51  gcc/config/sparc/t-leon
 4a7d3f368a24d549fabaafbe44fcb134  gcc/config/sparc/t-linux
 4124f7e1cce8c58e76f68673e6fc3f2f  gcc/config/sparc/t-linux64
 75987b7fdc6fa9c9ff2108ff1003e6d2  gcc/config/sparc/t-netbsd64
-db8ffd571bc0868672ca127934d48f3d  gcc/config/sparc/t-rtems
+b86fb045a91800151ae7c4218efcc3d1  gcc/config/sparc/t-rtems
 7b74c4da4250a0680a8a21429c4d9669  gcc/config/sparc/t-rtems-64
 511770bb20c2707fabd4f231ce8b83cf  gcc/config/sparc/t-sol2-64
 036389f35c865b39ada5277d131314c1  gcc/config/sparc/t-sparc
@@ -4223,16 +4223,16 @@ a4953dec370aeb83aa4c300580989aca  gcc/config/xtensa/xtensa.c
 3403522b62b3afbdee0c6ba1c08dd9b5  gcc/config/xtensa/xtensa.h
 d0f70581147ddc12bdd0b9b2002099f9  gcc/config/xtensa/xtensa.md
 3626e5875265724499b1e0889df223f8  gcc/config/xtensa/xtensa.opt
-4efd0bab96b04eef71bb96279132dbae  gcc/configure
-91daec7a8540f0bab0ea83ef97b76b2c  gcc/configure.ac
+b3cb7160b444c7cf91346d16b6d8916e  gcc/configure
+37be92186937a29503c93234871858ef  gcc/configure.ac
 3f8600d94fa18c9df14202629b15c30a  gcc/context.c
 a105f73fec5a545a02b66e02a5fc9cd1  gcc/context.h
-ad2e5674b80419b7901057a9553438d4  gcc/convert.c
+f20b823448cf0b7ba77f2294374a1bf4  gcc/convert.c
 8072f72dcd5d8ed99dae23c8f548d81d  gcc/convert.h
 7f281fac897d0a12b476c90692737329  gcc/coretypes.h
 77f22f105dfdc4a9829de4737400fdc3  gcc/coverage.c
 fc0ea61bb4cd0e88fcb974874b454f63  gcc/coverage.h
-99bdef97e1a0cab2f8b4516ba7ac4808  gcc/cp/ChangeLog
+73ac58af4de766eafdb3dc88747b247d  gcc/cp/ChangeLog
 d271e3663538ba1f3281cab3838e92cd  gcc/cp/ChangeLog-1993
 f5a44adbc05521162350ca409d1d95ce  gcc/cp/ChangeLog-1994
 ac55db48d964cb5469ff03c1cd3ee04d  gcc/cp/ChangeLog-1995
@@ -4258,7 +4258,7 @@ c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
 9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
 455a052c3ba589ded45beac207aae43f  gcc/cp/Make-lang.in
 2a39a12cc0dff2b94a44e84e818ded9e  gcc/cp/NEWS
-52aa7c19f87be28e8441930538a0cb24  gcc/cp/call.c
+a07db9b36778fbaca8e1a3d57ffbb458  gcc/cp/call.c
 e184e53ef1c7ccede7b4257052006bd7  gcc/cp/cfns.gperf
 66d1092c8be3fffdb7372b46a158ebf6  gcc/cp/cfns.h
 aa8695d1e706d6121f154d3d5ba0a28c  gcc/cp/class.c
@@ -4270,40 +4270,40 @@ c0aa2580eac480bebef90fd178f23fce  gcc/cp/cp-lang.c
 ef87c1a033a26e7711907c6b178131b1  gcc/cp/cp-objcp-common.c
 9eada522ec909990ce7386714e3c0afa  gcc/cp/cp-objcp-common.h
 d0d99db987a2bd8f0058a1faa5e408e5  gcc/cp/cp-tree.def
-48ebe5bcdf8fde758ec06be486b45d79  gcc/cp/cp-tree.h
-2d310182ce712621a1c231f8d3450154  gcc/cp/cvt.c
+37b86614b1bd2e32357da48b293ede4c  gcc/cp/cp-tree.h
+0522540987275422136fa53be4047d22  gcc/cp/cvt.c
 72aec02508b7947aa57a3fdc7907592e  gcc/cp/cxx-pretty-print.c
 80ee86746b2127c64ef5c25f24ceb14b  gcc/cp/cxx-pretty-print.h
-fd534d75b50af1c6e129f6d6b673a8be  gcc/cp/decl.c
+7ff4dc09186b7cbfe212030dda9da4e6  gcc/cp/decl.c
 42cc7ee1282351aee587814acc597508  gcc/cp/decl.h
-39aa1108467667165657b525b4f27f45  gcc/cp/decl2.c
+148eb7164269f8335740dc1f23eca0ed  gcc/cp/decl2.c
 3f6c50620d2953d5b412ff4e390eb7ae  gcc/cp/dump.c
 4f563217e305eef8adde18a3b3d0c547  gcc/cp/error.c
 615a63805536eb9ffe1b46dd1881582c  gcc/cp/except.c
 d08a0a74a2164b0d5eb954bf1a755825  gcc/cp/expr.c
 f825a4855a4c9f2390afb1302bb4d8d6  gcc/cp/friend.c
 4e1f37f96a3d7f70ba70e24cba59dc3a  gcc/cp/g++spec.c
-e9ff9474d8121f39f710de04406d809c  gcc/cp/init.c
-65a090560374c7de00c5a150824046c4  gcc/cp/lambda.c
+9885d35e5007de10cf292db0f5e1b0f3  gcc/cp/init.c
+76afad025040c8ed5d265725b47fc867  gcc/cp/lambda.c
 d505a249800c51140eb8d126b620394f  gcc/cp/lang-specs.h
 a9d9b7c8443dcc78573259632806eb39  gcc/cp/lex.c
-a4fd8479abffd3cacada620714d9306b  gcc/cp/mangle.c
+fc4035131b257e6be4f6b1f02a0621ac  gcc/cp/mangle.c
 9a6b56e31248cf676bc2841750002d6a  gcc/cp/method.c
-88641563e2d3f64a95da6434ecf8de00  gcc/cp/name-lookup.c
+1bade1bcd844632d47fbb557c55ab1cf  gcc/cp/name-lookup.c
 2fe9fc47b363db0eb4eb053c2b3b5109  gcc/cp/name-lookup.h
 a4c4160079301223008ae949e923ae09  gcc/cp/operators.def
 cab3f4d3911d5d98b499168510c420bf  gcc/cp/optimize.c
-52b4bbf6ed6e7d030b275f763880a072  gcc/cp/parser.c
+b1487e88fef92a35079023dfbf664d2f  gcc/cp/parser.c
 7dad8f7951a41247d36a1491c5ed3333  gcc/cp/parser.h
-28644d5fd073609810ff5f574ddc02f6  gcc/cp/pt.c
+64aa4ea0f839decb1ac1b215ac6ef7d8  gcc/cp/pt.c
 1fb212eac0559ba1dcb95d7a26602e06  gcc/cp/ptree.c
-da1e4054f89a7112f63ce85825932ca5  gcc/cp/repo.c
+0d003a9ae49e636ac7797b2cc6ae1b13  gcc/cp/repo.c
 42e298dd7b029109771b91c2ed2adaec  gcc/cp/rtti.c
 6fb2431ec9910cb53f58bdbe3bff5f70  gcc/cp/search.c
-d95b0104496ad10710d8e70a7b09a421  gcc/cp/semantics.c
-463500e0496cd786fe2b8b020ec29564  gcc/cp/tree.c
+c8f7cc899d2be53a39c275a8e47ed287  gcc/cp/semantics.c
+b5d0510e775232d09f903e9b6fbe15a5  gcc/cp/tree.c
 1adee27afd0240132800372d13882a94  gcc/cp/type-utils.h
-d7b9a1868cbc3f7e3040b962345c3350  gcc/cp/typeck.c
+5cf35ac469b1d9a468a76d2de8bf0079  gcc/cp/typeck.c
 25e903fa1376c6a1bb37d2c65a80da05  gcc/cp/typeck2.c
 74dbaaf0e744d50ebddff66290b3dfd4  gcc/cp/vtable-class-hierarchy.c
 c69f7cfa3152c54d30a4413e74a55584  gcc/cppbuiltin.c
@@ -4311,7 +4311,7 @@ c69f7cfa3152c54d30a4413e74a55584  gcc/cppbuiltin.c
 bbc0d934adf8ebfe95b4d7936eba7fbd  gcc/cppdefault.c
 df33d06b829c8f394a7f97a35cd04bc3  gcc/cppdefault.h
 d953aba92bef865283ec560c7a0e4b45  gcc/cprop.c
-e897df7843996fa7eb2ee60b4fd2607f  gcc/cse.c
+e423c654dcc061b82b483a795376f808  gcc/cse.c
 6cb034a1f003e7b108d4f4e75dea0e6b  gcc/cselib.c
 2c7e5433abc503c9ad18c4b3067eb988  gcc/cselib.h
 1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
@@ -4334,7 +4334,7 @@ d02c58c6458525cf2e81bece060a0a84  gcc/debug.c
 fbb60a80a049439ba06be3b7bb03ba33  gcc/df-core.c
 194c028bf00737625f2f0c3853477aa8  gcc/df-problems.c
 f2cf850a3f6a9d95d4034c61245ed441  gcc/df-scan.c
-bba11eb0e65fbc0ad0c9145d524efb2f  gcc/df.h
+6d7e429ff21e9ae84e720c32f7053420  gcc/df.h
 12ee769110c96a5380450de59969b152  gcc/dfp.c
 a29b71ed992739253833d3267dd669c5  gcc/dfp.h
 649200f4a216ae83500057f20000bc4c  gcc/diagnostic-color.c
@@ -4343,7 +4343,7 @@ dfa2f3caa589d990913f898317c3ba04  gcc/diagnostic-core.h
 ea862db8f1c974282768561f5c6fd263  gcc/diagnostic.c
 a82f4c29248edc233f641579ab6e772a  gcc/diagnostic.def
 439f0d28ab1a85692b11ba394cc4e6f6  gcc/diagnostic.h
-c14350a5a419f25b622467cc02c205cc  gcc/doc/aot-compile.1
+107911c26d1aee4bcb05e0573470a03c  gcc/doc/aot-compile.1
 2931c39155bdab807e1af465d937350c  gcc/doc/arm-acle-intrinsics.texi
 35b6982c7c5b95341a6e28476e4d1daf  gcc/doc/arm-neon-intrinsics.texi
 9afccee176594b00a1b7a15878bebcd0  gcc/doc/avr-mmcu.texi
@@ -4355,38 +4355,38 @@ f2623c6aeaa1ad4a6474141b9dd5f995  gcc/doc/configfiles.texi
 429106f28aff7ad80a86d1442fb5003d  gcc/doc/configterms.texi
 3c64bdb237b5fc38837b9b9bc2fda853  gcc/doc/contrib.texi
 6436407c42cecb738124becb9079d978  gcc/doc/contribute.texi
-f6920722b443e90fb8a683d0523b8fca  gcc/doc/cpp.1
-decc020ed2508d75a82da23fb026c4de  gcc/doc/cpp.info
-4183e4733ea86a20673d9c860e1f8d17  gcc/doc/cpp.texi
+4fc7956099be38aa5c434f3c91ae55b7  gcc/doc/cpp.1
+6b1171575378d3dffefbf49f8799c852  gcc/doc/cpp.info
+8b4d7d3a2e425a52f573f6330d4d5e70  gcc/doc/cpp.texi
 4aa9560d9a516a5df4f7429c00ba1fb2  gcc/doc/cppenv.texi
-7bcb32eafd090c696470016dc64560e2  gcc/doc/cppinternals.info
-ffb92a322644e39300d1398a048cb9a8  gcc/doc/cppinternals.texi
+ea99de0828770f55c6573529b8553399  gcc/doc/cppinternals.info
+76eda89efeb575bff228598230bd3c50  gcc/doc/cppinternals.texi
 249506473d9c4b6f20554997a9c8946f  gcc/doc/cppopts.texi
-735f272973eb624ca2b27256784794b1  gcc/doc/extend.texi
+52c0e2025a2e01d077f402dd7d29639c  gcc/doc/extend.texi
 5ee3105f6fb685feb1259931acfbf79e  gcc/doc/fragments.texi
 de203f1fc34a4d519c489d06bf46b2bf  gcc/doc/frontends.texi
-238c42b81820ae527384f9f7efca311f  gcc/doc/fsf-funding.7
-7b826cfc7f4c94c84f9b9a11a1dc0e95  gcc/doc/g++.1
-d1753932cc88cb59cc2da801086bf71b  gcc/doc/gc-analyze.1
-7b826cfc7f4c94c84f9b9a11a1dc0e95  gcc/doc/gcc.1
-1ef348e991d53ea622dedaaf2675bf25  gcc/doc/gcc.info
-8daacd29f48167f6b49255b6c181b9bc  gcc/doc/gcc.texi
-c5d370f3f256541c04d150066359a1ff  gcc/doc/gccinstall.info
-d8a0c9ec9a2874f88441d19522ab9acf  gcc/doc/gccint.info
-7911949acb880ae16515d7ca0ede3d9a  gcc/doc/gccint.texi
-520eeb6aad78666355055271bc7a5729  gcc/doc/gcj-dbtool.1
-8e2ee9b6e4549b574731290a188b2643  gcc/doc/gcj.1
+88460cba365ce67a0a66e431a7befeaa  gcc/doc/fsf-funding.7
+e2d7852408d8a1899a9aa366ec24dbb7  gcc/doc/g++.1
+4cc3fecaf79c7ec793b3701b110dccb8  gcc/doc/gc-analyze.1
+e2d7852408d8a1899a9aa366ec24dbb7  gcc/doc/gcc.1
+694b9d618abe0bb714144a607657b286  gcc/doc/gcc.info
+bef3772e1b7b2c623e0c1859c71522a8  gcc/doc/gcc.texi
+0a0315be994faa03b8efe9b031dd48a8  gcc/doc/gccinstall.info
+9cf77dd608f6d2001b3b0c448e8b21f2  gcc/doc/gccint.info
+55d5bb148799c0031e223c79962ea104  gcc/doc/gccint.texi
+93a50a9625ebaead640b46e6faddbc92  gcc/doc/gcj-dbtool.1
+665cb30443928f3f205159f277df0cc4  gcc/doc/gcj.1
 6aa5c0a428f40373a2d3f7612beeb537  gcc/doc/gcj.info
-19eb901ad556fc888c553db5f508ba67  gcc/doc/gcov.1
-7a35df8cd0480abb695958df18ea6134  gcc/doc/gcov.texi
+d66569472f5681ba775c7b0b52fe1aab  gcc/doc/gcov.1
+6bd8d77a2f655e81b173f9903dc6daec  gcc/doc/gcov.texi
 5587ca6c5976c7dffb318cf45f5b7f13  gcc/doc/generic.texi
 1ded054093de910d9786c62bc4fe8cc6  gcc/doc/gfdl.7
-adf15f87f1466b8b263e5beb9e2f4b64  gcc/doc/gfortran.1
-9491342bc6ecfa0a4600dfe0e2a30626  gcc/doc/gij.1
+579b1a5283de139ee93dad6c560e145c  gcc/doc/gfortran.1
+15ef692a066278654e523f21e814e2f8  gcc/doc/gij.1
 ac25ba9af042d4f99e0ab97a4f46517a  gcc/doc/gimple.texi
 290370669f02bef1502ada9273e5261f  gcc/doc/gnu.texi
-978d2982c48109ce90a1c832f5bd2535  gcc/doc/gpl.7
-1e75b159c5e7cede3e50c1ad4d5b976d  gcc/doc/grmic.1
+c2ce8d4b16d3870aff28994fa01b01c7  gcc/doc/gpl.7
+66fdeaf602990c34f8142fe0d6b6cd7d  gcc/doc/grmic.1
 f2dd6df88ca65026d154f628ffbc8f13  gcc/doc/gty.texi
 34a1955f331ff1028e09083a178c0418  gcc/doc/headerdirs.texi
 a56cc8baf1b35fa5c4c43bbfdb35b74b  gcc/doc/hostconfig.texi
@@ -4398,31 +4398,31 @@ fd6c359ffd07e895e9b60c12c1bc76c8  gcc/doc/include/gcc-common.texi
 5f5adc2c6c4ebdcf03cc0125250f5995  gcc/doc/include/gpl_v3.texi
 73819b3930a3d4be5d6234070d02386a  gcc/doc/include/texinfo.tex
 ca81bf9d3358342ef978866b6895f4ca  gcc/doc/install-old.texi
-1e1bcddbf67b47d12ea83501eeae1cbf  gcc/doc/install.texi
+7016e79a5fe3bdfa0e3eda3713586189  gcc/doc/install.texi
 8851ed69b0a7490fa673efa763d090c7  gcc/doc/install.texi2html
 f1aaec9eb4571d731a4089d5d5ef97fa  gcc/doc/interface.texi
-ecec565f4bb9a14a710608bfa8228cb4  gcc/doc/invoke.texi
-46a0230f3f341a607e3dc41c0fd38994  gcc/doc/jcf-dump.1
-0f054db9c3781f33b69d25e943df5838  gcc/doc/jv-convert.1
+0d29184965d447c255116a66c751c3ac  gcc/doc/invoke.texi
+ad4bc49d666206dab0080e276509c546  gcc/doc/jcf-dump.1
+a21bec009e0207e0aa8010019601f292  gcc/doc/jv-convert.1
 c36b6709dd343cbcd4b54f0417bcc780  gcc/doc/languages.texi
 2ae9a3e90fef1d92ab8196ae773a7673  gcc/doc/libgcc.texi
 8b58315c921fc046e0ab6f949ebd5990  gcc/doc/loop.texi
 ee0a1b01a1a27eee100cc172673b9fe2  gcc/doc/lto.texi
 874e34e1340e586f987bc68372bd85c2  gcc/doc/makefile.texi
-14b20665fcaba25b16c634344295ead6  gcc/doc/md.texi
+48dc81c158ab0afb5906690947705c49  gcc/doc/md.texi
 0d32608762520cb5ec42bdfebde5ce0e  gcc/doc/objc.texi
 80da07512f4e689513406f7db671ffec  gcc/doc/optinfo.texi
 6fd0b58692b34513e8b16b996525ac0b  gcc/doc/options.texi
 f9f577785f8eae98a97b29568343be95  gcc/doc/passes.texi
 6997cbfce5b82226e56271f7498697f5  gcc/doc/plugins.texi
 914a3d181f9c38ac74e424d667026b61  gcc/doc/portability.texi
-8fa6ea8e5847555a882912fc51fe4e6d  gcc/doc/rebuild-gcj-db.1
+a9a2aca16fc696614bff7a56134986ee  gcc/doc/rebuild-gcj-db.1
 fa0276a6b5d315ae4e036add235d9b26  gcc/doc/rtl.texi
 3f5d8a76a7ddd984603fb2f35ee46632  gcc/doc/service.texi
 affb8b02a41ee94557fabcdce8048ce2  gcc/doc/sourcebuild.texi
 80f74ac416390bd73b75ae93f1f2f8f8  gcc/doc/standards.texi
-24a01a8bb1b86882ac27a90fbb507fe9  gcc/doc/tm.texi
-eed8aa101de465a7cd9c6aaa39f3f325  gcc/doc/tm.texi.in
+e701e7a632dd1b5af6097c2bea831d54  gcc/doc/tm.texi
+de49d7ccb741be08e765d3e94977b49d  gcc/doc/tm.texi.in
 2a0f462c8ac98826cc19fc71f6f09014  gcc/doc/tree-ssa.texi
 f173054a88e0b97206d03f926b8bd696  gcc/doc/trouble.texi
 b40aba636e9d9d23b966bc47f50ca0ad  gcc/dojump.c
@@ -4431,14 +4431,14 @@ b40aba636e9d9d23b966bc47f50ca0ad  gcc/dojump.c
 297c055c19cbb073b385bb9443fec98c  gcc/domwalk.h
 2e57c82dbd0e91dc5b2e7f8b275f7eaa  gcc/double-int.c
 9d7f6889e84a85a6aea3abb7201f6f04  gcc/double-int.h
-70c3e303b842357f48e72c0b9bfb1d9a  gcc/dse.c
+652eb789bab05cdbf5806ca8e09707c8  gcc/dse.c
 1a746ea442089d7bdcdbf56af69a5b3e  gcc/dumpfile.c
 eca799a5ac72d21ac26c0993a7fe198d  gcc/dumpfile.h
 7aca1d34836c11d9a7af3c4f2e2899e3  gcc/dwarf2asm.c
 81e5a5988d94ef1528027be5136860e3  gcc/dwarf2asm.h
 42be1d7e96240ac3e4821237d124400c  gcc/dwarf2cfi.c
-fd4947d74b6037d349cd12d7dfd95aac  gcc/dwarf2out.c
-140d11658ba70cd9c582828aec6fb9d2  gcc/dwarf2out.h
+5388df65a244fc8b60eebd50e79d7b85  gcc/dwarf2out.c
+23181314505e8dc6de6f47f73e34b798  gcc/dwarf2out.h
 bd4b9506abebe678ad23b32840627c01  gcc/emit-rtl.c
 7f412544cdbe46c671bbfc12f5791fee  gcc/emit-rtl.h
 b7f5ef50648269cf32374777e144ac1e  gcc/errors.c
@@ -4449,9 +4449,9 @@ b0556e2034dd821307551d6d74e745d6  gcc/errors.h
 24bbd090dbec005ad3793cae5f7e4e19  gcc/except.h
 589e62819b3e668ae01defc5f5fb9ad5  gcc/exec-tool.in
 a38616b15259ffd2171e03ecb4249502  gcc/explow.c
-6459d443bd65bb4141a7d815b3d249ab  gcc/expmed.c
+cb254fcef8b5ff850190e95492adac85  gcc/expmed.c
 71dcf205388e1d671c2d94a0d4a3c735  gcc/expmed.h
-8126e2097a6db1eaf7c7d612aeeaf764  gcc/expr.c
+fcd2e2c332d9c43e80a408837c003948  gcc/expr.c
 d6416980df886e494b49961d4b3a9984  gcc/expr.h
 07f5710155bbddee2cfaf68c84a91fe8  gcc/file-find.c
 f21b58f2ee4076afbfccecb6f0b20813  gcc/file-find.h
@@ -4460,9 +4460,9 @@ f21b58f2ee4076afbfccecb6f0b20813  gcc/file-find.h
 e273344d3f81a5d94a7296a6f73d4599  gcc/fixed-value.h
 adaed0cdfe09a72854c2bcbcc96c8225  gcc/flag-types.h
 927cde0489c22a941e547faf5ec11e50  gcc/flags.h
-1b57a0120edfc1608920462a921aaf23  gcc/fold-const.c
+e7d6a9d81928ee0605d2b89b2d0585c3  gcc/fold-const.c
 926e7b21d0de960d055e2f98520491fc  gcc/fold-const.h
-e5421458f2794ddccbb0d5e10b44a9d9  gcc/fortran/ChangeLog
+f2e90467fff29fbff67d7ad06c4d24f7  gcc/fortran/ChangeLog
 3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
 d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
 bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
@@ -4482,7 +4482,7 @@ b71a81c732fdf1d678ad15828a60e689  gcc/fortran/arith.c
 ccfa4b65ac8982708cce72fc504e63c9  gcc/fortran/array.c
 7056af8453f375056ef312cb6376601c  gcc/fortran/bbt.c
 58ee1ee078411703726305d101932fd1  gcc/fortran/check.c
-9d123564b740f6da7d098dfc5dfc5288  gcc/fortran/class.c
+c6ea95670cf2c47e6ade32e7214191f8  gcc/fortran/class.c
 3991df26a1dc9b6ff42d91520c292e50  gcc/fortran/config-lang.in
 36047e58fcc2b326025fbf4851f809d4  gcc/fortran/constructor.c
 ed4dd7bfb8f8c9f4cedd1f0d2943c8ee  gcc/fortran/constructor.h
@@ -4491,8 +4491,8 @@ cdaada96cc92b73b8913f00cc371b353  gcc/fortran/convert.c
 87a07a13f25c3ba29526f7ff92badbda  gcc/fortran/cpp.h
 102934decfedea4b5a61c7e853023a49  gcc/fortran/data.c
 b94dc1f5d1792f2e58b16f6fbdc3a709  gcc/fortran/data.h
-48ddd8ff961f12e5aefabf1470db4d8d  gcc/fortran/decl.c
-d2754ed9bfb93b73ec99d90271418aa5  gcc/fortran/dependency.c
+85ba7a5a610a53a05d9f48df30aeb5f4  gcc/fortran/decl.c
+ea666ed80db5bac586c7b2758f6d21ae  gcc/fortran/dependency.c
 c868d6d4a72cb319fabcfc59e4613fe7  gcc/fortran/dependency.h
 17fd0657b5dd0ca2bb20d1ba3db84cdf  gcc/fortran/dump-parse-tree.c
 9499ec386ee632269bb460fc37b41279  gcc/fortran/error.c
@@ -4500,14 +4500,14 @@ d321ca0b46df45c3fbc073dd163d4647  gcc/fortran/expr.c
 dd44a696cb95e5fca9e2493dd2b52a88  gcc/fortran/f95-lang.c
 9853ad699e794d420e65e587a98801e2  gcc/fortran/frontend-passes.c
 0a038b837897c57a2b48cc83a3475346  gcc/fortran/gfc-internals.texi
-db3217d6f2cbbb733f7aa58984918e61  gcc/fortran/gfortran.h
-d35af90e2389db4963a3103a09d2de0e  gcc/fortran/gfortran.info
+5239e5fe6fd01ffb7fd0da56efc19c6d  gcc/fortran/gfortran.h
+6b7340a3038b926e4af217591378859b  gcc/fortran/gfortran.info
 938a524e09245e10fbef5b331f81fc45  gcc/fortran/gfortran.texi
-61383efc0d8e4f11fde1c9811c151797  gcc/fortran/gfortranspec.c
-637fc12b13920dc90cb148c8e29afa99  gcc/fortran/interface.c
+fc8164863960de73fc317e2834ddd96e  gcc/fortran/gfortranspec.c
+6ca3b8142b47f11b93ca777ebced1fb9  gcc/fortran/interface.c
 aeb5696e9535c471d020d3c251c2d89d  gcc/fortran/intrinsic.c
 b32d2f0f3daa0209977368544f5278ef  gcc/fortran/intrinsic.h
-9733ca3ef7f8ba540f3d5bb8f18f8f28  gcc/fortran/intrinsic.texi
+f0e6dfe36c51262cbb6b85c69c89d8e2  gcc/fortran/intrinsic.texi
 ff09ef92d4e445cac44eee1e2a4a5191  gcc/fortran/invoke.texi
 d3a2af66f4e1d3472664c1d0ec0bfea9  gcc/fortran/io.c
 aaa0bd487c1196f96642d9c0d89f1960  gcc/fortran/ioparm.def
@@ -4522,51 +4522,51 @@ a778602b7553d8c2a08d457710752041  gcc/fortran/match.h
 a3d130b650f04e28104a3180689841ae  gcc/fortran/matchexp.c
 34817057427c24c69e4e7146fe26f75e  gcc/fortran/mathbuiltins.def
 e0fb4a1ffcb0343a20358ac7e9e3c259  gcc/fortran/misc.c
-22f882b3386739875af0a47cf43edabf  gcc/fortran/module.c
+f96d1ba2d55174b956d56fa894624326  gcc/fortran/module.c
 6fe6854ba192e896050588811dcfbb37  gcc/fortran/openmp.c
 f51d0e2eedb4abe7296518a55e09ca88  gcc/fortran/options.c
 fc32c460b6cd9b3d248899bc6b084896  gcc/fortran/parse.c
 6d0ad629aed04bdd74a9574a8bf4846e  gcc/fortran/parse.h
 fd7c4ac7c689b6a4fb90173f4133229d  gcc/fortran/primary.c
-ad6b0d5e1f473cf51dfb2ccebbba787c  gcc/fortran/resolve.c
+9fd27ce32275f0febe3c95656a00326d  gcc/fortran/resolve.c
 9adf6905ca4673ba2fbf9cbbce54892d  gcc/fortran/scanner.c
 72c90bd863614df8517636fc47ccfc94  gcc/fortran/scanner.h
-0dc72221e9f2b59411d7b0f34885fbc0  gcc/fortran/simplify.c
+30ace0930b0cbd12683a5a94c027d499  gcc/fortran/simplify.c
 e45fb97ea95ff4c3d74a0fbead1f06f9  gcc/fortran/st.c
-3871370aa0e7f7c7501c633d4e561739  gcc/fortran/symbol.c
+3eff96d1a333aeb6daa262b6afa2a0c7  gcc/fortran/symbol.c
 18b66b03bc5d661f80bb81b03f388eb9  gcc/fortran/target-memory.c
 2b15769f79ab3546bef45df0d6815e2c  gcc/fortran/target-memory.h
-9c3c626677d3cea17fbe4425bb18990e  gcc/fortran/trans-array.c
+8c5401738ab604c8f844741de6618610  gcc/fortran/trans-array.c
 fb993a92547683640f7a49d6dd5d0cfe  gcc/fortran/trans-array.h
 6f0a3ffc5ef85f6a9f67c1deaed718de  gcc/fortran/trans-common.c
 ad554dd79e97690c9fe5ce1779a7309c  gcc/fortran/trans-const.c
 a3ccaa77809b6dcc6aa42f435c57e3f9  gcc/fortran/trans-const.h
-f2e437a45f5c0d06e691752db2c1435f  gcc/fortran/trans-decl.c
-5c054d6c727b085ddbdc9b4a17e88c9b  gcc/fortran/trans-expr.c
+08f0d5038bb96562094daa58fa080d26  gcc/fortran/trans-decl.c
+1960b0c08e3a02aafad9f6467b4f8434  gcc/fortran/trans-expr.c
 6ea2f877821771858978645b10ea08fd  gcc/fortran/trans-intrinsic.c
 b47cd6ce04818d16aea2c2442ca82278  gcc/fortran/trans-io.c
-b3738fd5bd6963ed1a16095d8e3ece5c  gcc/fortran/trans-openmp.c
-6374bfca10befeb53e5ca4d22322b56c  gcc/fortran/trans-stmt.c
+34d6879f77a3f7dcd1fff21b93aeeefc  gcc/fortran/trans-openmp.c
+f5548eadf50221b60625cf2c6f3e505f  gcc/fortran/trans-stmt.c
 716b10c08519c671b98c6434e2214353  gcc/fortran/trans-stmt.h
-5147544dd813385df26d0ac0f51948fa  gcc/fortran/trans-types.c
+1e66cf08d4d5e9427f97b23659605cba  gcc/fortran/trans-types.c
 24e41f2179047fd847c46da3cd1c024c  gcc/fortran/trans-types.h
 51ee928eabf49de99a0d7e6578e236a2  gcc/fortran/trans.c
-3123832e121f344eec0a93415ec4c20d  gcc/fortran/trans.h
+c731fc29c48c6f8e0cda96aaf06a9e6e  gcc/fortran/trans.h
 95c41d60adaf583210f110d0984098f7  gcc/fortran/types.def
 97b3f764fb651e1611194a18dbcbe3d3  gcc/fp-test.c
-4ea4072a16caab2b6332ebaadaee2f38  gcc/function.c
-fff264db5393a59b9a99c486322b73f7  gcc/function.h
+4d3cba35459b305215574844f80402af  gcc/function.c
+41395ad8f3c689e8a452b0f665743672  gcc/function.h
 cd8ce281b668e13a32e83cf20a1634c9  gcc/fwprop.c
 818a31d5b690a29005322b5357c9f908  gcc/gcc-ar.c
 6ca83f5096def2aa8a9804a2b8eaa2c5  gcc/gcc-plugin.h
 0b8bba92fc309aea367683311ee8f4ee  gcc/gcc-symtab.h
-d6289e7d8435bf01309f4ec3d0780c2f  gcc/gcc.c
+8c75227917ad3f0ad5d067aabbe987f0  gcc/gcc.c
 4fa2881bdff788d5a661b51dac50d9b8  gcc/gcc.h
-86b4c736884bd64740942a55303a577e  gcc/gcov-dump.c
+cc34c8d1bad1301955e3b61a8998a2ef  gcc/gcov-dump.c
 00ff9c26bdc8bae916b6735214bf984c  gcc/gcov-io.c
 f61072f7d8a864516dbe98fa23724108  gcc/gcov-io.h
 8153efc9661bf69baeab28fec1c37088  gcc/gcov-iov.c
-04f5c39484ae1a4acb8f88b70d634334  gcc/gcov.c
+394f6bd415f02b74cff6957d95fcdf2f  gcc/gcov.c
 d74fe9fbae4bb6cd623fcdc384f2bb57  gcc/gcse.c
 23074fc7f173521ae5b8283331e3342e  gcc/gcse.h
 af83e4b4719ee065872080b713d24c2f  gcc/gdbasan.in
@@ -4588,7 +4588,7 @@ f494127078ee11832d689cde6cc3659b  gcc/genconstants.c
 433eb66f3d010864a76c754d81db24cb  gcc/genextract.c
 fe4697f2b98c57d9478b6bb7a7ae2e88  gcc/genflags.c
 e041d627ebfb410e6ac9821a3ebb3d42  gcc/gengenrtl.c
-6c3ab3fe4a5efe061a63a2dcf5edab0d  gcc/gengtype-lex.c
+3c6872e70253d43910ce1cea2719dee8  gcc/gengtype-lex.c
 689319748dcd572b0d864e2f427c5ffa  gcc/gengtype-lex.l
 cbbcd3bf3726ae98ca84780142a68208  gcc/gengtype-parse.c
 4eaf2d492394ef805a5d5ae40b3405b1  gcc/gengtype-state.c
@@ -4653,7 +4653,7 @@ b20d2dc1cb683fcd184dd5581c236ba8  gcc/ginclude/tgmath.h
 d699488411097f968823f9f7e77d33fa  gcc/ginclude/unwind-arm-common.h
 8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
 d0018c8b069fef23a59561ff2f8dc915  gcc/glimits.h
-9ccfbd4debb484b48661cac32a7b6bbd  gcc/go/ChangeLog
+570291baa607dcd17da0d456e9296f4c  gcc/go/ChangeLog
 84d2ef4a6fee7df8a45a370a6b605aae  gcc/go/Make-lang.in
 60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
 e6bece4f0caf0458c84d9b29ca0de83e  gcc/go/config-lang.in
@@ -4673,8 +4673,8 @@ e044aac17049110bf65f2288f6f7cace  gcc/go/go-location.h
 d273f8866602cebf095ed652fe2e7e79  gcc/go/gofrontend/backend.h
 2b32f2111cb0863a0f232de883d9fd1c  gcc/go/gofrontend/dataflow.cc
 ac50f288c85f0d8fff72198966a48008  gcc/go/gofrontend/dataflow.h
-8734f348c527b9800d30461119288c38  gcc/go/gofrontend/export.cc
-5725a5fa742fd955d4c6d2c2c1befb13  gcc/go/gofrontend/export.h
+66b3f309ace1db4ea63f3ab655bb8fda  gcc/go/gofrontend/export.cc
+d1e20b40172e86345693f893aff13c83  gcc/go/gofrontend/export.h
 fb90a5a1535dd22b8c45f3018165a634  gcc/go/gofrontend/expressions.cc
 58c163a4c1b69d7476b266ca4a7faf4f  gcc/go/gofrontend/expressions.h
 19e66447fa803385274b4e1a7501a4d5  gcc/go/gofrontend/go-dump.cc
@@ -4684,10 +4684,10 @@ a9976cefc0150a7132d127b093292abb  gcc/go/gofrontend/go-optimize.cc
 6d061113313f445cd9a8a626d8138a43  gcc/go/gofrontend/go-optimize.h
 24931aa6ff89727d46078562a4e9c0ed  gcc/go/gofrontend/go.cc
 2a2578ae2b3378d37d61324c02656e27  gcc/go/gofrontend/gogo-tree.cc
-d8f55aaaa35f7c638707c9d3e2fb3dfb  gcc/go/gofrontend/gogo.cc
-e33b0b4c9d13b6266a694e094d738133  gcc/go/gofrontend/gogo.h
-19530349ffce8b937ed080715e7442d8  gcc/go/gofrontend/import-archive.cc
-499fe8bccdd0651f0566d8c145b8d5f7  gcc/go/gofrontend/import.cc
+e460014501a77e13c0ee6e3840420826  gcc/go/gofrontend/gogo.cc
+008f62c12d37a70b2a514f32af641bcb  gcc/go/gofrontend/gogo.h
+1a035b43fb1e845edd7ed44868d0184d  gcc/go/gofrontend/import-archive.cc
+8bf122b08668fffd2b0ba9196bfb866d  gcc/go/gofrontend/import.cc
 46ea027bf693486499d4396551ed674d  gcc/go/gofrontend/import.h
 0d90ebaff0c2a2d319c12a150479e5ce  gcc/go/gofrontend/lex.cc
 50f7fe6bed67437bd8cdedbdadbfd777  gcc/go/gofrontend/lex.h
@@ -4702,7 +4702,7 @@ df0b2e89a7ce7d87c1816e63cdecbf48  gcc/go/gofrontend/runtime.h
 0ba1a11b029f92c6795e4c940c966f48  gcc/go/gofrontend/string-dump.h
 807127e169b2ac5e8222bd4c8f66f1f8  gcc/go/gofrontend/types.cc
 2edc37f5e0fd28a18b5988791482cf60  gcc/go/gofrontend/types.h
-14f99064d66c4b9bc9ab92b14d4e7afe  gcc/go/gofrontend/unsafe.cc
+4991294141b44c9b7a5271d0d23085c0  gcc/go/gofrontend/unsafe.cc
 dd84ec7483eb88b19ce6722e47c1a1f2  gcc/go/gospec.c
 4d471970b23da7e4147258ef9373b38e  gcc/go/lang-specs.h
 652cfd5ee47f7b136034af1add6d668e  gcc/go/lang.opt
@@ -4712,17 +4712,17 @@ d6ed85a4cc675456c0164a52cebf642b  gcc/graph.h
 c5563cd0c2ff9e98445d10189f379680  gcc/graphds.c
 9401c2460400ecfe2a692f5b15e4a5e8  gcc/graphds.h
 eb9d90882c9e2d91c8978b3cdc050b4e  gcc/graphite-blocking.c
-63953a4deeffc34a08638bdb288493c6  gcc/graphite-clast-to-gimple.c
+e8284c96750e0d92b778fcd27c3d7b2b  gcc/graphite-clast-to-gimple.c
 fa16dedaafdb2228849f12a7ffd2e158  gcc/graphite-clast-to-gimple.h
 971d8bb7a8ed5d9932822fa9ba125399  gcc/graphite-dependences.c
 0d3d73bcd8f4028e9ad18229256e7034  gcc/graphite-htab.h
-005a5af98f30b9e7e674c25690ef80ee  gcc/graphite-interchange.c
-1400b8e99d3520aa60a29717280777e2  gcc/graphite-optimize-isl.c
-7acfa753917c853e000017c393da3fc3  gcc/graphite-poly.c
+a70cb15de94787385770f7ec69f06b24  gcc/graphite-interchange.c
+7a1eb4f186afaac3697b79104349e543  gcc/graphite-optimize-isl.c
+474bf85a01f7b5d3de3ffd19024cb025  gcc/graphite-poly.c
 f9c785410cfde9d61c3ffb670dced572  gcc/graphite-poly.h
 89fcadefa8e3b6c09169e1c840d54860  gcc/graphite-scop-detection.c
 2c30c8f2568b1d728f9ba0e3929140d6  gcc/graphite-scop-detection.h
-3d283157b1a0b1afd2a76a27ce09465c  gcc/graphite-sese-to-poly.c
+b872ae197ea404a8e9c2396424bb2fce  gcc/graphite-sese-to-poly.c
 49ddf476aa0ab3084a087850dbf32c8b  gcc/graphite-sese-to-poly.h
 e25ff49d7eaa8a3ed32557987cfb9c9b  gcc/graphite.c
 cf41457f88168d3e8082aa72b80c002f  gcc/gsstruct.def
@@ -4759,14 +4759,14 @@ d9360459f2f4e913687597f9589da5da  gcc/intl.c
 828d71668221b7c1bd27436bf9a019bc  gcc/intl.h
 6a8b3e043b7566f9abed20b2cd243c2b  gcc/ipa-cp.c
 9c8f96d84fe76474ecf300b3461ae324  gcc/ipa-devirt.c
-1b8d3fb6c67dd0e13f67b75b924c3a3d  gcc/ipa-inline-analysis.c
-86e89dfc4cd8b878835b47d24fb38ef7  gcc/ipa-inline-transform.c
+cbad61702bdb5ef2d250955d6daf653a  gcc/ipa-inline-analysis.c
+c8f8b66f5c80f7b58ba0d45701a6422c  gcc/ipa-inline-transform.c
 07b45af4191a711dea059475f57c1a15  gcc/ipa-inline.c
 ef5aed192294b1ea841838ffe38b6ad0  gcc/ipa-inline.h
 bc1b3139cd7a986ee918134a0530cff0  gcc/ipa-profile.c
 44fe8a05d2644cd22ac19740a96f22c1  gcc/ipa-prop.c
 4cfe52b86527ded18edfae21b3a945cf  gcc/ipa-prop.h
-5d7c7c3998bd7526105c1e995c55b1a4  gcc/ipa-pure-const.c
+a82a1226e9634d45486b5a3e19c420fe  gcc/ipa-pure-const.c
 4d91788577e596f236457cd265942705  gcc/ipa-ref-inline.h
 1855589dcb6587a046dcb728192ee425  gcc/ipa-ref.c
 52c8162afb2ab8c2cfaed8e8889ffe24  gcc/ipa-ref.h
@@ -4775,18 +4775,18 @@ bc1b3139cd7a986ee918134a0530cff0  gcc/ipa-profile.c
 81c0e85b5d148b0d05c2e972e98d57ac  gcc/ipa-split.c
 446a574aba27a93de95b2b0c4b4cecbe  gcc/ipa-utils.c
 f1a401a90912552f632b32c77c399c6c  gcc/ipa-utils.h
-da8f2c35f7821cbc3822da57cfdccf9d  gcc/ipa.c
-dd7ab034904148f42c51b046d7f0b572  gcc/ira-build.c
+66c7fbbffff5afd60271d125af0b7e33  gcc/ipa.c
+70106323b726e444846e15be0d43b678  gcc/ira-build.c
 43905ebf4d26681958db7403ec946ebc  gcc/ira-color.c
-70bab789c6dafc2ab624cc7af66b192e  gcc/ira-conflicts.c
+ea843b242eda121fea593c86fb908fc7  gcc/ira-conflicts.c
 860fc86150488ec9dc71e5fa1468c1f2  gcc/ira-costs.c
 2bd26b2844144d614e2af6f5617f0c46  gcc/ira-emit.c
-6488cfc31e614d186769d37bd27cb054  gcc/ira-int.h
+452dc27ab7f3093a6f672198aeddb03d  gcc/ira-int.h
 9c77805567ace1d43ebfaadc852c23c5  gcc/ira-lives.c
-09d12eb5ca58b3a053aceb771c071238  gcc/ira.c
+dde091b38cca9b3edce9293a6475a269  gcc/ira.c
 a143bddc3bc8d88afb0b31089aefe816  gcc/ira.h
 843275b56a150408da64a72a1e86fd31  gcc/is-a.h
-0b6053eded7baa04118a8be08b90f225  gcc/java/ChangeLog
+e3ef5f686016e56e1447a1f9648cfda2  gcc/java/ChangeLog
 3becfaac793f49e1f52cd74e78172b48  gcc/java/ChangeLog.ptr
 1c698a5c434720749e71a0ea3eb5a0ea  gcc/java/ChangeLog.tree-ssa
 3e907c2321d94f9d70c9bfcc63d251c3  gcc/java/Make-lang.in
@@ -4807,7 +4807,7 @@ f55df0408fb0e26a03341f220e79bcaf  gcc/java/java-opcodes.h
 22120542a8e0ac949595a72b0537ddd3  gcc/java/javaop.def
 5575da92458a578e3344f8a5a5bf04f2  gcc/java/javaop.h
 b6ab8551e1b5914d77c03296d5c61db9  gcc/java/jcf-depend.c
-9d76dad5c060d48e6a5a382a97f57a7a  gcc/java/jcf-dump.c
+abe52266e43b46e3c53f7315f2757228  gcc/java/jcf-dump.c
 c2832a6154d575faf5c221a725c89878  gcc/java/jcf-io.c
 5635af8a25e8a9ade6b52748dfb6a9ca  gcc/java/jcf-parse.c
 1f68a6b98f51458ed0fd4cf80c990048  gcc/java/jcf-path.c
@@ -4829,7 +4829,7 @@ d03d50952e0b5598e011458b4c4a2b7f  gcc/java/mangle.c
 9571726f404473aa9c0249e92512844d  gcc/java/win32-host.c
 ba23c462cffc03660fd11fb0c4392c4c  gcc/java/zextract.c
 9c0b0201efef1378fbce54f5bd65c98e  gcc/java/zipfile.h
-03b9495809742f845dbb701be808117d  gcc/jump.c
+04bc2610d2882a25566cffd5f43652a4  gcc/jump.c
 1ec3b83a546f9030158a6466675214f6  gcc/langhooks-def.h
 db9b7dec34f0a81ec5a37dbb74f862a9  gcc/langhooks.c
 40cb75b6a10a6d71bc4d62aeaef5cc97  gcc/langhooks.h
@@ -4847,27 +4847,27 @@ ec482357a36adb888741b89a43153c39  gcc/loop-iv.c
 79dd38b99debfd69e23f15ddaac4d137  gcc/loop-unswitch.c
 b8ec1125f50fd732ec79e25188b65195  gcc/lower-subreg.c
 ea528889eab563f14e1de595d2accbea  gcc/lower-subreg.h
-6fd7ed5c4092b8d459d6d9d659761a7f  gcc/lra-assigns.c
+b9860ff82ef33940e930f64ab0510047  gcc/lra-assigns.c
 dc1627ac98262eabf9f97f3174ae4d9b  gcc/lra-coalesce.c
-cb160d6a1bb8460086950e9a9c45aeec  gcc/lra-constraints.c
+6736fbd4359e7676b43e3d3c85d8b92b  gcc/lra-constraints.c
 13d0b61525b9064a61d09f25fd0ad388  gcc/lra-eliminations.c
-d5b9621dcfe0fc393166d83f0746508f  gcc/lra-int.h
-b739e070bd2225a3a9caa382b77fe577  gcc/lra-lives.c
+25b88bf534a0196029e70f7953cea62f  gcc/lra-int.h
+ac52e0eaa11de3ffc26b55f5002b3828  gcc/lra-lives.c
 ca992aec926a40acb7ddb9ca411175f9  gcc/lra-spills.c
-e8ad94be0a7a3338d975f2ef5e7ab25f  gcc/lra.c
+bb7963c9aa7ee8196d9b7a504761270a  gcc/lra.c
 8a02643bd11309034d513b3315e53eee  gcc/lra.h
-b7d7815a1191eada183d2581eec744f1  gcc/lto-cgraph.c
+97b25c096e126eba5737c21eb89013df  gcc/lto-cgraph.c
 5b0fafadc24a85030952a846f121cae1  gcc/lto-compress.c
 c98b65c0d14f2e10566c30a9d19bfe08  gcc/lto-compress.h
 f6df3e8bdd1544526a9063ecaa5262a2  gcc/lto-opts.c
 1ad7c612bb12a8205345f45c9902dbff  gcc/lto-section-in.c
 4ef9318ae61cbd95ceba4d21ac1dc3bc  gcc/lto-section-out.c
 9d90309ed38ceafd2737c415ab3b73b7  gcc/lto-streamer-in.c
-ea8d2ffccf123ebf6db13d32c103eb3d  gcc/lto-streamer-out.c
+9db302c008730a42387844715ebb6119  gcc/lto-streamer-out.c
 81d24bca19f31cd5f0e863be0155267b  gcc/lto-streamer.c
 b6667b25d54cd3d347edba40e635a6f8  gcc/lto-streamer.h
 b22d02e83c5f71264232ba966fa80333  gcc/lto-wrapper.c
-ff5158e3f8063f2913ed723ca5596bc7  gcc/lto/ChangeLog
+11e0cc63d2ba1a321706b6522674d469  gcc/lto/ChangeLog
 bd46eeecd1e05c40c9228f70c479cb8b  gcc/lto/Make-lang.in
 02974c5a3053c08f1c7046c3c00f237e  gcc/lto/common.c
 d2a23372f33fc6333deb5309623e859d  gcc/lto/common.h
@@ -4890,7 +4890,7 @@ fcc2286edf21da424cd748f78bab8beb  gcc/main.c
 c105259690227bdba523ebbdb6785a23  gcc/mode-classes.def
 5990f0f03ab20c63f205f98103605d90  gcc/mode-switching.c
 ea3034ca83cb71b140bd50490e453acb  gcc/modulo-sched.c
-20cfeea2604b837c31cc611c35b028c0  gcc/objc/ChangeLog
+4969054642a1931e21690290572c9057  gcc/objc/ChangeLog
 f7d80205bd69247c50937b75822d6bd9  gcc/objc/Make-lang.in
 9e4f3a7afe892a3c94dacd501fa3b35f  gcc/objc/config-lang.in
 f4d88f51dbafbe757f45be85d78212b3  gcc/objc/lang-specs.h
@@ -4909,7 +4909,7 @@ c122edc5c6b17b4d321a60351edeafed  gcc/objc/objc-runtime-hooks.h
 ef6e827e622bc98f856c61b276dc8c64  gcc/objc/objc-runtime-shared-support.c
 dab6095a59a77d76a9ffdf45011ed784  gcc/objc/objc-runtime-shared-support.h
 a20e652c78591a316ce03a188632848f  gcc/objc/objc-tree.def
-f734d5e0b0cc22ab07dab6ef2f4c2a81  gcc/objcp/ChangeLog
+ccad4d66b11f98c07185d6bb9ec39ea8  gcc/objcp/ChangeLog
 79e09c916d955993dc8964962930f661  gcc/objcp/Make-lang.in
 e75a1a94a911654e611dc33cc33ed861  gcc/objcp/config-lang.in
 d551c7316da761fc633ce118cc2b5e8e  gcc/objcp/lang-specs.h
@@ -4919,7 +4919,7 @@ f1fe0e2522617705fd8c3550c0e11716  gcc/objcp/objcp-decl.h
 b287f66d35995315cca62a202c60bb74  gcc/omega.c
 010649dbdbf5e49817e4ea9f867a7bff  gcc/omega.h
 21429c2e0fbb11feafa4b0713ffd0458  gcc/omp-builtins.def
-302bc96c6c52737141d1cce2fba8496d  gcc/omp-low.c
+8e1de1063d2858a43c4310582c99c6ec  gcc/omp-low.c
 768117c1b005da4325bccda2b1aafbf8  gcc/omp-low.h
 f1316591a0b9cca13acbe19ecbc3bbc2  gcc/opt-functions.awk
 dea8fbe4f187428f3ca66daeae92f165  gcc/opt-gather.awk
@@ -4946,7 +4946,7 @@ b61dc6bbf55ac62d93ddeaa57e1034d7  gcc/pass_manager.h
 1e36a92344845ad1cb58222eea33d560  gcc/plugin.c
 e68ff8352334b5b009a28b53fb9284ca  gcc/plugin.def
 c26393f8f5ea723bfcc15bf50ee1cc7d  gcc/plugin.h
-a4c44767fb82f0a15f9d06262bf888b4  gcc/po/ChangeLog
+562221ef9f470f41deb09813fc583761  gcc/po/ChangeLog
 75ba3ed7c2ea3070333b11ced79b1cc8  gcc/po/EXCLUDES
 1da2375d1cb67532f3330921d29cd450  gcc/po/be.gmo
 ef9de679afafaa38517caa5a594e771a  gcc/po/be.po
@@ -5010,9 +5010,9 @@ d6398280803037ea77a06b62fe48cea6  gcc/real.c
 d869921e527aaf5b3eaad357e63dcb90  gcc/real.h
 966f1fa5bdd85c1d49db5506a32c2a4e  gcc/realmpfr.c
 0862d16c511514fc4b9419fe8d2249fb  gcc/realmpfr.h
-6e2559b51d836fa67f84d7a93a22ed41  gcc/recog.c
+1969e6b3f9606cf59d6803ebdeeea8b7  gcc/recog.c
 f8e8e735b5e2da8b23f855f10cf967d9  gcc/recog.h
-24eb88f29672c729eeb9c8cd44b47709  gcc/ree.c
+a7c2d42be508b666cb683ccb2e8e58eb  gcc/ree.c
 705e5e05416b08906b765349ad349138  gcc/reg-notes.def
 72ea708b4dc70ce4438d69d2319a2fde  gcc/reg-stack.c
 21a40ba85ba3def0fe8214bb1a9ea714  gcc/regcprop.c
@@ -5022,7 +5022,7 @@ f8e8e735b5e2da8b23f855f10cf967d9  gcc/recog.h
 6173b8d726e3ab726c07e15a9417d825  gcc/regs.h
 eaa6a4ec84eb932d1326ad1343c8ed44  gcc/regset.h
 0e3689391f135d1ab2a9a04f4d91fb28  gcc/regstat.c
-0f25606a1cb3b70cd72be5bfdcbf64da  gcc/reload.c
+0bfbf0901c4118d13bbd2df4aaf5961f  gcc/reload.c
 a1dbe3dde6089ab6e6df81130cc0bf63  gcc/reload.h
 76f8b894943223b53cb4b500ec563f52  gcc/reload1.c
 7347cb3c4631ae4709a5affe5f9be5fe  gcc/reorg.c
@@ -5033,7 +5033,7 @@ dd4c661ae261b4240b370a2b06f8f12e  gcc/resource.h
 d0f9d176431b9a2c4d06938ff6b2c83c  gcc/rtl.c
 9ee213d339a30933e8f316ec93f71c11  gcc/rtl.def
 0cf29ec103ed74bf39a2dd6c6ad1829e  gcc/rtl.h
-d51ef4879d7e10960cf2a50abec72542  gcc/rtlanal.c
+0493d037d5c30f2152fc80466f49f374  gcc/rtlanal.c
 63f7431679d7fc87bfcb2115ca9d419c  gcc/rtlhooks-def.h
 dd994161333506c3850fd306ebcc9ef8  gcc/rtlhooks.c
 66ee8acc9125b842ae0a250df2a8515f  gcc/sanitizer.def
@@ -5054,7 +5054,7 @@ cf60677a76338769fb2db05176673243  gcc/sel-sched.c
 e7143a8fa4f763d1920eae298c76e3d6  gcc/sel-sched.h
 83094f39d279413504e825ccebab155e  gcc/sese.c
 92f95d0378517da9570a95f89c70ded6  gcc/sese.h
-d9b70098914e9a203c54fea598a40c0b  gcc/simplify-rtx.c
+4d6174038f600f5648414cb25a3d5af8  gcc/simplify-rtx.c
 0700b1675017ceaf1f02773fdec3dc1d  gcc/sparseset.c
 cb41cbe208ad8a0570be480c3d01abd8  gcc/sparseset.h
 8fa965015aa659defa9ca1187eae1736  gcc/sreal.c
@@ -5073,7 +5073,7 @@ c0cd2e2c2904476803fb2df9600d2865  gcc/streamer-hooks.c
 373962dfad4478b106fdeaac9d95cdf9  gcc/streamer-hooks.h
 1fe7e856e0066010e5281b160ab86b16  gcc/stringpool.c
 aeb9c7847a29ddd73aaba4fe6916c482  gcc/stringpool.h
-4442eb1dcb11e9e35122e80ccfadd6c2  gcc/symtab.c
+4aa3f1f3f3f6fdddd541d05c63f2b0c3  gcc/symtab.c
 fb2c182d3b4fe1a83d730402d2dd93f1  gcc/sync-builtins.def
 39bafcedb9b2dcef106d2a0338d4f027  gcc/system.h
 6f7212d96dbe608531046cd09ce61d7c  gcc/target-def.h
@@ -5084,7 +5084,7 @@ dd5e75577e30df65977e84f24fbfa8f2  gcc/target-globals.c
 5096a6cda7c1340a6843c4eee249eb97  gcc/target.h
 be5e3bfa678dd16872775c30f8c43ce4  gcc/targhooks.c
 8e6bbb74d18a1c0dc21dee6ba057882f  gcc/targhooks.h
-d5130809a2c6c2d93d274799e5982582  gcc/testsuite/ChangeLog
+9b459ed87ef7037cd682db7f8493b91c  gcc/testsuite/ChangeLog
 862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
 029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
 13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
@@ -8022,6 +8022,7 @@ aae6611cdfa9d295d22870f8c9222f69  gcc/testsuite/c-c++-common/gomp/pr59917-2.c
 648e6282c96355072c109ed1a82ea4d7  gcc/testsuite/c-c++-common/gomp/pr60823-1.c
 5724f24c4f1988cd1539ef0c5e147b98  gcc/testsuite/c-c++-common/gomp/pr60823-2.c
 defbe62797ed1363de67a60914b29aa7  gcc/testsuite/c-c++-common/gomp/pr60823-3.c
+83d8f65d36e02aa02588d7b997bdd269  gcc/testsuite/c-c++-common/gomp/pr60823-4.c
 1610228a9a46a0984cc32fd91d652f9f  gcc/testsuite/c-c++-common/gomp/pr61200.c
 33408e801b735ed22ebf0d36f8fd7554  gcc/testsuite/c-c++-common/gomp/pr61486-1.c
 8e7463bc9420fce6b1a1443c77ad841e  gcc/testsuite/c-c++-common/gomp/pr61486-2.c
@@ -8074,8 +8075,13 @@ caf425d291c32e42708e1312d4b4b7c8  gcc/testsuite/c-c++-common/pr54486.c
 f1d943c48a18ca5c666d26543205d144  gcc/testsuite/c-c++-common/pr55619.c
 3db0ead60e4a73b927872aff202102be  gcc/testsuite/c-c++-common/pr55771.c
 0c7d9dbc79d0449ecbce0d3cf963a080  gcc/testsuite/c-c++-common/pr56302.c
+980c32b66e77243a8069758c0064f691  gcc/testsuite/c-c++-common/pr56493.c
 a83a3dfeb8c2e989fe3570117b3eacd4  gcc/testsuite/c-c++-common/pr56566.c
 a1cf9769412d39f47e2c2ee4b650e4b2  gcc/testsuite/c-c++-common/pr56607.c
+d38efef14d0ab2c49efc359e81d86d1c  gcc/testsuite/c-c++-common/pr57653-2.c
+68b329da9893e34099c7d8ad5cb9c940  gcc/testsuite/c-c++-common/pr57653-2.h
+96f621870e8a9d49a5339944dcf7beca  gcc/testsuite/c-c++-common/pr57653.c
+ac18dadba9a9fbd1c44d112676b2c95f  gcc/testsuite/c-c++-common/pr57653.h
 1dbf5dab92dcd33a33247623cbc442a9  gcc/testsuite/c-c++-common/pr57793.c
 d0459687ccc6ed75e4653c90138cb075  gcc/testsuite/c-c++-common/pr58346-1.c
 92835f75311ea0ac571bc0bcc390034b  gcc/testsuite/c-c++-common/pr58346-2.c
@@ -8086,6 +8092,7 @@ b21baa52e383c5709d3550fa0e5b0ab5  gcc/testsuite/c-c++-common/pr59223.c
 9f0da9b08a8d5e519fd58b254bd3155c  gcc/testsuite/c-c++-common/pr59280.c
 f3125845677b94c2dee85b2ae8c05868  gcc/testsuite/c-c++-common/pr60101.c
 ab61337b42c3bf4f5a41d815a9fcd323  gcc/testsuite/c-c++-common/pr60689.c
+3db5d6e67944ed357e5152e1f1d72db0  gcc/testsuite/c-c++-common/pr61553.c
 d6a020309f3771e59e357ca318d8b648  gcc/testsuite/c-c++-common/pr61741.c
 b0ba836310044e7b419ef679f0b48d6f  gcc/testsuite/c-c++-common/raw-string-1.c
 554e7071d2525351de28445762633866  gcc/testsuite/c-c++-common/raw-string-10.c
@@ -8196,24 +8203,25 @@ a9f6c151f3dd058dabd6e497a903829e  gcc/testsuite/c-c++-common/torture/vshuf-v8hi.
 295940b5fce4f89dfc192e8f629a64bf  gcc/testsuite/c-c++-common/torture/vshuf-v8qi.c
 d5ae22105cc01bc1f879fa77bcd076ef  gcc/testsuite/c-c++-common/torture/vshuf-v8si.c
 3eae9ec314e83bb8e4401b5ce76acd5e  gcc/testsuite/c-c++-common/transparent-union-1.c
-560d472efa741e08ce3d85b29f70e8fa  gcc/testsuite/c-c++-common/tsan/atomic_stack.c
-a0dac5776114400da08c521651b4fb1e  gcc/testsuite/c-c++-common/tsan/fd_pipe_race.c
+93595e9c3ce3c89baabdcecb5e24757c  gcc/testsuite/c-c++-common/tsan/atomic_stack.c
+6374856da2d117eb7fa13572b3bf6de0  gcc/testsuite/c-c++-common/tsan/fd_pipe_race.c
 da953592b5918925210396862fda7319  gcc/testsuite/c-c++-common/tsan/free_race.c
 5578b49fb40ddbd6c66d77de07144fba  gcc/testsuite/c-c++-common/tsan/free_race2.c
-202d8cecd708050d9772014c12023849  gcc/testsuite/c-c++-common/tsan/mutexset1.c
-2e2ef6e9e26a0a7468da0f7caaed8891  gcc/testsuite/c-c++-common/tsan/race_on_barrier.c
+f53f349f75cd96601890998ac799e162  gcc/testsuite/c-c++-common/tsan/mutexset1.c
+9651a827618e2399b209ed88d7c818cb  gcc/testsuite/c-c++-common/tsan/race_on_barrier.c
 c17ef9001f4d2a242d6818763dfa63ff  gcc/testsuite/c-c++-common/tsan/race_on_barrier2.c
-d0167973ec4b21e8c9a8b29242f1ef0a  gcc/testsuite/c-c++-common/tsan/race_on_mutex.c
-fea2a481e274cc1d35a1e9241b6cf547  gcc/testsuite/c-c++-common/tsan/race_on_mutex2.c
-7c325fcd8db68a3520372ee68d739477  gcc/testsuite/c-c++-common/tsan/simple_race.c
-14f81ffd19f9f7c7376c99bd5a78033a  gcc/testsuite/c-c++-common/tsan/simple_stack.c
-ae4d9571b79edc4da8f130ab7bb5d036  gcc/testsuite/c-c++-common/tsan/sleep_sync.c
+e67a39a2873754e03375bb55c452b32a  gcc/testsuite/c-c++-common/tsan/race_on_mutex.c
+0ca9b01051b9780acc43786d24c00a88  gcc/testsuite/c-c++-common/tsan/race_on_mutex2.c
+06947c1efb0e54a370c6a8645033c300  gcc/testsuite/c-c++-common/tsan/simple_race.c
+ca950930999a7ccb3d7502dc3da32ba2  gcc/testsuite/c-c++-common/tsan/simple_stack.c
+734f166f089aea1c431eeda80261d49e  gcc/testsuite/c-c++-common/tsan/sleep_sync.c
 cecb74f7abd1e457964f550690c09fa5  gcc/testsuite/c-c++-common/tsan/thread_leak.c
 51f76be6c4f19fa936f07a8bd2649930  gcc/testsuite/c-c++-common/tsan/thread_leak1.c
 77a983da2ab70bf4af117b710ba01539  gcc/testsuite/c-c++-common/tsan/thread_leak2.c
-6f2a5a38f36b1f1048cd733c8a4a0314  gcc/testsuite/c-c++-common/tsan/tiny_race.c
-910e844ee3fc2a108d43e5e44dc6e8f7  gcc/testsuite/c-c++-common/tsan/tls_race.c
-ee7b2027e1972c7fb4bb8fb714b9f198  gcc/testsuite/c-c++-common/tsan/write_in_reader_lock.c
+2a1cc14372eafa2d784920c8669e47db  gcc/testsuite/c-c++-common/tsan/tiny_race.c
+75b79548e5a2ab6acf3a7d2bb32e6f36  gcc/testsuite/c-c++-common/tsan/tls_race.c
+1048d0e6a3ca80d3b4720a445847e7cb  gcc/testsuite/c-c++-common/tsan/tsan_barrier.h
+3e2de6169eb53b32bfe7a21d0500e2f7  gcc/testsuite/c-c++-common/tsan/write_in_reader_lock.c
 142f93192a848e1ae775dbab610799fa  gcc/testsuite/c-c++-common/ubsan/attrib-1.c
 70def46beb46626b6c3e1f45c5df351a  gcc/testsuite/c-c++-common/ubsan/const-char-1.c
 1b7d27b069201b0a663821b3643c112b  gcc/testsuite/c-c++-common/ubsan/const-expr-1.c
@@ -8247,6 +8255,8 @@ c2e411889fad90193e75ca6bdb8e1166  gcc/testsuite/c-c++-common/ubsan/null-9.c
 87eeabe50a0bf530dc539f592c033424  gcc/testsuite/c-c++-common/ubsan/overflow-negate-2.c
 0f0190866d664fd91766509283fadfd3  gcc/testsuite/c-c++-common/ubsan/overflow-sub-1.c
 2156f8764b0c21c21c7aa30e60fcb159  gcc/testsuite/c-c++-common/ubsan/overflow-sub-2.c
+07bd365729762ed921bb1e56769ec361  gcc/testsuite/c-c++-common/ubsan/overflow-sub-3.c
+489c53c28c6654ed32cb7d9a4ca98e67  gcc/testsuite/c-c++-common/ubsan/pr56917.c
 e229f42e8220b3ff0c068855f57a5b9b  gcc/testsuite/c-c++-common/ubsan/pr58443-1.c
 836a898e53e4feb76cb1fd93c367d0fd  gcc/testsuite/c-c++-common/ubsan/pr58443-2.c
 29b14745df2ec9f13eceac0200029b58  gcc/testsuite/c-c++-common/ubsan/pr58443-3.c
@@ -8257,6 +8267,7 @@ baf9fd286d3f82ce1b394e199e1e5b7f  gcc/testsuite/c-c++-common/ubsan/pr59503.c
 41d95592422383de6b116f48c6eb01e4  gcc/testsuite/c-c++-common/ubsan/pr60613-1.c
 5df3eb7b32266d252474fe3427206449  gcc/testsuite/c-c++-common/ubsan/pr60613-2.c
 8c53857ca27805b0b44b03047d99c11c  gcc/testsuite/c-c++-common/ubsan/pr60636.c
+e448ddddec48e19348734e1bc0fa2581  gcc/testsuite/c-c++-common/ubsan/pr65984.c
 471a642475fa437efd3422091deebfaa  gcc/testsuite/c-c++-common/ubsan/save-expr-1.c
 044faaef76bb17bfc9f9a33e6a27325a  gcc/testsuite/c-c++-common/ubsan/save-expr-2.c
 82afee71f72fbf21412e2924f47ea4b8  gcc/testsuite/c-c++-common/ubsan/save-expr-3.c
@@ -8269,6 +8280,7 @@ ea803ece91db5c79fe57e33169338a05  gcc/testsuite/c-c++-common/ubsan/shift-5.c
 26b3321b2b898effaa078fb15f8d6c24  gcc/testsuite/c-c++-common/ubsan/shift-6.c
 bbe0978263ca9b069d3fb387b8d0c2f2  gcc/testsuite/c-c++-common/ubsan/typedef-1.c
 cd0ba7a0d7d510d03ff09d9d36d17aa1  gcc/testsuite/c-c++-common/ubsan/undefined-1.c
+169408be05e72cee9b50302f49b52962  gcc/testsuite/c-c++-common/ubsan/undefined-2.c
 db7528ccef566875970f0f023696a1b6  gcc/testsuite/c-c++-common/ubsan/unreachable-1.c
 bc5a77074dd571cb3828de8e54b57d16  gcc/testsuite/c-c++-common/ubsan/vla-1.c
 2aa067f1e73956882892a7c12dc59d37  gcc/testsuite/c-c++-common/ubsan/vla-2.c
@@ -8307,7 +8319,7 @@ db5464dba2092bf04aff17090aca0447  gcc/testsuite/config/default.exp
 58dc5a5cf5db074f93f28ff8913eed25  gcc/testsuite/g++.dg/20090107-1.C
 e530347ad81371c3d469f2a1d1245735  gcc/testsuite/g++.dg/20090121-1.C
 87eb53fddc98d992e4cade29a1852614  gcc/testsuite/g++.dg/README
-06bddc1566a04d1fb7914b4af1df35f8  gcc/testsuite/g++.dg/abi/aarch64_guard1.C
+2773749da937f7293dac36312c108a2c  gcc/testsuite/g++.dg/abi/aarch64_guard1.C
 dadf07953fc49dff2fe36c2a384b6425  gcc/testsuite/g++.dg/abi/abi-tag1.C
 064eba36c22e1b67e37a8c95a5698520  gcc/testsuite/g++.dg/abi/abi-tag2.C
 180f41404374f95826fea78a1e0d3ab2  gcc/testsuite/g++.dg/abi/abi-tag3.C
@@ -8319,6 +8331,7 @@ c7c251f16058a4d4f1db8e0df28385ff  gcc/testsuite/g++.dg/abi/align1.C
 73057836297242b12d6b3c97ce7c525a  gcc/testsuite/g++.dg/abi/anon1.C
 16718b05393588b1f91bbdb41b3c0b59  gcc/testsuite/g++.dg/abi/anon2.C
 156adf97ebf42af14554e7064011779f  gcc/testsuite/g++.dg/abi/anon3.C
+0347f2178e5e23ce57e71d0e23c56c10  gcc/testsuite/g++.dg/abi/anon4.C
 770a1857da6a05380e26eabb7f0ecb92  gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C
 cb4ad686f7564a8666256212398d911d  gcc/testsuite/g++.dg/abi/arm_cxa_vec2.C
 1f9e050ee7f8c952e5a9e739fdf898c6  gcc/testsuite/g++.dg/abi/arm_rtti1.C
@@ -8833,6 +8846,7 @@ f975ac9998c2bbb6bd93859a77635b15  gcc/testsuite/g++.dg/cpp0x/alias-decl-38.C
 dbf5ebe6ff1680117cb9bea10ed1598e  gcc/testsuite/g++.dg/cpp0x/alias-decl-4.C
 46f21becb34daa94cd3f0a39aae7aaeb  gcc/testsuite/g++.dg/cpp0x/alias-decl-40.C
 99499efe942d19fb669e10a40ff36723  gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
+3438514f63b7f3fb597fcddca16cd9fc  gcc/testsuite/g++.dg/cpp0x/alias-decl-44.C
 e5fa8115f1c449f56d10e259c799b933  gcc/testsuite/g++.dg/cpp0x/alias-decl-5.C
 a16b0e12dce894e9bc097e3fbad8787d  gcc/testsuite/g++.dg/cpp0x/alias-decl-6.C
 816dbf372a71890f9515376534ec312b  gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C
@@ -8913,6 +8927,7 @@ f89607f18b0bf238690c5efba99e738c  gcc/testsuite/g++.dg/cpp0x/constexpr-55432.C
 11393018085e26e2369482c620b5f870  gcc/testsuite/g++.dg/cpp0x/constexpr-55708.C
 8e53de6c9b1d404bae439167b0aedfa6  gcc/testsuite/g++.dg/cpp0x/constexpr-56302.C
 7af50e5fd6105967ed29406e175316af  gcc/testsuite/g++.dg/cpp0x/constexpr-63241.C
+b78047226f0990dcef2a33c9ae385550  gcc/testsuite/g++.dg/cpp0x/constexpr-63265.C
 de3d6255780c29f63df3f8d96932bd39  gcc/testsuite/g++.dg/cpp0x/constexpr-98.C
 1bc1c995533b047ed8df6f6f24905cd1  gcc/testsuite/g++.dg/cpp0x/constexpr-99.C
 785343af0b3355420f795309fbe121fb  gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C
@@ -9063,6 +9078,7 @@ e29b90d7c0ad7662446a6055addb6315  gcc/testsuite/g++.dg/cpp0x/constexpr-potential
 fa7ac28bbeb7f5a520d7f5c5847dedff  gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem.C
 02a38a7d530d4818a0d8dbbb4225efd9  gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem2.C
 4d49e9b974a931e39b282bff1452e17a  gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem3.C
+3123b806108a774709cd5a02856fa2a3  gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem4.C
 2e9d0ef04a28487562d30ab99afa37a2  gcc/testsuite/g++.dg/cpp0x/constexpr-ptrsub.C
 c893e2388f9acef593b874b1e6b02071  gcc/testsuite/g++.dg/cpp0x/constexpr-pure.C
 3d462eb6b34feb0c1cf9349c9e6e976c  gcc/testsuite/g++.dg/cpp0x/constexpr-recursion.C
@@ -9249,6 +9265,7 @@ cbe0ba147a1df371f25c8ab8623476ef  gcc/testsuite/g++.dg/cpp0x/defaulted8.C
 90884435b94cef298d6e8af2757a18b1  gcc/testsuite/g++.dg/cpp0x/deleted1.C
 d677b798550124a88e6345300f30828a  gcc/testsuite/g++.dg/cpp0x/deleted2.C
 a9129f4cd34b93dbe745e3849ea1c38a  gcc/testsuite/g++.dg/cpp0x/deleted3.C
+cfa749d587e9ffe675ffde4ecd146469  gcc/testsuite/g++.dg/cpp0x/deleted9.C
 ca26ad5278a2ac2347db2c2a451bdddf  gcc/testsuite/g++.dg/cpp0x/dependent1.C
 e111c1f4739203185f9d6294ebadcc5f  gcc/testsuite/g++.dg/cpp0x/diag1.C
 d4426133b81413ad1d3051caa8d7c24a  gcc/testsuite/g++.dg/cpp0x/dyncast1.C
@@ -9522,6 +9539,7 @@ f4e51372ebce70d4e70fe4c30c9c5df3  gcc/testsuite/g++.dg/cpp0x/initlist80.C
 3df81dd8acdfbccf6fba7648b64b32c5  gcc/testsuite/g++.dg/cpp0x/initlist82.C
 e19590cab587582486b601d5b4135a2e  gcc/testsuite/g++.dg/cpp0x/initlist84.C
 ce1c3896ddd664d6cbfa86d425a7cf39  gcc/testsuite/g++.dg/cpp0x/initlist86.C
+bd9a289d0125621da4bc499b31e3f4dc  gcc/testsuite/g++.dg/cpp0x/initlist89.C
 de6fe33f85a45970df99586b8f8f48c8  gcc/testsuite/g++.dg/cpp0x/initlist9.C
 2bd94659e18571416ec707555f61b80d  gcc/testsuite/g++.dg/cpp0x/inline-ns1.C
 3e2f011d130eb1b8b8c5b45e6f650dfb  gcc/testsuite/g++.dg/cpp0x/inline-ns2.C
@@ -9561,6 +9579,7 @@ f84ddfe5534d65a28836f3e1f7f92bbe  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy.
 8e8636849d06c71cef7fbe0973b2ace5  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctors.C
 620c51f35ce9293367e1ae8b3038f83a  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-debug.C
 bd42f07ac334e180e5cae305cab86ea8  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-decltype1.C
+3ad56243aecddd505746acfd0489c7b7  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-decltype2.C
 f6c210c1c7e7dd66df36d8ef7876d028  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg.C
 e0fcc12ea86ca07e002f0dd4599d71b4  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg2.C
 9edc8f5532794fc604ffd377c6d84b82  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-neg.C
@@ -9588,7 +9607,7 @@ d010708ff9dfabefb31e6ac59b3c7b96  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice10
 d2f0042eab3739e1bd09f52de25d0071  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice11.C
 a2ff0e65a2311577d1f595af7795c694  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice12.C
 ae815f7eb31502fd783765f80ffa3e14  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C
-ef1431d6990eca02aea076608b71dbe1  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice3.C
+1b1ed728a99b1c92954976192612eb51  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice3.C
 47226bea0ac5dc3c286fd8fe05473a80  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice4.C
 e1f400fc51cc1aaffff974a4b7d5faac  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice5.C
 f2b207bd10e310348b2b28879e217fd4  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C
@@ -9792,7 +9811,7 @@ e1598f2c9f261104495d9e7d921f8264  gcc/testsuite/g++.dg/cpp0x/overload.C
 15b4148c92763edcf90b0fe0cb6f7742  gcc/testsuite/g++.dg/cpp0x/overload2.C
 2f6751fd40a7a1a3b10c8f3dc4fbc55d  gcc/testsuite/g++.dg/cpp0x/overload3.C
 0f2bb9eb8737886ed5d48f3cd383ee43  gcc/testsuite/g++.dg/cpp0x/overloadn.C
-6100e2ec12da18b9cf85addbe5f50a30  gcc/testsuite/g++.dg/cpp0x/override1.C
+400fef7f96afa94688439836069ebdd4  gcc/testsuite/g++.dg/cpp0x/override1.C
 a950814416d6ad7c214b0f29a4e57f54  gcc/testsuite/g++.dg/cpp0x/override2.C
 d2a1963e44488193e2d5ae183c548b2d  gcc/testsuite/g++.dg/cpp0x/override3.C
 ec3fccada021f17376f5255d71d5545b  gcc/testsuite/g++.dg/cpp0x/override4.C
@@ -9911,6 +9930,7 @@ e25aa6f18faad387b7f1ade3529476a6  gcc/testsuite/g++.dg/cpp0x/ref-qual11.C
 759a26dd15a061d3f5a982b5eb65098b  gcc/testsuite/g++.dg/cpp0x/ref-qual13.C
 bf679e1b75877f28dc4d57155f61bcb1  gcc/testsuite/g++.dg/cpp0x/ref-qual14.C
 baf0dc0526b9c7116fa5e5cbccbe2286  gcc/testsuite/g++.dg/cpp0x/ref-qual15.C
+0a3150042efce88e411aee61e7fe784f  gcc/testsuite/g++.dg/cpp0x/ref-qual16.C
 17d77d3ef6cc0e1cfd53228f15a40017  gcc/testsuite/g++.dg/cpp0x/ref-qual2.C
 68b27ec15231994ad0330625660d2720  gcc/testsuite/g++.dg/cpp0x/ref-qual3.C
 1bb06529f586a3e77263290dd006534e  gcc/testsuite/g++.dg/cpp0x/ref-qual4.C
@@ -9921,6 +9941,7 @@ c288331543b30d300aa6764b7ae67cda  gcc/testsuite/g++.dg/cpp0x/ref-qual7.C
 ed1433ae38ea49612a71ea6123c29d74  gcc/testsuite/g++.dg/cpp0x/ref-qual9.C
 3d3c78a78484238b76f840d346c73307  gcc/testsuite/g++.dg/cpp0x/reference_collapsing.C
 c64ae67d31b051e49d0eb8f2c33f4819  gcc/testsuite/g++.dg/cpp0x/reinterpret_cast1.C
+2d33d6463b23da791a795f21e50b808a  gcc/testsuite/g++.dg/cpp0x/rv-array1.C
 9122229630112e85dde4be74e27fcb88  gcc/testsuite/g++.dg/cpp0x/rv-bitfield.C
 1e9966d28717f5fb799ff5c2afa3c83b  gcc/testsuite/g++.dg/cpp0x/rv-bitfield2.C
 82da21d14a2076c80f60b0fe3bae2177  gcc/testsuite/g++.dg/cpp0x/rv-cast.C
@@ -10209,6 +10230,7 @@ ef6cd86993fd9e98b5c841e854f1e291  gcc/testsuite/g++.dg/cpp0x/variadic16.C
 5348f57a43bc1324c15c9e5945ba3ebe  gcc/testsuite/g++.dg/cpp0x/variadic160.C
 50631678d1b06531a77d9034af0b9e0e  gcc/testsuite/g++.dg/cpp0x/variadic161.C
 ac35a678008d70435c51c525cbbfce5b  gcc/testsuite/g++.dg/cpp0x/variadic162.C
+dde7a4f94fd2f85ccf0ba3cc25781017  gcc/testsuite/g++.dg/cpp0x/variadic165.C
 3bff3422f4558e688cb85c201d29da39  gcc/testsuite/g++.dg/cpp0x/variadic17.C
 e7b3b347202f88043f677ea7ce8e4e18  gcc/testsuite/g++.dg/cpp0x/variadic18.C
 b6eb5a5a2dea08c17e47320efabe05df  gcc/testsuite/g++.dg/cpp0x/variadic19.C
@@ -10356,6 +10378,7 @@ d86f18db0d363e1f9784cc369f534f23  gcc/testsuite/g++.dg/cpp1y/auto-fn21.C
 58592b54ea5ef6014f54fc44ffdf969d  gcc/testsuite/g++.dg/cpp1y/auto-fn23.C
 ae16147dab8acfef65562d82256ca2f0  gcc/testsuite/g++.dg/cpp1y/auto-fn24.C
 602c663db59913a3fa0eb556b992a2db  gcc/testsuite/g++.dg/cpp1y/auto-fn25.C
+22d26aa829e9d1e040e2d9a1bc38c477  gcc/testsuite/g++.dg/cpp1y/auto-fn26.C
 30b306acc48dff89d277028a85b62352  gcc/testsuite/g++.dg/cpp1y/auto-fn3.C
 96b5907ebefbcb92de879bf537dfc60d  gcc/testsuite/g++.dg/cpp1y/auto-fn4.C
 3961bf1d120b0d1b7e4a345e28b0e000  gcc/testsuite/g++.dg/cpp1y/auto-fn5.C
@@ -11481,6 +11504,7 @@ ed8a6c94f1bc2e70a324d73a77190040  gcc/testsuite/g++.dg/gcov/gcov-1.C
 8db03c21164b6fdca1cc2722dde24a47  gcc/testsuite/g++.dg/gcov/gcov-12.C
 7a1698611acb707485b8f5e55a748337  gcc/testsuite/g++.dg/gcov/gcov-13.C
 8484b7bb87f66f7633960b70b845b73f  gcc/testsuite/g++.dg/gcov/gcov-14.C
+56dbe86604b8680b3d2c3f63fd217d0a  gcc/testsuite/g++.dg/gcov/gcov-15.C
 afab866e59f46409fb68aa64174f3acf  gcc/testsuite/g++.dg/gcov/gcov-2.C
 0e241a16c3faf2f0c387bd2978d2b824  gcc/testsuite/g++.dg/gcov/gcov-3.C
 2c83bff9a3f14aa6fc5d7755bf82c9b6  gcc/testsuite/g++.dg/gcov/gcov-3.h
@@ -11672,6 +11696,7 @@ b057b654090f4695277d8c1866894100  gcc/testsuite/g++.dg/gomp/tpl-for-3.C
 d792b65d702f44bdb121e6038e3b0780  gcc/testsuite/g++.dg/gomp/tpl-master-1.C
 3fe09daf99ddda4ea1fef59c61e34f47  gcc/testsuite/g++.dg/gomp/tpl-parallel-1.C
 d647e97b4f8477aa549f4f2f6eb6daa1  gcc/testsuite/g++.dg/gomp/tpl-parallel-2.C
+9e724e74b65abd98b17d7ce93dd59b9e  gcc/testsuite/g++.dg/gomp/tpl-target-update.C
 9eefc3427fb4944cb8f6e6894beed6b0  gcc/testsuite/g++.dg/gomp/udr-1.C
 d23c7fcb3b560b7b7a925d5ca6fa6100  gcc/testsuite/g++.dg/gomp/udr-2.C
 33f4fb95a7c8794ea21a28ee005fe079  gcc/testsuite/g++.dg/gomp/udr-3.C
@@ -11835,6 +11860,7 @@ b5c490c86478a50e8b4adcab75ef8c1d  gcc/testsuite/g++.dg/init/array34.C
 bd32f6af7d9d02e0682b0f754b742b73  gcc/testsuite/g++.dg/init/array35.C
 f39111fa11b0d25bd84e443cd5df726a  gcc/testsuite/g++.dg/init/array36.C
 19db4c9c603da402ed789531b2bde44e  gcc/testsuite/g++.dg/init/array37.C
+20a0a07b0a16e0d3394815c93cf1ae55  gcc/testsuite/g++.dg/init/array39.C
 dafd4fb071c88ff21250002b43675816  gcc/testsuite/g++.dg/init/array4.C
 0f2710d39e547bff2dfc21c51a8173ff  gcc/testsuite/g++.dg/init/array5.C
 12f516d0ef7088644b46185bbd83ef4d  gcc/testsuite/g++.dg/init/array6.C
@@ -12157,6 +12183,12 @@ daceb1b2f3cf167fb6e78fc2d34f2778  gcc/testsuite/g++.dg/ipa/pr61540.C
 438118cbb7d30bffc810662fe5da5b9c  gcc/testsuite/g++.dg/ipa/pr61654.C
 a64421ae505e08d8f9b8bd14a2b8da21  gcc/testsuite/g++.dg/ipa/pr62015.C
 e24fb768f0a9cba7dfd73632a0e86880  gcc/testsuite/g++.dg/ipa/pr63306.C
+89df72699f04cc90fcc5ea05980fd7ac  gcc/testsuite/g++.dg/ipa/pr63551.C
+8c5345c384d37e0ae804bdfaf9e9ec61  gcc/testsuite/g++.dg/ipa/pr63587-1.C
+7d1bb13d70ae8ed679b4f23589190589  gcc/testsuite/g++.dg/ipa/pr63587-2.C
+aaf96a63c712e53d654620b1478b7cc8  gcc/testsuite/g++.dg/ipa/pr63838.C
+04f8a0459bce64c0fd523bb0de9c9d28  gcc/testsuite/g++.dg/ipa/pr64068.C
+78158fe8f75e60ce14c95135b8b05379  gcc/testsuite/g++.dg/ipa/pr64896.C
 65b30ac9d2b3a2244e49849aaad7dd78  gcc/testsuite/g++.dg/ipa/remref-1.C
 d26e3f0899c708e0f4b2ec8427502236  gcc/testsuite/g++.dg/ipa/remref-2.C
 8a469d09a1c8b835acf9b3b8f7d8078d  gcc/testsuite/g++.dg/ipa/type-inheritance-1.C
@@ -12369,6 +12401,7 @@ e6b9eddad8d672688c883ca8af446a66  gcc/testsuite/g++.dg/lookup/using5.C
 f987ef07d14ec2f00187c4c84c596777  gcc/testsuite/g++.dg/lookup/using51.C
 c215c3d00f87b59d1c59614eaf8713ea  gcc/testsuite/g++.dg/lookup/using52.C
 0ea216615e5bbe93d1ee62a0d90ec5b5  gcc/testsuite/g++.dg/lookup/using53.C
+2c031b9dc98ae61c00b9677b6ad27297  gcc/testsuite/g++.dg/lookup/using55.C
 8db693e8a73657ac0a6ba980e910013c  gcc/testsuite/g++.dg/lookup/using6.C
 9b2f75de04724a15459525668a32458a  gcc/testsuite/g++.dg/lookup/using7.C
 05105c11218492c8a6c6943b32a316ec  gcc/testsuite/g++.dg/lookup/using8.C
@@ -12543,6 +12576,8 @@ cbee807af28f014c203c54ab80ff50a2  gcc/testsuite/g++.dg/lto/pr60150_0.C
 eb989cca62b61ae260c43eec2e863f53  gcc/testsuite/g++.dg/lto/pr60150_1.C
 bdf79008bc5e703ee7b33f7ad88035de  gcc/testsuite/g++.dg/lto/pr60567_0.C
 58886bc1f7545de2cda92d6ac053db8b  gcc/testsuite/g++.dg/lto/pr62026.C
+20886a82160a07108862475db99260c0  gcc/testsuite/g++.dg/lto/pr65193_0.C
+436147a8bec9b4a12c220fa77fe66b7a  gcc/testsuite/g++.dg/lto/pr65549_0.C
 6232508298dd20a759cf64fffbca9f5e  gcc/testsuite/g++.dg/lto/v1-plugin-api-not-supported_0.C
 80450d00a25790eac61041efe3b30bc0  gcc/testsuite/g++.dg/opt/20050511-1.C
 960bd912d3dccb44df0ecdebdfd45b44  gcc/testsuite/g++.dg/opt/alias1.C
@@ -12618,6 +12653,7 @@ eb5f705d59dfe97f6ee0739884a4d329  gcc/testsuite/g++.dg/opt/emptyunion.C
 0cc6612ad68203677bc3bffeabb3b1dc  gcc/testsuite/g++.dg/opt/enum2.C
 a46d4940a485effb55a52f27a3660542  gcc/testsuite/g++.dg/opt/expect1.C
 e8a21bcc87a675b894f8d5ad9b5b0170  gcc/testsuite/g++.dg/opt/expect2.C
+b5b63cd3c6f555a0f702d932b247aceb  gcc/testsuite/g++.dg/opt/flifetime-dse1.C
 d48bf743fe7cd2670b77dd76e8fc1714  gcc/testsuite/g++.dg/opt/float1.C
 65e3fab7de933a99f4b5f52a982ea8d1  gcc/testsuite/g++.dg/opt/fold1.C
 8bda53d5b874de63c6fb463b2e63a8f9  gcc/testsuite/g++.dg/opt/fold2.C
@@ -12875,6 +12911,7 @@ c1daf3585c63314a131cec4afb411556  gcc/testsuite/g++.dg/other/anon-union3.C
 735bc52cab8eca56a711c2c10845c981  gcc/testsuite/g++.dg/other/anon4.C
 7d476dd9937f80ce401ec66ab9274c0a  gcc/testsuite/g++.dg/other/anon5.C
 1c68df289b2577a8e2753eaf82704fed  gcc/testsuite/g++.dg/other/anon6.C
+6bdea0a90642ef923b08522ad0f6f67b  gcc/testsuite/g++.dg/other/anon7.C
 2138aca3dce7e8ea857b666c6463bc03  gcc/testsuite/g++.dg/other/arm-neon-1.C
 9d297649b5a43f6461774469f0468593  gcc/testsuite/g++.dg/other/armv7m-1.C
 ceb0c0d2e878f1b7898a912bfe02d365  gcc/testsuite/g++.dg/other/array1.C
@@ -12901,6 +12938,7 @@ b0eb29945f04721ade114ff6651768e8  gcc/testsuite/g++.dg/other/complex1.C
 cf0cdff2ec717c636d8a5441b2399c4a  gcc/testsuite/g++.dg/other/const1.C
 65c0a747dff974d4f19eda6304e002f9  gcc/testsuite/g++.dg/other/const2.C
 0f31e772471912bf15f7b8f02c2177e6  gcc/testsuite/g++.dg/other/const3.C
+cf1d166d7294daaa2002192c1cbfd785  gcc/testsuite/g++.dg/other/const4.C
 ff9cb67baddab7a5c96d0e2a37893445  gcc/testsuite/g++.dg/other/constref1.C
 192c9dfdcc513ccf5362da483582b639  gcc/testsuite/g++.dg/other/constref2.C
 cfdc2115d36008e199bda75a789e43e3  gcc/testsuite/g++.dg/other/conversion1.C
@@ -12940,6 +12978,7 @@ d3370c196d18a12979ef3db733309686  gcc/testsuite/g++.dg/other/do1.C
 a24d7cf3120e5c9c1cb8815c7c1afaf8  gcc/testsuite/g++.dg/other/dtor2.C
 d5d9e4636806cc2c21ba5269905d360d  gcc/testsuite/g++.dg/other/dump-ada-spec-1.C
 08b98c1e4c60302b4f451b29e48837db  gcc/testsuite/g++.dg/other/dump-ada-spec-2.C
+7d00259af38fedc87dd4e6a5e28013f9  gcc/testsuite/g++.dg/other/dump-ada-spec-3.C
 639bf05e0524c96ac92d1182ca1e6d91  gcc/testsuite/g++.dg/other/ellipsis1.C
 c5b26d15a4924f5e39dad2e8b5b7608a  gcc/testsuite/g++.dg/other/enum1.C
 c544bdd6560cc758c745269cd7fa1806  gcc/testsuite/g++.dg/other/enum2.C
@@ -13750,6 +13789,7 @@ af836a3a9ba8f043430e40fef5923de3  gcc/testsuite/g++.dg/pr50763-3.C
 687fcdd96edb8d9d6910173004998886  gcc/testsuite/g++.dg/pr50763-4.C
 cea7cdabebcdd0a13585c5a24f935537  gcc/testsuite/g++.dg/pr51264-4.C
 acc9f7ed518d3bd847391a849c7741a3  gcc/testsuite/g++.dg/pr53055.C
+602b3ed9ed82ed3733e6a28dadc4d0e6  gcc/testsuite/g++.dg/pr54442.C
 da36360b1eaeaaf6b1adffefc9001717  gcc/testsuite/g++.dg/pr54655.C
 9deb7215258d8ff8a15e52e1fce39338  gcc/testsuite/g++.dg/pr55106.C
 87fdbc7f65a77794bc417b29c89d0401  gcc/testsuite/g++.dg/pr55263.C
@@ -13772,6 +13812,9 @@ a11ecfc0510623f70458e31e48d431fb  gcc/testsuite/g++.dg/pr61094.C
 fa5e79b3c98a745c039b5e34186024a2  gcc/testsuite/g++.dg/pr61289-2.c
 1ec6b4df7e034d65d4befa4778662d11  gcc/testsuite/g++.dg/pr61289.C
 30b2d39fd31772d17a8fd88b54ae69a3  gcc/testsuite/g++.dg/pr62079.C
+673d6fbc490d70de4eb8279ad884c093  gcc/testsuite/g++.dg/pr64037.C
+19486da89030bba1a8dcb18937f021ef  gcc/testsuite/g++.dg/pr64688-2.C
+2a99023224d23b7b4c2df438196b9877  gcc/testsuite/g++.dg/pr65049.C
 ae8863cdd596655bd9501c7a7e546fc7  gcc/testsuite/g++.dg/predict-loop-exit-1.C
 112161f9cc2e99ed1a64b608b234d230  gcc/testsuite/g++.dg/predict-loop-exit-2.C
 9fdf45388f73e8c9a46342cf4ec52cb6  gcc/testsuite/g++.dg/predict-loop-exit-3.C
@@ -14481,6 +14524,7 @@ c573cd5de2d4d269cb4df23ea0a36f4d  gcc/testsuite/g++.dg/template/non-dependent10.
 6f26c028ea69c4705c77b4a0544f848d  gcc/testsuite/g++.dg/template/non-dependent11.C
 c68de3013fc66d5b9ca387b1f0f294ad  gcc/testsuite/g++.dg/template/non-dependent12.C
 40b38a3d73d53481f9e1570a38ed4eab  gcc/testsuite/g++.dg/template/non-dependent13.C
+1600f68e67fb6396c6b980337441f30d  gcc/testsuite/g++.dg/template/non-dependent14.C
 3ce6c8331c1ddbc56b2c89ca07992343  gcc/testsuite/g++.dg/template/non-dependent2.C
 9c0fc4f566e5de8ff0339df3c3ef274d  gcc/testsuite/g++.dg/template/non-dependent3.C
 c74bd06e4f01d82b6dffe8568a9f9286  gcc/testsuite/g++.dg/template/non-dependent4.C
@@ -14521,6 +14565,7 @@ cee023670861be047d45f0aa6daa937f  gcc/testsuite/g++.dg/template/nontype7.C
 506fde7f525665b80bb8ae93c21fa34f  gcc/testsuite/g++.dg/template/ntp2.C
 0278f61baf9894baa55e08be6e4d1217  gcc/testsuite/g++.dg/template/offsetof1.C
 4c88b26d0d4ab5c6ea7cbb37f1f8bbf4  gcc/testsuite/g++.dg/template/offsetof2.C
+9ec5d5812226d3bfd59f234bd2a254c2  gcc/testsuite/g++.dg/template/offsetof3.C
 585425c7c24e913a9ccd6656bd75e83e  gcc/testsuite/g++.dg/template/op1.C
 b690784559e05afd43e95b8cf36b03eb  gcc/testsuite/g++.dg/template/operator1.C
 7d7d9ae6a20d4aa195178afcaf07e852  gcc/testsuite/g++.dg/template/operator10.C
@@ -14650,6 +14695,7 @@ b2383a6b8b72c44dc2c314ba40ab4cd6  gcc/testsuite/g++.dg/template/recurse.C
 6a7ca5e4fd47fe37ca29d61be39ecdf2  gcc/testsuite/g++.dg/template/recurse1.C
 60db27ac9c3110686f6dfa3820d57517  gcc/testsuite/g++.dg/template/recurse2.C
 a5be65b82f1aef08aa55aeaa5da0c8d4  gcc/testsuite/g++.dg/template/recurse3.C
+3e3e16c6c4a27889ab806fcd2bbae879  gcc/testsuite/g++.dg/template/recurse4.C
 c7309345696ac164222361961daab266  gcc/testsuite/g++.dg/template/redecl1.C
 8c26da9476ca0b8d2908af7ab2348832  gcc/testsuite/g++.dg/template/redecl2.C
 397a393f391e401bd8e5e28d01882ef8  gcc/testsuite/g++.dg/template/redecl3.C
@@ -14662,8 +14708,10 @@ c3bbc6f642a26de6b3238750b8f9c01f  gcc/testsuite/g++.dg/template/ref4.C
 be5ada7fe947b5c46a81b039d0695560  gcc/testsuite/g++.dg/template/ref6.C
 db13b42ef3220221c06b57bc736b7714  gcc/testsuite/g++.dg/template/ref7.C
 a83323a3a58fc6939825b82ec71d661a  gcc/testsuite/g++.dg/template/ref8.C
+6ea497194158bc3d800411bd86aacaff  gcc/testsuite/g++.dg/template/ref9.C
 0a632cddef1c669686cf95071e3afa4f  gcc/testsuite/g++.dg/template/repo1.C
 78a6f5ce3eb51c78d7602a071bd63d23  gcc/testsuite/g++.dg/template/repo10.C
+b6d087c9e53b0d3e3aee7a2755bc10a9  gcc/testsuite/g++.dg/template/repo11.C
 5126d45ee77f7897ba034d0dea05e3dc  gcc/testsuite/g++.dg/template/repo2.C
 8a2e51baf8c1d282bb93044b215b3c77  gcc/testsuite/g++.dg/template/repo3.C
 fda0c1ab651480c546b2e4e94922aebd  gcc/testsuite/g++.dg/template/repo4.C
@@ -15514,6 +15562,7 @@ a82ef6cbe78155176eca6d640870c3a5  gcc/testsuite/g++.dg/tree-ssa/pr54515.C
 0302793462643aeaccabd5c387ce8c93  gcc/testsuite/g++.dg/tree-ssa/pr57380.C
 bb17cbedcbb5bcabb9ee8299f30c3ae9  gcc/testsuite/g++.dg/tree-ssa/pr58404.C
 22dc7006f5ec66c9a231712242810915  gcc/testsuite/g++.dg/tree-ssa/pr61009.C
+3ab3bdd688450569b259541fd67518e3  gcc/testsuite/g++.dg/tree-ssa/pr63841.C
 d56e4fc904579446fb892941249b3b4a  gcc/testsuite/g++.dg/tree-ssa/pr8781.C
 1774a3db4e8c1c639d06cfd8ba95990d  gcc/testsuite/g++.dg/tree-ssa/ptrmemfield.C
 fe0c4f92b4591334dd40df6bbeb06f32  gcc/testsuite/g++.dg/tree-ssa/restrict1.C
@@ -15529,14 +15578,15 @@ ff162f4a33fd22637fac6b8daf4e64ca  gcc/testsuite/g++.dg/tree-ssa/restrict2.C
 a7af44b02aeb24506b5f9734a202f0ef  gcc/testsuite/g++.dg/tree-ssa/tmmti-2.C
 0fb08fd6d187247ae5872931e884061c  gcc/testsuite/g++.dg/tree-ssa/tmmti.C
 9a39f5caa0c0f32bcf73547f064e7cb3  gcc/testsuite/g++.dg/tsan/aligned_vs_unaligned_race.C
-fd692adceb74b089d50f9c26abc06e99  gcc/testsuite/g++.dg/tsan/atomic_free.C
-18c65c43d3c888a407c2b2725eacbe7d  gcc/testsuite/g++.dg/tsan/atomic_free2.C
+c4fadb9b98427f8db9f02151bb2399af  gcc/testsuite/g++.dg/tsan/atomic_free.C
+3e39048e4c714c6f83956bd90c7e0e01  gcc/testsuite/g++.dg/tsan/atomic_free2.C
 3985fecf2ba91cf198061eb1b0dc5648  gcc/testsuite/g++.dg/tsan/benign_race.C
-e071ea9bf67f9e261a5e8138f8110a28  gcc/testsuite/g++.dg/tsan/cond_race.C
+2622ca053ae4859ddd91ea2136c19a8a  gcc/testsuite/g++.dg/tsan/cond_race.C
 dc3ef40ef566357c4f0d41f5f42c2bcc  gcc/testsuite/g++.dg/tsan/default_options.C
 5429b96a0dffb6df7fd9eb4829c331ee  gcc/testsuite/g++.dg/tsan/fd_close_norace.C
 164b9a5e18070b32863c52f488fbe80d  gcc/testsuite/g++.dg/tsan/fd_close_norace2.C
 7f92e715289d34d69f1db54924bcd1f3  gcc/testsuite/g++.dg/tsan/tsan.exp
+1048d0e6a3ca80d3b4720a445847e7cb  gcc/testsuite/g++.dg/tsan/tsan_barrier.h
 678da6c2e5888bc120393ce672fc29d4  gcc/testsuite/g++.dg/ubsan/cxx11-shift-1.C
 94c1c6472b0a4f2c31978696e4f236d5  gcc/testsuite/g++.dg/ubsan/cxx11-shift-2.C
 3787b044d92b520ab51bdee4b0c87718  gcc/testsuite/g++.dg/ubsan/cxx1y-vla.C
@@ -15548,6 +15598,7 @@ a654df71119821a4303cc9fe0501191b  gcc/testsuite/g++.dg/ubsan/pr59250.C
 c01510327223fa5084d138538e05d01f  gcc/testsuite/g++.dg/ubsan/pr59437.C
 f79c5c3fe416583c001d6aaea7674732  gcc/testsuite/g++.dg/ubsan/pr60569.C
 143b3900a6cd791bdac721a5bbc89957  gcc/testsuite/g++.dg/ubsan/pr61272.C
+a84e2582a036f0562ca82b54e5c2ead4  gcc/testsuite/g++.dg/ubsan/pr63913.C
 23b03c04f7b3df05a2e3c261dbfbc91d  gcc/testsuite/g++.dg/ubsan/return-1.C
 fef7db870df372327eb87bf1655ace1d  gcc/testsuite/g++.dg/ubsan/return-2.C
 3705fca3b195af51b7452b242258afe5  gcc/testsuite/g++.dg/ubsan/ubsan.exp
@@ -15603,6 +15654,7 @@ c93a1243159bc35416087275a8c45a38  gcc/testsuite/g++.dg/warn/Walways-true-1.C
 de22eb15ae2420b77fbb90f3b584c785  gcc/testsuite/g++.dg/warn/Warray-bounds-3.C
 c5f8d177b95311df0a23b28f8373351d  gcc/testsuite/g++.dg/warn/Warray-bounds-4.C
 843811e9e3bbecf56a84c608e9fd1073  gcc/testsuite/g++.dg/warn/Warray-bounds-5.C
+d53003b93dc25906e11f3f1291fb8a1d  gcc/testsuite/g++.dg/warn/Warray-bounds-6.C
 b1f89524960615092626095cd38d9d33  gcc/testsuite/g++.dg/warn/Warray-bounds.C
 d489a76c7b7ab5b0e165f2342a4e6974  gcc/testsuite/g++.dg/warn/Wbraces1.C
 c2debf54ffb3d60acfddad10573c458f  gcc/testsuite/g++.dg/warn/Wbraces2.C
@@ -15813,6 +15865,7 @@ aabf762ebe53d9bdf29cd7607fc1fe32  gcc/testsuite/g++.dg/warn/Wunused-var-19.C
 6f250a1bec102f3ef4c4450109985c6c  gcc/testsuite/g++.dg/warn/Wunused-var-2.C
 e7274165f26fc70eff73fddbd77e3811  gcc/testsuite/g++.dg/warn/Wunused-var-20.C
 0c5df293cc7c104d4640b26ebae4ed15  gcc/testsuite/g++.dg/warn/Wunused-var-21.C
+5d6aae3538559dce1f197ff269ee52f8  gcc/testsuite/g++.dg/warn/Wunused-var-22.C
 dd0f2a1889a83658587b5f12c08c0c1c  gcc/testsuite/g++.dg/warn/Wunused-var-3.C
 62e5565091b4ee3f018515196f818bf3  gcc/testsuite/g++.dg/warn/Wunused-var-4.C
 d9191ea69f8ac18b1043d3d093b1f0d4  gcc/testsuite/g++.dg/warn/Wunused-var-5.C
@@ -15976,6 +16029,7 @@ ead08695035c4edabe2cbf3251983089  gcc/testsuite/g++.dg/warn/pragma-system_header
 f589a557984dd9757ade5f6409471bb5  gcc/testsuite/g++.dg/warn/pragma-system_header5.h
 8c096cfbcb0f16fa5bde02650ac4ab41  gcc/testsuite/g++.dg/warn/private1.C
 dcf594b88cf5da1b2174fbc2c262fb71  gcc/testsuite/g++.dg/warn/ref-temp1.C
+798f8aae121a1e4adbd067267ee51f1e  gcc/testsuite/g++.dg/warn/register-parm-1.C
 91dd53b7d7d2954e6728c3851a3a75e9  gcc/testsuite/g++.dg/warn/register-var-1.C
 ea73d6265dc16c3e8af8fcf468fbfdee  gcc/testsuite/g++.dg/warn/register-var-2.C
 70f8973f83c648dfef793b81d7b5a128  gcc/testsuite/g++.dg/warn/return-reference.C
@@ -20537,6 +20591,11 @@ ecd86b2ec3c6e99f8c9357249b8569eb  gcc/testsuite/gcc.c-torture/compile/pr60655-2.
 eb9a44bf10d9af818d3d8df7abc434ba  gcc/testsuite/gcc.c-torture/compile/pr61684.c
 7852df38c2c35b0607814110b63dad40  gcc/testsuite/gcc.c-torture/compile/pr62312.c
 38017a7b7046101f1f7e251a44c87e50  gcc/testsuite/gcc.c-torture/compile/pr63282.c
+4fddeb9518b727fea651ff1a38e78464  gcc/testsuite/gcc.c-torture/compile/pr63608.c
+305e96921486cdce7076b0ce683624f0  gcc/testsuite/gcc.c-torture/compile/pr64067.c
+70b004bb3cc0f4c2df5ad6d49c320d05  gcc/testsuite/gcc.c-torture/compile/pr64269.c
+c33702c15a33a34f884537b7a2dcd857  gcc/testsuite/gcc.c-torture/compile/pr65163.c
+6590c80e151001dd4b5f2f5b1b1d564e  gcc/testsuite/gcc.c-torture/compile/pr65680.c
 b9e6ce52b90320c1c3803c25113844c5  gcc/testsuite/gcc.c-torture/compile/pta-1.c
 ed716c1d1727fc2c748162e0cbc4ee47  gcc/testsuite/gcc.c-torture/compile/ptr-conv-1.c
 8d869e3426345f0cf8837c5eaafd43b5  gcc/testsuite/gcc.c-torture/compile/simd-1.c
@@ -22071,6 +22130,10 @@ d8403e0ce437d1323b68336029446357  gcc/testsuite/gcc.c-torture/execute/pr61673.c
 8b656e3edd75c4787214dc55255d9100  gcc/testsuite/gcc.c-torture/execute/pr61725.c
 f6e1d4bf24853fe1fc1e07c40e0315ec  gcc/testsuite/gcc.c-torture/execute/pr63209.c
 04a22368245b7d6a6cde050a01448d83  gcc/testsuite/gcc.c-torture/execute/pr63302.c
+3f1f43a4ad97d1d3d97c85b2a17f74c0  gcc/testsuite/gcc.c-torture/execute/pr63659.c
+7d6ee55dde74e53e2c3561bbecb37560  gcc/testsuite/gcc.c-torture/execute/pr64979.c
+4b7725d4bc4b11b7a7b1eb3cf608942e  gcc/testsuite/gcc.c-torture/execute/pr65427.c
+cde16ef96523d1e125a7267b5c4fe19c  gcc/testsuite/gcc.c-torture/execute/pr66233.c
 ecfc31f12ce09d6ccbcced04ff04deba  gcc/testsuite/gcc.c-torture/execute/pr7284-1.c
 89f3c7ee990221eeb33cb08a0772e024  gcc/testsuite/gcc.c-torture/execute/pr7284-1.x
 f4610e3bba97324f7005c428fe41e597  gcc/testsuite/gcc.c-torture/execute/printf-1.c
@@ -22653,6 +22716,7 @@ a7bd5a751836ec5ee042af741459dbd9  gcc/testsuite/gcc.dg/20080820.c
 a1d9a81b66743f884dfffa01e12e8558  gcc/testsuite/gcc.dg/20101010-1.c
 14da1b2f23668397c5e4fcbfd952ff38  gcc/testsuite/gcc.dg/20101013-1.c
 59920823a3a7c52157db47419e94a165  gcc/testsuite/gcc.dg/20111216-1.c
+5313bba939a1e1e6270c3129c318afa9  gcc/testsuite/gcc.dg/20141029-1.c
 67ff2d10f8ca1f6f7b43fa8b66852e19  gcc/testsuite/gcc.dg/54455.c
 60c0beacbda48e01011c8cd9226edcd9  gcc/testsuite/gcc.dg/920413-1.c
 f0c1e347ff19d725e2d77496718dee0c  gcc/testsuite/gcc.dg/940409-1.c
@@ -22672,6 +22736,8 @@ e061bee34094ea6ecd29d049eafb229b  gcc/testsuite/gcc.dg/Waddress.c
 e0f03fe3585a327467250a2ec39fc2be  gcc/testsuite/gcc.dg/Walways-true-1.c
 832a40756369d5e785179df5ca909745  gcc/testsuite/gcc.dg/Walways-true-2.c
 33a98cba1121b42ccbc1b9ea87c0a5e2  gcc/testsuite/gcc.dg/Warray-bounds-10.c
+aff04d276a341a86dbe0aeb9559c0a09  gcc/testsuite/gcc.dg/Warray-bounds-12.c
+b6c0291a21f96dc6fcc3ed29eac8c8af  gcc/testsuite/gcc.dg/Warray-bounds-13.c
 798433d4099cd8d7572fde802e640896  gcc/testsuite/gcc.dg/Warray-bounds-2.c
 840b91726d80efd539ceaa9d94e030d3  gcc/testsuite/gcc.dg/Warray-bounds-3.c
 84a306ba6a47b60426131bffe9ec7a0c  gcc/testsuite/gcc.dg/Warray-bounds-4.c
@@ -25518,6 +25584,7 @@ c98bd8084443af9809a9b85283a91966  gcc/testsuite/gcc.dg/instrument-1.c
 a481d0a49a4bf2aa98254e8df226bcd5  gcc/testsuite/gcc.dg/intermod-1.c
 345baf437ceb6cd649669a691a99fd3b  gcc/testsuite/gcc.dg/intmax_t-1.c
 623aed8859c8d8790d8542fcad873744  gcc/testsuite/gcc.dg/invalid-call-1.c
+60361af977014e7bcbcbd7f689d078ba  gcc/testsuite/gcc.dg/ipa/PR64559.c
 72e73b56019e5990a58487ddfe0e698c  gcc/testsuite/gcc.dg/ipa/ctor-empty-1.c
 952e07e917a053d5f9d6f780cae8639f  gcc/testsuite/gcc.dg/ipa/iinline-1.c
 a4bf78aa6d039ec0c58270239a9b806c  gcc/testsuite/gcc.dg/ipa/iinline-2.c
@@ -25603,6 +25670,8 @@ baad5c5c14597e8920562a8b7b33d1e4  gcc/testsuite/gcc.dg/ipa/pr58106.c
 ddab0207280e8faaee753555ee01ebff  gcc/testsuite/gcc.dg/ipa/pr59008.c
 6756bcd91aee8a132f5c93449b1b00b8  gcc/testsuite/gcc.dg/ipa/pr59610.c
 0cf6ea693cc06ae024ed2d6806fcfad1  gcc/testsuite/gcc.dg/ipa/pr61986.c
+4335b461755f210d5635e53648df221b  gcc/testsuite/gcc.dg/ipa/pr63551.c
+80020587b67d8a1e23d42bd1208d6a62  gcc/testsuite/gcc.dg/ipa/pr64041.c
 b58d896a4d97e5f7f8b082f407df9a92  gcc/testsuite/gcc.dg/ipa/pure-const-1.c
 96d395d8b51f69b544facb9312923acf  gcc/testsuite/gcc.dg/ipa/pure-const-2.c
 965b56c2fb92d5ccdd2268100579cb29  gcc/testsuite/gcc.dg/ipa/remref-0.c
@@ -25860,6 +25929,7 @@ fb92fea16dbb92181a81b79e2e378036  gcc/testsuite/gcc.dg/lto/pr60720_0.c
 3ce380dc49e4f5afb926994881824b04  gcc/testsuite/gcc.dg/lto/pr60911_0.c
 ed72338ed55138cf037314e45f0f7818  gcc/testsuite/gcc.dg/lto/pr61526_0.c
 962b3087915e41e8111b94acdd55b56e  gcc/testsuite/gcc.dg/lto/pr61526_1.c
+4f5f94c6ba034d19da65ca8c0e1c5ed9  gcc/testsuite/gcc.dg/lto/pr64373_0.c
 e36db27b1e4084d326181d15570bf8d4  gcc/testsuite/gcc.dg/lto/resolutions_0.c
 1084184a9b11a84eee39ef130211f70b  gcc/testsuite/gcc.dg/lto/save-temps_0.c
 69ff2353992f738ce7ea3cb89e9db1e4  gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c
@@ -26948,7 +27018,7 @@ f2c1ec68397c9f78480b0b2f1bc53a3f  gcc/testsuite/gcc.dg/pr51644.c
 b1d8625c46221240f925704a993a71b7  gcc/testsuite/gcc.dg/pr51821.c
 e2d93ffee8ad6a3da17d7209fb4891c5  gcc/testsuite/gcc.dg/pr51865.c
 807e870e0d95749170605e6b50aad404  gcc/testsuite/gcc.dg/pr51867.c
-7d35a3a5df51efd63b3af475350d1706  gcc/testsuite/gcc.dg/pr51879-12.c
+e4bd716499bb15f82fbd70d5a574c824  gcc/testsuite/gcc.dg/pr51879-12.c
 2bcbee1b9d7029dde1b181c2746c5530  gcc/testsuite/gcc.dg/pr51879-16.c
 12e12c70a33357545911c2f633743310  gcc/testsuite/gcc.dg/pr51879-17.c
 814f27952a604164f168245c35468926  gcc/testsuite/gcc.dg/pr51879-18.c
@@ -26981,6 +27051,7 @@ d509a928b205a218f6f12cfbcf561b86  gcc/testsuite/gcc.dg/pr52448.c
 6212d9d1ecb5822d673f3b8be5c317af  gcc/testsuite/gcc.dg/pr52592.c
 389298b92142b058c542eecac1b42ab5  gcc/testsuite/gcc.dg/pr52691.c
 781137b40924a7c832fc7753be81510b  gcc/testsuite/gcc.dg/pr52734.c
+13e186315a9ce876e208e709574f068d  gcc/testsuite/gcc.dg/pr52769.c
 fd89861b9252a0fb20bd9228ee0e3ce8  gcc/testsuite/gcc.dg/pr52803.c
 ad689ece2d595b416c80a2cdf1e37fb1  gcc/testsuite/gcc.dg/pr52808.c
 e2ec6d72bdfd63430ec334fa1b08a13a  gcc/testsuite/gcc.dg/pr52862.c
@@ -27142,6 +27213,7 @@ c124a95a6e3650b96ef3058205b5ac36  gcc/testsuite/gcc.dg/pr60704.c
 0f7df7fa948acd5723878ae4d5ebceb6  gcc/testsuite/gcc.dg/pr60866.c
 d2c91f0601aece029dd3340da8167e6d  gcc/testsuite/gcc.dg/pr61045.c
 c9180176075a043b115260ee379a707f  gcc/testsuite/gcc.dg/pr61053.c
+fd6d55cfa9bf35d351e1a730e13d5043  gcc/testsuite/gcc.dg/pr61058.c
 e2d94f81ab73335d50800841dbd4b12c  gcc/testsuite/gcc.dg/pr61060.c
 cd63a4b9a9b728f357c9ed6bc626c585  gcc/testsuite/gcc.dg/pr61158.c
 cea828a43f670db18b27e331441da562  gcc/testsuite/gcc.dg/pr61583.c
@@ -27149,11 +27221,29 @@ cea828a43f670db18b27e331441da562  gcc/testsuite/gcc.dg/pr61583.c
 3fd586421991396ecff57923ad170f08  gcc/testsuite/gcc.dg/pr61776.c
 71ac40f015127df76654ea6e22918e63  gcc/testsuite/gcc.dg/pr62004.c
 bd4064e0367064ef7a80137afba01057  gcc/testsuite/gcc.dg/pr62030.c
+7974528a2c5c630eab41df8380af37c5  gcc/testsuite/gcc.dg/pr62167-run.c
+75469fcab596129f07eaaf9dfc570f5f  gcc/testsuite/gcc.dg/pr62167.c
 b7690af833d62195c35ed95a90a5739f  gcc/testsuite/gcc.dg/pr62294.c
 b3c92851ce483139e15fb939e4b55044  gcc/testsuite/gcc.dg/pr62294.h
 a18e5e77a369255f09186bda46a1548c  gcc/testsuite/gcc.dg/pr63186.c
 0678fb7be64a43d0ac714738ee3bbd16  gcc/testsuite/gcc.dg/pr63284.c
 af31d87d9b43c3e16ab4f94d5576757e  gcc/testsuite/gcc.dg/pr63342.c
+aa53d869da8c8ac2f5fadb1f206e6ab1  gcc/testsuite/gcc.dg/pr63593.c
+257b85811a80dc7f1badd19dede25a1b  gcc/testsuite/gcc.dg/pr63637-1.c
+de3f6e53f7a0a04bcbf3e99473d02c66  gcc/testsuite/gcc.dg/pr63637-2.c
+1f2d9a766bebdd6ace4654f82af8857d  gcc/testsuite/gcc.dg/pr63637-3.c
+87de6f29f4520dc31edf5e8cda5fc84f  gcc/testsuite/gcc.dg/pr63637-4.c
+c9eccfa7358c8816487abbb03f47b145  gcc/testsuite/gcc.dg/pr63637-5.c
+20fcd517f94c676caf4a60b8e7a9e8ca  gcc/testsuite/gcc.dg/pr63637-6.c
+7a18498b84a998ed0ca5a69683eae4fe  gcc/testsuite/gcc.dg/pr63665.c
+10c3af4877039db48e674d0350d27bac  gcc/testsuite/gcc.dg/pr63762.c
+2a13e8b09c180228347da356f25f9c80  gcc/testsuite/gcc.dg/pr64536.c
+d509539e43ac4a3bf9c9b01c0503ebdf  gcc/testsuite/gcc.dg/pr64563.c
+84213f413cfa8fc453fa64e68f295dd4  gcc/testsuite/gcc.dg/pr64663.c
+8c44d2317fae7ba262d68ac73d4d3a48  gcc/testsuite/gcc.dg/pr64766.c
+74eef289ed65c13f9161776592f2a5a0  gcc/testsuite/gcc.dg/pr64778.c
+200af7e30479176902999ddc6f996f56  gcc/testsuite/gcc.dg/pr65063.c
+f486fe5cd0c8b1dfaeade4e0c846d705  gcc/testsuite/gcc.dg/pr65228.c
 8b7d73da2d5d78000716492365a85d5a  gcc/testsuite/gcc.dg/pr8715.c
 3d08410b2dd57259aa63f0e1c64b376e  gcc/testsuite/gcc.dg/pr8788-1.c
 be04382a35ebb1cfae1b2168f1693a94  gcc/testsuite/gcc.dg/pr8835-1.c
@@ -27460,6 +27550,7 @@ a831de49f2d41703b35fb1187a5eaacf  gcc/testsuite/gcc.dg/tls/pr24428.c
 11e4d3cac92ac81d517ecad709d55aef  gcc/testsuite/gcc.dg/tls/pr47715-4.c
 3fb5ccff70fc82da2e2aac8594fb9457  gcc/testsuite/gcc.dg/tls/pr47715-5.c
 7193b5d66103274fe5171afd9347d3b2  gcc/testsuite/gcc.dg/tls/pr58595.c
+f12db64d724ba7ee8005f9b84bbac338  gcc/testsuite/gcc.dg/tls/pr66470.c
 796d5642fd9a5bf2871955a7f51a2b2c  gcc/testsuite/gcc.dg/tls/section-1.c
 8a7ac847cc234a02986b204d9590a7fa  gcc/testsuite/gcc.dg/tls/section-2.c
 bd750cfcc2981be8695d1ba87cf4e02d  gcc/testsuite/gcc.dg/tls/struct-1.c
@@ -27538,6 +27629,7 @@ b77d1ed2e5b29209f51e586729af6106  gcc/testsuite/gcc.dg/tm/pr53008.c
 cb34f62872d3a64f1f3d3d7569c0271a  gcc/testsuite/gcc.dg/tm/pr53850.c
 aadbcbce404992ed762707839af7e5e9  gcc/testsuite/gcc.dg/tm/pr55401.c
 1b559cec302309c622d1ed170c616805  gcc/testsuite/gcc.dg/tm/pr56108.c
+aa2d5afc08b76af9961fbd0075d3ce6c  gcc/testsuite/gcc.dg/tm/pr64391.c
 a59b3b0273aa2c6778f87b20c96dcc77  gcc/testsuite/gcc.dg/tm/props-1.c
 afc3d5eda26e0d68f09fa19efe92040e  gcc/testsuite/gcc.dg/tm/props-2.c
 d4f06e60bf802e0dd1cda0b9588f454d  gcc/testsuite/gcc.dg/tm/props-3.c
@@ -28112,8 +28204,14 @@ aa3d4a99808d1f2c872d909445ade1a8  gcc/testsuite/gcc.dg/torture/pr61383-1.c
 025a7e9b280231e992477ec24bb46a30  gcc/testsuite/gcc.dg/torture/pr61681.c
 4b101021dad3b204e9205765c6697186  gcc/testsuite/gcc.dg/torture/pr61964.c
 3e76170feb81b4797a67df8566f996c2  gcc/testsuite/gcc.dg/torture/pr62031.c
+4f1e4dcf96cb96e57fa98dcd36edcfe3  gcc/testsuite/gcc.dg/torture/pr62238.c
 9fd4141b37961dba4d5cf78375faecf3  gcc/testsuite/gcc.dg/torture/pr63380-1.c
 273f8c55f269210104bb37d5ff1f1ead  gcc/testsuite/gcc.dg/torture/pr63380-2.c
+5afeeefc10e71cd2e01563ed972f3513  gcc/testsuite/gcc.dg/torture/pr63738.c
+48215a3eb001e86dd112cbd5bd96db15  gcc/testsuite/gcc.dg/torture/pr64199.c
+16befef8ee8e97f138e4871a50c9d149  gcc/testsuite/gcc.dg/torture/pr64365.c
+bc87826fa9b88277ff41e0e1ad1e432c  gcc/testsuite/gcc.dg/torture/pr66123.c
+00eb3bf59b75fa9683a54ed307d82a1a  gcc/testsuite/gcc.dg/torture/pr66272.c
 c99c3745eca0ddc81822cc070070a4d3  gcc/testsuite/gcc.dg/torture/pr8081.c
 b3a9e4f2af6462183da8d6c5cb13bf1f  gcc/testsuite/gcc.dg/torture/pta-callused-1.c
 98fde0e59e55c1ed923ee9d9f034d7f2  gcc/testsuite/gcc.dg/torture/pta-escape-1.c
@@ -29178,6 +29276,7 @@ bcce75f1352f00b43d742f9a37e57506  gcc/testsuite/gcc.dg/tree-ssa/stdarg-2.c
 326de9bb436b2ff96b0ffa9e4b088c71  gcc/testsuite/gcc.dg/tree-ssa/stdarg-4.c
 5fa4c4dc01af19616fa60343487d3c58  gcc/testsuite/gcc.dg/tree-ssa/stdarg-5.c
 6532b954eb6ddda6b41bd93895569f96  gcc/testsuite/gcc.dg/tree-ssa/stdarg-6.c
+e6b94277f1a8726cbeedef6da629b1bb  gcc/testsuite/gcc.dg/tree-ssa/stdarg-7.c
 68496fac3f18c683a7ec2b545511d431  gcc/testsuite/gcc.dg/tree-ssa/strlen-1.c
 10547d62e0bb1962e0180906df7deb0b  gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-1.c
 e1f4e26bfba2393e8d1d57385267af7e  gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-2.c
@@ -29508,16 +29607,16 @@ acfa8b519e474bbb79902fa075b2df12  gcc/testsuite/gcc.dg/vect/bb-slp-20.c
 f0149a610004dac4c4191981e16cef3d  gcc/testsuite/gcc.dg/vect/bb-slp-21.c
 65aaa70f5e7d76404b0943360a79e3c7  gcc/testsuite/gcc.dg/vect/bb-slp-22.c
 f29d9ef67340982ec4420b1b1570e0ee  gcc/testsuite/gcc.dg/vect/bb-slp-23.c
-3104384a03b2eccdd377320f6e0316b5  gcc/testsuite/gcc.dg/vect/bb-slp-24.c
-9819b040c0fbcd9cc57c290112bb4208  gcc/testsuite/gcc.dg/vect/bb-slp-25.c
+b064dffe5514b62ae11009022c828766  gcc/testsuite/gcc.dg/vect/bb-slp-24.c
+61e30d334f9fb879bcf49482a64a70e2  gcc/testsuite/gcc.dg/vect/bb-slp-25.c
 c039a132494a59d96621dbc222b23d2c  gcc/testsuite/gcc.dg/vect/bb-slp-26.c
 7a96e966b52f9365b2afd5dc350c8c04  gcc/testsuite/gcc.dg/vect/bb-slp-27.c
 409fa32f5b1242597dfdbafa44d3508f  gcc/testsuite/gcc.dg/vect/bb-slp-28.c
-6d467c72bbd70ce658c2507358caa68b  gcc/testsuite/gcc.dg/vect/bb-slp-29.c
+5d29dd95a6d2525c2f50fbc4b255c807  gcc/testsuite/gcc.dg/vect/bb-slp-29.c
 1283f78b52b7d6ab28e9c7307968f10e  gcc/testsuite/gcc.dg/vect/bb-slp-3.c
 e8a6772ff03c98927aab3eaccfd09b1f  gcc/testsuite/gcc.dg/vect/bb-slp-30.c
 df6cc1d0878ef46c967877263b988a50  gcc/testsuite/gcc.dg/vect/bb-slp-31.c
-a97ae99c47c7a02d766d0b2c03bd54fe  gcc/testsuite/gcc.dg/vect/bb-slp-32.c
+36166eb020f69d3814c390d6e4cd760b  gcc/testsuite/gcc.dg/vect/bb-slp-32.c
 a8d50748372356f586a624a40de6afa5  gcc/testsuite/gcc.dg/vect/bb-slp-4.c
 a5270d4b6322186ca4fa0877e789651b  gcc/testsuite/gcc.dg/vect/bb-slp-5.c
 47f2e3692bd6a5a97b45ff8aef35e0df  gcc/testsuite/gcc.dg/vect/bb-slp-6.c
@@ -29525,7 +29624,7 @@ a5270d4b6322186ca4fa0877e789651b  gcc/testsuite/gcc.dg/vect/bb-slp-5.c
 f67c1bd30d8ccd6760446e6302ffd1fe  gcc/testsuite/gcc.dg/vect/bb-slp-8.c
 32d04c4e4cf711c2c752f9352034cb1f  gcc/testsuite/gcc.dg/vect/bb-slp-8a.c
 6727c1a649ae93de62f0f8d7310aeb83  gcc/testsuite/gcc.dg/vect/bb-slp-8b.c
-94892469594d677b1bce46bb2de9a61f  gcc/testsuite/gcc.dg/vect/bb-slp-9.c
+f956eb1573ddc54ea7696d4e04dc10e5  gcc/testsuite/gcc.dg/vect/bb-slp-9.c
 c9dc7a92097c59f4219b9814cd713575  gcc/testsuite/gcc.dg/vect/bb-slp-cond-1.c
 cd30d75636c2f9db572b29349145c562  gcc/testsuite/gcc.dg/vect/bb-slp-pattern-1.c
 7c3351b1c7c852f5f0f57f33649d581d  gcc/testsuite/gcc.dg/vect/bb-slp-pattern-2.c
@@ -29535,13 +29634,14 @@ b88218e44c89e8168580166e99fe6d15  gcc/testsuite/gcc.dg/vect/costmodel/i386/costm
 e7a411dffcf9b2cb08db7f673f1b2317  gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-68.c
 d6d76f114f830b067acd4c244d653ce0  gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-reduc-1char.c
 7d04f3e0070e1b3718357b809eee9e49  gcc/testsuite/gcc.dg/vect/costmodel/i386/i386-costmodel-vect.exp
-cc5fb3817623d6f0743eb9c14f743cca  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a.c
+5fb873227f6b7deb87c4c2e085b72491  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a-pr63175.c
+5038f15a34cabb0cbefc4ad7eeab87a6  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a.c
 156a82e8bc9b1b8fe5143367dfc1bae4  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-fast-math-vect-pr29925.c
 8334641143225456a1847fea7acf87e2  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-pr37194.c
 04e5951ff78139051ecbe6f7934c3b02  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c
-2ed394040b610b37e14521b117c600a6  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-33.c
+2d6e1ccf45c87654b135031344b1bae8  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-33.c
 af836776258b19632a4bf8521a3572be  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-34.c
-8df0034a4ef6c3bf159b226e9490cd9c  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c
+d211f4192398e61f7d5d013cc976b506  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c
 342fc78aef4d3c5c2338eff1487fe39c  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31b.c
 21623d475777db86cc41cd9a41f5bee0  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31c.c
 e95af8b78e2e017c1e82666d6456a4f0  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-33.c
@@ -29549,9 +29649,9 @@ e95af8b78e2e017c1e82666d6456a4f0  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmo
 3ede768d8044a72078ba4996079161db  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-68b.c
 7d8a1b889198d5117ed479ee5bdba348  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-68c.c
 caa0c58a61824eb8d8dc9a6d8f9912b2  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76a.c
-6cc6e9770daf329ff0baf91a1d17e14b  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c
+512bda7042d1f8d461982481c42441ae  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c
 6bd9887f917e7598d2a7a2717f68274f  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76c.c
-4d5e5006cf4137f83753b35ca51a50c8  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-outer-fir.c
+d6abd538d890deab7c8f805c133ad9a6  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-outer-fir.c
 1565573f385ca141e7bd09b65c47b7a8  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-reduc-1char.c
 4d4559119255f12abb7bac6749cacad2  gcc/testsuite/gcc.dg/vect/costmodel/ppc/ppc-costmodel-vect.exp
 156a82e8bc9b1b8fe5143367dfc1bae4  gcc/testsuite/gcc.dg/vect/costmodel/spu/costmodel-fast-math-vect-pr29925.c
@@ -29571,6 +29671,7 @@ e95af8b78e2e017c1e82666d6456a4f0  gcc/testsuite/gcc.dg/vect/costmodel/spu/costmo
 0fd4bc7616795a08ac0c4ee3a7d05a28  gcc/testsuite/gcc.dg/vect/costmodel/spu/spu-costmodel-vect.exp
 550458980d6f7463eb6da832fb6203aa  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-fast-math-vect-pr29925.c
 edd82e18ea5869a13d60e532c558e03e  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr30843.c
+3de66ec4a373d0a8dccb39fc90f19d01  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr64909.c
 b0216ac9554b163a75cf302dab65ea9a  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-31.c
 b88218e44c89e8168580166e99fe6d15  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-33.c
 e7a411dffcf9b2cb08db7f673f1b2317  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-68.c
@@ -29600,7 +29701,7 @@ f000190ba28b6f78be6ecfa9c79cce24  gcc/testsuite/gcc.dg/vect/fast-math-vect-pr259
 54d6dc2b1580f0aa1b30e41a328807f0  gcc/testsuite/gcc.dg/vect/fast-math-vect-reduc-8.c
 df0feeaae951a84ed3797ec9f6424903  gcc/testsuite/gcc.dg/vect/fast-math-vect-reduc-9.c
 a5bfe390e0dfa5de78f75f6c5a0b461b  gcc/testsuite/gcc.dg/vect/ggc-pr37574.c
-3fa0e280628e5a7c29de6964d7a6f0a5  gcc/testsuite/gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c
+effa4d19a9cee9a8fb2dfa7580903e91  gcc/testsuite/gcc.dg/vect/if-cvt-stores-vect-ifcvt-18.c
 ff86a36d3c65962b1767040e86a92ce7  gcc/testsuite/gcc.dg/vect/no-fast-math-vect16.c
 ffec6084406280d03d3bb55aaca58a4f  gcc/testsuite/gcc.dg/vect/no-fre-pre-pr50208.c
 1f64a80337b0e6f288c0e5b44af4dbfc  gcc/testsuite/gcc.dg/vect/no-math-errno-slp-32.c
@@ -29631,8 +29732,8 @@ dda4e9f28fb4531159f68938cf027c76  gcc/testsuite/gcc.dg/vect/no-scevccp-outer-21.
 fcec24e75e64e388f220861f8d7096ee  gcc/testsuite/gcc.dg/vect/no-scevccp-outer-3.c
 5b89b3c5c71579f071c97c3a7455ec4f  gcc/testsuite/gcc.dg/vect/no-scevccp-outer-4.c
 9a42afe611fdb00ea9034c490869de39  gcc/testsuite/gcc.dg/vect/no-scevccp-outer-5.c
-975b93e3de26686cca45ba72cbb2f391  gcc/testsuite/gcc.dg/vect/no-scevccp-outer-6-global.c
-a35a3420fc4b0ef462512b8b1d464fa7  gcc/testsuite/gcc.dg/vect/no-scevccp-outer-6.c
+9d34f6368fb99006d4f7bc6b5a6337be  gcc/testsuite/gcc.dg/vect/no-scevccp-outer-6-global.c
+1d4b55bc6190d3fcd2a1c384f49d1618  gcc/testsuite/gcc.dg/vect/no-scevccp-outer-6.c
 5de6b48610cc08f4ee624e9ac81e10c1  gcc/testsuite/gcc.dg/vect/no-scevccp-outer-7.c
 08e92f28ff14d997a6b0a61f6ff72276  gcc/testsuite/gcc.dg/vect/no-scevccp-outer-8.c
 9e2bcacfdc374b08fecf0490abf51e86  gcc/testsuite/gcc.dg/vect/no-scevccp-outer-9.c
@@ -29672,26 +29773,26 @@ c739cd73373958a93f5050d578758e35  gcc/testsuite/gcc.dg/vect/no-tree-sra-bb-slp-p
 9e75279f6fe8373e63aadd6ff2695aa4  gcc/testsuite/gcc.dg/vect/no-vfa-vect-102.c
 a83dab740468602e0ced0c910cc2ed65  gcc/testsuite/gcc.dg/vect/no-vfa-vect-102a.c
 93f8086885a3c988c8277d0ff33228a5  gcc/testsuite/gcc.dg/vect/no-vfa-vect-37.c
-da8f9d1352bd594ff95f4c59d816d8f2  gcc/testsuite/gcc.dg/vect/no-vfa-vect-43.c
+8d3329b9fa0b91c5327a212458ba50cf  gcc/testsuite/gcc.dg/vect/no-vfa-vect-43.c
 77831a5d6c9a77d22d79dcbbf673628f  gcc/testsuite/gcc.dg/vect/no-vfa-vect-45.c
 3e4dd35557b6466865180ff7a2e9e128  gcc/testsuite/gcc.dg/vect/no-vfa-vect-49.c
 09626d666e524bddb96732861bd28642  gcc/testsuite/gcc.dg/vect/no-vfa-vect-51.c
 f032d39dfb8b84defd3bfe969ad0bf84  gcc/testsuite/gcc.dg/vect/no-vfa-vect-53.c
-e539da5cf55efba4e29eb3feb6590ebe  gcc/testsuite/gcc.dg/vect/no-vfa-vect-57.c
-f01fdf4d0edde3a2f180818c91750cb0  gcc/testsuite/gcc.dg/vect/no-vfa-vect-61.c
+a3b8d6b0a713dd1141813f998c43043f  gcc/testsuite/gcc.dg/vect/no-vfa-vect-57.c
+6fcbf56c0b1e4b69ea43d22d9baf9ace  gcc/testsuite/gcc.dg/vect/no-vfa-vect-61.c
 6e039096b87c453ffa52c4f6b70d1db3  gcc/testsuite/gcc.dg/vect/no-vfa-vect-79.c
-fb97cef6eb6c880e384aa1913c2a1fa3  gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-1.c
-487d34907ebca8b5b8349544dbfdcd7f  gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-2.c
-2b02ac8292872a7cd90756cfe19d322c  gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-3.c
+7541cb780246771dfc0291ed0d6e9f63  gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-1.c
+15e49c4354891ba52a4179da2215e95c  gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-2.c
+79ce534b640878e51f838dcc874d8ef8  gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-3.c
 d74cf2f8d53856d546856dcdd75cc90c  gcc/testsuite/gcc.dg/vect/no-vfa-vect-dv-2.c
 9d2fe050ff6cb81282987c793bac1dbf  gcc/testsuite/gcc.dg/vect/nodump-forwprop-22.c
 ac90ad8f4383592387ff86cb8dbd78ce  gcc/testsuite/gcc.dg/vect/nodump-pr23073.c
-91a9027abe801ddfe4faff6447d61ee7  gcc/testsuite/gcc.dg/vect/pr16105.c
+3d01ce58c378537e0153497d866fd4f7  gcc/testsuite/gcc.dg/vect/pr16105.c
 0a62167fbb422fb9d5f72a82002aa913  gcc/testsuite/gcc.dg/vect/pr18308.c
 c0d3f6fb890d0bc98d9ce33b28b82dec  gcc/testsuite/gcc.dg/vect/pr18400.c
 645ff9360ffdb88920a90f602391ae90  gcc/testsuite/gcc.dg/vect/pr18425.c
 1e150a9a9e3258dcc7d4ecdadfe62081  gcc/testsuite/gcc.dg/vect/pr18536.c
-bdb12751ad61b8417ea23efcac0cca43  gcc/testsuite/gcc.dg/vect/pr20122.c
+2aec5a0b449e61bdcad86f676c25831c  gcc/testsuite/gcc.dg/vect/pr20122.c
 7e83cac69585dde8e8d646aab981a841  gcc/testsuite/gcc.dg/vect/pr21591.c
 93062dc07459216ae29daaf0daf682b7  gcc/testsuite/gcc.dg/vect/pr21969.c
 2272cdf5868f3917b9a996f48b9a7ecf  gcc/testsuite/gcc.dg/vect/pr22480.c
@@ -29725,11 +29826,11 @@ bc9ecac65701046504a83e6cde520d28  gcc/testsuite/gcc.dg/vect/pr33369.c
 23ecea3a8c3b41da233bb57d9488c735  gcc/testsuite/gcc.dg/vect/pr33373.c
 c55af6b290215a0f6ba873a844c801ca  gcc/testsuite/gcc.dg/vect/pr33373b.c
 ab7c716818a07cf0b147fe00204e6a30  gcc/testsuite/gcc.dg/vect/pr33597.c
-9e0e7b15f91329a14051b69daef2438d  gcc/testsuite/gcc.dg/vect/pr33804.c
+88fffbb134dd0ceaade8c36548c4ca1d  gcc/testsuite/gcc.dg/vect/pr33804.c
 b5937a9184f30e877071be4c94e0ba79  gcc/testsuite/gcc.dg/vect/pr33833.c
 1bc05de6cbb59041cb461872d7f9e337  gcc/testsuite/gcc.dg/vect/pr33846.c
 d44e6cbf5371d554cf11e21590c1ba3b  gcc/testsuite/gcc.dg/vect/pr33866.c
-d17b435b6ebafa61f303784e389e3744  gcc/testsuite/gcc.dg/vect/pr33953.c
+7f287add48f4486d5fe00ccd15b2d03f  gcc/testsuite/gcc.dg/vect/pr33953.c
 edbf5f7aca14b9856a6a3d4df0544f57  gcc/testsuite/gcc.dg/vect/pr34005.c
 0862cded904b5ca819f44fb87e41cd23  gcc/testsuite/gcc.dg/vect/pr34407.c
 4d448b98c70f17069cffb78cbe840a6a  gcc/testsuite/gcc.dg/vect/pr34591.c
@@ -29803,7 +29904,7 @@ fad83fec1f66073862f5c0f4b3e8556b  gcc/testsuite/gcc.dg/vect/pr53185-2.c
 7240cc57b542479c3e6cc17837ad812d  gcc/testsuite/gcc.dg/vect/pr55857-1.c
 cad0063882ee779858d0d7c85122c26b  gcc/testsuite/gcc.dg/vect/pr55857-2.c
 89d2c031ab8587b7a610749af131601e  gcc/testsuite/gcc.dg/vect/pr56695.c
-3d277f9fd72287d8a7a1954341e52d92  gcc/testsuite/gcc.dg/vect/pr56787.c
+2a6ab7579f60ba8673a8304f8cc9add2  gcc/testsuite/gcc.dg/vect/pr56787.c
 598621e7350fd78cbd8857f2968af637  gcc/testsuite/gcc.dg/vect/pr56826.c
 b7dd96f207a808672d43ea71732df03b  gcc/testsuite/gcc.dg/vect/pr56918.c
 cb1fccf6388023924b55ca860197a163  gcc/testsuite/gcc.dg/vect/pr56920.c
@@ -29812,7 +29913,8 @@ cb1fccf6388023924b55ca860197a163  gcc/testsuite/gcc.dg/vect/pr56920.c
 b06a1064040151b37f6b844dd04d65d6  gcc/testsuite/gcc.dg/vect/pr57741-1.c
 69bb0aad260ce349c11516522bfd772d  gcc/testsuite/gcc.dg/vect/pr57741-2.c
 7e6a00fc158316b02bfcec134380ff4e  gcc/testsuite/gcc.dg/vect/pr57741-3.c
-c0eac75c13d57afae76d5266394da64c  gcc/testsuite/gcc.dg/vect/pr58508.c
+c797ef7ee7191ada3614f5b689b1da4b  gcc/testsuite/gcc.dg/vect/pr58508.c
+d5d08ba1b25f73eb43392c150ae52e12  gcc/testsuite/gcc.dg/vect/pr59354.c
 a79d81fe485f569c5f9327b682010be1  gcc/testsuite/gcc.dg/vect/pr59519-1.c
 8996b8daafb5f4138495527ff3ef4e14  gcc/testsuite/gcc.dg/vect/pr59519-2.c
 a499d4f05be26033047986b62bf35573  gcc/testsuite/gcc.dg/vect/pr59591-1.c
@@ -29830,7 +29932,9 @@ b107b5d9d8332504cce7d4f98d0296f7  gcc/testsuite/gcc.dg/vect/pr60382.c
 97f0138cf5bdb9cb11d8e107c00bc27c  gcc/testsuite/gcc.dg/vect/pr60505.c
 410bc9651b5f4b0552af7cad596832e8  gcc/testsuite/gcc.dg/vect/pr60656.c
 72142e96ba1e228790f86e7f25a6c1a5  gcc/testsuite/gcc.dg/vect/pr60841.c
+6c462534fcf87a211a55c7b12362d83f  gcc/testsuite/gcc.dg/vect/pr61634.c
 785dfb8a3638e3ded94e5cc79249383c  gcc/testsuite/gcc.dg/vect/pr61680.c
+e840c7a20c50a05fe3f90772a1a0f19c  gcc/testsuite/gcc.dg/vect/pr62021.c
 782d74526ed89fab0af4733808120b05  gcc/testsuite/gcc.dg/vect/pr62073.c
 5865f6b8f97a4cbe64d4b0959874c252  gcc/testsuite/gcc.dg/vect/pr62075.c
 3bcfc6f66ea31a6fd9f0a8445bf864f3  gcc/testsuite/gcc.dg/vect/pr63189.c
@@ -29838,6 +29942,12 @@ c93b5b41cbe7c84b407ea2979b5ba82a  gcc/testsuite/gcc.dg/vect/pr63341-1.c
 a3bebca383ff65b3ff2313ef66fb6c01  gcc/testsuite/gcc.dg/vect/pr63341-2.c
 08f7fc1b8c89323511ad4be094586e0e  gcc/testsuite/gcc.dg/vect/pr63379.c
 2919cd1e7deabe5960a0f218734e918c  gcc/testsuite/gcc.dg/vect/pr63530.c
+2ff8835e6d180990aba382b2d80e3a18  gcc/testsuite/gcc.dg/vect/pr63605.c
+2b449e5ad55ccb537f0d84489b3d7fc7  gcc/testsuite/gcc.dg/vect/pr64421.c
+33c32c8f183c7c30ec2d9ff0d4b1dc5f  gcc/testsuite/gcc.dg/vect/pr64493.c
+61fb342b8e78c3d04d20249c92314397  gcc/testsuite/gcc.dg/vect/pr64495.c
+0f1a2a9af24dc33a1dcc0c8ffc0f059d  gcc/testsuite/gcc.dg/vect/pr65518.c
+4bb9700fa9c67f4a70db08812c337405  gcc/testsuite/gcc.dg/vect/pr66251.c
 0706a6b1e589668022cd055b960dd18d  gcc/testsuite/gcc.dg/vect/section-anchors-pr27770.c
 260e2f31b30dda89387f41e7bfe71e1e  gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c
 4d2e98feff81733536fba7cd2d0ca053  gcc/testsuite/gcc.dg/vect/slp-1.c
@@ -29865,7 +29975,7 @@ ad86e6cb4874f32c2548db7ee8512cf7  gcc/testsuite/gcc.dg/vect/slp-20.c
 aea13a2cdefa5a8464c867f5d55d53ec  gcc/testsuite/gcc.dg/vect/slp-23.c
 5e16477dfc240b9e1343d172507db31b  gcc/testsuite/gcc.dg/vect/slp-24-big-array.c
 12f1adcd80d6cc1aba00f9165a8cb549  gcc/testsuite/gcc.dg/vect/slp-24.c
-020de21fc593c89d73bbf5b3e6703623  gcc/testsuite/gcc.dg/vect/slp-25.c
+307ea29e55457a93707a32e19ec08f51  gcc/testsuite/gcc.dg/vect/slp-25.c
 58fd563d4e764a5157fb63eef206ef58  gcc/testsuite/gcc.dg/vect/slp-26.c
 96964aa6485a972e02013c14d9c00de0  gcc/testsuite/gcc.dg/vect/slp-28.c
 eed1fb2dd1aa5b1e49394ef29f91a974  gcc/testsuite/gcc.dg/vect/slp-3-big-array.c
@@ -29934,8 +30044,8 @@ ccfabff16ec199cc406a954b158029a9  gcc/testsuite/gcc.dg/vect/vect-10.c
 ab1691aa2950b5b4da0efe00f7b6e406  gcc/testsuite/gcc.dg/vect/vect-100.c
 c3fcf9a10231d46a4e6112db282966e1  gcc/testsuite/gcc.dg/vect/vect-103.c
 718b02aabe2e20b8ce18e48f023908b6  gcc/testsuite/gcc.dg/vect/vect-104.c
-31325183642bc3602fc0ee8fc4c310dd  gcc/testsuite/gcc.dg/vect/vect-105-big-array.c
-98b0324b4598be08b8ca2d2e13bb47ac  gcc/testsuite/gcc.dg/vect/vect-105.c
+ef949f4aaef94a07833fc07508e9644d  gcc/testsuite/gcc.dg/vect/vect-105-big-array.c
+ba65fd2be3313d424e49e350ae1da313  gcc/testsuite/gcc.dg/vect/vect-105.c
 7eca3e2ff630baa7067aaa896b5355e6  gcc/testsuite/gcc.dg/vect/vect-106.c
 b63a4105f3b6b6bc44b76149d5244738  gcc/testsuite/gcc.dg/vect/vect-107.c
 db47127935bf60143d6f08e915411515  gcc/testsuite/gcc.dg/vect/vect-108.c
@@ -29974,9 +30084,9 @@ bf18e47360f89a66ef0105c84239da2c  gcc/testsuite/gcc.dg/vect/vect-23.c
 ea8751ff2acb2a67b054abb3feb6df0e  gcc/testsuite/gcc.dg/vect/vect-24.c
 68fddf6aec747afc5ef1aba698453689  gcc/testsuite/gcc.dg/vect/vect-25.c
 92cdeb27298204128eae549ea3bb1ac2  gcc/testsuite/gcc.dg/vect/vect-26.c
-359512ca397a003cf4e437d0c4c48518  gcc/testsuite/gcc.dg/vect/vect-27.c
+c134c1258b5b10db26e9f5dea46b29f5  gcc/testsuite/gcc.dg/vect/vect-27.c
 6c1fe7f7ada8adfeec826d598fd304e5  gcc/testsuite/gcc.dg/vect/vect-28.c
-5549c748e0128382801ed225d4a9d1c4  gcc/testsuite/gcc.dg/vect/vect-29.c
+2a5ccb83524de5d07852b62d731a2d95  gcc/testsuite/gcc.dg/vect/vect-29.c
 7bf1d97b209422e35093b8fc2fad3477  gcc/testsuite/gcc.dg/vect/vect-3.c
 0201966ef2327252a88fb63a26a4d3a2  gcc/testsuite/gcc.dg/vect/vect-30.c
 0e72021c8b7724eb304b4d97e14ea20b  gcc/testsuite/gcc.dg/vect/vect-31-big-array.c
@@ -29984,7 +30094,7 @@ ea8751ff2acb2a67b054abb3feb6df0e  gcc/testsuite/gcc.dg/vect/vect-24.c
 814015cf328fc098cb06456e471101e4  gcc/testsuite/gcc.dg/vect/vect-32-big-array.c
 9f350a80febd72a9eff6c63f3d1f1088  gcc/testsuite/gcc.dg/vect/vect-32.c
 c78aa29129aa2dc89b25bbae54fdd250  gcc/testsuite/gcc.dg/vect/vect-33-big-array.c
-2b4f9c6a78689fea8f03c80c0428af54  gcc/testsuite/gcc.dg/vect/vect-33.c
+0ac0305666dfa86d506222773b13dc35  gcc/testsuite/gcc.dg/vect/vect-33.c
 e67af9c093532a2a573f5bcc87379356  gcc/testsuite/gcc.dg/vect/vect-34-big-array.c
 70506ff40bf693f0c033c8742499c1af  gcc/testsuite/gcc.dg/vect/vect-34.c
 8267fb88df4f7e20fe4b100012da610c  gcc/testsuite/gcc.dg/vect/vect-35-big-array.c
@@ -29994,19 +30104,19 @@ a8a1b2204eead6d18063b173132695ed  gcc/testsuite/gcc.dg/vect/vect-36.c
 451b9d783c920b1a14c464f9743cb068  gcc/testsuite/gcc.dg/vect/vect-38.c
 df241e5f68887a077575f5971960f64e  gcc/testsuite/gcc.dg/vect/vect-4.c
 31517212c8d017d80555144a10e0980c  gcc/testsuite/gcc.dg/vect/vect-40.c
-8588e5de03ad38cb6010f3a0bf24de4f  gcc/testsuite/gcc.dg/vect/vect-42.c
-a56ee4c6b087d139965f8987acb202da  gcc/testsuite/gcc.dg/vect/vect-44.c
+491642a9596643b8006ac5b12815f15e  gcc/testsuite/gcc.dg/vect/vect-42.c
+6c19845ffc8214113a774e84063526c7  gcc/testsuite/gcc.dg/vect/vect-44.c
 f94452d6d845e6f24d498e657c215e57  gcc/testsuite/gcc.dg/vect/vect-46.c
-a24b24daca0be44a5a6148e20e39ac64  gcc/testsuite/gcc.dg/vect/vect-48.c
+0bb7b79af8c0cf2d9673c56799607686  gcc/testsuite/gcc.dg/vect/vect-48.c
 852ab3d7b0dda02630ffc9824fea5e95  gcc/testsuite/gcc.dg/vect/vect-5.c
-4577ea7cb44825b78254d822a7d3f4b7  gcc/testsuite/gcc.dg/vect/vect-50.c
-ac0842940e57aa205b692dd7882791b2  gcc/testsuite/gcc.dg/vect/vect-52.c
+aa14c7ee44f8be26638b7736b1b0f071  gcc/testsuite/gcc.dg/vect/vect-50.c
+dae92e54ae70c93c5d522e369356a38c  gcc/testsuite/gcc.dg/vect/vect-52.c
 85001f857a8872a9f40076d728589c6c  gcc/testsuite/gcc.dg/vect/vect-54.c
-bbbad47dafb7e11d6bd23951c526ffef  gcc/testsuite/gcc.dg/vect/vect-56.c
+41bf83178b87142fcfefac948fee0c70  gcc/testsuite/gcc.dg/vect/vect-56.c
 2515d147a1cc92b40274efccb1004b3c  gcc/testsuite/gcc.dg/vect/vect-58.c
 e3fb6373938f4833defbfc25174b23ef  gcc/testsuite/gcc.dg/vect/vect-6-big-array.c
 b38cc26b0244fe61154aa215491548ac  gcc/testsuite/gcc.dg/vect/vect-6.c
-1954eb5abe128243c8ed29c8cadbba66  gcc/testsuite/gcc.dg/vect/vect-60.c
+fa3ad48301024adc0d783170a4d2acc0  gcc/testsuite/gcc.dg/vect/vect-60.c
 65dff7111302434fa41994e705155ad6  gcc/testsuite/gcc.dg/vect/vect-62.c
 dab8a59b6e96be3ba904438a7b752640  gcc/testsuite/gcc.dg/vect/vect-63.c
 2b6286783d52c43dc508ac5001b0e60e  gcc/testsuite/gcc.dg/vect/vect-64.c
@@ -30017,20 +30127,20 @@ ae7edb973bf6fbfeaf2ec6aecce5aed4  gcc/testsuite/gcc.dg/vect/vect-67.c
 487e18cc913a693aa9da7551c7ea65d1  gcc/testsuite/gcc.dg/vect/vect-7.c
 496a85ab8bb0bf9314c38f51061078da  gcc/testsuite/gcc.dg/vect/vect-70.c
 ac0b9faf51f4f337e9a1caee18ea7489  gcc/testsuite/gcc.dg/vect/vect-71.c
-75bd2fdedd60cb05c11ebcd02b8c4667  gcc/testsuite/gcc.dg/vect/vect-72.c
+c8439fd39a06122452d0db6ef21ab73a  gcc/testsuite/gcc.dg/vect/vect-72.c
 5d0cb3a2aabb58d724695b4b6da9a1df  gcc/testsuite/gcc.dg/vect/vect-73-big-array.c
 236d045f4bf894c01d1b247997f46872  gcc/testsuite/gcc.dg/vect/vect-73.c
 6e232994a4f343766b2f0bbaacfda081  gcc/testsuite/gcc.dg/vect/vect-74-big-array.c
 ef699bbd84fbb24df0c4e3ffee3c9291  gcc/testsuite/gcc.dg/vect/vect-74.c
-bc0ffdf8e1da11086c0142668874d544  gcc/testsuite/gcc.dg/vect/vect-75-big-array.c
-ffa635046d57104d5991d52784cd6f56  gcc/testsuite/gcc.dg/vect/vect-75.c
+1e0ef9b56a72dbb96e0c388ab7e1b5f8  gcc/testsuite/gcc.dg/vect/vect-75-big-array.c
+816860e18c046806629fb4af93c66610  gcc/testsuite/gcc.dg/vect/vect-75.c
 d64a003ffa8cd7e7b357904f4614722d  gcc/testsuite/gcc.dg/vect/vect-76-big-array.c
 63fb732db1f33e27ee02ddd0a78b69cb  gcc/testsuite/gcc.dg/vect/vect-76.c
-14d6e55bec4e1d2c5503be7a314aa386  gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c
-7f777c5ea8150a9434976a424904a57f  gcc/testsuite/gcc.dg/vect/vect-77-global.c
+ab5db0ef9e4118a15bbe7dc14c1c842e  gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c
+565b596a09ea3e1d9f0c6e1cd506c127  gcc/testsuite/gcc.dg/vect/vect-77-global.c
 8c6a357ac2abcc4d34a4cc241ed3e60d  gcc/testsuite/gcc.dg/vect/vect-77.c
-7fb7c364fa59aadd5684a363cd393c34  gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c
-b11d55c468b1298af725fd61f48c5cc4  gcc/testsuite/gcc.dg/vect/vect-78-global.c
+5ba96217c37041f28f66b02874a7dfc8  gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c
+22b873a256f7ccde8f7066f183639233  gcc/testsuite/gcc.dg/vect/vect-78-global.c
 dcd472edf9c8ee960e4751d036b7d6c0  gcc/testsuite/gcc.dg/vect/vect-78.c
 327d218e1d3e8ab4abaa031ee59afa6d  gcc/testsuite/gcc.dg/vect/vect-8.c
 aff36624d747fb6597072c557381e775  gcc/testsuite/gcc.dg/vect/vect-80-big-array.c
@@ -30049,9 +30159,9 @@ d859148583a305a0ecda090bed217c1e  gcc/testsuite/gcc.dg/vect/vect-85.c
 63454dc8a7d416b1273539196232b78f  gcc/testsuite/gcc.dg/vect/vect-9.c
 633363d6b236a68d9a5a3e6f07f004ef  gcc/testsuite/gcc.dg/vect/vect-91.c
 9a0f3a1f350aa97609e59bcc839cc4e2  gcc/testsuite/gcc.dg/vect/vect-92.c
-ec30ed13b996fffeb565e2be102a9174  gcc/testsuite/gcc.dg/vect/vect-93.c
-a5082fb29ffdcd248754fa2af3918e94  gcc/testsuite/gcc.dg/vect/vect-95.c
-c5490fa9a520545a2811c6b65a6254ff  gcc/testsuite/gcc.dg/vect/vect-96.c
+575ee2df329e1c77b2ba72a69e3f7b45  gcc/testsuite/gcc.dg/vect/vect-93.c
+70292c45f05b75856685007474423e25  gcc/testsuite/gcc.dg/vect/vect-95.c
+b3f23f962b7ba6225eb76feb8679ef4d  gcc/testsuite/gcc.dg/vect/vect-96.c
 85c5e6570e8edfd1cba1d721b5f51bd1  gcc/testsuite/gcc.dg/vect/vect-97-big-array.c
 f6123733ce48b8e09728942295c1f2e5  gcc/testsuite/gcc.dg/vect/vect-97.c
 21fc8585fd1b0ee2c63e3744e93b63eb  gcc/testsuite/gcc.dg/vect/vect-98-big-array.c
@@ -30068,18 +30178,18 @@ e515ab24ec42e3186120b1272505d749  gcc/testsuite/gcc.dg/vect/vect-all-big-array.c
 356540cb47f52ce058b16774196e8c42  gcc/testsuite/gcc.dg/vect/vect-complex-2.c
 ea0fc43761aed27b866af2a83a2cebec  gcc/testsuite/gcc.dg/vect/vect-complex-4.c
 9a305c191cbb7973c214624103bfe714  gcc/testsuite/gcc.dg/vect/vect-complex-5.c
-924526bdbd359ce460aa9d07bdfaba97  gcc/testsuite/gcc.dg/vect/vect-cond-1.c
+7c7bf1ab79cab62f3f796881a916da64  gcc/testsuite/gcc.dg/vect/vect-cond-1.c
 48c235df3fc734d15c1992821e7dcf11  gcc/testsuite/gcc.dg/vect/vect-cond-10.c
 6c2fc7f88a6806263a94fdfd1b8136c7  gcc/testsuite/gcc.dg/vect/vect-cond-11.c
 f79af52c888ca25f252b04b2031abd32  gcc/testsuite/gcc.dg/vect/vect-cond-2.c
-fec4faf4ff67d01805a375312e9f83eb  gcc/testsuite/gcc.dg/vect/vect-cond-3.c
-046d2934397c2fbcb41f0a0d909c2086  gcc/testsuite/gcc.dg/vect/vect-cond-4.c
+5c8c56ecc4f180c448d30650c7c43343  gcc/testsuite/gcc.dg/vect/vect-cond-3.c
+3030278ed847db9905eaba2f9f26058c  gcc/testsuite/gcc.dg/vect/vect-cond-4.c
 73cfafdebe2a2bd1c5bad6d99022cd54  gcc/testsuite/gcc.dg/vect/vect-cond-5.c
 ae2a0a9d3443c84df9a2425719b30c35  gcc/testsuite/gcc.dg/vect/vect-cond-6.c
 fdf8b0830fe6272455fc1870ee66953d  gcc/testsuite/gcc.dg/vect/vect-cond-7.c
 72c8b167797995c06c2023252c010c6b  gcc/testsuite/gcc.dg/vect/vect-cond-8.c
 e1695d257ee86bf47be98390f7e70eae  gcc/testsuite/gcc.dg/vect/vect-cond-9.c
-b28444d0fde83067c3e5133f6d86c26a  gcc/testsuite/gcc.dg/vect/vect-cselim-1.c
+25ccd7c4c81ec366636302db32e080f4  gcc/testsuite/gcc.dg/vect/vect-cselim-1.c
 07b06c98166fa8b04c92c5e372358e9d  gcc/testsuite/gcc.dg/vect/vect-cselim-2.c
 8850bf3235e15d194feffc9c4f25534d  gcc/testsuite/gcc.dg/vect/vect-debug-pr41926.c
 3454eb98308ca2c23fd1bddf0e4b3217  gcc/testsuite/gcc.dg/vect/vect-double-reduc-1.c
@@ -30129,7 +30239,7 @@ adb617f5019c21a03fde7f09dea6c0b0  gcc/testsuite/gcc.dg/vect/vect-iv-8.c
 da2e93e4559860264ac5cb38b59d8a97  gcc/testsuite/gcc.dg/vect/vect-ivdep-2.c
 31824126b8b0baf60befa6e2c0d0497c  gcc/testsuite/gcc.dg/vect/vect-mask-load-1.c
 b151986440c85999b4b4fd9267dd35da  gcc/testsuite/gcc.dg/vect/vect-mask-loadstore-1.c
-2b1c0953c0b043481d683b4cf88049c8  gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
+54a0de366d6e4670e1a261f4f6d69613  gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
 27fd176e18409a77521996da2c80e3ad  gcc/testsuite/gcc.dg/vect/vect-multitypes-10.c
 7fc87c8df0e85ad2b1f1823b62ba95de  gcc/testsuite/gcc.dg/vect/vect-multitypes-11.c
 768dcec75e819f47be288ba736c02e13  gcc/testsuite/gcc.dg/vect/vect-multitypes-12.c
@@ -30139,17 +30249,17 @@ fb0e265085f683348bac9db6025ad799  gcc/testsuite/gcc.dg/vect/vect-multitypes-14.c
 95914a0324869e1000b0bc5be3a8a7e1  gcc/testsuite/gcc.dg/vect/vect-multitypes-16.c
 54560eb50bde5e7aca5d06d5cd4f3bd9  gcc/testsuite/gcc.dg/vect/vect-multitypes-17.c
 3c81e477a15e80d59cdbb189266338b2  gcc/testsuite/gcc.dg/vect/vect-multitypes-2.c
-cc90ff358f0fd8f5d59f1129d009ec56  gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c
-af9a0f17b0f4c1d4e32f0df907b73022  gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
+73abe33477032fb2e077672c31ec931b  gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c
+654767de8511c5321f0156da2e31257f  gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
 cc9af1687106ab59078f9867683daf40  gcc/testsuite/gcc.dg/vect/vect-multitypes-5.c
-466bce494753a91f9d702bc1579d4a07  gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c
+ea899531d837579759ba1a4e09078409  gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c
 10965d9bff58ee807179a61bae5f201b  gcc/testsuite/gcc.dg/vect/vect-multitypes-7.c
 b470381ea6d5bc5a5c7b99d4c067bdf5  gcc/testsuite/gcc.dg/vect/vect-multitypes-8.c
 e8b220f0c95daad8dacc3b6d4f889d52  gcc/testsuite/gcc.dg/vect/vect-multitypes-9.c
 2e2dbf3b0316d72607adc72b5b8dfc96  gcc/testsuite/gcc.dg/vect/vect-neg-store-1.c
 51c8b3f14f41e779d54d2a269c8a65f2  gcc/testsuite/gcc.dg/vect/vect-neg-store-2.c
-9137104c3e2afdc9877325ae31351e87  gcc/testsuite/gcc.dg/vect/vect-nest-cycle-1.c
-faae222e91c0cbb174c18c89ad4ecc01  gcc/testsuite/gcc.dg/vect/vect-nest-cycle-2.c
+c73927bebad3a756788f4047803924c6  gcc/testsuite/gcc.dg/vect/vect-nest-cycle-1.c
+239300692e77d8d20446fb3fc367a423  gcc/testsuite/gcc.dg/vect/vect-nest-cycle-2.c
 95a8cefe6a9c54b6943ff139658ecc2d  gcc/testsuite/gcc.dg/vect/vect-nest-cycle-3.c
 c04d23d3edc4c0fc8fd199492b4fea43  gcc/testsuite/gcc.dg/vect/vect-nop-move.c
 9a5121b371bc200933d03c6719998cd3  gcc/testsuite/gcc.dg/vect/vect-outer-1-big-array.c
@@ -30168,8 +30278,8 @@ ac6efeb6b676637236e01af1a21eab09  gcc/testsuite/gcc.dg/vect/vect-outer-2c.c
 b52a4652c504d8dc362cb0b679bb6420  gcc/testsuite/gcc.dg/vect/vect-outer-2d.c
 aada790b34a72cc08856db6f96cebd92  gcc/testsuite/gcc.dg/vect/vect-outer-3-big-array.c
 4b82c65890fec9a7d315a475ae884ea8  gcc/testsuite/gcc.dg/vect/vect-outer-3.c
-eec5bcd5ac7c34a5da936009184fcc36  gcc/testsuite/gcc.dg/vect/vect-outer-3a-big-array.c
-4f32dd0d2ed626c348b5ba1f94219f79  gcc/testsuite/gcc.dg/vect/vect-outer-3a.c
+856f5df1665ac7664251040d6efd149f  gcc/testsuite/gcc.dg/vect/vect-outer-3a-big-array.c
+0f63e6624c869414d5158ce202529983  gcc/testsuite/gcc.dg/vect/vect-outer-3a.c
 d39c7c01eb678643970a13d9729c2b34  gcc/testsuite/gcc.dg/vect/vect-outer-3b.c
 7d948e2b23d837e15f04b51ec0f4f497  gcc/testsuite/gcc.dg/vect/vect-outer-3c.c
 5d28b0a722b29bfcc811849fffcaaa94  gcc/testsuite/gcc.dg/vect/vect-outer-4.c
@@ -30190,12 +30300,12 @@ f02fb2ddda815610959c1bf70ee655d9  gcc/testsuite/gcc.dg/vect/vect-outer-4k.c
 f02fb2ddda815610959c1bf70ee655d9  gcc/testsuite/gcc.dg/vect/vect-outer-4l.c
 79a121ff7de1ba425a62d79572e418db  gcc/testsuite/gcc.dg/vect/vect-outer-4m-big-array.c
 c2b4f57ef16601629ce3cae2dd1be15b  gcc/testsuite/gcc.dg/vect/vect-outer-4m.c
-939254446e840538c290d86adec2c17c  gcc/testsuite/gcc.dg/vect/vect-outer-5.c
+28c39d3c020e0f449ff49ba54fc2315c  gcc/testsuite/gcc.dg/vect/vect-outer-5.c
 895aa105092429bddbd27b7c69ed803b  gcc/testsuite/gcc.dg/vect/vect-outer-6.c
-a403714447135bdf9c722b7b2a4177f9  gcc/testsuite/gcc.dg/vect/vect-outer-fir-big-array.c
-cd3fb2a13bb41e3e20fb1e28ccbff842  gcc/testsuite/gcc.dg/vect/vect-outer-fir-lb-big-array.c
-00f376b977789cb05b09064287a9fda9  gcc/testsuite/gcc.dg/vect/vect-outer-fir-lb.c
-5471942742bb2260a04f3b026b6750ac  gcc/testsuite/gcc.dg/vect/vect-outer-fir.c
+be9cf292acbc1da318c295e8a372af76  gcc/testsuite/gcc.dg/vect/vect-outer-fir-big-array.c
+a85718833677dec181338d84765adc73  gcc/testsuite/gcc.dg/vect/vect-outer-fir-lb-big-array.c
+3f330f5635690a6925dfc9f8ff7f5867  gcc/testsuite/gcc.dg/vect/vect-outer-fir-lb.c
+c2a1a418d7a097446287e6a8de68ab8c  gcc/testsuite/gcc.dg/vect/vect-outer-fir.c
 d8071719d3faf006c8b0ea1baae051c2  gcc/testsuite/gcc.dg/vect/vect-over-widen-1-big-array.c
 5b482d323322ed5a6f2659dc1cb61804  gcc/testsuite/gcc.dg/vect/vect-over-widen-1.c
 1c9f2fe12ed486e92e400e36c9078b65  gcc/testsuite/gcc.dg/vect/vect-over-widen-2-big-array.c
@@ -30206,9 +30316,10 @@ ee77072424329a00f522eb4fada50813  gcc/testsuite/gcc.dg/vect/vect-over-widen-2.c
 42104783cff0720e1434721e9a822f5c  gcc/testsuite/gcc.dg/vect/vect-over-widen-4.c
 097022252cfc146324c8508ad88aef3e  gcc/testsuite/gcc.dg/vect/vect-peel-1.c
 019b4e61b86c1c16dbbcfb22d8f0dd8a  gcc/testsuite/gcc.dg/vect/vect-peel-2.c
-87a4f5cae681b6a60091896b842ad8d9  gcc/testsuite/gcc.dg/vect/vect-peel-3.c
-9bd2fa1768dcb5b6f5b2a7ea1251e086  gcc/testsuite/gcc.dg/vect/vect-peel-4.c
-cccb32b7af034389713af96790772dd4  gcc/testsuite/gcc.dg/vect/vect-pre-interact.c
+6d7b057b23cb1c2f32edc66c70f3f9bc  gcc/testsuite/gcc.dg/vect/vect-peel-3.c
+2dbd4406db28c05e0505a5c37624d2fe  gcc/testsuite/gcc.dg/vect/vect-peel-4.c
+299eed3d33da0040dbc7260ca4b6810c  gcc/testsuite/gcc.dg/vect/vect-pr61917.c
+a4154c97f160c4929310f7a12a66e190  gcc/testsuite/gcc.dg/vect/vect-pre-interact.c
 d189409957111714a81afb6375b24a2b  gcc/testsuite/gcc.dg/vect/vect-recip.c
 b11a063a4bf318b3146c469ad147874c  gcc/testsuite/gcc.dg/vect/vect-reduc-1.c
 fdde69e4e00f2079367df0a515476f25  gcc/testsuite/gcc.dg/vect/vect-reduc-10.c
@@ -30863,6 +30974,10 @@ ed3b25503ac7374fb7c47e079eb1318a  gcc/testsuite/gcc.target/aarch64/pr60697.c
 2cd11476b07e206416f5d88420120ea5  gcc/testsuite/gcc.target/aarch64/pr61325.c
 d8cfefc063686118062e9fc3b774907b  gcc/testsuite/gcc.target/aarch64/pr62040.c
 26fcfb82395e818d8d0bcfe702b2e752  gcc/testsuite/gcc.target/aarch64/pr62262.c
+5b090e5d951a21826fd629be991b5411  gcc/testsuite/gcc.target/aarch64/pr62308.c
+5195785cc7216a9662357829a66aa2c7  gcc/testsuite/gcc.target/aarch64/pr63424.c
+adf6bf3581f4c742fc0a942152ebc31c  gcc/testsuite/gcc.target/aarch64/pr64304.c
+c8f85510fcedfd5fda7fe58be4530841  gcc/testsuite/gcc.target/aarch64/pr65235_1.c
 1f95766b4ed5bfb5f2cf1f168a607a8d  gcc/testsuite/gcc.target/aarch64/predefine_large.c
 d38e476730748c653068e7cb2d8d6ca6  gcc/testsuite/gcc.target/aarch64/predefine_small.c
 29e7dbfba15c0f945488b33400b908b4  gcc/testsuite/gcc.target/aarch64/predefine_tiny.c
@@ -30875,11 +30990,14 @@ cf90801aa8927a70a5207b4cac2643b6  gcc/testsuite/gcc.target/aarch64/scalar-vca.c
 d1af130615ebe55d6b2860145acf25fd  gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c
 884050a96b25562ba73e9f6cd428f9ee  gcc/testsuite/gcc.target/aarch64/sha1_1.c
 fad4b886793516ea2f18ca518bf21e4c  gcc/testsuite/gcc.target/aarch64/sha256_1.c
+1720e6906e4df69467a464d77453cbb9  gcc/testsuite/gcc.target/aarch64/sisd-shft-neg_1.c
 2eb0ebe06f93e7d9a5fda0b22613b2ed  gcc/testsuite/gcc.target/aarch64/sshr64_1.c
 49024de201ed5116d85217d7038dead6  gcc/testsuite/gcc.target/aarch64/subs.c
 95b19fbb710f981f5e8a924e5f3bcff3  gcc/testsuite/gcc.target/aarch64/subs1.c
 0cbb039fb65030cef11917c9293308a4  gcc/testsuite/gcc.target/aarch64/subs2.c
 d0a9ffe3dd4b229a0faa6bee4082d983  gcc/testsuite/gcc.target/aarch64/subs3.c
+91673472341aa6990ceec9a0343af4be  gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c
+60d1ff5752c9aaaea86b646c2293510b  gcc/testsuite/gcc.target/aarch64/symbol-range.c
 4429ab957c1a2cdc359d1e9ed201466a  gcc/testsuite/gcc.target/aarch64/table-intrinsics.c
 a6690a127789f063ffc112a1ebdd5ca0  gcc/testsuite/gcc.target/aarch64/test-framepointer-1.c
 73012d477cb2f98e7807df8f4a7a23c1  gcc/testsuite/gcc.target/aarch64/test-framepointer-2.c
@@ -31025,6 +31143,7 @@ b36471f8edbf2a11ce23359823ecc10b  gcc/testsuite/gcc.target/alpha/pr24178.c
 0539ee2bde042196f5382b5c738d4f43  gcc/testsuite/gcc.target/alpha/pr42448-2.c
 5f0298d225684c28c36ad42548aeccbd  gcc/testsuite/gcc.target/alpha/pr42774.c
 4b2dcff48566cef7a104bfadab9354cc  gcc/testsuite/gcc.target/alpha/pr61586.c
+f3e51971d885d3c455c8107485a4115c  gcc/testsuite/gcc.target/alpha/pr66140.c
 fb02079e819ba875a046565cb325ff01  gcc/testsuite/gcc.target/arc/arc.exp
 423fbfcb77e8a6141ca45a6a918e7d06  gcc/testsuite/gcc.target/arc/barrel-shifter-1.c
 bad20bd941c5cc11536e8d6b5713cdee  gcc/testsuite/gcc.target/arc/barrel-shifter-2.c
@@ -31144,6 +31263,7 @@ e7a6ee2ec1c3114026b61611ebe1c9cf  gcc/testsuite/gcc.target/arm/cold-lc.c
 a584e2c054692af37faeadd1f461800b  gcc/testsuite/gcc.target/arm/combine-cmp-shift.c
 a876bac7b60292c02443bb6632af81be  gcc/testsuite/gcc.target/arm/combine-movs.c
 257aa0b2b8891d05f782af1a15b2ed25  gcc/testsuite/gcc.target/arm/cond-asm.c
+702468e7cb2029f03eaac95e5eea0533  gcc/testsuite/gcc.target/arm/constant-pool.c
 1c89ba825c88653c01849f8986e1542b  gcc/testsuite/gcc.target/arm/crypto-vaesdq_u8.c
 2ed72824fb0f88ddb43549410040a784  gcc/testsuite/gcc.target/arm/crypto-vaeseq_u8.c
 abba2731624485a0118e2059f5e1c67a  gcc/testsuite/gcc.target/arm/crypto-vaesimcq_u8.c
@@ -31166,6 +31286,7 @@ ed2b50cc975209c386ac092f41e1de71  gcc/testsuite/gcc.target/arm/crypto-vstrq_p128
 6b0bc0a8db3a0734d170609e2e465859  gcc/testsuite/gcc.target/arm/di-longlong64-sync-withhelpers.c
 d721a88ae72a8be261b58663490fc7ee  gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c
 2eafd217f35afc43ef00999773bc9c4a  gcc/testsuite/gcc.target/arm/div64-unwinding.c
+aac420c0b357d3ff45f93061cf99e491  gcc/testsuite/gcc.target/arm/divzero.c
 2a5821fd841035ff18b9f6eaae8338fc  gcc/testsuite/gcc.target/arm/eabi1.c
 14c1154266333682f985fe7c6c6e3911  gcc/testsuite/gcc.target/arm/eliminate.c
 78487646e9710e62b0d506909e9588a8  gcc/testsuite/gcc.target/arm/epilog-1.c
@@ -33430,6 +33551,9 @@ ac2f7687d3e813607c2f1f7be47ec2ec  gcc/testsuite/gcc.target/arm/pr60650-2.c
 ab23dd9bd4df72320ab9d55c8b5e52a8  gcc/testsuite/gcc.target/arm/pr60650.c
 5d22a67c50f8f42af6e8b3f143560b12  gcc/testsuite/gcc.target/arm/pr60657.c
 2a191b079e7834e00a2f71e2f4ef7fab  gcc/testsuite/gcc.target/arm/pr60663.c
+224b028685bb00477b6281c95ad71ca7  gcc/testsuite/gcc.target/arm/pr64453.c
+20d5f766f35a50d1adf5f8ba2af4293f  gcc/testsuite/gcc.target/arm/pr65647-2.c
+2be0cee0d9fe53e874115f4f9d82a3e2  gcc/testsuite/gcc.target/arm/pr65647.c
 3143560976572191d8bba6ba78a45aa6  gcc/testsuite/gcc.target/arm/register-variables.c
 9891ac3dc9739983de683e418f98f801  gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
 f4b0167ffa11835780a49b6681dae08a  gcc/testsuite/gcc.target/arm/sat-1.c
@@ -33602,6 +33726,9 @@ c458c2462e23a4c58a7e4d05b6200907  gcc/testsuite/gcc.target/avr/torture/fix-types
 006a6c5a86a749ba6291dfb65e0376e0  gcc/testsuite/gcc.target/avr/torture/pr57631.c
 fea352b16ae79edc9965b1f39680a709  gcc/testsuite/gcc.target/avr/torture/pr61055.c
 2531c68fb11c95a62490386167ef9148  gcc/testsuite/gcc.target/avr/torture/pr61443.c
+7f56c1b750dfe8d7e4128f15aa3eaffe  gcc/testsuite/gcc.target/avr/torture/pr63633-ice-mult.c
+44584f49cd0975073be7b86102774077  gcc/testsuite/gcc.target/avr/torture/pr64331.c
+dcabffeb42e88a442661b9e47e43a9c1  gcc/testsuite/gcc.target/avr/torture/pr64452.c
 21a45d34960ba9567b9f2483d22c843f  gcc/testsuite/gcc.target/avr/torture/progmem-1.c
 564c71a894aff68e98d5c4a6db2b47ae  gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp
 e3e1c41865f5287c9ff7e200745758fd  gcc/testsuite/gcc.target/avr/torture/sat-hr-plus-minus.c
@@ -33940,9 +34067,9 @@ d7f2f60c2c464ec7133704d0b8deb86d  gcc/testsuite/gcc.target/frv/fr550-builtins-2.
 d8fff2cc6bc3321095b7345915e98ec1  gcc/testsuite/gcc.target/frv/fr550-builtins-4.c
 4f94aea2a37f6adad09abfdbb47bb87e  gcc/testsuite/gcc.target/frv/fr550-builtins-5.c
 18caf6d11827a25263a22485a86c9ce9  gcc/testsuite/gcc.target/frv/frv.exp
-55f99af27b8b9f81812e60a897679039  gcc/testsuite/gcc.target/h8300/h8300.exp
-db2379822e5acbe4872b16c5ae4776bc  gcc/testsuite/gcc.target/h8300/pragma-isr.c
-4c26d8609b193993a6cab4d4e68d0f70  gcc/testsuite/gcc.target/h8300/pragma-isr2.c
+8413eb36a930c36615b95976d4d30ddb  gcc/testsuite/gcc.target/h8300/h8300.exp
+344a21000f3cf05f2baaf02b2c346cd5  gcc/testsuite/gcc.target/h8300/pragma-isr.c
+aaaadf978237931983f712ab447eeff0  gcc/testsuite/gcc.target/h8300/pragma-isr2.c
 48202f0a384db36b0b22c39d56b89641  gcc/testsuite/gcc.target/i386/20000609-1.c
 1eb3eb3df6c7fab586557cb5fafe4764  gcc/testsuite/gcc.target/i386/20000614-1.c
 538001d50a75973e7b6d6b3681c2db64  gcc/testsuite/gcc.target/i386/20000614-2.c
@@ -34665,6 +34792,7 @@ fe43a9deff46d9922603adbeeafc1bca  gcc/testsuite/gcc.target/i386/avx2-mul-1.c
 a544282846ec57648b2f38abf14119f0  gcc/testsuite/gcc.target/i386/avx2-pr51581-1.c
 46ffedd4e5e66cd46ad561ee8562eb7b  gcc/testsuite/gcc.target/i386/avx2-pr51581-2.c
 bbb7100a6167d19314d56f1bcc1d4b22  gcc/testsuite/gcc.target/i386/avx2-pr57233.c
+ba17e5440f855d5b86affe06cb486090  gcc/testsuite/gcc.target/i386/avx2-pr64286.c
 2b83554762241a146df7ccc1617e1bfa  gcc/testsuite/gcc.target/i386/avx2-vbroadcastsd_pd-1.c
 193f0a7d029b84ce4e3b2e58eac8240a  gcc/testsuite/gcc.target/i386/avx2-vbroadcastsd_pd-2.c
 84a46e7f4338347591f1c8fe0aaceda5  gcc/testsuite/gcc.target/i386/avx2-vbroadcastsi128-1.c
@@ -34993,14 +35121,14 @@ b806d2b83cc467c9c69a4b872b757c73  gcc/testsuite/gcc.target/i386/avx256-unaligned
 1ed00f85c56ba2eb621086a7b39e4529  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-4.c
 ac1c6f23df451df8715f98348ab41e7b  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-5.c
 010f15340b233494003927d058cdde0e  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-6.c
-7b8f83fca0df11b1009d237db927554a  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-7.c
+c21e6f6ce400e64d8a38ea6c1906ff77  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-7.c
 f76c959a520596d93aaae3e887ee6f5c  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-1.c
 b417b7cba6e7863514bdaf68a25c2f87  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-2.c
 7653cfcb994fd977d84ee901273763b7  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-3.c
 250feebe497c2ab8097e5df8cc1e0f07  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-4.c
 851dac1c7dd73efe6b05026da917342d  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-5.c
 3f5fa6be90bc7c0bb2fc93906c9940b3  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-6.c
-f0c850249eea85c390dbf0ff3c3379db  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-7.c
+a4b590675e1a9403c3be5256d1cb44fb  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-7.c
 d129987572ce37a1518d93342f1d75dd  gcc/testsuite/gcc.target/i386/avx512cd-check.h
 847cbf456e3bd40eecb9fa3f1fef2a8f  gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmb2q-1.c
 5e5d4a00ea8cb479b888db64aa93d8a8  gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c
@@ -35771,6 +35899,7 @@ bddf7c2fb14fca97f8ff604d99aa87eb  gcc/testsuite/gcc.target/i386/bmi-tzcnt-1a.c
 f696e5f06827c19304c1291071f8675b  gcc/testsuite/gcc.target/i386/bmi-tzcnt-2.c
 0c9052e28cad40006a0099159bd98468  gcc/testsuite/gcc.target/i386/bmi-tzcnt-2a.c
 9950789cb130fff96f198223bbe0f518  gcc/testsuite/gcc.target/i386/bmi2-bzhi-1.c
+f3f5d8570621946e66acad5ee1e7a9ce  gcc/testsuite/gcc.target/i386/bmi2-bzhi-2.c
 a2c0c7d391a581fc83d61c68b6bd649b  gcc/testsuite/gcc.target/i386/bmi2-bzhi32-1.c
 3ead3d8eb2eb9104a7e22ff065727719  gcc/testsuite/gcc.target/i386/bmi2-bzhi32-1a.c
 abb025375057fca2257ef280333b1bc3  gcc/testsuite/gcc.target/i386/bmi2-bzhi64-1.c
@@ -35824,7 +35953,7 @@ a9b1dee6ec200856939709d32118cf4d  gcc/testsuite/gcc.target/i386/builtin-bswap-1.
 04d6147486a507d49f5d165aac499b5d  gcc/testsuite/gcc.target/i386/builtin-copysign.c
 07c7b1b786ccb4b67484b353aa40d9c7  gcc/testsuite/gcc.target/i386/builtin-ucmp.c
 c8f91a97e3f4734a3595572bab26a3e7  gcc/testsuite/gcc.target/i386/builtin-unreachable.c
-01a89194cdd571b8a446d93a8a6b5719  gcc/testsuite/gcc.target/i386/builtin_target.c
+405e4f0e199b06a103607751697b9235  gcc/testsuite/gcc.target/i386/builtin_target.c
 a10441579d2b177bca2939688f1d171f  gcc/testsuite/gcc.target/i386/cadd.c
 371f18813dae88e704517a2270da2fa7  gcc/testsuite/gcc.target/i386/call-1.c
 e7febacbd793814a1bdb3f04d9d9fc7f  gcc/testsuite/gcc.target/i386/cleanup-1.c
@@ -36142,10 +36271,12 @@ e993892d6c4fa7eda7617a0b6857cd4b  gcc/testsuite/gcc.target/i386/math-torture/tru
 8d0dd0bf39f6311950e2c4e2075bb0b1  gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c
 93de197132b3aff14f295f7ef987c6be  gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c
 36eea93d2314b17dabcb2b0a81e809d9  gcc/testsuite/gcc.target/i386/memcpy-strategy-3.c
+6e857b4eb94b8707c380e73efcbc5a51  gcc/testsuite/gcc.target/i386/memcpy-strategy-4.c
 1bef9a963239a7fe9fa24104133f98c4  gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c
 588148afe44797c3ece52f91ab29fa63  gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c
 5386640096ab1c828a6e95c9cf2e6ed7  gcc/testsuite/gcc.target/i386/memset-1.c
 8dc0b20158a4bbdad650a8874321918c  gcc/testsuite/gcc.target/i386/memset-strategy-1.c
+e34fc4954adf255e63dd959604f68e95  gcc/testsuite/gcc.target/i386/memset-strategy-2.c
 4527b74c10834379269bf78cef27c7c9  gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c
 2487c7775c9759eeb178ebe1c7159bd8  gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c
 820bfa5c15a64564c66a03aa917aeae1  gcc/testsuite/gcc.target/i386/merge-1.c
@@ -36605,7 +36736,7 @@ ed04eaf1b0d21878e40126123e649722  gcc/testsuite/gcc.target/i386/pr56564-2.c
 0209a238a3bfb7603cda727af04d1e81  gcc/testsuite/gcc.target/i386/pr56564-4.c
 bd02b8a0614713f55733fac63a3e9c06  gcc/testsuite/gcc.target/i386/pr56866.c
 3568c4b3ce2c7cade44746d81d1eac8b  gcc/testsuite/gcc.target/i386/pr56903.c
-e84b92ba658d892841e7606e6312188e  gcc/testsuite/gcc.target/i386/pr57003.c
+52ad33056cedccbc3a81cd88d02d078b  gcc/testsuite/gcc.target/i386/pr57003.c
 8f35b23c364eec98865f376fc604a54d  gcc/testsuite/gcc.target/i386/pr57018.c
 0037b23bb497c1ed7bbde7fb0c6fac31  gcc/testsuite/gcc.target/i386/pr57046.c
 6f70dfee8fdef2308ac550207132caae  gcc/testsuite/gcc.target/i386/pr57091.c
@@ -36679,16 +36810,17 @@ b3b3ecaf9a73618a0676a1f5146e94e7  gcc/testsuite/gcc.target/i386/pr59794-3.c
 fbc800706742db8be4052de5e8f52eba  gcc/testsuite/gcc.target/i386/pr59794-7.c
 0c2d582f00adc7472660160cba8ba19b  gcc/testsuite/gcc.target/i386/pr59839.c
 918053d5181acfecc88c708f27f8f436  gcc/testsuite/gcc.target/i386/pr59880.c
-5ed461c10989df7a0bd751e9196e698a  gcc/testsuite/gcc.target/i386/pr59927.c
+b87fe1f8e7496a37c4723f6e51a2ea39  gcc/testsuite/gcc.target/i386/pr59927.c
 ef5e7cf22fd8cf05d21ba509a8796cae  gcc/testsuite/gcc.target/i386/pr59929.c
 fb96b888f73b2dddf89b41b3dbc9da0e  gcc/testsuite/gcc.target/i386/pr60077-1.c
 87f9b9773ac7d3c76e952ed8199c7a7c  gcc/testsuite/gcc.target/i386/pr60077-2.c
 88b9d9ea5e9c86ee839e81e96d13c31d  gcc/testsuite/gcc.target/i386/pr60205-1.c
 382fe9ce36716de83d47d92ede355b63  gcc/testsuite/gcc.target/i386/pr60205-2.c
 ef6b97efa08c7174694a3f12619b3adc  gcc/testsuite/gcc.target/i386/pr60508.c
-697da7d0cc19b38fd886149eb3d4af13  gcc/testsuite/gcc.target/i386/pr60516.c
+7cc5dc66387e141a9e8b75a8549d61db  gcc/testsuite/gcc.target/i386/pr60516.c
 3c94cee0c51e457793c9d3861c12d06d  gcc/testsuite/gcc.target/i386/pr60693.c
 aa9afa3fae8ccdc655d286ee8211123a  gcc/testsuite/gcc.target/i386/pr60700.c
+94f97b9ba7792a470646abc124975070  gcc/testsuite/gcc.target/i386/pr60851.c
 8166dccdf85e516834c35488dbde09e2  gcc/testsuite/gcc.target/i386/pr60868.c
 34cfaa1a2bf79cc8b3e8376802fd83e9  gcc/testsuite/gcc.target/i386/pr60901.c
 dd8e17a0fafdd705a4f0de3d73c4d9c0  gcc/testsuite/gcc.target/i386/pr60902.c
@@ -36703,7 +36835,22 @@ fed796584f0529c0df13752e3097e492  gcc/testsuite/gcc.target/i386/pr61923.c
 2d7356055e0714d3e0ac82c903f01bff  gcc/testsuite/gcc.target/i386/pr63285.c
 c401b2b80062c0d9567f773adca682d1  gcc/testsuite/gcc.target/i386/pr63448.c
 c8b8cf7292afebdc6c0ad1564ca75c7b  gcc/testsuite/gcc.target/i386/pr63495.c
+b94984e7c628f56d531f92149504a0ed  gcc/testsuite/gcc.target/i386/pr63538.c
 9c17e1a161d05dcffaa896376c5ecc02  gcc/testsuite/gcc.target/i386/pr63563.c
+35b959f5c23a6b821354ca3267133241  gcc/testsuite/gcc.target/i386/pr63637-1.c
+cd28ccf1174412586de4f6a0d35c7bb8  gcc/testsuite/gcc.target/i386/pr63637-2.c
+c5d71d031505193c4d15383b1c21050a  gcc/testsuite/gcc.target/i386/pr63637-3.c
+d548b0a42c2a8273243b4f40f7984176  gcc/testsuite/gcc.target/i386/pr63637-4.c
+52f77b4a63d2b5e3eaf1d165e3e4f74e  gcc/testsuite/gcc.target/i386/pr63637-5.c
+97f2f7820219e6ffbb57fb9724e2162c  gcc/testsuite/gcc.target/i386/pr63637-6.c
+3354497de0b46d3a82cd88d25ded4b55  gcc/testsuite/gcc.target/i386/pr63661.c
+ac964f4b563acffae35942f124a29c33  gcc/testsuite/gcc.target/i386/pr63947.c
+4ab995a39be1d9f6ab51bed74868b4d9  gcc/testsuite/gcc.target/i386/pr64387.c
+261c344d5ade1b9cad53d6494cec5c2c  gcc/testsuite/gcc.target/i386/pr64409.c
+0377a72cd6ce11f8f6572ea17dc41a9c  gcc/testsuite/gcc.target/i386/pr64513.c
+422e502b7fa41f85e1c5ca34b2c01376  gcc/testsuite/gcc.target/i386/pr65990.c
+eba9fc2cd96c68428c1d78d35c3f7e05  gcc/testsuite/gcc.target/i386/pr66275.c
+009d49d9d166c04092804db3489068cc  gcc/testsuite/gcc.target/i386/pr66470.c
 849234c7a569c1e86023244bc5561263  gcc/testsuite/gcc.target/i386/pr9771-1.c
 24ceb6d5f3f5cde4b9d852839bdb98ae  gcc/testsuite/gcc.target/i386/prefetchw-1.c
 f11f4731c396f099373c033ab016a64f  gcc/testsuite/gcc.target/i386/prefetchwt1-1.c
@@ -36773,7 +36920,7 @@ adcdec8ed0466d3411f5313513271763  gcc/testsuite/gcc.target/i386/sse-1.c
 49bde97b271274cb2bc26697ce2b19be  gcc/testsuite/gcc.target/i386/sse-11.c
 da0887e21f755dea1391c56a2db8f250  gcc/testsuite/gcc.target/i386/sse-12.c
 8784cd0bec0a96e2000e8d9da91e4b4e  gcc/testsuite/gcc.target/i386/sse-13.c
-971b59fa28582276dacc271a41cd7f33  gcc/testsuite/gcc.target/i386/sse-14.c
+cdfb63892eb0aa8a3b2a79e1faccbf38  gcc/testsuite/gcc.target/i386/sse-14.c
 92ad37b5ad7426d489b1b6f1ba0f41ea  gcc/testsuite/gcc.target/i386/sse-15.c
 2e7b115c4bd7984925f1a8d17a5faf67  gcc/testsuite/gcc.target/i386/sse-16.c
 f660e67b22cb44e6a6b38a247b1d78c3  gcc/testsuite/gcc.target/i386/sse-17.c
@@ -36782,10 +36929,11 @@ ff29adc9787a92e7aea73a68d1e62985  gcc/testsuite/gcc.target/i386/sse-19.c
 bb148b6e9dd40de90aed723794e38216  gcc/testsuite/gcc.target/i386/sse-2.c
 d7a71bae6a12771a9057e2d3a60c39f1  gcc/testsuite/gcc.target/i386/sse-20.c
 d5e7e4c7d488a953399d853e48aa484e  gcc/testsuite/gcc.target/i386/sse-21.c
-ac8f56a5b34db4d8f16f260aa628b72c  gcc/testsuite/gcc.target/i386/sse-22.c
+79ff2ce7c98ae9b3c616b79211e82a39  gcc/testsuite/gcc.target/i386/sse-22.c
 2e9df04bbe1a651327dc0cb2b34164bd  gcc/testsuite/gcc.target/i386/sse-22a.c
 9197ca330d99751a94a090008b73a0cb  gcc/testsuite/gcc.target/i386/sse-23.c
 867f62d0f6bb019d1344e530937652fb  gcc/testsuite/gcc.target/i386/sse-24.c
+f839ec28fa786a06dabe541954c1b1ae  gcc/testsuite/gcc.target/i386/sse-25.c
 9dfe2cc74e998cef475e202f64ff8322  gcc/testsuite/gcc.target/i386/sse-3.c
 5d81ca69ddc7b70211c056c3bdc53dfa  gcc/testsuite/gcc.target/i386/sse-4.c
 ef7d3880b59ecd512252a17d2abf1ef2  gcc/testsuite/gcc.target/i386/sse-5.c
@@ -38146,6 +38294,8 @@ caf01994c96172dac156c3da29317823  gcc/testsuite/gcc.target/powerpc/bswap32.c
 28a093e56a3b3b438802b7510941c3d7  gcc/testsuite/gcc.target/powerpc/bswap64-2.c
 3bb3045db789cd4d6908d1844637b555  gcc/testsuite/gcc.target/powerpc/bswap64-3.c
 37c12fff6f77333d7cb7d787bbb7f908  gcc/testsuite/gcc.target/powerpc/bswap64-4.c
+e991ce3e083e638042abce7c8b77451a  gcc/testsuite/gcc.target/powerpc/builtins-1.c
+dc95a5fef7263ed0af4f44c88e66612b  gcc/testsuite/gcc.target/powerpc/builtins-2.c
 0f68ff6e13a86474325e4f50b423e518  gcc/testsuite/gcc.target/powerpc/cell_builtin-1.c
 f4c2d3f214380e99f3e38806b5e44a00  gcc/testsuite/gcc.target/powerpc/cell_builtin-2.c
 bf885c625a0677cc9f49b53426e58ae4  gcc/testsuite/gcc.target/powerpc/cell_builtin-3.c
@@ -38158,6 +38308,7 @@ a5f9bde4e3b75b1650c086d628abc346  gcc/testsuite/gcc.target/powerpc/compress-floa
 200c7976ba75f6c986aedec205aad73b  gcc/testsuite/gcc.target/powerpc/compress-float-ppc.c
 6419d1aaea22c0476688f484ac4f0f43  gcc/testsuite/gcc.target/powerpc/const-compare.c
 644f48c93c92f6eb58f85baae4765b72  gcc/testsuite/gcc.target/powerpc/crypto-builtin-1.c
+14fe4a3bc84df2b97d9440c94d7c8339  gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c
 965986b227062a2b8c664c916a71ad45  gcc/testsuite/gcc.target/powerpc/darwin-abi-1.c
 9a0e4836781f28669ddca26eb214c2b2  gcc/testsuite/gcc.target/powerpc/darwin-abi-10.c
 66e5cfd1b7491e37c0ef258d09b6634d  gcc/testsuite/gcc.target/powerpc/darwin-abi-11.c
@@ -38208,7 +38359,8 @@ b04fe8cd314a3a748a73aeec923a8f87  gcc/testsuite/gcc.target/powerpc/e500-ord-2.c
 391b21c9192f7bcd5ab0a0179c012e29  gcc/testsuite/gcc.target/powerpc/extend-divide-2.c
 fbe44e0943c31011fa30a479b0856bc9  gcc/testsuite/gcc.target/powerpc/fusion.c
 4109709d89c976bec9d1d05e94004ff2  gcc/testsuite/gcc.target/powerpc/gcse-1.c
-f5543e6f996fc00e4ca43418e125fb66  gcc/testsuite/gcc.target/powerpc/htm-builtin-1.c
+d4c680a0477ecbe2fd90e52278838082  gcc/testsuite/gcc.target/powerpc/htm-1.c
+67e2632f85e32ee32548dd4d16a5f7ca  gcc/testsuite/gcc.target/powerpc/htm-builtin-1.c
 238571a7588bf04ee725a409029ddaf1  gcc/testsuite/gcc.target/powerpc/htm-ttest.c
 bd2f03394b7690c22ce1aab465adb75f  gcc/testsuite/gcc.target/powerpc/htm-xl-intrin-1.c
 8d634b2a7d443f1e5b4b69716e57ac00  gcc/testsuite/gcc.target/powerpc/indexed-addr.c
@@ -38376,7 +38528,7 @@ b58c990aefcc9e7a51cc889c7dd3e52d  gcc/testsuite/gcc.target/powerpc/pr48857.c
 083fc56b861afa57eadeebfd2ce361ae  gcc/testsuite/gcc.target/powerpc/pr52199.c
 1290fe5ee5af7086f991fe3276aa9bea  gcc/testsuite/gcc.target/powerpc/pr52457.c
 68a9411e29691e7f8953208e3ad3329b  gcc/testsuite/gcc.target/powerpc/pr52775.c
-1cfc823003a660fa613b860692646c73  gcc/testsuite/gcc.target/powerpc/pr53199.c
+35317040fad189678fc2d9f90ca836cf  gcc/testsuite/gcc.target/powerpc/pr53199.c
 ef6ed5d45a28e278de6223e6a92b7183  gcc/testsuite/gcc.target/powerpc/pr53487.c
 3fafe888a5a347cd1b88c764346a31b0  gcc/testsuite/gcc.target/powerpc/pr54009.c
 babf211c969ecb6f6cedf08f5ee9bae2  gcc/testsuite/gcc.target/powerpc/pr54240.c
@@ -38395,10 +38547,14 @@ f5f675be87d7c73915dffd6f9f37f269  gcc/testsuite/gcc.target/powerpc/pr58673-2.c
 e2be005a17035d4d4c6269830259fd72  gcc/testsuite/gcc.target/powerpc/pr60032.c
 8c870d5eacec32507050370083b285f4  gcc/testsuite/gcc.target/powerpc/pr60102.c
 70e395f580930213d5cbd9e97ec91f7f  gcc/testsuite/gcc.target/powerpc/pr60137.c
+91c957c2b8fe55786be4fa27ec587756  gcc/testsuite/gcc.target/powerpc/pr60158.c
 18d594301e79cf9932c8ad49c33828ac  gcc/testsuite/gcc.target/powerpc/pr60203.c
 f128ae78c8eb899c06243379c091ac5a  gcc/testsuite/gcc.target/powerpc/pr60676.c
 73ae1ef8995476aa6b62eea67f6f58dd  gcc/testsuite/gcc.target/powerpc/pr60735.c
 2049706da8f8c636452dd50d0dc22bdb  gcc/testsuite/gcc.target/powerpc/pr63335.c
+e45bfdaecbde494bbd4f3feed2a6d8ad  gcc/testsuite/gcc.target/powerpc/pr64505.c
+a284d0dacfcd6f771fef90d01d3a6372  gcc/testsuite/gcc.target/powerpc/pr65456.c
+b62881b057884522f471a0045de91404  gcc/testsuite/gcc.target/powerpc/pr65787.c
 06c624c2b437fc5b9f805dc2231a75b6  gcc/testsuite/gcc.target/powerpc/quad-atomic.c
 6e15a41526f5cb59817b7a5541452615  gcc/testsuite/gcc.target/powerpc/recip-1.c
 6f035f512a3f0d6917409f569174ccea  gcc/testsuite/gcc.target/powerpc/recip-2.c
@@ -38426,6 +38582,24 @@ caf83f2b272138041945d99cf818ff06  gcc/testsuite/gcc.target/powerpc/spe-vector-me
 aefbc9c117b311a9394883e9c890efb9  gcc/testsuite/gcc.target/powerpc/spe-vector-memset.c
 32bb5e201dd78c548aed0cdf044779ec  gcc/testsuite/gcc.target/powerpc/spe1.c
 c9be7e0cc9ba390460928b1de506fa70  gcc/testsuite/gcc.target/powerpc/stabs-attrib-vect-darwin.c
+a59ee456442fb848ede07589c0a6bb6e  gcc/testsuite/gcc.target/powerpc/swaps-p8-1.c
+f9cfd48e5324b92443f64a93e5c47140  gcc/testsuite/gcc.target/powerpc/swaps-p8-10.c
+150891aea1ac6751746c97b1d0f4215d  gcc/testsuite/gcc.target/powerpc/swaps-p8-11.c
+f364f8703e2f3b63a113065f32dddb07  gcc/testsuite/gcc.target/powerpc/swaps-p8-12.c
+b7b97cacccde5659943f0834decbd080  gcc/testsuite/gcc.target/powerpc/swaps-p8-13.c
+2a5a6e9ec27ef1f8c57158f53799349e  gcc/testsuite/gcc.target/powerpc/swaps-p8-14.c
+74f6f2ee4be232d728990956fd053ec7  gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c
+239e659171cff79c2019960cbeb41b63  gcc/testsuite/gcc.target/powerpc/swaps-p8-16.c
+965d7565d6b0810f8220d916ba958565  gcc/testsuite/gcc.target/powerpc/swaps-p8-17.c
+88eda95ce377e04d1b34e1304ee82ffa  gcc/testsuite/gcc.target/powerpc/swaps-p8-18.c
+89b4a8bdc073fb0fe5966edfd7443dd9  gcc/testsuite/gcc.target/powerpc/swaps-p8-2.c
+84237fc0555dd56c639a0274a8f4dbde  gcc/testsuite/gcc.target/powerpc/swaps-p8-3.c
+0df14a19fd6ee081105fc2b90003a0b4  gcc/testsuite/gcc.target/powerpc/swaps-p8-4.c
+26517c689d143f1397c457beaff12ae6  gcc/testsuite/gcc.target/powerpc/swaps-p8-5.c
+0822c3753f3d5eb389f4e197f60558d9  gcc/testsuite/gcc.target/powerpc/swaps-p8-6.c
+b8cea10d187ee0ff03310bf53b54d85e  gcc/testsuite/gcc.target/powerpc/swaps-p8-7.c
+ce6b26ef67ffe555b789e4205dc2e809  gcc/testsuite/gcc.target/powerpc/swaps-p8-8.c
+8abb62ec1d013c705390c6c55084378d  gcc/testsuite/gcc.target/powerpc/swaps-p8-9.c
 18366289600f6f5c0ed1255bd8c267db  gcc/testsuite/gcc.target/powerpc/tfmode_off.c
 c2edbb1afba546ea3ac8a5efcaca9c38  gcc/testsuite/gcc.target/powerpc/ti_math1.c
 c3d0d51284479d220a6166a0f362536c  gcc/testsuite/gcc.target/powerpc/ti_math2.c
@@ -38451,12 +38625,12 @@ b0c1d7dea1b59b73016c5b62e9c82ff6  gcc/testsuite/gcc.target/powerpc/vsx-vector-1.
 a7b9c04e0f20eab9e51d1bdd023d94af  gcc/testsuite/gcc.target/powerpc/vsx-vector-5.c
 a2072ad74a24ce30e97fe2d798e82f17  gcc/testsuite/gcc.target/powerpc/vsx-vector-6.c
 02e486cc4da2876b19ca6c3f273e11f1  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-1.c
-9872a076e8269daa449873ed4aa21cbe  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-2.c
+9c5b01702e4328100dfad365db7c5221  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-2.c
 deaac0868069f392810398a823627b66  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-3.c
-c7a191c11ccbc5770ebe20f00eaa52ec  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-4.c
+bdaf0733584a4aee4e4f94e17fc69424  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-4.c
 52bba0d36a922d5ab647a05f4dcbe1c8  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-5.c
-1fe18a0a55ad10d500c0bc0babacb03b  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-6.c
-ba99d1fa347eab90fc2786b1342e1621  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c
+136fe9679b7ef86bd74d55f7582cc17f  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-6.c
+fca9df3c7d99ff80b17a791581d9ada3  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c
 f15dbc7b32cf8e8a1f10d9bb963795b6  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c
 74493cad6300a9fee5c1697cf78ef2d7  gcc/testsuite/gcc.target/powerpc/warn-1.c
 39a87b801be006af260d1976b5476c11  gcc/testsuite/gcc.target/powerpc/warn-2.c
@@ -38480,37 +38654,61 @@ ee05c824cd4a82ab77049eb9faf0e4fc  gcc/testsuite/gcc.target/s390/20050524-1.c
 c975117f4dad5f7d006165a64d22ff94  gcc/testsuite/gcc.target/s390/20050824-1.c
 943c3f5138314c478e34a5e9e2849353  gcc/testsuite/gcc.target/s390/20071212-1.c
 4749a758569519a8c423d7740f95ee8d  gcc/testsuite/gcc.target/s390/20090223-1.c
-a80a55007803293322d862a01298d50e  gcc/testsuite/gcc.target/s390/20140327-1.c
+b496b43e01188107d0277ab22fe7faa6  gcc/testsuite/gcc.target/s390/20140327-1.c
 d69a98eeb9d370fcef146a6f7778c59d  gcc/testsuite/gcc.target/s390/addr-constraints-1.c
 2f2404c29092408bd406cc2e185ee7d4  gcc/testsuite/gcc.target/s390/fp2int1.c
 9b770970bea6710409e92c9a84d3a5d3  gcc/testsuite/gcc.target/s390/frame-addr1.c
 c7958dc9fa4da0d50fe09b45a6790ac0  gcc/testsuite/gcc.target/s390/frame-addr2.c
-0ee142767c93780f708bd0c14f04edc1  gcc/testsuite/gcc.target/s390/hotpatch-1.c
-340fdd6a0f9afd4bad921a3134a2532d  gcc/testsuite/gcc.target/s390/hotpatch-10.c
-65db4e9f44d749aa516535ef9d7fc89a  gcc/testsuite/gcc.target/s390/hotpatch-11.c
-a3abddd5fc720bccfb704b72bf7d41fb  gcc/testsuite/gcc.target/s390/hotpatch-12.c
-6311263c8c0827fcb4896e85267ab4ef  gcc/testsuite/gcc.target/s390/hotpatch-2.c
-34ba5e1ad14e5eb64e5383991e3def5d  gcc/testsuite/gcc.target/s390/hotpatch-3.c
-58c69e9cb282ca92237917dd951dd63b  gcc/testsuite/gcc.target/s390/hotpatch-4.c
-0f122511639a7c9b78f63958469d5b75  gcc/testsuite/gcc.target/s390/hotpatch-5.c
-f8237f714cbed436222589a20071e43a  gcc/testsuite/gcc.target/s390/hotpatch-6.c
-4f822e9d463ff7c91e7c5a7cf8559289  gcc/testsuite/gcc.target/s390/hotpatch-7.c
-2f0b5dc42587a7cc2c71d0c109315389  gcc/testsuite/gcc.target/s390/hotpatch-8.c
-3a2b4ef525af58764ce8b4f8627682e0  gcc/testsuite/gcc.target/s390/hotpatch-9.c
-0ba19bb8f20ddf711e2bcabde826dd99  gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c
-bbde2dde58a101fdc1e729beb219bebb  gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c
-13d5fa3aa355b1060951eaa54d0fed40  gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c
-d7413f00fcb5ac3bc5eed81afdf59493  gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c
-ea24f35cf195b9b92221acaeb87306ab  gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c
-02eceadeb241a5918a6a25abd5a37bd4  gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c
-b2c42b3d45a991bfe88ec9cd99bf9631  gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c
-674df152ae9c3b91203b32189b562281  gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c
+da005522254518c441d9989f03b2ffcf  gcc/testsuite/gcc.target/s390/hotpatch-1.c
+b414e2c204b656066ad36a9f6a3d5cb1  gcc/testsuite/gcc.target/s390/hotpatch-10.c
+1a40584ce63992193099b6cbfcd42ebd  gcc/testsuite/gcc.target/s390/hotpatch-11.c
+95da94fdec3d739f9858343bb8e6dba7  gcc/testsuite/gcc.target/s390/hotpatch-12.c
+5cbf1112bcb7e375504e8f01b2cea774  gcc/testsuite/gcc.target/s390/hotpatch-13.c
+daa58a58373827e1afafc8fe1564b326  gcc/testsuite/gcc.target/s390/hotpatch-14.c
+8bfdbc3bdbfa37021c123a50f78dc971  gcc/testsuite/gcc.target/s390/hotpatch-15.c
+cc957f6a8ca34a2b295028365be0d4bb  gcc/testsuite/gcc.target/s390/hotpatch-16.c
+36cf335953d1eb05eb2a3db0e393dfba  gcc/testsuite/gcc.target/s390/hotpatch-17.c
+74ebab55fcdbb15105fdbfa06445e197  gcc/testsuite/gcc.target/s390/hotpatch-18.c
+3151dfa44fa6ede087e1bf1b06e7d8a2  gcc/testsuite/gcc.target/s390/hotpatch-19.c
+3bea4f6affcb7875e75a4eebf0dc2195  gcc/testsuite/gcc.target/s390/hotpatch-2.c
+16214d0069b78923a6e56d80d47c10d8  gcc/testsuite/gcc.target/s390/hotpatch-20.c
+0f1e9a42f062a76c78a8eef0f0baa2fb  gcc/testsuite/gcc.target/s390/hotpatch-21.c
+e40969dcaf599127a656c9cabcbced3f  gcc/testsuite/gcc.target/s390/hotpatch-22.c
+c889951a99c7f2214699ea58fab60e10  gcc/testsuite/gcc.target/s390/hotpatch-23.c
+e7da12246bbce890bcdc9607eeb1c7f6  gcc/testsuite/gcc.target/s390/hotpatch-24.c
+6b486582d44f14ec8704504c3c6a53ef  gcc/testsuite/gcc.target/s390/hotpatch-25.c
+7d4b97fa8b7b2a921708cade499e8d7c  gcc/testsuite/gcc.target/s390/hotpatch-26.c
+2d144115c0686c2b481cfd5dae6a78ab  gcc/testsuite/gcc.target/s390/hotpatch-27.c
+d478b0a6a520bbd1dd8a00b81f4d23dc  gcc/testsuite/gcc.target/s390/hotpatch-28.c
+3a145b24b6b755522c0f2d1b4682aba2  gcc/testsuite/gcc.target/s390/hotpatch-3.c
+039ab125589bc83ad56eccb0ec01ced1  gcc/testsuite/gcc.target/s390/hotpatch-4.c
+50d16140ca38cfd488d7d93a77ac968d  gcc/testsuite/gcc.target/s390/hotpatch-5.c
+50c204890291e5aed2ab21384d5e2508  gcc/testsuite/gcc.target/s390/hotpatch-6.c
+c23aba1bd025a9e39d2488b4383e403f  gcc/testsuite/gcc.target/s390/hotpatch-7.c
+e13dc17ef2e2459dd8f42f6e1b38e825  gcc/testsuite/gcc.target/s390/hotpatch-8.c
+660ba12d8a20b2989c773dce1224dc4f  gcc/testsuite/gcc.target/s390/hotpatch-9.c
+f3a7b2010ca565b7125dc38ca00e78ad  gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c
+9603eb38bc72a91e326dc13c1608b6c2  gcc/testsuite/gcc.target/s390/hotpatch-compile-10.c
+2cfbfabcdd4e767c043a004e78c79292  gcc/testsuite/gcc.target/s390/hotpatch-compile-11.c
+bd7a4406d2cf1461ac3f32e5309411ba  gcc/testsuite/gcc.target/s390/hotpatch-compile-12.c
+bd232b694dd3039b517ea38956e7f91e  gcc/testsuite/gcc.target/s390/hotpatch-compile-13.c
+07b2aee9b8d4752aec61247645e4227a  gcc/testsuite/gcc.target/s390/hotpatch-compile-14.c
+bb0b92fbc87951c12e26ea740425998e  gcc/testsuite/gcc.target/s390/hotpatch-compile-15.c
+ed701cbdd9723bc01982282b8be60128  gcc/testsuite/gcc.target/s390/hotpatch-compile-16.c
+e5ff1dac7dc288f0431b3dd733ba0b94  gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c
+27fc0481878867a0efdd974cdeeced3b  gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c
+4c8644901227cc81d2004260a5ad7f19  gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c
+6ecb47eacf3e4360b5b00a4bfc66254a  gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c
+5c6bb52d89897314cfeee20a79ea9406  gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c
+8b06781c4e7928abaa22b1af0ecaa1ce  gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c
+26eb8960a9a9a65bcffca89abd64dc02  gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c
+22f3ebd2dbdf464aa5d6c05464ccbff8  gcc/testsuite/gcc.target/s390/hotpatch-compile-9.c
 5802a1b6bd3c0199af5a31afaf0f3769  gcc/testsuite/gcc.target/s390/htm-builtins-1.c
 f6e2124bdb58273a0f7f5295b25032c0  gcc/testsuite/gcc.target/s390/htm-builtins-2.c
 4178b3de1bcb9044aedd4c8ae7af272c  gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c
 e66bccb215526105b9b8a2dc1d3a879b  gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c
 ab0f83b02eabb2022df1ceee50ef4733  gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c
-b3dd05db76a00a764bd5968152b2ef72  gcc/testsuite/gcc.target/s390/htm-nofloat-1.c
+505b147005a5420ed9b80096c66452c5  gcc/testsuite/gcc.target/s390/htm-nofloat-1.c
 81eabdfd43ce0edc626c27f72b8cbfed  gcc/testsuite/gcc.target/s390/htm-nofloat-compile-1.c
 ee3f00537b1c391d545c37c6ea4a145c  gcc/testsuite/gcc.target/s390/nearestint-1.c
 765307a040de72f2f4376b7068d68018  gcc/testsuite/gcc.target/s390/pr20927.c
@@ -38519,11 +38717,11 @@ ee3f00537b1c391d545c37c6ea4a145c  gcc/testsuite/gcc.target/s390/nearestint-1.c
 e9e2200b0b1b2ee975a929b593283ffc  gcc/testsuite/gcc.target/s390/pr36822.c
 986cb73ba5634b36b1a359cccad95627  gcc/testsuite/gcc.target/s390/pr42224.c
 4eacd924b86307098c69750577bcbec7  gcc/testsuite/gcc.target/s390/pr55718.c
-82a1bf8ba5b74d2d21fb9ccb210971a0  gcc/testsuite/gcc.target/s390/pr57559.c
-a19ca8ca5e72f417331998bd66b47544  gcc/testsuite/gcc.target/s390/pr57960.c
+6eff422787e3130ffd44a19983d51301  gcc/testsuite/gcc.target/s390/pr57559.c
+15e57d65510d631ba11ff1b829743815  gcc/testsuite/gcc.target/s390/pr57960.c
 f9de3c4e9d9e8c3a707e1f51e48901b6  gcc/testsuite/gcc.target/s390/return-addr1.c
 5368e8759352b798ae1db6bc79919aa2  gcc/testsuite/gcc.target/s390/return-addr2.c
-0f8b3f82a20e8634a545032db9d698a6  gcc/testsuite/gcc.target/s390/s390.exp
+12e1931eda90d450c770c3757cff77db  gcc/testsuite/gcc.target/s390/s390.exp
 3a9ba61f8844739d1b5989c7c7e2b6c1  gcc/testsuite/gcc.target/s390/stackcheck1.c
 201a36e4a6548d10d83352d305b4284a  gcc/testsuite/gcc.target/s390/tf_to_di-1.c
 f2555ae61f91a75e994a637c41e35804  gcc/testsuite/gcc.target/sh/20080410-1.c
@@ -38590,8 +38788,8 @@ ceaf5dcd727609985fcab03ea7c99bb4  gcc/testsuite/gcc.target/sh/pr51244-16.c
 95368b17b65bd8b26f4f927a62f252f1  gcc/testsuite/gcc.target/sh/pr51244-18.c
 3dfe5b0b7c35ae864076a615d9a18066  gcc/testsuite/gcc.target/sh/pr51244-19.c
 f06ee20dead642937b715ccf553b3fe4  gcc/testsuite/gcc.target/sh/pr51244-2.c
-1ff7a9464b2c716b25fbf7f361de3b2f  gcc/testsuite/gcc.target/sh/pr51244-20-sh2a.c
-d941ec169b58a71e09ddb4ebab4a06cf  gcc/testsuite/gcc.target/sh/pr51244-20.c
+ea025033ce84dbee4ff5b9da071e3984  gcc/testsuite/gcc.target/sh/pr51244-20-sh2a.c
+3c9df38d6512be3b7928f5e4ad3c5e9b  gcc/testsuite/gcc.target/sh/pr51244-20.c
 30da4dace225184776c027e1b9a885dd  gcc/testsuite/gcc.target/sh/pr51244-3.c
 cf0a3911c7cc09bc61a0ec51718aa094  gcc/testsuite/gcc.target/sh/pr51244-4.c
 c6ef052b53611f44e963be9fc57502a7  gcc/testsuite/gcc.target/sh/pr51244-5.c
@@ -38614,7 +38812,7 @@ d93c12592e8d2c6e2c2550efc44c9bd7  gcc/testsuite/gcc.target/sh/pr53512-1.c
 8bea5c38373179e9762e63d96abe0447  gcc/testsuite/gcc.target/sh/pr53512-4.c
 7cf540367e2fdfe650637a94f5804591  gcc/testsuite/gcc.target/sh/pr53568-1.c
 8dc64a540b99055aa275c13f865008af  gcc/testsuite/gcc.target/sh/pr53976-1.c
-a0a009365212ccf70fdc747934a84660  gcc/testsuite/gcc.target/sh/pr53988.c
+f545ac7608f4dfd1dd7412f3c759d64d  gcc/testsuite/gcc.target/sh/pr53988.c
 461d523c5eecb54d37c2d5e4658292ca  gcc/testsuite/gcc.target/sh/pr54089-1.c
 247a87c513fd63c89ea4cca7bb24151e  gcc/testsuite/gcc.target/sh/pr54089-2.c
 f64f752f02fddbd410dc4deb810458d6  gcc/testsuite/gcc.target/sh/pr54089-3.c
@@ -38645,6 +38843,7 @@ e7ee337ca318a928290d21debfe3a054  gcc/testsuite/gcc.target/sh/pr55303-1.c
 50a7376411cae60be67c2e78ea2fdb7d  gcc/testsuite/gcc.target/sh/pr56547-1.c
 2988943d32009d24f406d3342c62a350  gcc/testsuite/gcc.target/sh/pr56547-2.c
 b739e0f8eea9aa8c1b2205a8389412ce  gcc/testsuite/gcc.target/sh/pr61996.c
+bb9e1708fea25409b27471e2af1254de  gcc/testsuite/gcc.target/sh/pr64507.c
 757704652fb2eb938450b325d90c0529  gcc/testsuite/gcc.target/sh/pr6526.c
 32ec5d97d025dae4e6f726d45c814a4c  gcc/testsuite/gcc.target/sh/pragma-isr-nosave_low_regs.c
 a1de10721748374ef10c0bcf4117db34  gcc/testsuite/gcc.target/sh/pragma-isr-trap-exit.c
@@ -38683,6 +38882,8 @@ acf9f8b3829130d50b81545876ffb5fd  gcc/testsuite/gcc.target/sh/torture/pr30807.c
 ad2ffcce04da9c8d14f127c31cc9f005  gcc/testsuite/gcc.target/sh/torture/pr34777.c
 7f6ed3fcff1c5d1ecfdeb390d9bafbd3  gcc/testsuite/gcc.target/sh/torture/pr58314.c
 ea51469597a5cfee0e33fc77f92446d0  gcc/testsuite/gcc.target/sh/torture/pr58475.c
+a2644837d5da1aa36c1bcfeab14bd34b  gcc/testsuite/gcc.target/sh/torture/pr63783-1.c
+03330289ad0c58d76492947237b4d23e  gcc/testsuite/gcc.target/sh/torture/pr63783-2.c
 19c3b5115ec395173aaa57dab663dd9a  gcc/testsuite/gcc.target/sh/torture/pragma-isr.c
 cf681a819374faeaf9e59a21af08716c  gcc/testsuite/gcc.target/sh/torture/pragma-isr2.c
 38769a0165dc79bce72d2cce9c197fcc  gcc/testsuite/gcc.target/sh/torture/sh-torture.exp
@@ -39346,6 +39547,7 @@ b985d75d4d77d7f24d29efbb0266b7c1  gcc/testsuite/gfortran.dg/allocate_error_4.f90
 fb64bc7d356ec60804fbf43d60862c56  gcc/testsuite/gfortran.dg/allocate_scalar_with_shape.f90
 85b517b1e2ad96a7d4e84672378d9fc3  gcc/testsuite/gfortran.dg/allocate_stat.f90
 253a002731f9a4dd5588b787f6b8b83c  gcc/testsuite/gfortran.dg/allocate_stat_2.f90
+8cfa0a49b7ef62139bdd4d2b39009aba  gcc/testsuite/gfortran.dg/allocate_with_mold_1.f90
 38e31a9c8efb7f50005c46dfb7e1d27e  gcc/testsuite/gfortran.dg/allocate_with_source_1.f90
 f4a7a7cae5d96eb1020cfcf8e519b49b  gcc/testsuite/gfortran.dg/allocate_with_source_2.f90
 a5e1f5792644ea510ff26752c63c0de0  gcc/testsuite/gfortran.dg/allocate_with_source_3.f90
@@ -40113,6 +40315,8 @@ f6c8b5b50b51f2ab2004f4e6a27e0e8a  gcc/testsuite/gfortran.dg/class_allocate_13.f9
 1a7503b24a6fd13e97b1106d333404c5  gcc/testsuite/gfortran.dg/class_allocate_14.f90
 ed1ea9318f54280f6485eb431266406d  gcc/testsuite/gfortran.dg/class_allocate_15.f90
 60f57f074adcddafa4cb8f1170bed301  gcc/testsuite/gfortran.dg/class_allocate_16.f90
+6175789e444efb38f19a253596e768a5  gcc/testsuite/gfortran.dg/class_allocate_17.f90
+9375e43c7c4df51161a432f538bff911  gcc/testsuite/gfortran.dg/class_allocate_18.f90
 29fb0e972591bb1c0d18986cfd4000c1  gcc/testsuite/gfortran.dg/class_allocate_2.f03
 429d52f4933a6ef04052e7b8faa6314a  gcc/testsuite/gfortran.dg/class_allocate_3.f03
 d40289e198c5b62af940ac46912169f0  gcc/testsuite/gfortran.dg/class_allocate_4.f03
@@ -40202,6 +40406,8 @@ ccea5fe2d622c1b4b11ac162a1a5ab5d  gcc/testsuite/gfortran.dg/coarray_25.f90
 e65c5445950f87f85602c6b3e051ab49  gcc/testsuite/gfortran.dg/coarray_3.f90
 165864e135d14c06be2305de1dff5d24  gcc/testsuite/gfortran.dg/coarray_30.f90
 c895153ea322071061ddc24e28e58a84  gcc/testsuite/gfortran.dg/coarray_31.f90
+ce022dd06d4bbcef98eafafee33de6d5  gcc/testsuite/gfortran.dg/coarray_36.f
+2bc29c48bac5a9d9afee289df9255d9a  gcc/testsuite/gfortran.dg/coarray_37.f90
 ad8ecfdba25ace790b9bfc8e94e0e05f  gcc/testsuite/gfortran.dg/coarray_4.f90
 ef172e1d19584d7e55648b555dbf8fa3  gcc/testsuite/gfortran.dg/coarray_5.f90
 5efb9c724bfccf5d1ed56971418ba385  gcc/testsuite/gfortran.dg/coarray_6.f90
@@ -40462,6 +40668,7 @@ b697022c211753c6e3f026bc337e8683  gcc/testsuite/gfortran.dg/dependency_34.f90
 14557cb6edcda0eff3fa327f7ea23aaa  gcc/testsuite/gfortran.dg/dependency_42.f90
 dca63cf93efe22616e44d9f46b5b1933  gcc/testsuite/gfortran.dg/dependency_43.f90
 52a475961b0e9c97d571fa626e1754b5  gcc/testsuite/gfortran.dg/dependency_44.f90
+9908775fdc0125fcca5e0250d562cdb1  gcc/testsuite/gfortran.dg/dependency_45.f90
 bbca43e474853e196b5ef3cebb69a8c3  gcc/testsuite/gfortran.dg/dependency_5.f90
 0ac149b1aeb883fd64f93f0129019639  gcc/testsuite/gfortran.dg/dependency_6.f90
 00f6d5a2a991eed5c94bfa092755e91f  gcc/testsuite/gfortran.dg/dependency_7.f90
@@ -40658,6 +40865,7 @@ d567d5b4840878ab834bb0c7bbc09c37  gcc/testsuite/gfortran.dg/entry_1.f90
 c3b9b0c7f1876d8989f1efa78c168e18  gcc/testsuite/gfortran.dg/entry_18.f90
 fe5fde412958e201197383cf5ae0b542  gcc/testsuite/gfortran.dg/entry_19.f90
 dde6c08dab677880bb894b2143cf090b  gcc/testsuite/gfortran.dg/entry_2.f90
+df7fd6f7581d27330f0013f9a3246e99  gcc/testsuite/gfortran.dg/entry_20.f90
 9ed1fb10bd35039c373802778017d0b3  gcc/testsuite/gfortran.dg/entry_3.f90
 b38bdeb67849d262a6ff0a7a985e1835  gcc/testsuite/gfortran.dg/entry_4.f90
 d9c60fad31625139f9e0a67c69d59e59  gcc/testsuite/gfortran.dg/entry_5.f90
@@ -40797,6 +41005,7 @@ d88c4f69c4e8abbcf539c35db1c38c47  gcc/testsuite/gfortran.dg/finalize_22.f90
 694cfd8a3b55175c1a6e16f7d7f60038  gcc/testsuite/gfortran.dg/finalize_23.f90
 7777e7da27f0f204cb380c5791769371  gcc/testsuite/gfortran.dg/finalize_24.f90
 9d8695ba5d9b84a617601b19fbc15f3e  gcc/testsuite/gfortran.dg/finalize_25.f90
+35765b76a6036e3cabd02fe4ff0f35df  gcc/testsuite/gfortran.dg/finalize_28.f90
 fd6f56591cff43978fb9e37af994eec0  gcc/testsuite/gfortran.dg/finalize_3.f03
 92b4ca27645d88cb11543d720382b004  gcc/testsuite/gfortran.dg/finalize_4.f03
 ce817f495edb0ac306d6ae1052014e67  gcc/testsuite/gfortran.dg/finalize_5.f03
@@ -41590,6 +41799,7 @@ c7e6a30e6c109618b8ab96c3086943a9  gcc/testsuite/gfortran.dg/internal_pack_11.f90
 594c903e93f57463051a7cf0534108b0  gcc/testsuite/gfortran.dg/internal_pack_12.f90
 68c3478445465050be4a74ca6ec011c6  gcc/testsuite/gfortran.dg/internal_pack_13.f90
 c7682d3c6493ed40168b7c348ab52330  gcc/testsuite/gfortran.dg/internal_pack_14.f90
+a2e42e2c7d056f0a04014447693aff2f  gcc/testsuite/gfortran.dg/internal_pack_15.f90
 71ffca46dbef72f72be192371fcbfcc5  gcc/testsuite/gfortran.dg/internal_pack_2.f90
 bd68d54ca4cd7f67cf7d07a390db2d1f  gcc/testsuite/gfortran.dg/internal_pack_3.f90
 9517bf5fc79bc0adea803a2fd2af75d0  gcc/testsuite/gfortran.dg/internal_pack_4.f90
@@ -42042,6 +42252,7 @@ d52b7b2d2695adafc207fadebccd6d4a  gcc/testsuite/gfortran.dg/namelist_82.f90
 7fcd29e2cf1d6789f4849f6a4b70d2d8  gcc/testsuite/gfortran.dg/namelist_83.f90
 22266f4109dcc292b6a3c9a8342fffc2  gcc/testsuite/gfortran.dg/namelist_83_2.f90
 86a52abea562bc581daf33565fca30ec  gcc/testsuite/gfortran.dg/namelist_84.f90
+e1d9529615ee393bcd26c894368a6218  gcc/testsuite/gfortran.dg/namelist_86.f90
 b8f12d194aa9b2cfb5214297f897456c  gcc/testsuite/gfortran.dg/namelist_assumed_char.f90
 73de646ecd69b0bf965fecc1ccd64052  gcc/testsuite/gfortran.dg/namelist_blockdata.f
 069dbff7c2c727c922c2a492f0feb75e  gcc/testsuite/gfortran.dg/namelist_char_only.f90
@@ -42251,6 +42462,7 @@ b4bcffcae1b7603d524ccc6f557e15c3  gcc/testsuite/gfortran.dg/pointer_remapping_5.
 9fe7220795bf2ba5b08766a8d3fe8872  gcc/testsuite/gfortran.dg/pointer_remapping_6.f08
 42d0b3637cf0fc17c6c348d7482fdc81  gcc/testsuite/gfortran.dg/pointer_remapping_7.f90
 12bee345e1e5943e7693700d9bf840b8  gcc/testsuite/gfortran.dg/pointer_remapping_8.f90
+f1c012312f9bf1ae9ce3870901d9c0c1  gcc/testsuite/gfortran.dg/pointer_remapping_9.f90
 c16280609dc7730832a35feb0e6580d7  gcc/testsuite/gfortran.dg/pointer_target_1.f90
 c5d46febe5bf7d0037cd3f088648815c  gcc/testsuite/gfortran.dg/pointer_target_2.f90
 f6b6005914441775d818c2e6aee2be62  gcc/testsuite/gfortran.dg/pointer_target_3.f90
@@ -42459,6 +42671,10 @@ d09d9e61d93384cc4510957f1243b371  gcc/testsuite/gfortran.dg/pr58484.f
 f5878abe544570f500d4148c17a74cc4  gcc/testsuite/gfortran.dg/pr59440-3.f90
 4d2d4770d539b54391d7391e2ff84899  gcc/testsuite/gfortran.dg/pr59700.f90
 896a650820f1e92f30e2b2e4435e6335  gcc/testsuite/gfortran.dg/pr59706.f90
+1e9cfb40b3307f2fd2466b7c533b2a10  gcc/testsuite/gfortran.dg/pr64528.f90
+65d3c7db0cee9d876a3079342615ac8e  gcc/testsuite/gfortran.dg/pr64530.f90
+a7d0e45320243070a480eeee13682ca3  gcc/testsuite/gfortran.dg/pr65450.f90
+c4a8a09fc45863c77a2a6b80d33772a9  gcc/testsuite/gfortran.dg/pr65504.f90
 6ff99f4b0021f30bee039a61db7cba9d  gcc/testsuite/gfortran.dg/predcom-1.f
 20a411a7e5a57891297c4c6a96d92009  gcc/testsuite/gfortran.dg/predcom-2.f
 80cf60710448ac2378aecda5fc4a57b6  gcc/testsuite/gfortran.dg/present_1.f90
@@ -42599,6 +42815,8 @@ b4f2dc096356f01ca6e6b8dcf496735c  gcc/testsuite/gfortran.dg/proc_ptr_comp_33.f90
 442e3a279e0b663950c34b90c90e8ae2  gcc/testsuite/gfortran.dg/proc_ptr_comp_37.f90
 4b4ffbe5e962595c581a22914b8f137c  gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90
 516a19ccaf66dccab0666ab4b0b24aab  gcc/testsuite/gfortran.dg/proc_ptr_comp_4.f90
+72f01172bd92b8cb8853693a0a79310d  gcc/testsuite/gfortran.dg/proc_ptr_comp_44.f90
+c7c6f9039ee8a7d60608874366e1f0e6  gcc/testsuite/gfortran.dg/proc_ptr_comp_45.f90
 9440b7a38d0f8e2941673b44554c91fe  gcc/testsuite/gfortran.dg/proc_ptr_comp_5.f90
 6347d321213f9347afa49d4354eb67f7  gcc/testsuite/gfortran.dg/proc_ptr_comp_6.f90
 f41c3a8af3a63f5aef54c294fa8cd9c5  gcc/testsuite/gfortran.dg/proc_ptr_comp_7.f90
@@ -43127,6 +43345,7 @@ d4faa9d09919174f7f24f06277b6f34a  gcc/testsuite/gfortran.dg/typebound_call_22.f0
 61a6b4dd718fff8eb7fbfc73c71f3ff9  gcc/testsuite/gfortran.dg/typebound_call_23.f03
 c70bb629c62c1aa88bfa41b14306f0bb  gcc/testsuite/gfortran.dg/typebound_call_24.f03
 f095a1b7969fbd1fd5b158263d0779f8  gcc/testsuite/gfortran.dg/typebound_call_25.f90
+38c750df9a5a122b5fa6bae9ad7e4387  gcc/testsuite/gfortran.dg/typebound_call_26.f90
 9a5811f2a020d71586230bfc691759c1  gcc/testsuite/gfortran.dg/typebound_call_3.f03
 4cf1c294547d5f462319442857d5d0f4  gcc/testsuite/gfortran.dg/typebound_call_4.f03
 e439c1e36134811626e9fd4e06b46bd9  gcc/testsuite/gfortran.dg/typebound_call_5.f03
@@ -43162,6 +43381,7 @@ c4048d1316962bdfac9778e053901dfc  gcc/testsuite/gfortran.dg/typebound_operator_1
 7bde7428320ee998e08e8e07f5dc1ea3  gcc/testsuite/gfortran.dg/typebound_operator_18.f90
 6109430f6899356517f898692df26e9b  gcc/testsuite/gfortran.dg/typebound_operator_19.f90
 5f3c96941b279475857dc86caa259e97  gcc/testsuite/gfortran.dg/typebound_operator_2.f03
+7002c2ecd1b22ace8e7586a45c537016  gcc/testsuite/gfortran.dg/typebound_operator_20.f90
 62c27193ce31348dff362d70299cedf6  gcc/testsuite/gfortran.dg/typebound_operator_3.f03
 19a48eead46c13ab3fdf5e5ff49f061f  gcc/testsuite/gfortran.dg/typebound_operator_4.f03
 a0ec0eaa57721661722789d40b59235f  gcc/testsuite/gfortran.dg/typebound_operator_5.f03
@@ -43234,7 +43454,9 @@ dbdfd6ffbf548fea7383b4c1f94aae43  gcc/testsuite/gfortran.dg/unlimited_polymorphi
 af10bdc4e75faf8960c8c02fcb1cf9ae  gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90
 3ae1d55b18b2ef94645250a07ca83cad  gcc/testsuite/gfortran.dg/unlimited_polymorphic_16.f90
 61f13b2b94c596460defcaa08ecb2a67  gcc/testsuite/gfortran.dg/unlimited_polymorphic_17.f90
-317432e3f15ed0608227020c87731936  gcc/testsuite/gfortran.dg/unlimited_polymorphic_2.f03
+0a202a41b34590991dbca835200e82f2  gcc/testsuite/gfortran.dg/unlimited_polymorphic_2.f03
+df5524abf5f8d23b8fc1ca50827cab41  gcc/testsuite/gfortran.dg/unlimited_polymorphic_20.f03
+62a4aceb3585f9e2013320c957079a7c  gcc/testsuite/gfortran.dg/unlimited_polymorphic_23.f90
 a1930b128a7add0a89bb806192040714  gcc/testsuite/gfortran.dg/unlimited_polymorphic_3.f03
 27f9d22da25fab9449a6d82ad7501184  gcc/testsuite/gfortran.dg/unlimited_polymorphic_4.f03
 0ba9f1a9802f64d7ebf0bbc66606237b  gcc/testsuite/gfortran.dg/unlimited_polymorphic_5.f90
@@ -43296,6 +43518,7 @@ e67a4a11f35c66e08fb4bb3279634a7a  gcc/testsuite/gfortran.dg/use_only_6.f90
 d4dd79b7179b6279157fa22788ebb6fa  gcc/testsuite/gfortran.dg/use_rename_4.f90
 f915c7e347a13904541e64ecfbf96b9e  gcc/testsuite/gfortran.dg/use_rename_5.f90
 d5f1f4a01d22b358fbb930b418d70707  gcc/testsuite/gfortran.dg/use_rename_6.f90
+2101a506b2c2f7a637be977cd5b76008  gcc/testsuite/gfortran.dg/use_rename_8.f90
 15c120470a7413dda29cbfafbfc57725  gcc/testsuite/gfortran.dg/used_before_typed_1.f90
 4f6c103439659c20e74976784818e299  gcc/testsuite/gfortran.dg/used_before_typed_2.f90
 48af823a5be6b32f03b94344f334b733  gcc/testsuite/gfortran.dg/used_before_typed_3.f90
@@ -43330,6 +43553,7 @@ dea99e21382ac8803ceaa17d73942188  gcc/testsuite/gfortran.dg/used_types_20.f90
 2c4f1520f63b5fcbfd5d60fa4fea85f7  gcc/testsuite/gfortran.dg/used_types_24.f90
 7799dff4d1cfaf6ced9c80bd21607fba  gcc/testsuite/gfortran.dg/used_types_25.f90
 fc2fd48f14119ddf3ceaf42db200a7a1  gcc/testsuite/gfortran.dg/used_types_26.f90
+4892b692ddac04cc32fb331d62806c84  gcc/testsuite/gfortran.dg/used_types_27.f90
 3c6444805a4fdcb2e41627a4aaeb6dd7  gcc/testsuite/gfortran.dg/used_types_3.f90
 6199333d2c6bd837c6482165c046dfc8  gcc/testsuite/gfortran.dg/used_types_4.f90
 a1f7d63507f1b8c200d3905b3e5e0154  gcc/testsuite/gfortran.dg/used_types_5.f90
@@ -43382,10 +43606,10 @@ dd3fe0c5479ac130055fd8df9a1f4ed9  gcc/testsuite/gfortran.dg/vect/pr50178.f90
 2be0af9e2c2234ee874edb8d151b9817  gcc/testsuite/gfortran.dg/vect/pr51285.f90
 eac3810c0c757f01b638c43b55c61902  gcc/testsuite/gfortran.dg/vect/pr52580.f
 0815f0c55ddd0c15e6b562fe62b22bdc  gcc/testsuite/gfortran.dg/vect/vect-1.f90
-d4eda1b645ac0b6005caf59cd49e05d5  gcc/testsuite/gfortran.dg/vect/vect-2.f90
-8e3504fc15261e76ac83d2088ae7734e  gcc/testsuite/gfortran.dg/vect/vect-3.f90
-90031c00ffb38cee03cead379c6b3a19  gcc/testsuite/gfortran.dg/vect/vect-4.f90
-c3ad4f357d054440280a6c42557580ce  gcc/testsuite/gfortran.dg/vect/vect-5.f90
+cc75405c53f3dcac6fef19ede25b492b  gcc/testsuite/gfortran.dg/vect/vect-2.f90
+a862f70ee06c2d47a1be8e2db5bc578e  gcc/testsuite/gfortran.dg/vect/vect-3.f90
+116d8589ba7324d865d63fbf673b00cc  gcc/testsuite/gfortran.dg/vect/vect-4.f90
+4ffd0b307b3fd999d2e082aa5bbd670c  gcc/testsuite/gfortran.dg/vect/vect-5.f90
 9501afd8819482c5aa6b2a9ba1d1b250  gcc/testsuite/gfortran.dg/vect/vect-6.f
 dc9f55149eda0c6e36dcea1dc4f4137f  gcc/testsuite/gfortran.dg/vect/vect-7.f90
 641a53bd97ac67e687a0455dc5095d91  gcc/testsuite/gfortran.dg/vect/vect-8.f90
@@ -43618,6 +43842,7 @@ cced6ef67c045f87b6961bdd6fa259a5  gcc/testsuite/gfortran.fortran-torture/compile
 698812d3b6f7a7395ca3e67775177475  gcc/testsuite/gfortran.fortran-torture/compile/pr45738.f90
 6eccce962f547a39c2081378826e5943  gcc/testsuite/gfortran.fortran-torture/compile/pr49721-1.f
 57501cf80740e5c44e0bb4e94dd1bab0  gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90
+b5d58cb232775a99eea4271db27d52dd  gcc/testsuite/gfortran.fortran-torture/compile/pr66251.f90
 7602f8cc2d0ebd2bf0bb974069a764e0  gcc/testsuite/gfortran.fortran-torture/compile/shape_reshape.f90
 d5ee9d72b3b02f47b393934ca0c89627  gcc/testsuite/gfortran.fortran-torture/compile/stoppause.f90
 0be215e4a53f9370c44eaa153bf1ed6e  gcc/testsuite/gfortran.fortran-torture/compile/strparm_1.f90
@@ -44362,6 +44587,9 @@ ead3ce9c1042fd0ba014ada4fdf10351  gcc/testsuite/gnat.dg/loop_optimization15.ads
 08756df5f1cb26b8f121e5d80a70d1d6  gcc/testsuite/gnat.dg/loop_optimization17.adb
 8190007562e7afabf1b52d3f2242d8b3  gcc/testsuite/gnat.dg/loop_optimization17_pkg.adb
 3973c18a46e19e8b33fb806fdeb32de4  gcc/testsuite/gnat.dg/loop_optimization17_pkg.ads
+fd22c732c21e91285f5ea42a557f1f49  gcc/testsuite/gnat.dg/loop_optimization18.adb
+5f10a65b3058e756d58d0a8425ffd314  gcc/testsuite/gnat.dg/loop_optimization18.ads
+1b643fb3739678632ebe4630a04230df  gcc/testsuite/gnat.dg/loop_optimization18_pkg.ads
 f541e6bfbb5ebc32c8c88b9475f024d2  gcc/testsuite/gnat.dg/loop_optimization2.adb
 c127785f315390b699c7fa039c495c81  gcc/testsuite/gnat.dg/loop_optimization2.ads
 5e481abfdb92dddf7569d6c4d76c865f  gcc/testsuite/gnat.dg/loop_optimization3.adb
@@ -44556,6 +44784,8 @@ e98c04ac385dbd0581c1f5fa108caf6b  gcc/testsuite/gnat.dg/opt4.adb
 6fc78a7bbf3beb6d5be642cc1856e497  gcc/testsuite/gnat.dg/opt41.adb
 00090234b4cb754786d5ec834bf25da0  gcc/testsuite/gnat.dg/opt41_pkg.adb
 717689e5b846085ee611eaf13ca7a248  gcc/testsuite/gnat.dg/opt41_pkg.ads
+67bee7f8af0c7b31c09a7da1d360587a  gcc/testsuite/gnat.dg/opt45.adb
+273cd1df3d768f78a1b1b594431343b4  gcc/testsuite/gnat.dg/opt47.adb
 3d44b5cac38d62a85266069665682f5d  gcc/testsuite/gnat.dg/opt5.adb
 e5e7ff61479fbeb7973786d07f72ba84  gcc/testsuite/gnat.dg/opt6.adb
 87097de987361854f4c5179a6de42c2c  gcc/testsuite/gnat.dg/opt6.ads
@@ -44969,7 +45199,7 @@ c4e2b3c0c7a93a16f14045318dbb0220  gcc/testsuite/gnat.dg/tree_static_use.adb
 05fb8233f6f1679298a177d4374718c1  gcc/testsuite/gnat.dg/unc_memfree.adb
 0c24a362b37b4236db019de7ff4eb043  gcc/testsuite/gnat.dg/unc_memops.adb
 a4163ebad9ef247ba8b7b1254fd6d607  gcc/testsuite/gnat.dg/unc_memops.ads
-2b52a3e1e252ea20eab11474f5836f34  gcc/testsuite/gnat.dg/unchecked_convert1.adb
+99a6653ce66d3af255a969e12e746f7e  gcc/testsuite/gnat.dg/unchecked_convert1.adb
 e0b42cd0bffe14a0454e6947c1576b0d  gcc/testsuite/gnat.dg/unchecked_convert2.adb
 ab71b7c411a24b92bc4692458e82095e  gcc/testsuite/gnat.dg/unchecked_convert3.adb
 d11f3831351000de17c86545b36e9825  gcc/testsuite/gnat.dg/unchecked_convert4.adb
@@ -45093,7 +45323,7 @@ f37d4791cfa22e9a20848922ea5de498  gcc/testsuite/go.go-torture/execute/struct-2.g
 b760f8c4f0593565426879b84ab6787b  gcc/testsuite/go.go-torture/execute/var-1.go
 55c3fdb5eab9130c79b8548c994aa8d9  gcc/testsuite/go.go-torture/execute/var-2.go
 ac0017eb534302ec5987291f615d13ca  gcc/testsuite/go.go-torture/execute/var-3.go
-9e162a36f5e153651e30a3d11e8920fc  gcc/testsuite/go.test/go-test.exp
+5e02e0ee7e5d1aac80b2a4a98496a770  gcc/testsuite/go.test/go-test.exp
 88c59e0bc9f2a79ed3a3e8f1409ed1d8  gcc/testsuite/go.test/test/235.go
 1a94dd86d2262280f883261800a13104  gcc/testsuite/go.test/test/64bit.go
 43e15a8d565d16ab908b7cf6db8e0bf9  gcc/testsuite/go.test/test/README.gcc
@@ -46242,7 +46472,7 @@ f3784967f82fd982a7b13a211872bdd7  gcc/testsuite/lib/scanipa.exp
 bd515d57aa30aa3fb51f62e9fc698abc  gcc/testsuite/lib/scantree.exp
 d44c50538cc6d39a3eb1aa063b392626  gcc/testsuite/lib/target-libpath.exp
 d6e6500432d65180387c39287b536b8a  gcc/testsuite/lib/target-supports-dg.exp
-1782d6a541d7752b92baed680a02bb2c  gcc/testsuite/lib/target-supports.exp
+f6f04afe29beecf63ea9c10f98867450  gcc/testsuite/lib/target-supports.exp
 11de8489fa53e77ff9be279e855090eb  gcc/testsuite/lib/timeout-dg.exp
 038a7798c766b7a7466b09f89b875129  gcc/testsuite/lib/timeout.exp
 9aba7d93506cf79e6241eb0b27cdbce3  gcc/testsuite/lib/torture-options.exp
@@ -47178,7 +47408,7 @@ fb1050a1f6faed4216a7a80706e2b379  gcc/tlink.c
 2771d8a1e7ec4f86418da66519b9a439  gcc/toplev.c
 cebe3352f6dbdd7823fc9a7828625ad9  gcc/toplev.h
 da85c9382028d7092e5712ab5a4a937f  gcc/tracer.c
-73037b626a4a61d0e1e0b9a6c34122a6  gcc/trans-mem.c
+44a42adad77c76801be8c7bb4fecd5a1  gcc/trans-mem.c
 77549b22b86ffff4da391b03f2bb3c8d  gcc/trans-mem.h
 ee85cbe5b0057b4e37956b8e5d2094dc  gcc/tree-affine.c
 20736f244ef92946e7b26fd269b26ef4  gcc/tree-affine.h
@@ -47193,15 +47423,15 @@ b9ecd7d08d8ec6adc5bf01a7f46d51df  gcc/tree-cfgcleanup.c
 7bc54df23602d375b2db5b7c4c4d5c6a  gcc/tree-chrec.h
 30a64a3df6bc881833526501f66db580  gcc/tree-complex.c
 914d12bc4c885a84e08969baf18e0d85  gcc/tree-core.h
-da8503b4aa207de1d692afe3b520b9fc  gcc/tree-data-ref.c
-ae4afe8e89165a2ad8762c9fdff23cfb  gcc/tree-data-ref.h
+e4267bbd39cc4fdefb2518f1c0fde476  gcc/tree-data-ref.c
+eb5d27926043e6b574073a68ae7a6bbd  gcc/tree-data-ref.h
 e76e8e1efc24553629d2002ee50fe15d  gcc/tree-dfa.c
 188948b90ecddaf70eef9d404c377bba  gcc/tree-dfa.h
 13373f758dbb8bec16c7f6bfc183483f  gcc/tree-diagnostic.c
 308dd14e2238ac39da0eada1c384605c  gcc/tree-diagnostic.h
 c1de5be4d7c816691e462f98ebbfb35e  gcc/tree-dump.c
 9e21564705940c04753ef618704a001e  gcc/tree-dump.h
-4915124f14c334346524ca7967eb3ce8  gcc/tree-eh.c
+8ea5b3a64253ab4f7f78c7cceb2fc33e  gcc/tree-eh.c
 6d1d59b7abd2c2ff7cdacc9035b667d5  gcc/tree-eh.h
 18f1ee32b871b8e6a91c092dc86652b2  gcc/tree-emutls.c
 392b556d7ee2d1f57ef2b4cc6b7566ce  gcc/tree-hasher.h
@@ -47212,7 +47442,7 @@ c1de5be4d7c816691e462f98ebbfb35e  gcc/tree-dump.c
 391b426d3a83206f44b13a9784fdc4f4  gcc/tree-into-ssa.h
 a50e871a6391b650cd6682d5c01811e2  gcc/tree-iterator.c
 f930e7c2f6a3ed536883d847d3b2ccbb  gcc/tree-iterator.h
-a15cc75a41e7bf2ccfc380cf1eba2caa  gcc/tree-loop-distribution.c
+9fd1fe7caf72e8ccedd9855b88eabd9d  gcc/tree-loop-distribution.c
 f233be2ac4a0dd55322b4744dbfc6c86  gcc/tree-nested.c
 fd0be797829a72cc8aa7075c4f014071  gcc/tree-nested.h
 6293b6ff59ceed12e9b5f75a5812487f  gcc/tree-nrv.c
@@ -47225,7 +47455,7 @@ cd92eadd61507922e22a7777cdd2af65  gcc/tree-object-size.h
 0fa04fd6342262516903b3843ce880ee  gcc/tree-pass.h
 16ba28fd00b4db08b0a5d81b347083d5  gcc/tree-phinodes.c
 8df39df261e9cfd73e097d2b8eb56618  gcc/tree-phinodes.h
-a83a11aa58d5f244ef2615874775079d  gcc/tree-predcom.c
+e0e4d86e4621901f023b68589848cb34  gcc/tree-predcom.c
 fcf562b10629ef610b52399780252ceb  gcc/tree-pretty-print.c
 455851cb801e9923d5e78bda86574697  gcc/tree-pretty-print.h
 99eb64b4f611fa70c0be1172d2490e61  gcc/tree-profile.c
@@ -47242,10 +47472,10 @@ b491c9a99d96a6a9cec0921758214e4d  gcc/tree-sra.c
 d4f32c3079fc58b9529e5fd8cd418b5a  gcc/tree-ssa-copy.c
 29e8cd2457190cfc5ce27f163e27358f  gcc/tree-ssa-copyrename.c
 ade4acc3cdcdc401a8c6b9b07c09a3f2  gcc/tree-ssa-dce.c
-0870ec89e6ada94def310f480beef16f  gcc/tree-ssa-dom.c
+1ad2f1fc6dae16fadfd7d7dd7e03c56f  gcc/tree-ssa-dom.c
 ab41801eb8e661b97721f2fdfe0af9a4  gcc/tree-ssa-dom.h
 287491fa0cac5371bf21b51fa2f9883e  gcc/tree-ssa-dse.c
-eeb18249f19630551d81760b4bf8543c  gcc/tree-ssa-forwprop.c
+abd9a60e94c89049838a93b05283df0f  gcc/tree-ssa-forwprop.c
 40873618b7b68316d2968048ff8cb66e  gcc/tree-ssa-ifcombine.c
 4316577d7bfe850e5701f66f50da950d  gcc/tree-ssa-live.c
 73c40cd97a78b00562f807d65b537704  gcc/tree-ssa-live.h
@@ -47270,13 +47500,13 @@ a528b0b164e374835b757aa586261d7a  gcc/tree-ssa-loop-prefetch.c
 f3b38ebf82330446d5ba11dc1c4f9999  gcc/tree-ssa-pre.c
 9083eec79d74033bf086e4bb48337a5e  gcc/tree-ssa-propagate.c
 7815765bde42cd1f14f758d5728ff1b8  gcc/tree-ssa-propagate.h
-50ee549d95e5b2980427d2795132395a  gcc/tree-ssa-reassoc.c
+46794b100a9b445154c41d474bd376c4  gcc/tree-ssa-reassoc.c
 3b4617ab5995aa30b2f8310cc7840329  gcc/tree-ssa-sccvn.c
 2b653bc55e7496a67ed55e853541ad46  gcc/tree-ssa-sccvn.h
 7e7a1a092345df08ee409928b3982dfe  gcc/tree-ssa-sink.c
-544ace7a165f16f1c9762df3a847246f  gcc/tree-ssa-strlen.c
+02ab43c00c72b08d9c81e704cf316a75  gcc/tree-ssa-strlen.c
 33a13266aadbcb7114132539a3b14dd7  gcc/tree-ssa-structalias.c
-850d79f2b651d367060a491883589886  gcc/tree-ssa-tail-merge.c
+12047b7b1c827ba46651150cc5297a70  gcc/tree-ssa-tail-merge.c
 062609c7341f33356980b58413052721  gcc/tree-ssa-ter.c
 b58c1f79a5493a196cfa2fe3743f0f1b  gcc/tree-ssa-ter.h
 6b6af3f5b123f1e218c8a404feab5135  gcc/tree-ssa-threadedge.c
@@ -47289,7 +47519,7 @@ de4b8ce6372f3483b49b64b81b3d8eb7  gcc/tree-ssa.c
 a79b6c80ddc8a564c5cd261cb9b3fdd1  gcc/tree-ssa.h
 88720d0512c1a5d00ada9c0a3cb711ca  gcc/tree-ssanames.c
 9e6380ab01320ac60e6629089f9436e1  gcc/tree-ssanames.h
-53a6aac3efa8ad1efa3c8d85fe729b05  gcc/tree-stdarg.c
+bc8212db0f1e35727fdf87d56bc4fde1  gcc/tree-stdarg.c
 69d3270536f329aba1520dbf6de5c133  gcc/tree-stdarg.h
 368b75e67d682575accb291afacae7e0  gcc/tree-streamer-in.c
 1a84a7f62cf8907cb2ea05b556c05a97  gcc/tree-streamer-out.c
@@ -47297,32 +47527,32 @@ df287b486f934620deb088f2ee0ce7d6  gcc/tree-streamer.c
 66df870f3a2e434206f12dfca5530651  gcc/tree-streamer.h
 59772b6a0b414642ac5a2a048d0f3f3d  gcc/tree-switch-conversion.c
 ba49073bb43840db9e9ff429362ab8b2  gcc/tree-tailcall.c
-774d7bfbb0ee9c108865d0356dd322bd  gcc/tree-vect-data-refs.c
-2ebebe422bba1deae3219b1f8989ec26  gcc/tree-vect-generic.c
+ca7b7dc0fcf5e386f8b7671846b37ba9  gcc/tree-vect-data-refs.c
+7d4c87d52e7531a3a5bd05026f4a7a06  gcc/tree-vect-generic.c
 c4830553b5647a24557575bac1731b99  gcc/tree-vect-loop-manip.c
-e6f08c87e62db83e2898f99e627aad11  gcc/tree-vect-loop.c
+dc00029fdbd4375e760661c8c8238fa2  gcc/tree-vect-loop.c
 20abc700ab1045ac316418ded7857b1d  gcc/tree-vect-patterns.c
-0e4123935a0a44b86d7491930ffa4d6c  gcc/tree-vect-slp.c
-c30798db27b923fdb8c2faa129c8d05d  gcc/tree-vect-stmts.c
+8ded0682a656c134baf642a969ce4b3e  gcc/tree-vect-slp.c
+0a7d965b00997a744d32796ce9a6556e  gcc/tree-vect-stmts.c
 4a58096af76df477534bbb3ab779b591  gcc/tree-vectorizer.c
-dfa10c442f22e6199aa1b7d7fd56818a  gcc/tree-vectorizer.h
-b07eb837f5d883ab7e95b62882281e0f  gcc/tree-vrp.c
-eb656a53ba91444ee4350299626f12c7  gcc/tree.c
+c49b918d92a8b060f354f9b3a058b0d4  gcc/tree-vectorizer.h
+aca3d10d9400ae64953e91b4bd6ce331  gcc/tree-vrp.c
+12a4cdca68a2355bc1ffa074d6060754  gcc/tree.c
 3b971f9d72f052ea9a5fb6c32f6f9e34  gcc/tree.def
 9f533ff7502e6b3c8ea114b31a7e9309  gcc/tree.h
 c1549110ae4675e04b97bd68b4d59a32  gcc/treestruct.def
-f8da8bc6127f943f29fc1237e2806e29  gcc/tsan.c
+17832ea201c18a7c48efe3ba1342c225  gcc/tsan.c
 de06e1e7c04c8221fb7bb5b03eee0230  gcc/tsan.h
 4557f7571585e5f991e5c29c26d60848  gcc/tsystem.h
 fd30aefb00a6c9ec7871b1c3642fe22d  gcc/typeclass.h
-a0d014f3bb8e12dc3d01fea6c5794e06  gcc/ubsan.c
+93673d3fbde9b9bec59628859d01c2d8  gcc/ubsan.c
 8c194f7e77e200f551fbcad5024881ac  gcc/ubsan.h
 149e68f30e224e80b68336937b0728b7  gcc/valtrack.c
 21fdf832657cf17bec17b074c2286ed1  gcc/valtrack.h
 a0a93692959fceb6a4b63e535406bce6  gcc/value-prof.c
 053558155e4c9a51f1029753ce77beca  gcc/value-prof.h
-be46f6bce22394dbb40a2ccd3e1d418e  gcc/var-tracking.c
-ff896ccaa225789c402604a012a30c32  gcc/varasm.c
+6b0559be98e155422651b28eead850f0  gcc/var-tracking.c
+e78bb52843d6300bf422df3977d77327  gcc/varasm.c
 f43ce19a1d9f849b6753808ae1b964bf  gcc/varasm.h
 cee0c8b06615d60c2dc3cabd17482657  gcc/varpool.c
 06d4f9a4e63450e5e1c9506b8616c387  gcc/vec.c
@@ -47333,17 +47563,17 @@ f92bd01a67c81b709f540f0ba28bea7a  gcc/vmsdbg.h
 96307587d030d6dfbb82af9c4d8ba8c7  gcc/vmsdbgout.c
 4f0143b76f4b57213aee3a81547f1a02  gcc/vtable-verify.c
 d4d99a03ca87159b5b87811c4d6a4c0d  gcc/vtable-verify.h
-bbeefce8f25a073319ef53f9a55e2583  gcc/web.c
+66fb924ff60be54eff87ac9d2c3caf2f  gcc/web.c
 4dcd1437e2deaaef2853f093217fc063  gcc/xcoff.h
 28db814d54aae5436666bc9547b4cf0c  gcc/xcoffout.c
 95e7984ae2ae01abd915f524df765a2b  gcc/xcoffout.h
-88fdcda00d549f31b7db0e5fd6a4c6a2  gnattools/ChangeLog
+2c2ec5435551a1ebae29c8a8c4694127  gnattools/ChangeLog
 692322cbac4dbf19144764e4486b9f54  gnattools/Makefile.in
 41b96b7921d11e52b1d8465ea57136ad  gnattools/configure
 a73c18d8f44ab8bc3e71c3d530fa603e  gnattools/configure.ac
 59530bdf33659b29e73d4adb9f9f6552  include/COPYING
 d32239bcb673463ab874e80d47fae504  include/COPYING3
-7cb4919625835319ae23ac94172c7b98  include/ChangeLog
+de2b8eac3dcd2e8340e96da1281d6593  include/ChangeLog
 4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
 20f67b536f003da196c4e0e36c829fcf  include/ansidecl.h
 8c1a1603cbd7447bde95d9ae8723f232  include/demangle.h
@@ -47378,7 +47608,7 @@ e34d525d7faceda0dd5cb3eae49c1548  include/timeval-utils.h
 0294cecbb1f66d640ccba3a5d862d05b  include/xregex2.h
 f648a66ed08e079e26a24c4346a3ba03  include/xtensa-config.h
 0afce91a3daa1fdc32ee36370c1129dd  install-sh
-792ecf73b9a583472b926f202fccc020  intl/ChangeLog
+2045e6cf782433936826b9947deac0cd  intl/ChangeLog
 cad1d6fab2274517783de7433c0faa74  intl/Makefile.in
 6ec998bb4716c744bf8185e607f69301  intl/README
 76ca170a525d5b84d90f0478fe788931  intl/VERSION
@@ -47420,12 +47650,12 @@ d50a8c6c5b41089930accbdce767d3c0  intl/plural.y
 b4758a0194e3e41362b939911472ce62  intl/relocatable.c
 bedade7bcfc3bc5eb09a2c6844f637f3  intl/relocatable.h
 43f287d082528203fc85c1d2d81bf30d  intl/textdomain.c
-8b4e757b458a86678164cd4560e1ce6d  libada/ChangeLog
+045805fa223ac22140b51360cece8461  libada/ChangeLog
 f7965fde5040718ea5d6a2cc4ecb9e63  libada/Makefile.in
 8efb9115b70b2aa70c7db10862f7b2f5  libada/configure
 6433b3fb1e942dd2597541b21eb8be0f  libada/configure.ac
 46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
-ee9b143ab3c0a68847c57acb9008fad5  libatomic/ChangeLog
+ccfa710ca48104081b2608d8494d344e  libatomic/ChangeLog
 bf2b737497af89020096e79749ced1a6  libatomic/Makefile.am
 46bea738c735828c2e94c7f71122785e  libatomic/Makefile.in
 f7853b06953072a9987a45a5b00782d6  libatomic/acinclude.m4
@@ -47455,7 +47685,7 @@ ee6f02fad9bd551a906477f16740578f  libatomic/fand_n.c
 ed84022ae2df9d39f937effa5fe7801e  libatomic/fenv.c
 2939db87e049993b583497188f079e6d  libatomic/fior_n.c
 b3ccae58518e27bb730ed84c99a2eb0c  libatomic/fnand_n.c
-1a97097bfe9accd1c05df2c5dadd86b8  libatomic/fop_n.c
+5d40c9bfd4781631edaa772a85ec9876  libatomic/fop_n.c
 834a4e99e9b5231aaa54e4802aecb241  libatomic/fsub_n.c
 fb7579412eac2bf65459985ea4c7f320  libatomic/fxor_n.c
 b4fad63134563a2507e61bc5a07b4927  libatomic/gcas.c
@@ -47503,7 +47733,7 @@ c03a072efac9b30f8f8429ac52fd246b  libatomic/testsuite/libatomic.c/atomic-store-3
 8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
 cce610fe1b2413dc6f097cb40816e9e8  libatomic/testsuite/libatomic.c/c.exp
 97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
-ccec679a5c92e3dbdc4001e77d14fab3  libbacktrace/ChangeLog
+6d40101e31a9e622805f03c1cfa6d11e  libbacktrace/ChangeLog
 6af6c9838d1737a87529f290a49f863a  libbacktrace/Makefile.am
 10502b510e3bb652e63f65eab6326c9d  libbacktrace/Makefile.in
 1987c0495aeee1bc47709f399772173b  libbacktrace/README
@@ -47515,8 +47745,8 @@ f53675fc1fc8e10c218232d57a17b688  libbacktrace/backtrace-supported.h.in
 9c967a7c7ccd6e3d7f94adbc9a9f5955  libbacktrace/backtrace.h
 2c442eaf82f1f67b16617ea694ae8009  libbacktrace/btest.c
 5b4bf4c2024de747eca639dda1fd0a12  libbacktrace/config.h.in
-e46cee9545d63a78ffffcf1f449c53df  libbacktrace/configure
-699e3db14fed538958012c85c2933449  libbacktrace/configure.ac
+95aae39d0e549d5d6b2ab231482fa78d  libbacktrace/configure
+95e0c6b319215aa60660c01011716925  libbacktrace/configure.ac
 aa0d3848ac3020cb6562c1c923da293c  libbacktrace/dwarf.c
 0a349d79779f2a59d3c3bec26079108f  libbacktrace/elf.c
 5badd67d5362a883d02092d992e2c605  libbacktrace/fileline.c
@@ -47533,13 +47763,13 @@ d15ef1908e6651517fa16aca5927444f  libbacktrace/simple.c
 1c31e53190ed9e49127ac9a1b8c9dec9  libbacktrace/state.c
 7150f898c2b02b634d0f176a1d322385  libbacktrace/stest.c
 41b3b24b264c530417d7b6970d7af429  libbacktrace/unknown.c
-1e9fe8ee5e237320e9fef82b0fbf2253  libcilkrts/ChangeLog
+e47a70120fff1139b8e8655c419aded3  libcilkrts/ChangeLog
 44e8fbbf5f5fdcf45b8dc268c303f4cc  libcilkrts/Makefile.am
 9e82ac68701a059f6122da2b42d5be43  libcilkrts/Makefile.in
 4a307b1474cad63768b2ae0c183b6259  libcilkrts/README
 bef8d5fd63eb08613df8c899248a1b52  libcilkrts/aclocal.m4
-14332d72607e3d813749d19937a6c077  libcilkrts/configure
-89ab09ad02656a4041d4ba04d092efcc  libcilkrts/configure.ac
+e3123c89a97adf01050cb80a8a8818a2  libcilkrts/configure
+c59ded41154ebbd43422f6aa198742f3  libcilkrts/configure.ac
 f308f225fd57bbf03acafb16b5c25bd8  libcilkrts/configure.tgt
 03841c37ac78f62d53842fafde80cb72  libcilkrts/include/cilk/cilk.h
 d7bf830a7aa99e9f72a13cda7e0da2b4  libcilkrts/include/cilk/cilk_api.h
@@ -47641,7 +47871,7 @@ d4a2c447aba3e1afe4e9522d132a2e62  libcilkrts/runtime/symbol_test.c
 94c538f9a3100a27649a9dc4d63d1677  libcilkrts/runtime/sysdep.h
 ffd8820979e88b4845e4b6ae604d2fdf  libcilkrts/runtime/worker_mutex.c
 9af2df6acad19a2001c2b1f68f5f59be  libcilkrts/runtime/worker_mutex.h
-e39676da24c437f4b1a0d500886a38db  libcpp/ChangeLog
+1a6a17594465b5966261f883a1880f25  libcpp/ChangeLog
 07c1fdaef120cbf7edafa33ab3e0a20f  libcpp/Makefile.in
 7307c791a8de641ef6dada9a179ece57  libcpp/aclocal.m4
 d19e8274ac720426c1d890feaa695d2b  libcpp/charset.c
@@ -47652,7 +47882,7 @@ c8155cda9a3a69c1dbb4a9a9083886c9  libcpp/configure
 85aef2127a890fb03400ed8fc51d0199  libcpp/directives.c
 0af0d1dfd337a5b8fd455a33103e7693  libcpp/errors.c
 ed169e60f52acb15268ded9247c43a03  libcpp/expr.c
-fb4f5f9a5e676df2eb65fb8ffd1aae85  libcpp/files.c
+37534105c854e741f39c6e5d7a9f0c41  libcpp/files.c
 bb87e09a0a22d6fc60dcb7f91c5db13a  libcpp/identifiers.c
 46faffcae484e71d73f86b818f0b6417  libcpp/include/cpp-id-data.h
 e2d4b1799bde6a28d3dbf64186814908  libcpp/include/cpplib.h
@@ -47662,12 +47892,12 @@ b38b6724cd6b6f363a6a43aaf16f31d7  libcpp/include/mkdeps.h
 ab1504e880a258c78a15e3a6de24f9a0  libcpp/init.c
 8d4e8916c1d901828fc16fb9159ef39a  libcpp/internal.h
 9788694056f37490e04abd496e1e8582  libcpp/lex.c
-ae8eb46c3ad0c5e352fd21eed18adb3e  libcpp/line-map.c
+fb037325824ae08aa3c3347d61079532  libcpp/line-map.c
 a3b42e84107cbc10045e964837492e97  libcpp/macro.c
 e5e6e60c02d9485ec697dd4f781e5444  libcpp/makeucnid.c
 2b26a65df760b88805e260d6da1b8586  libcpp/mkdeps.c
 f05250f093d3c2cafe3c61a04bc4c998  libcpp/pch.c
-ee8749b9eb20bbf88c2a2c7ce39cd2da  libcpp/po/ChangeLog
+a330077078cb28cfa57d21d1950f4141  libcpp/po/ChangeLog
 54906a88ab7fcfdf317421cf7c4303bc  libcpp/po/be.gmo
 ecad891effc5c3a27a61d3faa8aee068  libcpp/po/be.po
 5df92306df1918b63b8969719b670bf7  libcpp/po/ca.gmo
@@ -47689,8 +47919,8 @@ b52c02707d31319697136d5c5d42d4f2  libcpp/po/fr.gmo
 761315916d45325a8a697b116046376f  libcpp/po/fr.po
 8d8c1d4ca73156beecfcf5a7526f2213  libcpp/po/id.gmo
 7d5d1f626ca2c269f239279d264a3f63  libcpp/po/id.po
-b24a5eb37c5355da1257608d765e22fe  libcpp/po/ja.gmo
-b8affad2de513a2b9e1c0d95b74fb2bc  libcpp/po/ja.po
+22bf08db026447ca91523eeee7576421  libcpp/po/ja.gmo
+ae764621156da4fe21aebee34c2c1276  libcpp/po/ja.po
 db9f40047d56516cda41a7fac5fda810  libcpp/po/nl.gmo
 c687d8f9dc02c416135ce7cdfb1e0ad2  libcpp/po/nl.po
 7d9f2349653981577d3223839ca4e33a  libcpp/po/pt_BR.gmo
@@ -47717,7 +47947,7 @@ f520b0e5c1e680bfe95f1e41e4d47f57  libcpp/traditional.c
 0852e16675aa93396c6b42956dff1af3  libcpp/ucnid.h
 c8500dcd582950cb6ed628ffc84e2c09  libcpp/ucnid.tab
 a6c2b3de06c7424706b16f4c206396a1  libdecnumber/.gitignore
-7d8247c5b1a87f23415e8e7eba1703b5  libdecnumber/ChangeLog
+bab2b8cd29c8fba9013aff7b1a07d264  libdecnumber/ChangeLog
 3b84e93d037a889256842da6a8b66418  libdecnumber/Makefile.in
 2746a1155d319a2cda823ee5b58921ce  libdecnumber/aclocal.m4
 3ee16b60b2f53df578443d0a2e076824  libdecnumber/bid/bid-dpd.h
@@ -47779,7 +48009,7 @@ a97c47969dfc92a7666dfe3c2e1e1448  libdecnumber/dpd/decimal32Symbols.h
 1d6434525d5b6fae13c2e8a996121a5e  libdecnumber/dpd/decimal64.c
 6b20f17b6f453b9ee65b87eb01d119d7  libdecnumber/dpd/decimal64.h
 0f6db29710e7075c2fd62bc4478b3b8d  libdecnumber/dpd/decimal64Symbols.h
-ccab9c46bce4e7656315df35fcaef38a  libffi/ChangeLog
+2f1924f594c9a56dfad1cd60cad3035b  libffi/ChangeLog
 ba66fc19311348d373ec271be939a659  libffi/ChangeLog.libffi
 fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
 d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
@@ -48056,7 +48286,7 @@ d47c79b281339983862a8e52d8c73f0f  libffi/testsuite/libffi.special/ffitestcxx.h
 291be426192f460f6a07dfe1c96ab094  libffi/testsuite/libffi.special/special.exp
 93fc3ea311b79f64004992807ce75d1e  libffi/testsuite/libffi.special/unwindtest.cc
 185d0795017fbbe253a13db8e34085f9  libffi/testsuite/libffi.special/unwindtest_ffi_call.cc
-16e15e33a33eaa17bb2e44556c52f624  libgcc/ChangeLog
+a66191ed2a8cfe8203cf3d8d58d164da  libgcc/ChangeLog
 7f58014cfac96f94d81457205c18c223  libgcc/Makefile.in
 4575e60db0c36a906ae99acf805a0550  libgcc/config.host
 25a291c353009228fc85e36e91e64c08  libgcc/config.in
@@ -48144,8 +48374,8 @@ b61fd5dd5e7cbd99ee040cacd3055ec6  libgcc/config/arc/ieee-754/truncdfsf2.S
 1c6498366e09d27eef3cc5443272b299  libgcc/config/arc/t-arc-newlib
 0e6e6e67c1465c6e8f00f3f1d0dd213f  libgcc/config/arc/t-arc700-uClibc
 69d95f104130cbb3227704dfd4ea75dd  libgcc/config/arm/bpabi-lib.h
-a69ec893b0e4432944938ba962a122cf  libgcc/config/arm/bpabi-v6m.S
-9c293f92f2c8aa994c222af1c87179e0  libgcc/config/arm/bpabi.S
+a49156762d50d4fa2d5584013ed9ce4c  libgcc/config/arm/bpabi-v6m.S
+1da394007c1ee086153f326494130abe  libgcc/config/arm/bpabi.S
 39cd0b4384ba52c9517c6548457950e5  libgcc/config/arm/bpabi.c
 c8b87dbbcec5e14cff96d9d22f4b6fe5  libgcc/config/arm/crti.S
 836b62772dfbc6a7aacc3f332d334e76  libgcc/config/arm/crtn.S
@@ -48307,7 +48537,7 @@ b2bcf8b944f937cb4f3799c02670dcee  libgcc/config/i386/64/getf2.c
 a92aa384cf96b81c0dbb642826200dd7  libgcc/config/i386/64/letf2.c
 d1337b28acd8dbde9817492f9027dbc3  libgcc/config/i386/64/sfp-machine.h
 498bbaf506a5bbdaa793f66399ece491  libgcc/config/i386/64/t-softfp-compat
-0e088ddd97cd935e7f8a7d59ba0c195c  libgcc/config/i386/cpuinfo.c
+d8b290ae825472b31f68fd28efc82f9e  libgcc/config/i386/cpuinfo.c
 98921719f5647ebcc267af9712b1f116  libgcc/config/i386/crtfastmath.c
 1ad8379325b99afa4e196e92cf5a5aba  libgcc/config/i386/crti.S
 a57fb755601c047971e04689034ff273  libgcc/config/i386/crtn.S
@@ -48392,7 +48622,7 @@ cc6abfc50842e2a704659fc8ca890750  libgcc/config/ia64/unwind-ia64.h
 983913088848c37426464c44ed30f389  libgcc/config/ia64/vms-unwind.h
 7a56469ad10b7c48767dcf3b22434e61  libgcc/config/iq2000/lib2funcs.c
 102f7dad8ad6b54434a1b8313d1e42c4  libgcc/config/iq2000/t-iq2000
-548787ddb2ea75133fb028493cfdbe75  libgcc/config/libbid/ChangeLog
+4d1e21f05ebe60f8236bbff9ade282b7  libgcc/config/libbid/ChangeLog
 bd427e604ec5104368c49c5babee0027  libgcc/config/libbid/_addsub_dd.c
 e60ac20c51a4ad903984450529a1f0e9  libgcc/config/libbid/_addsub_sd.c
 9ce300999fc3b8a8a9a5d57b1d1deb0c  libgcc/config/libbid/_addsub_td.c
@@ -48611,7 +48841,7 @@ cbf627e34586f1c927ac8a5e95c69997  libgcc/config/mips/crtn.S
 96c1960faea4c9a58b10ef75a20a759d  libgcc/config/mips/lib2funcs.c
 ea8a911f15a4b1754d73fdf66665be98  libgcc/config/mips/libgcc-mips16.ver
 f55ad8b4e9d2c958fa618c3d7b597fec  libgcc/config/mips/linux-unwind.h
-d59cee20031784000d60bc0f66cc8187  libgcc/config/mips/mips16.S
+8ec6a7b05a289170410adababfc2a441  libgcc/config/mips/mips16.S
 f808ee6fb05cf34f01633f9233c04bb5  libgcc/config/mips/sfp-machine.h
 5b43c15f4e003338742d215bcfdf5029  libgcc/config/mips/t-crtstuff
 33f2c96b7ccbbb062839ec1e7329e6bb  libgcc/config/mips/t-elf
@@ -48912,7 +49142,7 @@ bd405e7248fc335a4a4295df269ec132  libgcc/config/nios2/lib2-divmod-hi.c
 4c6a1c4f4f4cd6ce76ea1595d1f2eb99  libgcc/config/nios2/lib2-mul.c
 ffe3995242193a7f77f3874003b8c9d6  libgcc/config/nios2/lib2-nios2.h
 1136874187371865baec527e3af79248  libgcc/config/nios2/linux-atomic.c
-ef1876c693be8501b2553f64f39472d1  libgcc/config/nios2/linux-unwind.h
+6054f843a8747e3f0693d96885947df1  libgcc/config/nios2/linux-unwind.h
 21fba677ec6c35c00b9e5742dfd93e64  libgcc/config/nios2/sfp-machine.h
 598bde069aeebadde9b08f8703ab2c77  libgcc/config/nios2/t-linux
 058cf7bee1e8fb40a62590a2558c7f76  libgcc/config/nios2/t-nios2
@@ -48923,7 +49153,7 @@ b70010a8e3a6734ae04ba484992563c5  libgcc/config/no-unwind.h
 fff8e12f77dd008d7587c861335b2299  libgcc/config/pa/gthr-dce.h
 f504995a8bc9980dc0d61c9177ed1c98  libgcc/config/pa/hpux-unwind.h
 b14b473169e50807908c2a4d041e8080  libgcc/config/pa/lib2funcs.S
-5202cd70d799fa757470da28eb740d47  libgcc/config/pa/linux-atomic.c
+b6382347c0b4e4ea97395a47f3959d9a  libgcc/config/pa/linux-atomic.c
 1eaf476887daaac758e1b13c632dc2e1  libgcc/config/pa/linux-unwind.h
 9f2dc0000080e88145d62ddd1c6fb992  libgcc/config/pa/milli64.S
 4b40d99a1ee6399399faa83a7a7679ac  libgcc/config/pa/quadlib.c
@@ -49069,7 +49299,7 @@ d16c93dc836873d20afe0b6917ebd72c  libgcc/config/sh/crti.S
 b6cbdb77bbea8deb23644661c53ae60a  libgcc/config/sh/crtn.S
 6f1c22103153f99ac38beb9d457cf3af  libgcc/config/sh/lib1funcs-4-300.S
 692784e1e67df8ecfd9a155aeda1317a  libgcc/config/sh/lib1funcs-Os-4-200.S
-d0db3e3872e432156cdddaf71f9027d2  libgcc/config/sh/lib1funcs.S
+da65b5c322dd051326cef8babd126348  libgcc/config/sh/lib1funcs.S
 a40eb80e145c2e42014beb7c8cfda231  libgcc/config/sh/lib1funcs.h
 68ddef94ef228a2e500c6f84ca5c5f73  libgcc/config/sh/libgcc-excl.ver
 5c9c0fbbd770cb985c497e8b01f51288  libgcc/config/sh/libgcc-glibc.ver
@@ -49348,7 +49578,7 @@ e32c5653df9e5c5b602b2a6e6ddeaaf1  libgcc/unwind.inc
 7e5de74bf98e12bb4afb927d0c5d69c3  libgcc/vtv_end_preinit.c
 1c9bb66910761539ddc5ff002e70c272  libgcc/vtv_start.c
 868ca421eb9feaef7af922f89533ec54  libgcc/vtv_start_preinit.c
-30a7695b109b26386c703e7dbac8a773  libgfortran/ChangeLog
+0868bdd0d8346876ace8df4a0913aa0b  libgfortran/ChangeLog
 9aca36338382e5b4b730e7779170b24d  libgfortran/ChangeLog-2002
 80d3edc880c2da0b7a2beec2e2c4f774  libgfortran/ChangeLog-2003
 9f0239429993a5e64ed793eb6c55a5c1  libgfortran/ChangeLog-2004
@@ -49961,25 +50191,25 @@ af3ec480a5605016dbec1b085ff64bc4  libgfortran/intrinsics/time_1.h
 8cbae014d5aa0a8916f3a74f9ce2f12b  libgfortran/intrinsics/unlink.c
 307e607eb59ec7eac14f44aa176c2740  libgfortran/intrinsics/unpack_generic.c
 47b3524edbd0672516c0319d7f84d7a7  libgfortran/io/close.c
-fb427661dadda4bca8a549009f9439be  libgfortran/io/fbuf.c
-db9356754fde02e7e0257188e10d7379  libgfortran/io/fbuf.h
+441f635babc1e7333c450eb2f8854b90  libgfortran/io/fbuf.c
+f62127976ef7e10b7c62c077aa1ce4af  libgfortran/io/fbuf.h
 9bc1e6c806dff272f33fba07d1d6bffb  libgfortran/io/file_pos.c
 6fc5bdf68bb23b3a02e37e8665451230  libgfortran/io/format.c
 c287df298776a437b3a48419c86b4645  libgfortran/io/format.h
 3265147203606b7bad62e5d2908f9869  libgfortran/io/inquire.c
 040686ca709c2eb8e86ffe443d3fd8d6  libgfortran/io/intrinsics.c
-c35833ba6b9b23bdef8de6e70635aea9  libgfortran/io/io.h
-d00a1e448c0263a449d0c054774a3db9  libgfortran/io/list_read.c
+e33ed5e9aa211a377165c37a7ca8e12d  libgfortran/io/io.h
+8f65e0961f91629daeccb422773f9c46  libgfortran/io/list_read.c
 f0b41e3bb3904d863aec0780e95d876c  libgfortran/io/lock.c
 d7d4ed433bf1c8a869ae50ddb62b42f9  libgfortran/io/open.c
 7f0a9a12949149a87ba70a272df7d9db  libgfortran/io/read.c
 34747c949095945d651cf98d45fdff4e  libgfortran/io/size_from_kind.c
-8cdcbba9b026d71608162aca8ce49ac3  libgfortran/io/transfer.c
+329c6637a9c8c742f3960b1d6d488725  libgfortran/io/transfer.c
 f936c3b00e7e8e0a02a6295e7b0f27c2  libgfortran/io/transfer128.c
 d4e46541e5060e9cd29458023569052f  libgfortran/io/unit.c
 0bf46fbcca9ef7c6659d267dffbb6406  libgfortran/io/unix.c
 77d75641d66ddd858c2323836d22c224  libgfortran/io/unix.h
-98f783d6b16e7b7794ba25659f713034  libgfortran/io/write.c
+6837af17188b3eaae34d3d325b82b75b  libgfortran/io/write.c
 f6c291d3d0197f2bd00b964dada60450  libgfortran/io/write_float.def
 4d0ad4a6640ffe78f79c877d79a3802e  libgfortran/kinds-override.h
 20ec345ae4f7c68397c2621df1163222  libgfortran/libgfortran.h
@@ -50069,8 +50299,8 @@ dee72a6a60e99528b0d17bf3ff9a1e15  libgo/config/ltoptions.m4
 bc2f6032c98896249eadb56177c7d357  libgo/config/ltsugar.m4
 c30cd33c496505f13d9fbdb6970c7c33  libgo/config/ltversion.m4
 293853a13b7e218e3a4342cf85fbbf25  libgo/config/lt~obsolete.m4
-292416f1fc0ab677291a1094cac27c28  libgo/configure
-56d57ca3e961e4f201130d371bdd3274  libgo/configure.ac
+955631d58f4283e944010ac066edf4be  libgo/configure
+59ea03d83c577c7a3cefbed548b2eeff  libgo/configure.ac
 1ef809eec8a49a2eca44b613eaf9847d  libgo/go/archive/tar/common.go
 45655d3df8e304b659bb098fc9006e94  libgo/go/archive/tar/reader.go
 e432f7705cc613af1419f6c711089511  libgo/go/archive/tar/reader_test.go
@@ -50297,16 +50527,17 @@ f0da958563f37dbbc84ce9708d80a6c6  libgo/go/debug/dwarf/open.go
 27f7394075238f883368e70e9e90fa01  libgo/go/debug/dwarf/type.go
 4dd735786604fdada06b9d4988c55ea2  libgo/go/debug/dwarf/type_test.go
 fd19a135314633f873bb441c3ee45b59  libgo/go/debug/dwarf/unit.go
-6e8d81f77e74cdc987dd294d62a77510  libgo/go/debug/elf/elf.go
+ba3e31eff10619efbe56980b18b55746  libgo/go/debug/elf/elf.go
 2ce9136cffb642d4b1249abea9fe4a64  libgo/go/debug/elf/elf_test.go
-2715e8251fb4e0c50432bd0e3b4f7f7e  libgo/go/debug/elf/file.go
-a4dc7b01c1f500d379e8affffabc2025  libgo/go/debug/elf/file_test.go
+80dcef933f2514dfe202ba50bd27805c  libgo/go/debug/elf/file.go
+6a6a9ff2284aa7706769f4b6b7a3e27c  libgo/go/debug/elf/file_test.go
 6bc826fa60d18740a7844fae136536a3  libgo/go/debug/elf/testdata/gcc-386-freebsd-exec
 28249f6bb3a2d1f8223ddadf73f9b059  libgo/go/debug/elf/testdata/gcc-amd64-linux-exec
 e50bc6420781388560dac1b40100e2be  libgo/go/debug/elf/testdata/gcc-amd64-openbsd-debug-with-rela.obj
 f9b39f27c4ef117ee0c35c439ecb0f46  libgo/go/debug/elf/testdata/go-relocation-test-gcc424-x86-64.obj
 23ee54e659ce60038413e8b3b25fe953  libgo/go/debug/elf/testdata/go-relocation-test-gcc441-x86-64.obj
 2cc82d050d62fb5247a18ab6bd6ef721  libgo/go/debug/elf/testdata/go-relocation-test-gcc441-x86.obj
+0b772cc2391cfc3c11efb0a2c100cc8e  libgo/go/debug/elf/testdata/go-relocation-test-gcc447-ppc64.obj
 672aba4cbe4d05e8fb6776a73fd67304  libgo/go/debug/elf/testdata/hello-world-core.gz
 f549e93bb4abecfa2f405787ace90ac7  libgo/go/debug/gosym/pclinetest.h
 0c042c48ee46b12d9e396c15d9f5998e  libgo/go/debug/gosym/pclinetest.s
@@ -50432,7 +50663,7 @@ bf2c3134657aed37c679064ac0654d88  libgo/go/go/ast/filter_test.go
 3ab6195beecac27d15097be32a3dca48  libgo/go/go/build/doc.go
 0a125f4b50a44436fc08a14a2d69a5e9  libgo/go/go/build/read.go
 55bad531524fbfa1a2ff2af400b70447  libgo/go/go/build/read_test.go
-5c2fcab85102c361a41548aa0cc305a1  libgo/go/go/build/syslist.go
+d09576843112c3af8a2cbd72d6b37d1d  libgo/go/go/build/syslist.go
 1f90ff820954ed5abb596fed41770201  libgo/go/go/build/syslist_test.go
 de6991b3771170d6d3ce31fe2c89b5f1  libgo/go/go/build/testdata/other/file/file.go
 0f6926e3a63df39bdeb382e093950776  libgo/go/go/build/testdata/other/main.go
@@ -51391,7 +51622,7 @@ bd8fc56eab9b633e58128083caf5df5f  libgo/go/unicode/utf16/utf16_test.go
 d2c0f0166aa2cc63cec3270b5fa1d3e2  libgo/go/unicode/utf8/utf8_test.go
 8e700e99e52bad7f8289006b7bd149d4  libgo/godeps.sh
 8bc70efd6d9c1c8ba1e6df79a2241516  libgo/merge.sh
-27ae1fdf2b91e9664d6b1e923a866af4  libgo/mksysinfo.sh
+83c755ce6292f1be7d7bc70d6fe83fb9  libgo/mksysinfo.sh
 06b0ddfbd036dbdfdf8c4c7efb8b746f  libgo/runtime/arch.h
 0d727dcfb3816731f56f174e8cbd29eb  libgo/runtime/array.h
 d539a7523f322c7b10a6e934c5fa16e6  libgo/runtime/chan.c
@@ -51410,7 +51641,7 @@ ffce11dc5416c0c1bfb5a74207a4d20d  libgo/runtime/go-assert-interface.c
 15f566278d64ff0b58823d3875194e29  libgo/runtime/go-assert.h
 f8c17aeb5ad771890f2f006bae6aeee5  libgo/runtime/go-breakpoint.c
 8bbc43d2e3d1657ca28c745f2df02b57  libgo/runtime/go-byte-array-to-string.c
-c5f239b78be2bfbf4d6c5550f1f21501  libgo/runtime/go-caller.c
+3046097c354ea04a9d026f40f45bb15f  libgo/runtime/go-caller.c
 f3a1455c547e0ad22b2876c5efff9301  libgo/runtime/go-callers.c
 990d7c40634767a4d4639fb580b5be29  libgo/runtime/go-can-convert-interface.c
 276475517c9099e859ef106e0d7f7bbc  libgo/runtime/go-cdiv.c
@@ -51529,7 +51760,7 @@ c95a6cc35511a2183eb5b480fa8ae836  libgo/testsuite/Makefile.in
 207f334413c982763e10e994230fefbf  libgo/testsuite/gotest
 578a4705035f5cbb8425f2e2eb75a433  libgo/testsuite/lib/libgo.exp
 6df485581d2f02246f41b5ca46f5bb5d  libgo/testsuite/libgo.testmain/testmain.exp
-353c6e52b177cd4b6a15ed7fdceebb40  libgomp/ChangeLog
+f9939088ff2793d8ecdda0e027143ce1  libgomp/ChangeLog
 0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
 0b707c40cd3236f294bcd8a5bcead00f  libgomp/Makefile.am
 d538a08bffc033de3bd6ab6000ee2091  libgomp/Makefile.in
@@ -51577,9 +51808,9 @@ d8ad83c6a24cff60da27229b258b74a5  libgomp/config/posix/ptrlock.h
 6968eb220262abac86efad7c0c65f803  libgomp/config/posix/sem.c
 6b7d7ff8260464499377016715f0616f  libgomp/config/posix/sem.h
 33ea38204c6c2c14eee55c2db5bc098a  libgomp/config/posix/time.c
-6acfcd8d91bb216f4f9c94357d6cd9c0  libgomp/configure
-dc4b036e2206a5d3a36e2ccb1f703b93  libgomp/configure.ac
-d3109f6d28e865673488bdcee9412e31  libgomp/configure.tgt
+c342ce719424676226722730fd75c995  libgomp/configure
+436a53b4869f6979ea5a32241cb1f4bc  libgomp/configure.ac
+981675cbb62d5f7f9282884c2e417933  libgomp/configure.tgt
 8dd1716b21153d856ca445297195b6f0  libgomp/critical.c
 a70424af7e7accae199b0b442c17c75b  libgomp/env.c
 76d4d34c3ea59a4b3fbabd01ee8fce45  libgomp/error.c
@@ -51619,6 +51850,7 @@ ba5ed16a48b3a78511b4913cdd4d7617  libgomp/testsuite/libgomp.c++/atomic-1.C
 a56e4a1dad7c21fecfbf5dd26cb1f86a  libgomp/testsuite/libgomp.c++/atomic-13.C
 f5aa3b6a543d3042289d53904701574b  libgomp/testsuite/libgomp.c++/atomic-14.C
 156c6a231b71803eea67391fb8826eab  libgomp/testsuite/libgomp.c++/atomic-15.C
+23c9c4cd6300095e01c386561d3c1367  libgomp/testsuite/libgomp.c++/atomic-16.C
 11dca764f708d500baba4ceaa6de9b54  libgomp/testsuite/libgomp.c++/atomic-2.C
 ed304e6a8199d4a60a7bb4acd1a4f4fc  libgomp/testsuite/libgomp.c++/atomic-3.C
 f944acede3f9beeaf281ef9282c0ff44  libgomp/testsuite/libgomp.c++/atomic-4.C
@@ -51698,6 +51930,8 @@ d65773670d221b74aa6b327a1de57dff  libgomp/testsuite/libgomp.c++/pr38650.C
 d566c37edb50b4aac9c2b4fa4d381670  libgomp/testsuite/libgomp.c++/pr49043.C
 d2e531409ec3708a503019e5aec4cfd8  libgomp/testsuite/libgomp.c++/pr56217.C
 512663e491037801da2280baf0593ee3  libgomp/testsuite/libgomp.c++/pr63248.C
+257fc12cd8d3515d58479cda60ba9760  libgomp/testsuite/libgomp.c++/pr64824.C
+c502d9f520499385320f0e6f5cf75c8c  libgomp/testsuite/libgomp.c++/pr64868.C
 a594cebdf052900dd0c8792068e14d85  libgomp/testsuite/libgomp.c++/reduction-1.C
 6a724210e4cb30df7ade4ef7ee0aa83e  libgomp/testsuite/libgomp.c++/reduction-2.C
 e6be7ac480ea1328785bc17e9c2ecc9a  libgomp/testsuite/libgomp.c++/reduction-3.C
@@ -51725,6 +51959,7 @@ fa90d4613f21c2fc2203f662585b40a3  libgomp/testsuite/libgomp.c++/single-2.C
 a7edc8ba5a137d69a617a4d3675b5b01  libgomp/testsuite/libgomp.c++/target-2-aux.cc
 97d0747d71dfaa8c0f46c3fbdbae27d9  libgomp/testsuite/libgomp.c++/target-2.C
 f5f370945da4ed9519d04fd309672472  libgomp/testsuite/libgomp.c++/target-3.C
+da31150d5d916f6dc9bde797015a2f2f  libgomp/testsuite/libgomp.c++/target-4.C
 4755f8276f35f740d59135af4e5242f0  libgomp/testsuite/libgomp.c++/task-1.C
 5532f36e28daf97021228ebf72885697  libgomp/testsuite/libgomp.c++/task-2.C
 27531bc2a807e1107292fe33e894f8a0  libgomp/testsuite/libgomp.c++/task-3.C
@@ -51778,6 +52013,7 @@ b5f7bab4126564eb440b88c3b697d94b  libgomp/testsuite/libgomp.c/atomic-13.c
 33127ad11444516f01f50d3c91a2f1d6  libgomp/testsuite/libgomp.c/atomic-15.c
 6f72ee0577bc6156aa5c8df3b6419bbb  libgomp/testsuite/libgomp.c/atomic-16.c
 0ab38a97361e81570c040a605673de79  libgomp/testsuite/libgomp.c/atomic-17.c
+de7ff8a499a5a04c4f79702c81068553  libgomp/testsuite/libgomp.c/atomic-18.c
 b2cad381aa4dd3db0ef4c2a7e632baf1  libgomp/testsuite/libgomp.c/atomic-2.c
 b0fbce555e04a1378026d70e19942300  libgomp/testsuite/libgomp.c/atomic-3.c
 55ed566464c81304a5007804570816ec  libgomp/testsuite/libgomp.c/atomic-4.c
@@ -51913,6 +52149,10 @@ a4e264055265ee01b91f6f62b639ce64  libgomp/testsuite/libgomp.c/pr49898-2.c
 c89b5d69df5f2444e2557c78291a14d8  libgomp/testsuite/libgomp.c/pr58392.c
 ba71b37eca85bfa9869341e4bae8b06c  libgomp/testsuite/libgomp.c/pr58756.c
 a5c8ec3cb2fa7cde29cb39cc0b9b66fc  libgomp/testsuite/libgomp.c/pr61200.c
+be881f5cc9989977aeedb5b25a571556  libgomp/testsuite/libgomp.c/pr64734.c
+42db44e2c4cc442bab5ff29472d344cf  libgomp/testsuite/libgomp.c/pr64824.c
+e8be82638e67565545124654d8462470  libgomp/testsuite/libgomp.c/pr64868.c
+b9f3adf54414b3cb98d10f86ee7032dd  libgomp/testsuite/libgomp.c/pr66133.c
 ea7c9e74bda402b1663a903b26400fab  libgomp/testsuite/libgomp.c/private-1.c
 a594cebdf052900dd0c8792068e14d85  libgomp/testsuite/libgomp.c/reduction-1.c
 6a724210e4cb30df7ade4ef7ee0aa83e  libgomp/testsuite/libgomp.c/reduction-2.c
@@ -51946,6 +52186,7 @@ b898403c47aaf9326713abfd2c7ed020  libgomp/testsuite/libgomp.c/simd-9.c
 f96d46491425528d3d7b30c80c64952a  libgomp/testsuite/libgomp.c/single-2.c
 a3d6465fcc15265d1c049a81027ae8db  libgomp/testsuite/libgomp.c/sort-1.c
 2d0531f37e92490d3e091ec0ea17b2d5  libgomp/testsuite/libgomp.c/target-1.c
+d01ee6246770101e0827d46c27fc4cc5  libgomp/testsuite/libgomp.c/target-10.c
 ff5f69e771b2e25e90824b080880787c  libgomp/testsuite/libgomp.c/target-2.c
 b7efacf79d1aeccedabb2bb25be9f758  libgomp/testsuite/libgomp.c/target-3.c
 2976dbc7a685197058903e4113919f62  libgomp/testsuite/libgomp.c/target-4.c
@@ -52093,6 +52334,9 @@ ddd13da7e261528309013b3a49c05bca  libgomp/testsuite/libgomp.fortran/pr35130.f90
 59e84625ad4e7a9efce95deaae9a6074  libgomp/testsuite/libgomp.fortran/pr48894.f90
 40b8d47a0d185d1cd5afdf5de857c4db  libgomp/testsuite/libgomp.fortran/pr49792-1.f90
 d40bb4d01cb9e310f1f5f2f8112947c3  libgomp/testsuite/libgomp.fortran/pr49792-2.f90
+1dac91934a3563a19d93ed80e90a1402  libgomp/testsuite/libgomp.fortran/pr63938-1.f90
+0c0a333229738678ff439ed622473a71  libgomp/testsuite/libgomp.fortran/pr63938-2.f90
+488472a1cb3fe3be092f96fa1fd4c844  libgomp/testsuite/libgomp.fortran/pr65597.f90
 ed38be90cae92afacea925b0c0c3c356  libgomp/testsuite/libgomp.fortran/procptr1.f90
 4af6e9394ddc7a6c89dca2968cac162e  libgomp/testsuite/libgomp.fortran/recursion1.f90
 f7a52f7caa9a62d15b0f1270dc461c08  libgomp/testsuite/libgomp.fortran/reduction1.f90
@@ -52176,7 +52420,7 @@ adeb43ecb87dafa9913dd663bab2ffce  libgomp/testsuite/libgomp.graphite/graphite.ex
 54f9ab06f446afe0bc8a6e6f07a83d6c  libgomp/work.c
 99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
 a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
-a199a310f4694fe4912e4b85412d2f3b  libiberty/ChangeLog
+82d5b4febee6c4a790ae02aa594292f5  libiberty/ChangeLog
 a5d547789d7db4375ced07d9103d520e  libiberty/Makefile.in
 c68dbf7834af4281ebd84caa3fd54680  libiberty/README
 a23c6974fb1adf6977b5f5454c430bf0  libiberty/_doprnt.c
@@ -52327,7 +52571,7 @@ cdc140ce93944c5bb2ac62cd3dfd86d6  libiberty/xmalloc.c
 4746095b1b67693ab6e78ed72ead1235  libiberty/xstrdup.c
 6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
 c6e7ef53b4ff115a136d917511222656  libiberty/xstrndup.c
-93ab43fc59b3c8581504bde458e0226c  libitm/ChangeLog
+a6c7cc99cb16e6f018e360dd3a2249e0  libitm/ChangeLog
 800745ad84882bc445410a58c2fddd51  libitm/Makefile.am
 232e2b039eaa7ea7006437397392ae64  libitm/Makefile.in
 1529a197c135a0629228fc9d31998589  libitm/aatree.cc
@@ -52385,7 +52629,7 @@ d2dbbbb75cd9c5edfde395ad53e62153  libitm/config/x86/x86_avx.cc
 b9557cfa4f6c06b54f305a5b85fd1015  libitm/config/x86/x86_sse.cc
 acc6a26688cae0fd1d43ca2d36a0e0b4  libitm/configure
 923e894a4f47f976d8e49af5afc13105  libitm/configure.ac
-8b6c67b3ad8a082c9c072067068b33d5  libitm/configure.tgt
+02786f9c0686c85d336221d54f536f61  libitm/configure.tgt
 95fda76bdc2a5bcbcfb720b1f3bb1600  libitm/containers.h
 5dc53060e57627b03382dbd606aa5d59  libitm/dispatch.h
 fce3c710dce0dcbc25e474baeacc332f  libitm/eh_cpp.cc
@@ -52430,7 +52674,7 @@ ef24198422c19f99b0c41be6a16f7081  libitm/testsuite/libitm.c/txrelease.c
 d482ef5219faa907ff83393d6628de60  libitm/useraction.cc
 b18e667b8febff13520856a6c985a788  libitm/util.cc
 94d55d512a9ba36caa9b7df079bae19f  libjava/COPYING
-4610466263d2e7978626813e6b95dc65  libjava/ChangeLog
+c0f29ba3b51ef51d759348babcffeec4  libjava/ChangeLog
 03e1f38b916604fdf1470238201325f3  libjava/ChangeLog-1998
 691acb61fbd6a2235826ff55db5578be  libjava/ChangeLog-1999
 b58c6701706771a02bf00a77666941ef  libjava/ChangeLog-2000
@@ -52471,7 +52715,7 @@ de54f80484e640306e109e785e4611c8  libjava/classpath/.settings/org.eclipse.jdt.co
 880a25226e4e4e4c241663041d24f8dd  libjava/classpath/AUTHORS
 efd97e0bb913655e0c8b16fa78bdded4  libjava/classpath/BUGS
 af0004801732bc4b20d90f351cf80510  libjava/classpath/COPYING
-83e83f9b00f29967b4012ccc94687c1f  libjava/classpath/ChangeLog
+21ab9e0adf345332240437eb59a9fd29  libjava/classpath/ChangeLog
 3418fae58de967afe26d915a4b18d82c  libjava/classpath/ChangeLog-2003
 a5b72adb94a3c362738b0f52e57a82af  libjava/classpath/ChangeLog-2004
 61159c6e0802d0d2a92b3051003db5c5  libjava/classpath/ChangeLog-2005
@@ -52512,18 +52756,18 @@ b343eec566430e85d1f95c21438aa4ee  libjava/classpath/doc/api/Makefile.am
 862e32ddcce3928c53d25ceb1608b8f1  libjava/classpath/doc/cp-tools.info
 0349e5c38c548584225423ef4bafd20b  libjava/classpath/doc/cp-tools.texinfo
 3155d9bd9a7bf4aff2ff0dfe4a2cb878  libjava/classpath/doc/cp-vmintegration.texinfo
-724547115ffa2c64ab3288681a513fb3  libjava/classpath/doc/gappletviewer.1
-26bfd2df3a706e49d38ec58a64b8c647  libjava/classpath/doc/gjar.1
-e6d9ce0df8dc6b55d2673db4e049580d  libjava/classpath/doc/gjarsigner.1
-dc16b3633e3633a03d9696dbd6d28339  libjava/classpath/doc/gjavah.1
-517c1d60f4001eb7489bd0e45dc71099  libjava/classpath/doc/gjdoc.1
-c39d86ed18b452b96ad221c1912edc59  libjava/classpath/doc/gkeytool.1
-dce9ee562e862469e2ab5a71a9c6a7db  libjava/classpath/doc/gnative2ascii.1
-f9d49748bd83baaa5a195ab151e55c8b  libjava/classpath/doc/gorbd.1
-f7725436be65d0b83175e067b7163000  libjava/classpath/doc/grmid.1
-f77389ca83955ea10a123a00c8eaebe2  libjava/classpath/doc/grmiregistry.1
-aee351850115c0ba268edaf6f33eb8b1  libjava/classpath/doc/gserialver.1
-447ee3d23cc18ceb10cbbb15e40d221f  libjava/classpath/doc/gtnameserv.1
+d0735d267c830cde0376640120a3d50e  libjava/classpath/doc/gappletviewer.1
+1b09e192622641f0681f1da9bc8e258e  libjava/classpath/doc/gjar.1
+6c1f9b6dbdcc491bdf1f0d55ed34b270  libjava/classpath/doc/gjarsigner.1
+3b80d591ebf9058598e89e23d64f7b1d  libjava/classpath/doc/gjavah.1
+6567c6547c1f8779d794b5b5a996ce43  libjava/classpath/doc/gjdoc.1
+01772f760f5d46544497cc83eb80b27d  libjava/classpath/doc/gkeytool.1
+b367c8ad7d1a3b82c97a484bdc12078a  libjava/classpath/doc/gnative2ascii.1
+2c6f06b3fcc45400e8e056ae362df3f4  libjava/classpath/doc/gorbd.1
+457aeba1343db9b39a6e587ee5ffe234  libjava/classpath/doc/grmid.1
+cb40126cc5b094ef453575a62aed0c1a  libjava/classpath/doc/grmiregistry.1
+7e397b4d04930b1525761dd31530d48e  libjava/classpath/doc/gserialver.1
+bb85be82cdd10cd89f9e642244c32f08  libjava/classpath/doc/gtnameserv.1
 7e4e31659df1c7e815f9151958dceef2  libjava/classpath/doc/texi2pod.pl
 01b23c87dcf82048a5958c8224653305  libjava/classpath/doc/texinfo.tex
 b1e0c0c30547d57d7a09b04d47c70b06  libjava/classpath/examples/.cvsignore
@@ -74740,7 +74984,7 @@ a40a8f1527e2703fe2f08bf7276d8591  libjava/libgcj.spec.in
 697ca1de35069bd86456a5a19b9c4f11  libjava/libgcj.ver
 184718636f014ef2ca46d62ba8d6c3bf  libjava/libgcj_bc.c
 e3eda01d9815f8d24aae2dbd89b68b06  libjava/libltdl/COPYING.LIB
-b9d539afe73a0f3a99dc65a837ee6278  libjava/libltdl/ChangeLog
+1bd8578bcb2c8349d0b2f69db4d5d319  libjava/libltdl/ChangeLog
 349267319e3d55dcf180a20f85394144  libjava/libltdl/Makefile.am
 930c6383a37e6cc8e0625c9a281eda95  libjava/libltdl/Makefile.in
 36da24f9facf00b349ea10dba3789d92  libjava/libltdl/README
@@ -76438,7 +76682,7 @@ d41d8cd98f00b204e9800998ecf8427e  libjava/testsuite/libjava.special/pr21115.out
 434ac04eb066f5075299583492846410  libjava/verify.cc
 355440a0c2fb5e16259d7ae381b37ed5  libjava/win32-threads.cc
 434d5e5e91727dec004f0d1d1fab47ec  libjava/win32.cc
-7449f9aef2accd60eb5a0911a0569e9d  libobjc/ChangeLog
+57a7f32af07817aa0d19f9305d1c1be5  libobjc/ChangeLog
 5b7fbdee280ee8842f0d92c076996a91  libobjc/Makefile.in
 e4893352ae160018db798e6ecf5e5378  libobjc/NXConstStr.m
 3989d86c4963b58cd68b2584b937e20a  libobjc/Object.m
@@ -76496,14 +76740,14 @@ bf68b180d5f82fed7851e900d9c2e00e  libobjc/selector.c
 8824087a6da69f8b39bb0b25a8097646  libobjc/sendmsg.c
 e6a04cd604bd9234cf63edd367b0d90c  libobjc/thr.c
 a916467b91076e631dd8edb7424769c7  libquadmath/COPYING.LIB
-6b7691c1bd5a7e64a225575eef3003b6  libquadmath/ChangeLog
+bb35a9d57d888609ebd21c48b9150f52  libquadmath/ChangeLog
 76ca0ca0f1d83d1c11535e45e1044572  libquadmath/Makefile.am
 e786ca4a729f6b1b34b37c7d15a02ae5  libquadmath/Makefile.in
 4c8b4478a1031d129e7cc6b341876b99  libquadmath/acinclude.m4
 aece970dd74d47d051257c4d4d1e91fa  libquadmath/aclocal.m4
 bf09ede5c6d78e3d132bde0f933590d8  libquadmath/config.h.in
-c07d51701c0992c05cc87da166fe9a8e  libquadmath/configure
-70f1bb2cf17ed14a22bd7f52ebf2593e  libquadmath/configure.ac
+0c0336167efb032cecab9dd5ade78d78  libquadmath/configure
+29e66c9d2ef7b7621276c63bee20d622  libquadmath/configure.ac
 a27691760e2964b7c14a57f46622026c  libquadmath/libquadmath.info
 46b44acd71b68faa8a93c7b2a1ea8e0b  libquadmath/libquadmath.texi
 77280bb7ee423875e03d9c0d34527df6  libquadmath/libtool-version
@@ -76627,7 +76871,7 @@ e766022f8615b72cbc38335d262e9d3d  libquadmath/strtod/grouping.h
 a81cc82679e80c86cfbd5575867450d0  libquadmath/strtod/strtod_l.c
 da808e110fc09ebd41ebd405790a70df  libquadmath/strtod/strtoflt128.c
 d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
-a41eb40562bb22f31b01e4c7712b0a48  libsanitizer/ChangeLog
+a722c60b684d0f98b8cd9685d50833d1  libsanitizer/ChangeLog
 0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
 5c6a385040bdd0ebb0bc0a3498a6f538  libsanitizer/MERGE
 cd6c39551a9d69f3b38689389e5513be  libsanitizer/Makefile.am
@@ -76674,8 +76918,8 @@ d972d0a18d5563543cb862dc86992302  libsanitizer/asan/asan_thread.h
 d74b4b503312f24ba0d3342552c3a3c8  libsanitizer/asan/asan_win.cc
 b99520860caeed37d32bc2bf8940f883  libsanitizer/asan/libtool-version
 7d23c099a6eeb4e99c6f47cdb04e2338  libsanitizer/config.h.in
-927eb6fef1700a31ed5cdf88b3b2d4eb  libsanitizer/configure
-2d532a280187f8cbeff1a651cb4c2fdc  libsanitizer/configure.ac
+0bc8ee003cdc0d35e8e52c2dc503493a  libsanitizer/configure
+872ea1b3470e90fac326ebe5aacb7faf  libsanitizer/configure.ac
 b6326f59789f85f674c30aeae2ac7f7e  libsanitizer/configure.tgt
 3122c4745e0256d22bb39ee681b77779  libsanitizer/include/sanitizer/asan_interface.h
 ad946f5dc74deb75078cdfb39a6758ce  libsanitizer/include/sanitizer/common_interface_defs.h
@@ -76850,7 +77094,7 @@ b5ce42595a9ea1f02cd73595c9bd9366  libsanitizer/ubsan/ubsan_type_hash.cc
 2219f17a5c8740755ef8e9831cbaa8fe  libsanitizer/ubsan/ubsan_type_hash.h
 e3dd09193c7915da7b4966ed821529c1  libsanitizer/ubsan/ubsan_value.cc
 b223f4ad4acdcad3f796a2d39e6ff81e  libsanitizer/ubsan/ubsan_value.h
-413613cc641f80ae59dd688600cff60b  libssp/ChangeLog
+6706b7f325300d1b047c00a32a0a2efb  libssp/ChangeLog
 01d9954c400db04da1b8705029e6d9d9  libssp/Makefile.am
 6f9651cc4e77f9e7629b0142b05a90e0  libssp/Makefile.in
 8b0dd0c2a8b446bf5577a8562ad19885  libssp/aclocal.m4
@@ -76879,7 +77123,7 @@ aeb2f84c5e8ba3215469d507bd2efe57  libssp/ssp/string.h
 e9ab923d2562bf5f5be6883dfb9f0184  libssp/strncpy-chk.c
 5e0d8b8a766c31b12354baec1b7a159c  libssp/vsnprintf-chk.c
 f56ab1f8922a16f7e9e4f5270ae1e34e  libssp/vsprintf-chk.c
-aa6a1df3ea930c34b19ffc669b929cfb  libstdc++-v3/ChangeLog
+eef70e827d2800e718dac9fadf5e6c8e  libstdc++-v3/ChangeLog
 7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
 7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
 a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
@@ -76935,6 +77179,7 @@ e4601c920d386042ee33eada8f857e4a  libstdc++-v3/config/allocator/malloc_allocator
 f16821716a3655d01b52a89896259426  libstdc++-v3/config/allocator/mt_allocator_base.h
 796bcb0b5d01b6694cc7c0d1a8b5e54d  libstdc++-v3/config/allocator/new_allocator_base.h
 11f38cac452457fcd93b3b977eaf9267  libstdc++-v3/config/allocator/pool_allocator_base.h
+a8e4c3229b2920ff10f084abbe44f759  libstdc++-v3/config/cpu/aarch64/atomic_word.h
 0221dbc04a7b601acfd0da931a7b3979  libstdc++-v3/config/cpu/alpha/atomic_word.h
 d059cb22b875e62e5ca8642ce6ce164a  libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h
 be25a41bc5d1044ff6e902c37385babe  libstdc++-v3/config/cpu/cris/atomic_word.h
@@ -76954,7 +77199,7 @@ f84215ade0a393dfe44a453004821c6e  libstdc++-v3/config/cpu/i486/opt/ext/opt_rando
 b67ec755407be8742c5cd19783fb4163  libstdc++-v3/config/cpu/ia64/atomic_word.h
 c94f1d055eafa53688830be0f008a055  libstdc++-v3/config/cpu/m68k/atomicity.h
 5dff8f5ea7930b12e327f9746b7feb0f  libstdc++-v3/config/cpu/microblaze/cpu_defines.h
-476f33138c875028c88eb8061a6a6987  libstdc++-v3/config/cpu/powerpc/atomic_word.h
+7c83d2d2ecf7a4683707a90652807759  libstdc++-v3/config/cpu/powerpc/atomic_word.h
 23f35987b7f4710ab2d8ed85dfe88f14  libstdc++-v3/config/cpu/powerpc/cpu_defines.h
 ab67fd7b3e9bcf9bb6cbb6d6d97754e3  libstdc++-v3/config/cpu/sh/atomicity.h
 ebf9c1a6ec4b8a6f530cf30e0f6013b2  libstdc++-v3/config/cpu/sparc/atomic_word.h
@@ -77075,7 +77320,7 @@ bbd0d9c8dff9174727aed7ec20a2d075  libstdc++-v3/config/os/tpf/os_defines.h
 0b763fcf9708297aade589be5d9dd84f  libstdc++-v3/config/os/vxworks/os_defines.h
 df962e03999dce9fd185ea2f5c95994a  libstdc++-v3/configure
 22c7e66449276f6f40f3d1f3e861a3e8  libstdc++-v3/configure.ac
-74f10224f0cf4a4384ebf375b073fe08  libstdc++-v3/configure.host
+8e2ea21a666bb7cdafc043cffd9b367e  libstdc++-v3/configure.host
 fdacaed843ab8ade8870caa45c8cbcd0  libstdc++-v3/crossconfig.m4
 4c0ea1fd25dccb0a92796dee5a153cba  libstdc++-v3/doc/Makefile.am
 3875c10a8b1602da06759ac498908f2f  libstdc++-v3/doc/Makefile.in
@@ -77086,13 +77331,13 @@ fdacaed843ab8ade8870caa45c8cbcd0  libstdc++-v3/crossconfig.m4
 1273764cd133c402d2d3f22cf2913af5  libstdc++-v3/doc/doxygen/tables.html
 97a42dc67b2b05ae274ef607aa1b9f7f  libstdc++-v3/doc/doxygen/user.cfg.in
 66e139590a163a3e9d632f33fbe1d1b3  libstdc++-v3/doc/html/README
-4009d66443f2534584366cd013ddd624  libstdc++-v3/doc/html/api.html
+353f5ed9b54a4ba4e0387f557102d0bc  libstdc++-v3/doc/html/api.html
 e24504647642dbafa49db140acc95c21  libstdc++-v3/doc/html/bk02.html
 58ad49058a87b197aaddb99f389eacfa  libstdc++-v3/doc/html/bk03.html
 1d3eb837e8c17cf0d0ad6d151e8d1777  libstdc++-v3/doc/html/ext/lwg-active.html
 68372fa89a0decb4aa5f941df5484129  libstdc++-v3/doc/html/ext/lwg-closed.html
 2defa75c6dc8ce9a6f6b775439df3b7c  libstdc++-v3/doc/html/ext/lwg-defects.html
-c69ec11cafce0d5c44cae4cd87842360  libstdc++-v3/doc/html/faq.html
+cb5ce617a84279cb6527f1ed92e1a008  libstdc++-v3/doc/html/faq.html
 1ae70f0bf94464b036515d333fff8ab2  libstdc++-v3/doc/html/images/confdeps.png
 d7f63b43e9f4c39cf71de7585de522ee  libstdc++-v3/doc/html/images/pbds_balls_and_bins.png
 22eedc841676a98f8ae8b95131ac4d7e  libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png
@@ -77172,109 +77417,109 @@ d7249eb4d31bd107d0b09ea3c80cb723  libstdc++-v3/doc/html/images/pbds_tree_text_in
 1d86b338a316806c80b250eb132ac6dd  libstdc++-v3/doc/html/images/pbds_tree_text_lor_find.png
 33bc39e8f2d47f3d490d7ca7d4832b43  libstdc++-v3/doc/html/images/pbds_trie_node_updator_policy_cd.png
 df705f3839120dcb896e9839cf3404d0  libstdc++-v3/doc/html/images/pbds_update_seq_diagram.png
-3c6e13a00daf0127a54540c025b8147c  libstdc++-v3/doc/html/index.html
-0402fe589415fc0bb8658b4006895209  libstdc++-v3/doc/html/manual/abi.html
-2c4c1a2cb90436cf7954e28dc25a2467  libstdc++-v3/doc/html/manual/algorithms.html
-14f1aa26d5775983e72d9f348f7d6c9b  libstdc++-v3/doc/html/manual/api.html
-fbbfaa76d7a42a72c5dad6b242cadc20  libstdc++-v3/doc/html/manual/appendix.html
-54d41bd651f9a4a0bc6b11aab373b9ec  libstdc++-v3/doc/html/manual/appendix_contributing.html
-4c9fb53bd186d2ad3dc6cb10af928dc1  libstdc++-v3/doc/html/manual/appendix_free.html
+db7f502290c9fa413d7ae5dda96d75cb  libstdc++-v3/doc/html/index.html
+0408e6060eeded3e656d3e2f4b143ed9  libstdc++-v3/doc/html/manual/abi.html
+17e9e3e8f78e8692b58af26158167585  libstdc++-v3/doc/html/manual/algorithms.html
+59348d65491f1eb6b2440ae545094470  libstdc++-v3/doc/html/manual/api.html
+174917774df8f984ccf1ea794fa98310  libstdc++-v3/doc/html/manual/appendix.html
+2d16324e54201d0eaa6e09b4b1850a6f  libstdc++-v3/doc/html/manual/appendix_contributing.html
+0fa7d41da1ea81203d580965d502fc2b  libstdc++-v3/doc/html/manual/appendix_free.html
 1ba38c64d73796a214334f2dab820328  libstdc++-v3/doc/html/manual/appendix_gfdl.html
-73c5611a611eb53ae23e24ae91afb227  libstdc++-v3/doc/html/manual/appendix_gpl.html
-b98a864a08a79cd2cb6d5bc779fa3e37  libstdc++-v3/doc/html/manual/appendix_porting.html
+5843118ded11863f72b5faec18bfdf68  libstdc++-v3/doc/html/manual/appendix_gpl.html
+77912a154fc33b6c2cdb6b09701abbe7  libstdc++-v3/doc/html/manual/appendix_porting.html
 46fd7345a24d11abe307719f4f3eee14  libstdc++-v3/doc/html/manual/associative.html
-b17da6afbf64261e0f649fcee15cba35  libstdc++-v3/doc/html/manual/atomics.html
-bf6baaf68a97f94bf0d647ab087f23a9  libstdc++-v3/doc/html/manual/backwards.html
+661f03cfb69ed1cf3775b7dcda92aa67  libstdc++-v3/doc/html/manual/atomics.html
+fb222ada0a003dc7ce892626811919e2  libstdc++-v3/doc/html/manual/backwards.html
 4bc46b36e9636b2f61911bec8741819b  libstdc++-v3/doc/html/manual/bitmap_allocator.html
-498420e1a6ef6c101b41425a9f5710da  libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
+d43930ea116326f47f673d256ba198ce  libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
 20c4ccc2db83f1a60a39ae0e88c1d515  libstdc++-v3/doc/html/manual/bugs.html
 e121b9ed2494e3ae68df9b847d0fe1ba  libstdc++-v3/doc/html/manual/concept_checking.html
-de80d38a5ec46066b0e9b22ef11367d7  libstdc++-v3/doc/html/manual/concurrency.html
+1aae74ab3d96cdc39427aa0538a184b0  libstdc++-v3/doc/html/manual/concurrency.html
 cbaf831de347cc53e78117011b7c25c0  libstdc++-v3/doc/html/manual/configure.html
-b3bab8212bc8f32ec05687e5fc3dd834  libstdc++-v3/doc/html/manual/containers.html
+36d789072d519c816a6439d346947a97  libstdc++-v3/doc/html/manual/containers.html
 a039be9cc637470d3f8d3ed9648ca5d2  libstdc++-v3/doc/html/manual/containers_and_c.html
 c14fa3489ca14b1032e04e798e3bf937  libstdc++-v3/doc/html/manual/debug.html
 819dbf166a9b7d51462c83b311309a08  libstdc++-v3/doc/html/manual/debug_mode.html
 183a5a6d1e59c76631c53e33288d08bd  libstdc++-v3/doc/html/manual/debug_mode_design.html
 6a97f7f04b5b1a36575aa5e0f80f1ee5  libstdc++-v3/doc/html/manual/debug_mode_semantics.html
-18b671c4b45f107cbba74b5c23335afd  libstdc++-v3/doc/html/manual/debug_mode_using.html
-6a2268e1a613bdaa2d3384e20f6ac52f  libstdc++-v3/doc/html/manual/diagnostics.html
-20f69b32d97dd600d6b005d8706b66cb  libstdc++-v3/doc/html/manual/documentation_hacking.html
+6f1a61ede8f9135722afc89f5cacd962  libstdc++-v3/doc/html/manual/debug_mode_using.html
+96bb6f3e2353dbf7201fbcabedf70526  libstdc++-v3/doc/html/manual/diagnostics.html
+ef8ae7f0b8e6877645bc2cad90b715c1  libstdc++-v3/doc/html/manual/documentation_hacking.html
 346c6ec0ca78dc31c3c1564d613e95d4  libstdc++-v3/doc/html/manual/dynamic_memory.html
 6754ad07708c36820e08e04e1aeb02bb  libstdc++-v3/doc/html/manual/ext_algorithms.html
 afd7acfb9c6253b27e6ab9f9dd18542b  libstdc++-v3/doc/html/manual/ext_compile_checks.html
 00e24e54a02492bb10d94c60d3d4e8d5  libstdc++-v3/doc/html/manual/ext_concurrency.html
-8e1046cd30989da8a36041c117e2ccfb  libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
+54928a58cb3fc99ff2e53193e60e5978  libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
 2b9b33938584e17f401bf21c285af30a  libstdc++-v3/doc/html/manual/ext_concurrency_use.html
 8fc51fc67d0794cfe349294f28d8e187  libstdc++-v3/doc/html/manual/ext_containers.html
 b83e2280a694b73feedb098666fdcd42  libstdc++-v3/doc/html/manual/ext_demangling.html
 7969471d93a397921bf15645722db9d4  libstdc++-v3/doc/html/manual/ext_io.html
 24abb74f520b2cc64329af7b0eabedd6  libstdc++-v3/doc/html/manual/ext_iterators.html
 549d43cb9c55ed8abf3eb93c27ed9716  libstdc++-v3/doc/html/manual/ext_numerics.html
-266afa53fcec6af8bb61512d95a482da  libstdc++-v3/doc/html/manual/ext_preface.html
+98d0b3eb455a3f1e0e7977f1ea643de0  libstdc++-v3/doc/html/manual/ext_preface.html
 2e9ae95a3ae1a6c6ec52c0b778656ffc  libstdc++-v3/doc/html/manual/ext_sgi.html
 3232979348ed4e031d790cc79ff62b54  libstdc++-v3/doc/html/manual/ext_utilities.html
-8f929f726ce0fe4fb5da4b6c3dee8bfd  libstdc++-v3/doc/html/manual/extensions.html
-6027e6d7439914289ccf0a7469529e50  libstdc++-v3/doc/html/manual/facets.html
+f8a1a2b42c4ca5ec7d2c31aa86dcb28c  libstdc++-v3/doc/html/manual/extensions.html
+b2fa8b124cb10b0156e1cfd189b59bf9  libstdc++-v3/doc/html/manual/facets.html
 42ecbe0dd240c60dd968ad745d6dd81c  libstdc++-v3/doc/html/manual/fstreams.html
 5ed2116075aa233ced29bb764841298c  libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
-b97012e9b361ea8f409751648c8870cc  libstdc++-v3/doc/html/manual/index.html
+c57f7a0b222487fda1eb81b0d5dd151f  libstdc++-v3/doc/html/manual/index.html
 7ec577626226bdd896bef777ac0710ec  libstdc++-v3/doc/html/manual/internals.html
-f3dc18f3d18e17f8a59449050e9d7b18  libstdc++-v3/doc/html/manual/intro.html
-be9559d707c3033392a87b57ff38d0b6  libstdc++-v3/doc/html/manual/io.html
+1a26e5229f6f1f92a1e8645cd6870dfd  libstdc++-v3/doc/html/manual/intro.html
+fe04bcac3794f3c5fd2cc4ac350837f2  libstdc++-v3/doc/html/manual/io.html
 c41dc87f8be3a367ba747353fbab2353  libstdc++-v3/doc/html/manual/io_and_c.html
-5bfb056ea45c07a477e5af8b21acf3a6  libstdc++-v3/doc/html/manual/iterators.html
+d141d11852462c5337adaa06f583f969  libstdc++-v3/doc/html/manual/iterators.html
 f2cbe7a16c1459eb9d661c4f59148c85  libstdc++-v3/doc/html/manual/license.html
-5004fb6054a16037436c71349f08eac0  libstdc++-v3/doc/html/manual/localization.html
+c2d7532039e386f23519e9179e945fa3  libstdc++-v3/doc/html/manual/localization.html
 518c609918662df90ec372996b1cee25  libstdc++-v3/doc/html/manual/make.html
-bbdfec2c42d30093f12f2a93e1fcea2b  libstdc++-v3/doc/html/manual/memory.html
+5fa55c5e946c9ad79dc7895a973d5c53  libstdc++-v3/doc/html/manual/memory.html
 2f0038d7682f075686ddeb6eb5700181  libstdc++-v3/doc/html/manual/mt_allocator.html
 90aab30425d9f81569fd7f122545388f  libstdc++-v3/doc/html/manual/mt_allocator_design.html
 769263e7fac4c4320ed9890622a2691d  libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
 b477b181b88903e87cafffc02f82c26f  libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
 18a4f55ae43a71769f8b57d6318fe429  libstdc++-v3/doc/html/manual/mt_allocator_impl.html
-18c9e54ec7f4b3a0c5ea8e2785b69db2  libstdc++-v3/doc/html/manual/numerics.html
+d9ea1056d986c03a8b16c7f12f5a7caf  libstdc++-v3/doc/html/manual/numerics.html
 1e7bda9b7468a80644d426c5ec6d9956  libstdc++-v3/doc/html/manual/numerics_and_c.html
 73a67e9f3ea3de4053702d5d42bc5dd5  libstdc++-v3/doc/html/manual/pairs.html
-771bff73cf6e0f908bf183640d5bde0f  libstdc++-v3/doc/html/manual/parallel_mode.html
+4bb180c778c7c72b4a50629774ae0976  libstdc++-v3/doc/html/manual/parallel_mode.html
 85a125ec0706e197a5e833d1a6c3eff6  libstdc++-v3/doc/html/manual/parallel_mode_design.html
 9fa3374f8d90cea52be068b1a43becf3  libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
 eb0de4015a06cfc5b0946dea8967d9c3  libstdc++-v3/doc/html/manual/parallel_mode_test.html
-5c07185708c27862198d93076dceac82  libstdc++-v3/doc/html/manual/parallel_mode_using.html
+b8b3233435f22653400574f38d4279c0  libstdc++-v3/doc/html/manual/parallel_mode_using.html
 0276102f2848d23d2fc92a5eaf1e5997  libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
-841d8429aecaed7e1f5e96ed45f2d86a  libstdc++-v3/doc/html/manual/policy_data_structures.html
+663dc99858bc28f63177f8fa65491ae0  libstdc++-v3/doc/html/manual/policy_data_structures.html
 880eaee18fe507e3f4488db646a9d0f5  libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
-cc8f32f2dc5bd4ba8ba3697a7a374d81  libstdc++-v3/doc/html/manual/policy_data_structures_design.html
-018a3bc884ff1ef1a53c79fae445d9a1  libstdc++-v3/doc/html/manual/policy_data_structures_using.html
-593e0f63f37b5c1c7e3d18472cd80de0  libstdc++-v3/doc/html/manual/profile_mode.html
+9d4e926bc698be5902e703092890f53c  libstdc++-v3/doc/html/manual/policy_data_structures_design.html
+2a0d8ca21fa8474466548ce3775dce51  libstdc++-v3/doc/html/manual/policy_data_structures_using.html
+9b0faf64bb34446a001404d51b030167  libstdc++-v3/doc/html/manual/profile_mode.html
 55b08f450898f4f72f786affcbc8ad90  libstdc++-v3/doc/html/manual/profile_mode_api.html
 a4da9233e97dfbc6975e64682370e552  libstdc++-v3/doc/html/manual/profile_mode_cost_model.html
-4d77b044053463c6292298ba4e4bcf64  libstdc++-v3/doc/html/manual/profile_mode_design.html
+3355514e2c18b5ae53064296ad54ca02  libstdc++-v3/doc/html/manual/profile_mode_design.html
 948f1fd836cb398e618422bcb4864aaa  libstdc++-v3/doc/html/manual/profile_mode_devel.html
-ca5a17c9373d1d44f0c08a2e6f19778b  libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
+91dee45ac89bc02f1ba637079f8c5c75  libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
 959142a01bcfe51b5975541a3f0b6dc6  libstdc++-v3/doc/html/manual/profile_mode_impl.html
 fed3045c62d581cfbe7a2baec7820bbe  libstdc++-v3/doc/html/manual/setup.html
 6797250ede211d0c027dd4803fb15940  libstdc++-v3/doc/html/manual/source_code_style.html
 0576cfcb1c478a91ea55484a0ff9a3ec  libstdc++-v3/doc/html/manual/source_design_notes.html
 658403718395ded5ff484457bf844421  libstdc++-v3/doc/html/manual/source_organization.html
-0707c367ac1ebeab101fa685d33616aa  libstdc++-v3/doc/html/manual/status.html
-965bcaaf7303f7a8bce928773b095944  libstdc++-v3/doc/html/manual/std_contents.html
+28a59eea74acd60c0cca54b395da903b  libstdc++-v3/doc/html/manual/status.html
+ed0ce6860f6df0dbe55eead191c85e73  libstdc++-v3/doc/html/manual/std_contents.html
 9bb7d8baedf0c99049a912bf241462f1  libstdc++-v3/doc/html/manual/streambufs.html
-c28c33c59f3186f114c493f17fa16136  libstdc++-v3/doc/html/manual/strings.html
+9ad8d9899199db4442e4b8c71f59a8ae  libstdc++-v3/doc/html/manual/strings.html
 aae3d417ab9227eca84f286d98536f8e  libstdc++-v3/doc/html/manual/stringstreams.html
-5b4eb36cc5b8eb8cf32d986db73b3177  libstdc++-v3/doc/html/manual/support.html
+022d9f3799801a1027903f931332d5fb  libstdc++-v3/doc/html/manual/support.html
 14770764db98d494ac0b13348a17ed0d  libstdc++-v3/doc/html/manual/termination.html
-c9224b404383b0d65f4a9a4679b43acb  libstdc++-v3/doc/html/manual/test.html
+e3f03394909eabe4d63d189dd324462e  libstdc++-v3/doc/html/manual/test.html
 1921311e51f16604162cc2e27b35d38b  libstdc++-v3/doc/html/manual/traits.html
 cd78ebf4959f2540dbd758d7d4d86e46  libstdc++-v3/doc/html/manual/unordered_associative.html
-98e09f69e9109c2f81073d89f1c95d9c  libstdc++-v3/doc/html/manual/using.html
+b0546db18d48ed55c02e071a6a6b192a  libstdc++-v3/doc/html/manual/using.html
 50cc01aa824b1049c27e1bb701a33844  libstdc++-v3/doc/html/manual/using_concurrency.html
 cc708c5415f2595cd0a892139ddc1306  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
-03c3ff3a3e2c9a1026dc14bd9e4d9cb5  libstdc++-v3/doc/html/manual/using_exceptions.html
-9847b9543e49522a24d0d76098c27856  libstdc++-v3/doc/html/manual/using_headers.html
+fca4c2485bc93a734a7e662525b7e47a  libstdc++-v3/doc/html/manual/using_exceptions.html
+983cf733628e4544cee4adb5c8ddbfdc  libstdc++-v3/doc/html/manual/using_headers.html
 01bdf62e57ff0fa7248d6994ea849540  libstdc++-v3/doc/html/manual/using_macros.html
 d21cdef4a1734b9605c5c6a534a39749  libstdc++-v3/doc/html/manual/using_namespaces.html
-e1f4e8c45aef131bced71b1a7fcae8d6  libstdc++-v3/doc/html/manual/utilities.html
+30445b7b2eb1f26b397c5cdc57ad6e14  libstdc++-v3/doc/html/manual/utilities.html
 02efc67c40519a69579fd7146ff1bbd2  libstdc++-v3/doc/xml/api.xml
 0b177c199fb448ad3630d15bdc3cbb19  libstdc++-v3/doc/xml/authors.xml
 f5a41d4f7585b850b3182fc5f4888f93  libstdc++-v3/doc/xml/book.txml
@@ -77481,7 +77726,7 @@ dae7fee0512e1fa48b872d2e9bb4f620  libstdc++-v3/doc/xml/manual/containers.xml
 2d5ba1fb65adf9ceacee39ad3ed6fe7d  libstdc++-v3/doc/xml/manual/debug_mode.xml
 b40c4606cbd66730fff3b62e8fbb62af  libstdc++-v3/doc/xml/manual/diagnostics.xml
 29bc186952eee5fb2726d5690b5caf45  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
-50f35099e7f7424496f705a8982de005  libstdc++-v3/doc/xml/manual/evolution.xml
+966bf08314b5b1cea6a0e8732ca00247  libstdc++-v3/doc/xml/manual/evolution.xml
 ef28d7e9c536e9ccffebd446abd32af0  libstdc++-v3/doc/xml/manual/extensions.xml
 b4dcd406dd4cdb85c102eee09463aa1f  libstdc++-v3/doc/xml/manual/internals.xml
 f2edb2861c007a77775fd7c01f1c9425  libstdc++-v3/doc/xml/manual/intro.xml
@@ -77530,7 +77775,7 @@ e07e5910e4f67f7d3954f14acbbe82bf  libstdc++-v3/include/backward/strstream
 fb2612ff10d0e5c69d38948cb59ded2b  libstdc++-v3/include/bits/atomic_base.h
 b6445094d338168182501d1fc887398a  libstdc++-v3/include/bits/basic_ios.h
 ea81f0a9b986c057f49b7b07a4669304  libstdc++-v3/include/bits/basic_ios.tcc
-83856aec70097dbc284772946981c18b  libstdc++-v3/include/bits/basic_string.h
+d9fed6e70ae5a6342483a0f5c4aacd5c  libstdc++-v3/include/bits/basic_string.h
 3ff87e8d8f6ca5e8c67e58507c05cd04  libstdc++-v3/include/bits/basic_string.tcc
 590f3a16f3728c037952220e109916d9  libstdc++-v3/include/bits/boost_concept_check.h
 6c592610e7707c2be6ac72bb374a60a0  libstdc++-v3/include/bits/c++0x_warning.h
@@ -77574,24 +77819,24 @@ fa4fc451d4d980056e5bb42f077d30d1  libstdc++-v3/include/bits/ptr_traits.h
 92d5a42c687ab02cb6a5b27de24773ec  libstdc++-v3/include/bits/random.h
 426f1673c714fdce814fd8a15eafa31e  libstdc++-v3/include/bits/random.tcc
 6fa76b4a22c3bfd7b7758aef0d4f679d  libstdc++-v3/include/bits/range_access.h
-69843b47982a63e19455186b4f727b3f  libstdc++-v3/include/bits/regex.h
-649cb03167606d553e53cbe051581c71  libstdc++-v3/include/bits/regex.tcc
+1483ee94574603d408b8546166ff63a4  libstdc++-v3/include/bits/regex.h
+7434b1eab512fbc1f5fa69a5d8a6a7fd  libstdc++-v3/include/bits/regex.tcc
 373a94fd87da4362c71ba2d3ac8076ce  libstdc++-v3/include/bits/regex_automaton.h
 0e859039cfef2b8e10086955d682f645  libstdc++-v3/include/bits/regex_automaton.tcc
-c9c0486da3c81cb40ea3367cdd91f8c0  libstdc++-v3/include/bits/regex_compiler.h
-4987af0d9f1776172a13cf84b43f55a2  libstdc++-v3/include/bits/regex_compiler.tcc
+7716da7c0ec2d3b9a6ad377e8589da09  libstdc++-v3/include/bits/regex_compiler.h
+766fe18c94c9b8fc3ebf2f933f632a0d  libstdc++-v3/include/bits/regex_compiler.tcc
 fcf411de1eb0b855de59fa82d47ed503  libstdc++-v3/include/bits/regex_constants.h
 267e61d65dd573a232e4794b8a41c090  libstdc++-v3/include/bits/regex_error.h
 87657e7a2c416958809f7ddbeb0340c0  libstdc++-v3/include/bits/regex_executor.h
-d999eb2188ec36f75633f184618ea95f  libstdc++-v3/include/bits/regex_executor.tcc
+3b1558e0273b8cdb32b3f8375a90bd20  libstdc++-v3/include/bits/regex_executor.tcc
 40d92d78e2e4d68bd737a1c39f1e8c9a  libstdc++-v3/include/bits/regex_scanner.h
 cb07487a8c867ffe44908705172d1d83  libstdc++-v3/include/bits/regex_scanner.tcc
 ebd42997721b883b0c545520f6e1923d  libstdc++-v3/include/bits/shared_ptr.h
 73934af07bbc86b6572b24058ba7f506  libstdc++-v3/include/bits/shared_ptr_base.h
 6a86488bbca653f3a59bb8fa94b4e8a2  libstdc++-v3/include/bits/slice_array.h
 6571ee6b9bcceaf19c56c7480d662850  libstdc++-v3/include/bits/sstream.tcc
-06d3780b60c2dbd15d019e87afc04f93  libstdc++-v3/include/bits/stl_algo.h
-4aee5fe7145ef7b96079efcb4821153b  libstdc++-v3/include/bits/stl_algobase.h
+9b7115fc3113f214683a015988549abc  libstdc++-v3/include/bits/stl_algo.h
+5c48b11991e2f15f9eb042d35a3b6a09  libstdc++-v3/include/bits/stl_algobase.h
 1ba291a04351a3832bce9f025fd84563  libstdc++-v3/include/bits/stl_bvector.h
 34a7c37664b072206561cd7564b4ed96  libstdc++-v3/include/bits/stl_construct.h
 31b2e6563922b13c61f34302db1e0895  libstdc++-v3/include/bits/stl_deque.h
@@ -77613,7 +77858,7 @@ a0088f41806a01bec922402b3eca201c  libstdc++-v3/include/bits/stl_set.h
 9ec61e12c0f9cfe4eece441b86702110  libstdc++-v3/include/bits/stl_stack.h
 ba1d780f102f7ce8ebfcb87dd4a48d7b  libstdc++-v3/include/bits/stl_tempbuf.h
 cc79503887a370ccd44ef029cca3e47f  libstdc++-v3/include/bits/stl_tree.h
-8f773b6de66ac394bddf286331b71818  libstdc++-v3/include/bits/stl_uninitialized.h
+a042a4c26b4433889e3a8e600e5c7557  libstdc++-v3/include/bits/stl_uninitialized.h
 647b57eaafb7ef6fa20b9974a21cd063  libstdc++-v3/include/bits/stl_vector.h
 4a227ea0bd121a073811a974d1d3f9b9  libstdc++-v3/include/bits/stream_iterator.h
 122883005110d85812da6f01829e96e9  libstdc++-v3/include/bits/streambuf.tcc
@@ -77713,7 +77958,7 @@ af91b0e236f294d8bafacb74830fd842  libstdc++-v3/include/c_std/clocale
 4058dbbea1d56b06379585fb4d2d5fa9  libstdc++-v3/include/c_std/ctime
 432fc5e72e54b9e2926e102241962585  libstdc++-v3/include/c_std/cwchar
 0e05899f45a6aa630ec470cbe3c221ad  libstdc++-v3/include/c_std/cwctype
-22cd6fcb1a4a0a6bd13e2426a36c7fbe  libstdc++-v3/include/debug/array
+9936afa797e834e80e1e06e25f198a85  libstdc++-v3/include/debug/array
 c1d0f633bba0020f9cc6bbb8b6ca87fd  libstdc++-v3/include/debug/bitset
 aa4ee5f2ea0a5d11b1697f9d3355f059  libstdc++-v3/include/debug/debug.h
 b327ac21f298f7533dd5af163164bd6a  libstdc++-v3/include/debug/deque
@@ -77744,7 +77989,7 @@ ab1016486b6656005c913345e073abcf  libstdc++-v3/include/debug/set.h
 d9f9a801dbe5afcecb48a69ab8d93f32  libstdc++-v3/include/debug/vector
 7e2551d2c2dd7bb997d42a690593b3fa  libstdc++-v3/include/decimal/decimal
 ac52c8af39627ef083a226df42fc31fb  libstdc++-v3/include/decimal/decimal.h
-9f57830b191f4bf2721cef3ccf82a697  libstdc++-v3/include/experimental/optional
+e22b0f66cc17c1f246e375f3c43be3aa  libstdc++-v3/include/experimental/optional
 0b58ffbc8cf84c09444d0afebc938645  libstdc++-v3/include/experimental/string_view
 e215fe0ac7d7f041a50e704b13fbee77  libstdc++-v3/include/experimental/string_view.tcc
 246337397419fba205fe59ea330ef425  libstdc++-v3/include/ext/algorithm
@@ -78032,7 +78277,7 @@ a0ae103418b0cf8b32b9d625146dc3f0  libstdc++-v3/include/ext/vstring.h
 af6394a4bd812cafede7ff16865ee108  libstdc++-v3/include/ext/vstring.tcc
 887a692efc0ebf1dfc4b3080c601cce3  libstdc++-v3/include/ext/vstring_fwd.h
 5b625b8cfb5d474a7987cb2794500c43  libstdc++-v3/include/ext/vstring_util.h
-d1c7accaf51a5bddf210ab14c94a2403  libstdc++-v3/include/parallel/algo.h
+a3bc68e087011d4adc818acc882b11c1  libstdc++-v3/include/parallel/algo.h
 be4a70a2f93ed4d5162f492876b0357a  libstdc++-v3/include/parallel/algobase.h
 23d51b3c42981db8e6e2a58172d681b0  libstdc++-v3/include/parallel/algorithm
 1b15f532b927f65ba989cafeedc2bdd5  libstdc++-v3/include/parallel/algorithmfwd.h
@@ -78055,7 +78300,7 @@ f142abf46d9aac897935dc1ae275304a  libstdc++-v3/include/parallel/for_each.h
 bb0e52d0d988273cf06bbb2797a6b6cf  libstdc++-v3/include/parallel/multiseq_selection.h
 f83b3fd30d1535d4f5ac3546baefb84d  libstdc++-v3/include/parallel/multiway_merge.h
 32b642dbb458ae4776527433b4d64120  libstdc++-v3/include/parallel/multiway_mergesort.h
-a9c5c03a7ffe0333f6c12ed85bbe12a3  libstdc++-v3/include/parallel/numeric
+6274122131d664303005e3b6884b5d1e  libstdc++-v3/include/parallel/numeric
 d357a3d2440fc5f267b8050ebe89eac4  libstdc++-v3/include/parallel/numericfwd.h
 1c7445871245468bbe9c328f39625d48  libstdc++-v3/include/parallel/omp_loop.h
 626f81e4b20f8e6f10e90b276f6e4d83  libstdc++-v3/include/parallel/omp_loop_static.h
@@ -78078,7 +78323,7 @@ fe20ad899448acc2fdf8836d1894f425  libstdc++-v3/include/parallel/workstealing.h
 b8322d84c62fd800b72acb6866376d8e  libstdc++-v3/include/precompiled/extc++.h
 1e91f4468474921b0c5a812a57503697  libstdc++-v3/include/precompiled/stdc++.h
 a0fa827033b1a884f6edfc462c4a985d  libstdc++-v3/include/precompiled/stdtr1c++.h
-baacde68d09c5b9e6a195d54d13d3f69  libstdc++-v3/include/profile/array
+80486af2daca7de876fa6f43962f48d4  libstdc++-v3/include/profile/array
 5f825292f0ede37f86dae6e3dc27ef1b  libstdc++-v3/include/profile/base.h
 0a00ccc91df7951e4250cee076e4b7ea  libstdc++-v3/include/profile/bitset
 7c7b5ed4692cc7afde2d50f913836496  libstdc++-v3/include/profile/deque
@@ -78109,22 +78354,22 @@ b1d4a7748ad2c092f86cbc7d4607bb2a  libstdc++-v3/include/profile/unordered_map
 8e0b5dfeba7bef1319ca35785d4bcf26  libstdc++-v3/include/profile/unordered_set
 bc7490c6a0f4ec45b116aed2d1f1387a  libstdc++-v3/include/profile/vector
 03bea14a736a782136677035bd9442c9  libstdc++-v3/include/std/algorithm
-534becbd2dacc4218a065af4d2dbd344  libstdc++-v3/include/std/array
-f002aa7290dbc49097fc1578ed5c7bef  libstdc++-v3/include/std/atomic
+c38d82cba15a7ef449b95904da97addd  libstdc++-v3/include/std/array
+8baa8dde615da9823ea85e472594ff6f  libstdc++-v3/include/std/atomic
 250d7d0cb152f38b30ec5ed5d7444b15  libstdc++-v3/include/std/bitset
-3cb211a3b134fefdc0a792fa94aa675c  libstdc++-v3/include/std/chrono
+6025bccae71361e5413986723cc6b9ad  libstdc++-v3/include/std/chrono
 1a12d24beb146c2a7b5df03ad3d2286c  libstdc++-v3/include/std/complex
 09558581aa71f89da17b8605dd721409  libstdc++-v3/include/std/condition_variable
 bdd91fa0453fe14cc18653b7dc6927f2  libstdc++-v3/include/std/deque
 99ccf219bea076709ff5aa261b1e2d48  libstdc++-v3/include/std/forward_list
 597cc52c077c63f1fdddbfa95c4bdf1f  libstdc++-v3/include/std/fstream
-7f133f2fc0f513033e8103e64ffbd5c3  libstdc++-v3/include/std/functional
-5ed30bd5182cde7896bcbd605e78baba  libstdc++-v3/include/std/future
+1f66916e04ecf51c5411f9ec534b9b50  libstdc++-v3/include/std/functional
+5ff52943442cbbeb265356c679bbe48e  libstdc++-v3/include/std/future
 7bb240227a6b0f384400781bce9b0523  libstdc++-v3/include/std/iomanip
 0c0f52522245aad5244a12ae2e638253  libstdc++-v3/include/std/ios
 565afcfbf5ba12b6327e4de4d1fd0d2a  libstdc++-v3/include/std/iosfwd
 50f28b6730969a973497fa9c1985ce0b  libstdc++-v3/include/std/iostream
-d86206727695677690dd9b76890a4336  libstdc++-v3/include/std/istream
+2b83960cbf2ce9bf692edfd0fa5146a9  libstdc++-v3/include/std/istream
 ad8f7a1244f2cf5ed21c08d23c62637a  libstdc++-v3/include/std/iterator
 cdf2ed2088596d3b05077f5394156082  libstdc++-v3/include/std/limits
 64d6d5c9a4690f077db0bdc7d180a566  libstdc++-v3/include/std/list
@@ -78133,22 +78378,22 @@ b045b91c1082281e357737da01782d09  libstdc++-v3/include/std/map
 b755a2ad39573e25b1bb0b9124e5cfda  libstdc++-v3/include/std/memory
 a371d63db1cfcd20152f24c29df59e53  libstdc++-v3/include/std/mutex
 c6a7e1a6b8fe4d7d131ebae36adec895  libstdc++-v3/include/std/numeric
-6b2f0a42b950fe56d6079a5781171171  libstdc++-v3/include/std/ostream
+bb8d8140f2cab44e450b6d50f968a0cb  libstdc++-v3/include/std/ostream
 23eea1efc4af7c95248b24294010715f  libstdc++-v3/include/std/queue
 864d600ad43aaa25a0152095ea8b6265  libstdc++-v3/include/std/random
 4089b8c1a80abdd9f79855406ef68650  libstdc++-v3/include/std/ratio
 65baaa75f46ac88d9a857dcde61bb061  libstdc++-v3/include/std/regex
-6794c909d7518aad67f364cef3f6c97e  libstdc++-v3/include/std/scoped_allocator
+f4236803fb555f4f064cc45408861259  libstdc++-v3/include/std/scoped_allocator
 428041092ecf79be52624ba74cb98f92  libstdc++-v3/include/std/set
-65f25cce7bd58da46a7c6c63ea6939ce  libstdc++-v3/include/std/shared_mutex
+d748a87751921b7b5970a5d095b5520f  libstdc++-v3/include/std/shared_mutex
 be0397bc9116cdd442f43d8a8bb372dc  libstdc++-v3/include/std/sstream
 fb28860f413b071d148f791cc4d8b916  libstdc++-v3/include/std/stack
 9cb2bcefffd85250f7e3b548425d8b79  libstdc++-v3/include/std/stdexcept
 313517169f356cb8fedf74c50f3d7b17  libstdc++-v3/include/std/streambuf
 d3b6f528148b5a63ee727c016366da87  libstdc++-v3/include/std/string
 cb7aa094ede5e41f12cda9a35a0cfb13  libstdc++-v3/include/std/system_error
-d72a138145b8c940cb7f3df7af9cb1b1  libstdc++-v3/include/std/thread
-9760164cb7f725eb31a8f5f430d639ab  libstdc++-v3/include/std/tuple
+0b143d17d3ad202900590f99b2de0a8a  libstdc++-v3/include/std/thread
+9da55331d7d6def88b93488bd9fbe67d  libstdc++-v3/include/std/tuple
 4845ad73e96ebaf32863b16eeee47274  libstdc++-v3/include/std/type_traits
 c4e55f5325a735f9af1b712745d9ef83  libstdc++-v3/include/std/typeindex
 fc58abad3b04bfec654e4e41b8f83040  libstdc++-v3/include/std/unordered_map
@@ -78182,7 +78427,7 @@ b7e894cd8d3cb5bebfffc67be44831e1  libstdc++-v3/include/tr1/ctime
 91c4c92b3972e9868cf1e3a8a3d8b25b  libstdc++-v3/include/tr1/exp_integral.tcc
 afe7667003e800d630a3392c38ef5ce9  libstdc++-v3/include/tr1/fenv.h
 daabe6e2eeeb6e1f1ab8526cd4398cbc  libstdc++-v3/include/tr1/float.h
-aebe8ad84131d8024d2223fb0691d73e  libstdc++-v3/include/tr1/functional
+6445fc11cc2632ba64d5f28811a36d23  libstdc++-v3/include/tr1/functional
 27bbe5777fdad3e9023560c7ed7433ec  libstdc++-v3/include/tr1/functional_hash.h
 82cfd458131abe363615ae64856abe13  libstdc++-v3/include/tr1/gamma.tcc
 4001af9cb6f4e39dd656ca707f302800  libstdc++-v3/include/tr1/hashtable.h
@@ -78250,7 +78495,7 @@ e9a1a58fb291a11132115964d01c0c4a  libstdc++-v3/libsupc++/eh_call.cc
 370a96dbffdfcc95d5cf0a822a483052  libstdc++-v3/libsupc++/eh_catch.cc
 66b16e7e18077a52167d0aec58b5dcb5  libstdc++-v3/libsupc++/eh_exception.cc
 30543fbed39a5922ac2ecfcd1ecf02bb  libstdc++-v3/libsupc++/eh_globals.cc
-fce90ada0847252bd03ee32a6765b343  libstdc++-v3/libsupc++/eh_personality.cc
+5761ea391b1bb7ec734d5ed66d70544d  libstdc++-v3/libsupc++/eh_personality.cc
 0f210a7ba25a226b04923566a6925d81  libstdc++-v3/libsupc++/eh_ptr.cc
 04bd96078b6c72d2aa5c465d5364886a  libstdc++-v3/libsupc++/eh_term_handler.cc
 bb6ebbde47c0f1a4b95c1ba5fefe19e7  libstdc++-v3/libsupc++/eh_terminate.cc
@@ -78663,6 +78908,7 @@ d8e4ff54352b9a5f4e645ed41b7b85ad  libstdc++-v3/testsuite/20_util/duration/cons/2
 d57500824cbe6585a00d30aba87f13e8  libstdc++-v3/testsuite/20_util/duration/cons/54025.cc
 b59e0a9b78e9bb259cd8bba4c2b37fb4  libstdc++-v3/testsuite/20_util/duration/cons/constexpr.cc
 3537df5b8e34bd51b111aa81e7b1e01f  libstdc++-v3/testsuite/20_util/duration/cons/dr974_neg.cc
+74982442dbc372859a037f7cb1cb0059  libstdc++-v3/testsuite/20_util/duration/literals/65499.cc
 16fab6c553d75085a5fbb637febcb13b  libstdc++-v3/testsuite/20_util/duration/literals/ns_detail.cc
 5de70618f2f1f561b25e604ef69ba386  libstdc++-v3/testsuite/20_util/duration/literals/types.cc
 882e9eb0b4bfd4d033bf368b5df53abf  libstdc++-v3/testsuite/20_util/duration/literals/values.cc
@@ -78705,6 +78951,7 @@ d9ab7a7f1b9b6b6acfc774735e8ae71d  libstdc++-v3/testsuite/20_util/function/5.cc
 5ff95a9327494e5fd5a7bb9548a8f4ed  libstdc++-v3/testsuite/20_util/function/58569.cc
 9e3c0cf22572df7b8cfad07710c111c9  libstdc++-v3/testsuite/20_util/function/6.cc
 fabfe76dc30b13e696bbaf0d3da99caf  libstdc++-v3/testsuite/20_util/function/60594.cc
+3305b3cbdd4c907260077f59225aaafa  libstdc++-v3/testsuite/20_util/function/63840.cc
 0366f931515bb0f27522d8f32613581b  libstdc++-v3/testsuite/20_util/function/7.cc
 9ace4aecb05784929a870023e72fa190  libstdc++-v3/testsuite/20_util/function/8.cc
 9a4341f79b42e1f66f3258b878bc6cd5  libstdc++-v3/testsuite/20_util/function/9.cc
@@ -79040,6 +79287,7 @@ cc84962908561af15721239ae3084027  libstdc++-v3/testsuite/20_util/result_of/sfina
 4394d512ca8e9f1c1c26b5f74501dbe5  libstdc++-v3/testsuite/20_util/result_of/sfinae_friendly_2.cc
 8477b2fe30330b1075976cb9a245c9e5  libstdc++-v3/testsuite/20_util/scoped_allocator/1.cc
 06ce5c3321baf163c22c31e09e0c236b  libstdc++-v3/testsuite/20_util/scoped_allocator/2.cc
+1d678612f50606f9c142612cbcb0cf54  libstdc++-v3/testsuite/20_util/scoped_allocator/65279.cc
 7b6acafeba40499300e841a0a6a883bd  libstdc++-v3/testsuite/20_util/scoped_allocator/propagation.cc
 1e290f9539f26fa40c0384d5f1031751  libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/explicit_instantiation.cc
 09c792263aa1949df382559046a52feb  libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/typedefs.cc
@@ -79118,6 +79366,7 @@ b82615f408d58fa6c527afc03f8bea13  libstdc++-v3/testsuite/20_util/shared_ptr/requ
 80aa43962945c8cbc52ba624d974645e  libstdc++-v3/testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc
 00ca3571e9d2881ffe0109d4e546a26f  libstdc++-v3/testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc
 5b22c9e1dafbad535af71b6d6cfb7a97  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/58982.cc
+aa900997a01a93c2630b9078aaee9106  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/64476.cc
 5dd054cc496f9d7b2206d48a1069d046  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/808590.cc
 d7cb3a90c680ad21179f4d72a87cc840  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
 7e6c49a3cc455d8aa767b23c969524f3  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/58982.cc
@@ -79143,6 +79392,7 @@ ea8970008dcfc507b732a77b6b6274e5  libstdc++-v3/testsuite/20_util/time_point_cast
 04b82209ed6c0210db27506ad3187c7e  libstdc++-v3/testsuite/20_util/tuple/51365.cc
 c54af389d65573764200bfb0b3597473  libstdc++-v3/testsuite/20_util/tuple/53648.cc
 073f9c2ec2806d897dd09a059663bb00  libstdc++-v3/testsuite/20_util/tuple/60497.cc
+a26b49fbd1ede0591978b7a9ae5f784b  libstdc++-v3/testsuite/20_util/tuple/61947.cc
 ee9b755981731038f237341ae8a7dc3f  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480_neg.cc
 87df08a010e0029b0c82f3c2bac6d87e  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/comparisons.cc
 9a077a11db7228f699befe4f0726869a  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/constexpr.cc
@@ -79229,7 +79479,7 @@ fd55b5e88a896a5b94caa8c7fb57c863  libstdc++-v3/testsuite/20_util/unique_ptr/requ
 0c8bfe6ef5d246204e81d170782dc16e  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/comparisons.cc
 212bc900ff1f652428f395df64263b3c  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/comparisons_array.cc
 6740db81bbc425c83cd6f5bd6e318a8c  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/swap.cc
-340222b0e5666a59dba62aac73eb322a  libstdc++-v3/testsuite/20_util/uses_allocator/cons_neg.cc
+f5c7aa79db877df74b3e1ddf89ed3008  libstdc++-v3/testsuite/20_util/uses_allocator/cons_neg.cc
 96cc599681bd7c4bf8973f9eda326db3  libstdc++-v3/testsuite/20_util/uses_allocator/construction.cc
 5155ff622d0682280bc6ccf27e63968b  libstdc++-v3/testsuite/20_util/uses_allocator/requirements/explicit_instantiation.cc
 b51bdcc0b5f94d15a59327d3e9ac9816  libstdc++-v3/testsuite/20_util/uses_allocator/requirements/typedefs.cc
@@ -80052,10 +80302,10 @@ a34751d10a4dee1a6d05d8083fcd7ab2  libstdc++-v3/testsuite/23_containers/array/spe
 182ab17338523ca109a6c9a1791df527  libstdc++-v3/testsuite/23_containers/array/tuple_interface/constexpr_get.cc
 bf103d2f5aa4a2aa2b8c1abdba347d0c  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get.cc
 684248be7eb31d811b4b582f0739c7b6  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_debug_neg.cc
-624c8a11b95f0bb1220356dffed249df  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc
+25acfb4d33d392e946127ed15d4d6068  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc
 ae6e93cd6be158c814ba031abc549aa9  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
 e14fb12cb1aa5bec6df87aa71b1b2b6b  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_debug_neg.cc
-de95f946f4e7bddcd77631dbd0e7b705  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc
+4549da9c75d64e47294e2b748a7f6450  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc
 266144acd55a3fe809e2a3462670e9f2  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_size.cc
 fd34f4b88fdc358277d133b5504f6ae4  libstdc++-v3/testsuite/23_containers/bitset/18604.cc
 6be58ccf01fb1c85e59a9ae3713d661e  libstdc++-v3/testsuite/23_containers/bitset/45713.cc
@@ -81295,6 +81545,7 @@ f258d44161c2d658a2bfd7a218424652  libstdc++-v3/testsuite/25_algorithms/is_partit
 c9311d4ab505be330817fc9508a02405  libstdc++-v3/testsuite/25_algorithms/is_partitioned/requirements/explicit_instantiation/pod.cc
 8c6e7d87df1470b1384ed9c23c1ba715  libstdc++-v3/testsuite/25_algorithms/is_permutation/1.cc
 073f4f2853de23be634e4a59154448a5  libstdc++-v3/testsuite/25_algorithms/is_permutation/2.cc
+7cb92a48067ff8069a18b5f86f5703b3  libstdc++-v3/testsuite/25_algorithms/is_permutation/64646.cc
 75f7a3b5750f7b342f9d278d5b0ada58  libstdc++-v3/testsuite/25_algorithms/is_permutation/check_type.cc
 d2b3f13047a2322a16adb341a61f7c6b  libstdc++-v3/testsuite/25_algorithms/is_permutation/check_type2.cc
 7f5f7c91cd31f45f53a0300c95e2cca8  libstdc++-v3/testsuite/25_algorithms/is_permutation/requirements/explicit_instantiation/2.cc
@@ -82647,7 +82898,7 @@ a3277d4285217712cb470733acb7f9ec  libstdc++-v3/testsuite/27_io/fpos/14252.cc
 597e57db699becd118010df08ad0fdb1  libstdc++-v3/testsuite/27_io/fpos/14320-3.cc
 73c791887c85b83562a60db84a88fd44  libstdc++-v3/testsuite/27_io/fpos/14320-4.cc
 98cdafb9d94ed577538691a1cacede6d  libstdc++-v3/testsuite/27_io/fpos/14320-5.cc
-962fd1d944f984519fefc16a3696ed9a  libstdc++-v3/testsuite/27_io/fpos/14775.cc
+4697dc3a26c40fd8f14664af9d82464a  libstdc++-v3/testsuite/27_io/fpos/14775.cc
 442fdc027b12b63c88eafc121b0ab475  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/1.cc
 1e2d5048a0d7e8941113db310bbee3ed  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/12065.cc
 fb01f0db16d65955e810980595a8bfbd  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc
@@ -82812,6 +83063,7 @@ d96db7740512bdba703cb07dbfa00053  libstdc++-v3/testsuite/27_io/objects/wchar_t/9
 9effe06e8e6e1e12a7963219b2985357  libstdc++-v3/testsuite/27_io/objects/wchar_t/9_xin.cc
 b715c45a6677f269807dab0bbcf0ee1d  libstdc++-v3/testsuite/27_io/objects/wchar_t/9_xin.in
 ce7828233a2e21a8790115bf1a503dad  libstdc++-v3/testsuite/27_io/objects/wchar_t/dr455.cc
+b0e902d25d73a52c2c3dc6bf82eda2a3  libstdc++-v3/testsuite/27_io/rvalue_streams-2.cc
 5ca446816186f4c11686a9cca3fb9dbe  libstdc++-v3/testsuite/27_io/rvalue_streams.cc
 efdebcaf6e0451268f456a0b9e4f729b  libstdc++-v3/testsuite/27_io/types/1.cc
 347981bf07e6d1b232ede59aad6087fd  libstdc++-v3/testsuite/27_io/types/2.cc
@@ -82822,6 +83074,7 @@ df236aba0e0905993f7257f97196e21e  libstdc++-v3/testsuite/28_regex/algorithms/reg
 0c6747e250f155b5e1d43bb0f8ef40b8  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_00_03.cc
 83f7459ad50adfbaca6f655709534bc0  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_01_03.cc
 bfdfefe57656667ebcc8df3bdf255796  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_02_03.cc
+3649ca590c1496075d6a6dcbe5d6a5e0  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc
 a61eee397025bf99c815aef958edce6b  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/53622.cc
 7e4e5e7d0a959dc08b6c230c4db612ba  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/57173.cc
 44818d0e77ef5c0c64f43b48f0206e7c  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc
@@ -82836,7 +83089,6 @@ b11f3169a894613d341e82f0d8b2c51f  libstdc++-v3/testsuite/28_regex/algorithms/reg
 34e54e012d1d79924b40cdb315a32794  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/anymatcher.cc
 c1ae504cc9233e3c0daa81baf286585e  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc
 f6c447f320d604e51295446969393f7b  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/hex.cc
-c8439344292372327013d7093c95b1c2  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_bracket_01.cc
 13372f50ec4a1c5ea83fa5c7eca50382  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_plus.cc
 be9a7c2477089fb1f79612b05db9b248  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_questionmark.cc
 ed226629e7515b47c2ad1d4f5cd36191  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_range.cc
@@ -82854,12 +83106,12 @@ f90e6591142c5e3cc2f70cd0bbb5624c  libstdc++-v3/testsuite/28_regex/algorithms/reg
 98ded0b99cfc71a5a98c540d16d9b7b3  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/flags.cc
 3cd4a5bc081dbb63a1ebcb4f16e26c3c  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/greedy.cc
 31102df7fe328c26cfe08cd5e0ebfb16  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/string_01.cc
-a33ad73fa750feced588679e3c44d0b6  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/cstring.cc
+6fd078eb80a25e6a149be41b219639de  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/cstring.cc
 386834bdbe90be611f6c1ed400820349  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/cstring_op.cc
 5e2418b6cddbfd3387e071362f07e751  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/moveable.cc
 8f14bd12787e0106064a39e0e81dc904  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/pstring.cc
 b3120d569165574617b64c7b25f1084d  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/range.cc
-88c0092bd5341f23d8c16b4fb2a28a25  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/string.cc
+dc0b50a9880003dad92d86355046fe2a  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/string.cc
 fae8a336f540ee153d8d0d7c81644d4d  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/string_op.cc
 0999d1ff30caedcdcba9155bd4254b45  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/cstring.cc
 4515ebbbdb77e4aecb660a1ee701f11e  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/cstring_op.cc
@@ -82890,6 +83142,7 @@ e8cae9d8577e784f1798f7f21e13ff11  libstdc++-v3/testsuite/28_regex/basic_regex/ct
 01685e9c20e2ae406bafcdeeeefc5719  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/cstring.cc
 d824e53ce1939f8587cebbca54759720  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/default.cc
 85f564a600e93544299a72e6944e3177  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/range.cc
+81aca60aa2f7dc6be37ab8533e7a53ea  libstdc++-v3/testsuite/28_regex/basic_regex/imbue/string.cc
 7bcf78193be501772a8c1c55956d6ca6  libstdc++-v3/testsuite/28_regex/basic_regex/multiple_quantifiers.cc
 5548ee8b630713e272673e09354fd60b  libstdc++-v3/testsuite/28_regex/basic_regex/requirements/constexpr_data.cc
 f3879155319951e3adcbdfa05a6982c7  libstdc++-v3/testsuite/28_regex/constants/error_type.cc
@@ -82897,13 +83150,15 @@ bcfe26ae804ab98295dcc5a24fda7d24  libstdc++-v3/testsuite/28_regex/constants/matc
 7b6aa42e83b90c3e87608619c98a92c1  libstdc++-v3/testsuite/28_regex/constants/syntax_option_type.cc
 3f79e46b83219575a0bce93c9bd455ca  libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc
 f297be10d8b93bbce33a9eee90fe09fd  libstdc++-v3/testsuite/28_regex/init-list.cc
+7e75b5ff6971569940b8362b10059506  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/64140.cc
 ec38370384bb981ac61e2a512e61400f  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/string_01.cc
-e5bed9ede2107ee3f223c97d0df2f2a9  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/string_position_01.cc
+fa657f7633ad358c40cc435508b3ba14  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/string_position_01.cc
 d631ad6977b1cb2907a7ec8e3211900c  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/ctors/char/default.cc
 3defe89aa7cbda693d9d38f83d44f642  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/ctors/wchar_t/default.cc
 0e2d64b6c216aa5434e7f1ee9733b130  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/typedefs.cc
 4b098353423031290ce09aaed00c5626  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/wchar_t/string_01.cc
 7e8e31ca988c5899dadc3fc98d8fcfe0  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/wchar_t/string_02.cc
+6bc529cc98fe4efc17d7927aa1e7032e  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/64303.cc
 420d4d763e3766e8b1f471f8fb7b4756  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/char/string_01.cc
 6d7dc73f83d69ca42b69960f4657cfad  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/ctors/char/default.cc
 79e2907e8f1d72eb0b5083673fdc5533  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/ctors/wchar_t/default.cc
@@ -82913,6 +83168,7 @@ f9a014dcc5ac82a79e10c19310ecfc99  libstdc++-v3/testsuite/28_regex/iterators/rege
 35388f443597d83af28fa43c81cceb22  libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
 d930db87a62d492d4561d576a06c10e9  libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
 69f3e166c519b066ec4b04a6b0038692  libstdc++-v3/testsuite/28_regex/match_results/format.cc
+e010c18a27e8cc55dd19b78d83e42309  libstdc++-v3/testsuite/28_regex/match_results/swap.cc
 dc0cd1e0feb3ade1e96a6f6cac913d88  libstdc++-v3/testsuite/28_regex/match_results/typedefs.cc
 0082fe40ff69c089d9bb559965151562  libstdc++-v3/testsuite/28_regex/range_access.cc
 98583b137f9421b13b79c73875d9b804  libstdc++-v3/testsuite/28_regex/regex_error/regex_error.cc
@@ -82924,8 +83180,8 @@ dd7011547f73b62fd5bba0fc9d6b3556  libstdc++-v3/testsuite/28_regex/sub_match/leng
 48020e2d8ee5c19b6d10e702f6af61d0  libstdc++-v3/testsuite/28_regex/traits/char/ctor.cc
 17a800385862bf445b864b2fae778ae8  libstdc++-v3/testsuite/28_regex/traits/char/isctype.cc
 4fcfebafc8f75f27cb161a7cdada4efb  libstdc++-v3/testsuite/28_regex/traits/char/length.cc
-714ce6169652e1fec351f17cf261a9e4  libstdc++-v3/testsuite/28_regex/traits/char/lookup_classname.cc
-b089f90213902b3a3e40681a21ee7fc9  libstdc++-v3/testsuite/28_regex/traits/char/lookup_collatename.cc
+c7567e3e40c693d4408585d08e98efe6  libstdc++-v3/testsuite/28_regex/traits/char/lookup_classname.cc
+ba7a47b0fbbff7ed4f25babc0243b6df  libstdc++-v3/testsuite/28_regex/traits/char/lookup_collatename.cc
 569d6237a3c29b622d966a8349a40335  libstdc++-v3/testsuite/28_regex/traits/char/transform.cc
 7338005ca0f5899bbde458561474bc9a  libstdc++-v3/testsuite/28_regex/traits/char/transform_primary.cc
 1c612f64654eb89c995dcb8b56494fc3  libstdc++-v3/testsuite/28_regex/traits/char/translate.cc
@@ -82941,9 +83197,10 @@ fc05155968cb41c37a779ae9260f01cf  libstdc++-v3/testsuite/28_regex/traits/wchar_t
 91b236018cecfffb2254aa71c5ed7313  libstdc++-v3/testsuite/28_regex/traits/wchar_t/transform_primary.cc
 9c0f51d9bebb9652c3d2c7c08c0f59f6  libstdc++-v3/testsuite/28_regex/traits/wchar_t/translate.cc
 e98318ee572f1074474679d32f155f21  libstdc++-v3/testsuite/28_regex/traits/wchar_t/translate_nocase.cc
-34b9589ce42c71956a9112f90dcdb606  libstdc++-v3/testsuite/28_regex/traits/wchar_t/user_defined.cc
+48295fa189ca5eacf41d3eff2a0fb927  libstdc++-v3/testsuite/28_regex/traits/wchar_t/user_defined.cc
 b03156fe48fa38802a908187ead52ed5  libstdc++-v3/testsuite/28_regex/traits/wchar_t/value.cc
 31003cd95731250071529ac38951d824  libstdc++-v3/testsuite/29_atomics/atomic/60658.cc
+c06ea9763ce042e1aaa31591690c1dc0  libstdc++-v3/testsuite/29_atomics/atomic/64658.cc
 bc90c96f588a9d0aaa42ae48ad0f9ab0  libstdc++-v3/testsuite/29_atomics/atomic/cons/49445.cc
 993c724c53608b15df881e7eaaa6f31b  libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
 85700ad71c9ce889d8d76245cf696362  libstdc++-v3/testsuite/29_atomics/atomic/cons/constexpr.cc
@@ -82961,7 +83218,7 @@ dcaf720c637092329704d4e6e63b1acd  libstdc++-v3/testsuite/29_atomics/atomic/cons/
 cf173dedc6c689e59004f55a06226942  libstdc++-v3/testsuite/29_atomics/atomic/requirements/base_classes.cc
 6176e5f490f1a4fa0474922fca27b44f  libstdc++-v3/testsuite/29_atomics/atomic/requirements/compare_exchange_lowering.cc
 af7aa7c247255b2a80a409f7083cd020  libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc
-60b09ac96db749cd03e6421b056a3ec6  libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
+6f80dc4a054dd54d808e71dbdc09fdf6  libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
 168680ebf7196b2b37b77cb04f800b98  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc
 8f3821865a8ce44847b289e5e102db3d  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/56012.cc
 8eacd85d9f3bcf531964df6d912ab647  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/aggregate.cc
@@ -82971,8 +83228,8 @@ d11e83a78cae76c6b69c4a50c7ff428e  libstdc++-v3/testsuite/29_atomics/atomic_flag/
 e109955d59438ad44486649e8ccc53a8  libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/standard_layout.cc
 a530d6db20960c73668fc8c9e7f385b2  libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/trivial.cc
 1626d20d7ab562ce21fee48b04fe1d70  libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit-hle.cc
-31709be40f56e4a74dd14cb3b7db71ac  libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
-ff0268b20c3e33a37a18cc42fa8c692c  libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
+009a32732cff06f85a550e5eb0fccf6c  libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
+106c20e8020b1568d3523bd519e726f2  libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
 9f802f3e66512d0246118dc7bb11ca69  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
 98a39a812c47a023dc72a457b22349a3  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/constexpr.cc
 6585fdd5f017c24aabc72aae67f82ec2  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_list.cc
@@ -83162,12 +83419,12 @@ cabac4b761412a9ebbeed6ed21f19611  libstdc++-v3/testsuite/30_threads/shared_lock/
 76881327262cb6c4aff112a0d5193d02  libstdc++-v3/testsuite/30_threads/shared_lock/cons/2.cc
 a91ff87aeb62ccd18fe243f18b88fe83  libstdc++-v3/testsuite/30_threads/shared_lock/cons/3.cc
 3d496b4fb828386d058d5d19d6da6850  libstdc++-v3/testsuite/30_threads/shared_lock/cons/4.cc
-cb8b9c6c05138763f4b02b24f437b977  libstdc++-v3/testsuite/30_threads/shared_lock/cons/5.cc
-897ed599e785bc67b1ea4cdc774674a4  libstdc++-v3/testsuite/30_threads/shared_lock/cons/6.cc
+86cda2bc1e22a0e5ea25b96c0235d5c2  libstdc++-v3/testsuite/30_threads/shared_lock/cons/5.cc
+a1d2c2677d1240d8825dcfcf38c7d16a  libstdc++-v3/testsuite/30_threads/shared_lock/cons/6.cc
 c650af8ba0e9320f4f672d5b980f4bb2  libstdc++-v3/testsuite/30_threads/shared_lock/locking/1.cc
 57ed4751098bed8b5ec98e82ce178690  libstdc++-v3/testsuite/30_threads/shared_lock/locking/2.cc
-356cd4cbaf899b4f7685af64b361c026  libstdc++-v3/testsuite/30_threads/shared_lock/locking/3.cc
-0b03672aa312ec301aecdcd26566638f  libstdc++-v3/testsuite/30_threads/shared_lock/locking/4.cc
+58b28cefc68ebac8eaf1a389a58c409d  libstdc++-v3/testsuite/30_threads/shared_lock/locking/3.cc
+d3f51c2f3b76ef7db980efd6bc4dc71f  libstdc++-v3/testsuite/30_threads/shared_lock/locking/4.cc
 40c477b127f84ed2ac8e0cdf69c8f954  libstdc++-v3/testsuite/30_threads/shared_lock/modifiers/1.cc
 91de78e1b206329468e9c25083bf6e89  libstdc++-v3/testsuite/30_threads/shared_lock/modifiers/2.cc
 f7436ff5121a6be0857eeab52f71b773  libstdc++-v3/testsuite/30_threads/shared_lock/requirements/explicit_instantiation.cc
@@ -83178,10 +83435,13 @@ d780d15db8242fe837c46b8dc9032cdf  libstdc++-v3/testsuite/30_threads/shared_timed
 d221efeafa2b811a1e8db3d6512345b5  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/requirements/standard_layout.cc
 fe71ca9cef7e3ebee4e1ebb285e35be3  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/1.cc
 1a3f00115d9cacf1e5a5df7d417eaad9  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/2.cc
+012758281539594436243df11baeb98c  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/3.cc
 73e6a816b8917e27a99c461dad7e5fcd  libstdc++-v3/testsuite/30_threads/this_thread/1.cc
 8a2ccf72f2eafab394e170689f769aeb  libstdc++-v3/testsuite/30_threads/this_thread/2.cc
 1d91fd94e673e69565bce5f2875dbab2  libstdc++-v3/testsuite/30_threads/this_thread/3.cc
 63fab6df4806c0e6fd0c4763bd21ec65  libstdc++-v3/testsuite/30_threads/this_thread/4.cc
+dfa67bced0d008bfbdea596073619cd8  libstdc++-v3/testsuite/30_threads/this_thread/58038.cc
+9a06ffb70c4ead24c42fa33ffb2c0667  libstdc++-v3/testsuite/30_threads/this_thread/60421.cc
 1c71fe3895e30875a087f7b8a37ecf60  libstdc++-v3/testsuite/30_threads/thread/adl.cc
 bb2f0ee35d97a4812efeade16d25b634  libstdc++-v3/testsuite/30_threads/thread/cons/1.cc
 eedf062193cd10dd82ab644cd59f7de2  libstdc++-v3/testsuite/30_threads/thread/cons/2.cc
@@ -83409,7 +83669,7 @@ ba132a2e1855439797ee44a9fce7d407  libstdc++-v3/testsuite/decimal/pr54036-2.cc
 96fbee722697021406a0682993b80faf  libstdc++-v3/testsuite/decimal/pr54036-3.cc
 2ae70c57806de4f0954d9786fb304bce  libstdc++-v3/testsuite/decimal/pr58815.cc
 acd9b4d61192e8c730652c97940b9272  libstdc++-v3/testsuite/decimal/unary-arith.cc
-35fd56b86d3fde335304ccdd085b5c3f  libstdc++-v3/testsuite/experimental/feat-cxx14.cc
+1c10a535f04c73dcb2dcf34a55e5f892  libstdc++-v3/testsuite/experimental/feat-cxx14.cc
 b8cbd312538e7e6801901a5a6143f64a  libstdc++-v3/testsuite/experimental/feat-lib-fund.cc
 f433286b2d1349c5b1111c60fd440139  libstdc++-v3/testsuite/experimental/optional/assignment/1.cc
 75a9d4cf062023cb1baa91915fcd481a  libstdc++-v3/testsuite/experimental/optional/assignment/2.cc
@@ -83451,7 +83711,7 @@ af8d68158b6bfe925afefc615fb0930a  libstdc++-v3/testsuite/experimental/optional/r
 dc55fb894f1c03adba1041a6f273b249  libstdc++-v3/testsuite/experimental/optional/relops/4.cc
 090cba6677d1fea9a9f85fe0893724f3  libstdc++-v3/testsuite/experimental/optional/relops/5.cc
 8e69c348f95d204b190c6b1e1073912d  libstdc++-v3/testsuite/experimental/optional/relops/6.cc
-ffca06999dc2f2773d1d0ba023ea0eb2  libstdc++-v3/testsuite/experimental/optional/requirements.cc
+d9fcff02ce0177022b4259405d40d1bf  libstdc++-v3/testsuite/experimental/optional/requirements.cc
 665098ee916ad79f901d0b111d04524b  libstdc++-v3/testsuite/experimental/optional/swap/1.cc
 c5dc3eec5ce8007b0241cdcf55577dd5  libstdc++-v3/testsuite/experimental/string_view/capacity/1.cc
 cc5683acbba9ea240926c69771d7454d  libstdc++-v3/testsuite/experimental/string_view/cons/char/1.cc
@@ -83835,9 +84095,9 @@ aba60c767313176a72f09f54d606377b  libstdc++-v3/testsuite/ext/vstring/requirement
 ac04d7532788c543606658a6e823642d  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/wchar_t/1.cc
 c5e278cf7ca0be98a29bfbaba62198cb  libstdc++-v3/testsuite/ext/vstring/requirements/typedefs.cc
 67cfb6cd2693e59705b1917c2ff46b2f  libstdc++-v3/testsuite/ext/vstring/types/23767.cc
-27345ca3e4f8e68ff7e97c460a8fef28  libstdc++-v3/testsuite/lib/dg-options.exp
+6db9e1803e9185d859d40d627df30d65  libstdc++-v3/testsuite/lib/dg-options.exp
 6f649fab69140c713eae35598918c467  libstdc++-v3/testsuite/lib/gdb-test.exp
-6b2476caeaddb12616e68ee218a32dad  libstdc++-v3/testsuite/lib/libstdc++.exp
+10b205b48b2197308986c5b9013b3c01  libstdc++-v3/testsuite/lib/libstdc++.exp
 c8fc1b63ffcc5c82f98ef481b6e69939  libstdc++-v3/testsuite/lib/prune.exp
 6db77e66b0d6adcdb8cb7b0109c00838  libstdc++-v3/testsuite/libstdc++-abi/abi.exp
 3450866a73e98824ab75959cc02db4f6  libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
@@ -84007,6 +84267,7 @@ ff0c4d782f5f1c35238f61124c74ec29  libstdc++-v3/testsuite/tr1/3_function_objects/
 ae60357aa95a4d5ddf072559681f8ea4  libstdc++-v3/testsuite/tr1/3_function_objects/function/4.cc
 05e90a4bf11ec448a6e1681602ecdebb  libstdc++-v3/testsuite/tr1/3_function_objects/function/5.cc
 36e7bcb831189cb7a5534f92c1664c80  libstdc++-v3/testsuite/tr1/3_function_objects/function/6.cc
+649178b37ef036a31461146af6217609  libstdc++-v3/testsuite/tr1/3_function_objects/function/63840.cc
 90f01ee4d5b3da8b58c78bd9c18274bb  libstdc++-v3/testsuite/tr1/3_function_objects/function/7.cc
 ec9d089e4ddc6fcef15fbb3b841d8e5f  libstdc++-v3/testsuite/tr1/3_function_objects/function/8.cc
 59b1687493203621cdcb8a19a8ef8871  libstdc++-v3/testsuite/tr1/3_function_objects/function/9.cc
@@ -84643,7 +84904,7 @@ a6c67f1fe93fa47c0938650d828063f2  libstdc++-v3/testsuite/util/testsuite_tr1.h
 e10d3cdddd0f53096227a5beb8dcd757  libstdc++-v3/testsuite/util/thread/all.h
 18097d974d6f6a830c12c42592f0006d  libtool-ldflags
 3bb1de19ee64b1073f3d23d9a410b743  libtool.m4
-d6be92f06cae2e72e5d473d40b5061d1  libvtv/ChangeLog
+5716905de7b24c3f86c3b2ccf0e8cba9  libvtv/ChangeLog
 eef62b8fb153928c0a2c4a0578c942c0  libvtv/Makefile.am
 6450c2f34e817a27b51c21ac0bd1cb6f  libvtv/Makefile.in
 4ce86f8604e6c86211a4cb2025ffc53e  libvtv/acinclude.m4
@@ -84726,7 +84987,7 @@ add56677aeac69caba72b699b2b43f07  libvtv/vtv_set.h
 5ddbd6d7662cb8cab972934da6561160  libvtv/vtv_utils.h
 247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
 4e65f2f6a05f5eca82ba79c6363aa3db  ltmain.sh
-9cb232f9184798053911b2d708d4db9a  lto-plugin/ChangeLog
+43c5d3b2d733ff317c16937b8715f5b5  lto-plugin/ChangeLog
 4c40915b9f88608e518913005264f8fa  lto-plugin/Makefile.am
 e4afd16e3532d984448f0ca8ba8c3833  lto-plugin/Makefile.in
 e0b6c77fa2326a08aa2d7a69e87e0f8c  lto-plugin/aclocal.m4
@@ -84739,7 +85000,7 @@ dee72a6a60e99528b0d17bf3ff9a1e15  ltoptions.m4
 bc2f6032c98896249eadb56177c7d357  ltsugar.m4
 c30cd33c496505f13d9fbdb6970c7c33  ltversion.m4
 293853a13b7e218e3a4342cf85fbbf25  lt~obsolete.m4
-dd71042e2308499032ad05c3a48dd4e6  maintainer-scripts/ChangeLog
+c430ed08fa9d8345e2e0e61e17725407  maintainer-scripts/ChangeLog
 33c7bc2d2c55956dfac85a05d8a80eff  maintainer-scripts/README
 a3cc7e22d2016063d76bfc42361ab230  maintainer-scripts/crontab
 6facef54b1f26f6ee5d58aef536e7c82  maintainer-scripts/gcc_release
@@ -84754,7 +85015,7 @@ f1fff2ea196cbf6fe4634bc3edc5af4d  move-if-change
 cf2baa0854f564a7785307e79f155efc  symlink-tree
 69678e72941d681665c3731bfb3044ab  ylwrap
 ed77bd1cb8611c7e07d54332abbbb44a  zlib/CMakeLists.txt
-26bbd3b15f392c00370024d892f0069c  zlib/ChangeLog
+4e9be4718a69e0eea9f59f20ce2b752f  zlib/ChangeLog
 e7a1201f311d2ce7a5fc5e7eb763fe07  zlib/ChangeLog.gcj
 b7a1991f01daea3efe108a215c5514a5  zlib/FAQ
 3b6b6f9e88f2319b75e6ccb8c2823b13  zlib/INDEX
index ec2b0f2..cd99dd4 100644 (file)
@@ -296,6 +296,10 @@ dependencies = { module=all-build-fixincludes; on=all-build-libiberty; };
 // Host modules specific to gcc.
 dependencies = { module=configure-gcc; on=configure-intl; };
 dependencies = { module=configure-gcc; on=all-gmp; };
+dependencies = { module=configure-gcc; on=all-mpfr; };
+dependencies = { module=configure-gcc; on=all-mpc; };
+dependencies = { module=configure-gcc; on=all-isl; };
+dependencies = { module=configure-gcc; on=all-cloog; };
 dependencies = { module=configure-gcc; on=all-lto-plugin; };
 dependencies = { module=configure-gcc; on=all-binutils; };
 dependencies = { module=configure-gcc; on=all-gas; };
index bf06dce..6dd5802 100644 (file)
@@ -46988,6 +46988,38 @@ configure-stage3-gcc: maybe-all-stage3-gmp
 configure-stage4-gcc: maybe-all-stage4-gmp
 configure-stageprofile-gcc: maybe-all-stageprofile-gmp
 configure-stagefeedback-gcc: maybe-all-stagefeedback-gmp
+configure-gcc: maybe-all-mpfr
+
+configure-stage1-gcc: maybe-all-stage1-mpfr
+configure-stage2-gcc: maybe-all-stage2-mpfr
+configure-stage3-gcc: maybe-all-stage3-mpfr
+configure-stage4-gcc: maybe-all-stage4-mpfr
+configure-stageprofile-gcc: maybe-all-stageprofile-mpfr
+configure-stagefeedback-gcc: maybe-all-stagefeedback-mpfr
+configure-gcc: maybe-all-mpc
+
+configure-stage1-gcc: maybe-all-stage1-mpc
+configure-stage2-gcc: maybe-all-stage2-mpc
+configure-stage3-gcc: maybe-all-stage3-mpc
+configure-stage4-gcc: maybe-all-stage4-mpc
+configure-stageprofile-gcc: maybe-all-stageprofile-mpc
+configure-stagefeedback-gcc: maybe-all-stagefeedback-mpc
+configure-gcc: maybe-all-isl
+
+configure-stage1-gcc: maybe-all-stage1-isl
+configure-stage2-gcc: maybe-all-stage2-isl
+configure-stage3-gcc: maybe-all-stage3-isl
+configure-stage4-gcc: maybe-all-stage4-isl
+configure-stageprofile-gcc: maybe-all-stageprofile-isl
+configure-stagefeedback-gcc: maybe-all-stagefeedback-isl
+configure-gcc: maybe-all-cloog
+
+configure-stage1-gcc: maybe-all-stage1-cloog
+configure-stage2-gcc: maybe-all-stage2-cloog
+configure-stage3-gcc: maybe-all-stage3-cloog
+configure-stage4-gcc: maybe-all-stage4-cloog
+configure-stageprofile-gcc: maybe-all-stageprofile-cloog
+configure-stagefeedback-gcc: maybe-all-stagefeedback-cloog
 configure-gcc: maybe-all-lto-plugin
 
 configure-stage1-gcc: maybe-all-stage1-lto-plugin
diff --git a/NEWS b/NEWS
index 16a433a..6f31a2d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -8,24 +8,27 @@ see ONEWS.
 http://gcc.gnu.org/gcc-4.9/index.html
                              GCC 4.9 Release Series
 
-   October 30, 2014
+   June 26, 2015
 
    The [1]GNU project and the GCC developers are pleased to announce the
-   release of GCC 4.9.2.
+   release of GCC 4.9.3.
 
    This release is a bug-fix release, containing fixes for regressions in
-   GCC 4.9.1 relative to previous releases of GCC.
+   GCC 4.9.2 relative to previous releases of GCC.
 
 Release History
 
+   GCC 4.9.3
+          June 26, 2015 ([2]changes, [3]documentation)
+
    GCC 4.9.2
-          October 30, 2014 ([2]changes, [3]documentation)
+          October 30, 2014 ([4]changes, [5]documentation)
 
    GCC 4.9.1
-          July 16, 2014 ([4]changes, [5]documentation)
+          July 16, 2014 ([6]changes, [7]documentation)
 
    GCC 4.9.0
-          April 22, 2014 ([6]changes, [7]documentation)
+          April 22, 2014 ([8]changes, [9]documentation)
 
 References and Acknowledgements
 
@@ -33,56 +36,58 @@ References and Acknowledgements
    supports several other languages aside from C, it now stands for the
    GNU Compiler Collection.
 
-   A list of [8]successful builds is updated as new information becomes
+   A list of [10]successful builds is updated as new information becomes
    available.
 
    The GCC developers would like to thank the numerous people that have
    contributed new features, improvements, bug fixes, and other changes as
-   well as test results to GCC. This [9]amazing group of volunteers is
+   well as test results to GCC. This [11]amazing group of volunteers is
    what makes GCC successful.
 
-   For additional information about GCC please refer to the [10]GCC
-   project web site or contact the [11]GCC development mailing list.
+   For additional information about GCC please refer to the [12]GCC
+   project web site or contact the [13]GCC development mailing list.
 
-   To obtain GCC please use [12]our mirror sites or [13]our SVN server.
+   To obtain GCC please use [14]our mirror sites or [15]our SVN server.
 
 
     For questions related to the use of GCC, please consult these web
-    pages and the [14]GCC manuals. If that fails, the
-    [15]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [16]GCC manuals. If that fails, the
+    [17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [16]gcc@gcc.gnu.org. All of [17]our lists have public
+    list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
     archives.
 
-   Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [19]maintained by the GCC team. Last modified
-   2014-10-30[20].
+   These pages are [21]maintained by the GCC team. Last modified
+   2015-06-26[22].
 
 References
 
    1. http://www.gnu.org/
    2. http://gcc.gnu.org/gcc-4.9/changes.html
-   3. http://gcc.gnu.org/onlinedocs/4.9.2/
+   3. http://gcc.gnu.org/onlinedocs/4.9.3/
    4. http://gcc.gnu.org/gcc-4.9/changes.html
-   5. http://gcc.gnu.org/onlinedocs/4.9.1/
+   5. http://gcc.gnu.org/onlinedocs/4.9.2/
    6. http://gcc.gnu.org/gcc-4.9/changes.html
-   7. https://gcc.gnu.org/onlinedocs/4.9.0/
-   8. http://gcc.gnu.org/gcc-4.9/buildstat.html
-   9. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
-  10. http://gcc.gnu.org/index.html
-  11. mailto:gcc@gcc.gnu.org
-  12. http://gcc.gnu.org/mirrors.html
-  13. http://gcc.gnu.org/svn.html
-  14. https://gcc.gnu.org/onlinedocs/
-  15. mailto:gcc-help@gcc.gnu.org
-  16. mailto:gcc@gcc.gnu.org
-  17. https://gcc.gnu.org/lists.html
-  18. http://www.fsf.org/
-  19. https://gcc.gnu.org/about.html
-  20. http://validator.w3.org/check/referer
+   7. http://gcc.gnu.org/onlinedocs/4.9.1/
+   8. http://gcc.gnu.org/gcc-4.9/changes.html
+   9. https://gcc.gnu.org/onlinedocs/4.9.0/
+  10. http://gcc.gnu.org/gcc-4.9/buildstat.html
+  11. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+  12. http://gcc.gnu.org/index.html
+  13. mailto:gcc@gcc.gnu.org
+  14. http://gcc.gnu.org/mirrors.html
+  15. http://gcc.gnu.org/svn.html
+  16. https://gcc.gnu.org/onlinedocs/
+  17. mailto:gcc-help@gcc.gnu.org
+  18. mailto:gcc@gcc.gnu.org
+  19. https://gcc.gnu.org/lists.html
+  20. http://www.fsf.org/
+  21. https://gcc.gnu.org/about.html
+  22. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.9/changes.html
                              GCC 4.9 Release Series
@@ -401,7 +406,7 @@ auto incr(T x) { return x++; }
        -fwhole-file/-fno-whole-file continue to be accepted but do not
        influence the code generation.
      * The compiler no longer unconditionally warns about DO loops with
-       zero iterations. This warning is now controlled by the -Wzerotrips
+       zero iterations. This warning is now controlled by the -Wzerotrip
        option, which is implied by -Wall.
      * The new NO_ARG_CHECK attribute of the [20]!GCC$ directive can be
        used to disable the type-kind-rank (TKR) argument check for a dummy
@@ -468,6 +473,11 @@ New Targets and Target Specific Improvements
        option.
      * A number of structural changes have been made to both the ARM and
        AArch64 backends to facilitate improved code-generation.
+     * As of GCC 4.9.2 a workaround for the ARM Cortex-A53 erratum 835769
+       has been added and can be enabled by giving the
+       -mfix-cortex-a53-835769 option. Alternatively it can be enabled by
+       default by configuring GCC with the --enable-fix-cortex-a53-835769
+       option.
 
   ARC
 
@@ -656,20 +666,27 @@ GCC 4.9.2
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
+GCC 4.9.3
+
+   This is the [28]list of problem reports (PRs) from GCC's bug tracking
+   system that are known to be fixed in the 4.9.3 release. This list might
+   not be complete (that is, it is possible that some PRs that have been
+   fixed are not listed here).
+
 
     For questions related to the use of GCC, please consult these web
-    pages and the [28]GCC manuals. If that fails, the
-    [29]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [29]GCC manuals. If that fails, the
+    [30]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [30]gcc@gcc.gnu.org. All of [31]our lists have public
+    list at [31]gcc@gcc.gnu.org. All of [32]our lists have public
     archives.
 
-   Copyright (C) [32]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [33]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [33]maintained by the GCC team. Last modified
-   2014-10-30[34].
+   These pages are [34]maintained by the GCC team. Last modified
+   2015-06-26[35].
 
 References
 
@@ -677,9 +694,9 @@ References
    2. https://gcc.gnu.org/PR60825
    3. https://gcc.gnu.org/gcc-4.9/porting_to.html
    4. http://openmp.org/wp/openmp-specifications/
-   5. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Optimize-Options.html#index-fsimd-cost-model-908
-   6. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
-   7. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Loop-Specific-Pragmas.html
+   5. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Optimize-Options.html#index-fsimd-cost-model-908
+   6. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
+   7. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html
    8. https://www.cilkplus.org/
    9. http://gcc.gnu.org/projects/cxx1y.html
   10. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
@@ -689,49 +706,56 @@ References
   14. http://gcc.gnu.org/projects/cxx1y.html
   15. http://gcc.gnu.org/projects/cxx1y.html
   16. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf
-  17. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011
+  17. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011
   18. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
-  19. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gfortran/Argument-passing-conventions.html
-  20. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gfortran/GNU-Fortran-Compiler-Directives.html
+  19. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html
+  20. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html
   21. https://gcc.gnu.org/wiki/Fortran2003Status
   22. https://gcc.gnu.org/wiki/Fortran2008Status
-  23. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gfortran/Debugging-Options.html
-  24. https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Function-Multiversioning.html
+  23. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html
+  24. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html
   25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1
   26. http://openmp.org/wp/openmp-specifications/
   27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2
-  28. https://gcc.gnu.org/onlinedocs/
-  29. mailto:gcc-help@gcc.gnu.org
-  30. mailto:gcc@gcc.gnu.org
-  31. https://gcc.gnu.org/lists.html
-  32. http://www.fsf.org/
-  33. https://gcc.gnu.org/about.html
-  34. http://validator.w3.org/check/referer
+  28. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3
+  29. https://gcc.gnu.org/onlinedocs/
+  30. mailto:gcc-help@gcc.gnu.org
+  31. mailto:gcc@gcc.gnu.org
+  32. https://gcc.gnu.org/lists.html
+  33. http://www.fsf.org/
+  34. https://gcc.gnu.org/about.html
+  35. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.8/index.html
                              GCC 4.8 Release Series
 
-   May 22, 2014
+   June 23, 2015
 
    The [1]GNU project and the GCC developers are pleased to announce the
-   release of GCC 4.8.3.
+   release of GCC 4.8.5.
 
    This release is a bug-fix release, containing fixes for regressions in
-   GCC 4.8.2 relative to previous releases of GCC.
+   GCC 4.8.4 relative to previous releases of GCC.
 
 Release History
 
+   GCC 4.8.5
+          June 23, 2015 ([2]changes, [3]documentation)
+
+   GCC 4.8.4
+          December 19, 2014 ([4]changes, [5]documentation)
+
    GCC 4.8.3
-          May 22, 2014 ([2]changes, [3]documentation)
+          May 22, 2014 ([6]changes, [7]documentation)
 
    GCC 4.8.2
-          October 16, 2013 ([4]changes, [5]documentation)
+          October 16, 2013 ([8]changes, [9]documentation)
 
    GCC 4.8.1
-          May 31, 2013 ([6]changes, [7]documentation)
+          May 31, 2013 ([10]changes, [11]documentation)
 
    GCC 4.8.0
-          March 22, 2013 ([8]changes, [9]documentation)
+          March 22, 2013 ([12]changes, [13]documentation)
 
 References and Acknowledgements
 
@@ -739,58 +763,62 @@ References and Acknowledgements
    supports several other languages aside from C, it now stands for the
    GNU Compiler Collection.
 
-   A list of [10]successful builds is updated as new information becomes
+   A list of [14]successful builds is updated as new information becomes
    available.
 
    The GCC developers would like to thank the numerous people that have
    contributed new features, improvements, bug fixes, and other changes as
-   well as test results to GCC. This [11]amazing group of volunteers is
+   well as test results to GCC. This [15]amazing group of volunteers is
    what makes GCC successful.
 
-   For additional information about GCC please refer to the [12]GCC
-   project web site or contact the [13]GCC development mailing list.
+   For additional information about GCC please refer to the [16]GCC
+   project web site or contact the [17]GCC development mailing list.
 
-   To obtain GCC please use [14]our mirror sites or [15]our SVN server.
+   To obtain GCC please use [18]our mirror sites or [19]our SVN server.
 
 
     For questions related to the use of GCC, please consult these web
-    pages and the [16]GCC manuals. If that fails, the
-    [17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [20]GCC manuals. If that fails, the
+    [21]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
+    list at [22]gcc@gcc.gnu.org. All of [23]our lists have public
     archives.
 
-   Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [24]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [21]maintained by the GCC team. Last modified
-   2014-06-11[22].
+   These pages are [25]maintained by the GCC team. Last modified
+   2015-06-23[26].
 
 References
 
    1. http://www.gnu.org/
    2. http://gcc.gnu.org/gcc-4.8/changes.html
-   3. https://gcc.gnu.org/onlinedocs/4.8.3/
+   3. https://gcc.gnu.org/onlinedocs/4.8.5/
    4. http://gcc.gnu.org/gcc-4.8/changes.html
-   5. https://gcc.gnu.org/onlinedocs/4.8.2/
+   5. https://gcc.gnu.org/onlinedocs/4.8.4/
    6. http://gcc.gnu.org/gcc-4.8/changes.html
-   7. https://gcc.gnu.org/onlinedocs/4.8.1/
+   7. https://gcc.gnu.org/onlinedocs/4.8.3/
    8. http://gcc.gnu.org/gcc-4.8/changes.html
-   9. https://gcc.gnu.org/onlinedocs/4.8.0/
-  10. http://gcc.gnu.org/gcc-4.8/buildstat.html
-  11. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
-  12. http://gcc.gnu.org/index.html
-  13. mailto:gcc@gcc.gnu.org
-  14. http://gcc.gnu.org/mirrors.html
-  15. http://gcc.gnu.org/svn.html
-  16. https://gcc.gnu.org/onlinedocs/
-  17. mailto:gcc-help@gcc.gnu.org
-  18. mailto:gcc@gcc.gnu.org
-  19. https://gcc.gnu.org/lists.html
-  20. http://www.fsf.org/
-  21. https://gcc.gnu.org/about.html
-  22. http://validator.w3.org/check/referer
+   9. https://gcc.gnu.org/onlinedocs/4.8.2/
+  10. http://gcc.gnu.org/gcc-4.8/changes.html
+  11. https://gcc.gnu.org/onlinedocs/4.8.1/
+  12. http://gcc.gnu.org/gcc-4.8/changes.html
+  13. https://gcc.gnu.org/onlinedocs/4.8.0/
+  14. http://gcc.gnu.org/gcc-4.8/buildstat.html
+  15. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
+  16. http://gcc.gnu.org/index.html
+  17. mailto:gcc@gcc.gnu.org
+  18. http://gcc.gnu.org/mirrors.html
+  19. http://gcc.gnu.org/svn.html
+  20. https://gcc.gnu.org/onlinedocs/
+  21. mailto:gcc-help@gcc.gnu.org
+  22. mailto:gcc@gcc.gnu.org
+  23. https://gcc.gnu.org/lists.html
+  24. http://www.fsf.org/
+  25. https://gcc.gnu.org/about.html
+  26. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.8/changes.html
                              GCC 4.8 Release Series
@@ -1065,8 +1093,8 @@ int i = A().f();  // error, f() requires an lvalue object
        Before, this warning was always printed. The -Wc-binding-type
        option is enabled by -Wall.
      * The [19]-Wrealloc-lhs and -Wrealloc-lhs-all warning command-line
-       options have been added, which diagnose when code to is inserted
-       for automatic (re)allocation of a variable during assignment. This
+       options have been added, which diagnose when code is inserted for
+       automatic (re)allocation of a variable during assignment. This
        option can be used to decide whether it is safe to use
        [20]-fno-realloc-lhs. Additionally, it can be used to find
        automatic (re)allocation in hot loops. (For arrays, replacing
@@ -1126,6 +1154,11 @@ New Targets and Target Specific Improvements
      * The port provides initial support for the Cortex-A53 and the
        Cortex-A57 processors with the command line options
        -mcpu=cortex-a53 and -mcpu=cortex-a57.
+     * As of GCC 4.8.4 a workaround for the ARM Cortex-A53 erratum 835769
+       has been added and can be enabled by giving the
+       -mfix-cortex-a53-835769 option. Alternatively it can be enabled by
+       default by configuring GCC with the --enable-fix-cortex-a53-835769
+       option.
 
   ARM
 
@@ -1479,20 +1512,34 @@ GCC 4.8.3
    Support for the new powerpc64le-linux platform has been added. It
    defaults to generating code that conforms to the ELFV2 ABI.
 
+GCC 4.8.4
+
+   This is the [36]list of problem reports (PRs) from GCC's bug tracking
+   system that are known to be fixed in the 4.8.4 release. This list might
+   not be complete (that is, it is possible that some PRs that have been
+   fixed are not listed here).
+
+GCC 4.8.5
+
+   This is the [37]list of problem reports (PRs) from GCC's bug tracking
+   system that are known to be fixed in the 4.8.5 release. This list might
+   not be complete (that is, it is possible that some PRs that have been
+   fixed are not listed here).
+
 
     For questions related to the use of GCC, please consult these web
-    pages and the [36]GCC manuals. If that fails, the
-    [37]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [38]GCC manuals. If that fails, the
+    [39]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [38]gcc@gcc.gnu.org. All of [39]our lists have public
+    list at [40]gcc@gcc.gnu.org. All of [41]our lists have public
     archives.
 
-   Copyright (C) [40]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [42]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [41]maintained by the GCC team. Last modified
-   2014-08-31[42].
+   These pages are [43]maintained by the GCC team. Last modified
+   2015-06-23[44].
 
 References
 
@@ -1511,7 +1558,7 @@ References
   13. http://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   14. http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html
   15. http://gcc.gnu.org/projects/cxx1y.html
-  16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011
+  16. https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011
   17. https://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html
   18. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   19. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
@@ -1531,13 +1578,15 @@ References
   33. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1
   34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2
   35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3
-  36. https://gcc.gnu.org/onlinedocs/
-  37. mailto:gcc-help@gcc.gnu.org
-  38. mailto:gcc@gcc.gnu.org
-  39. https://gcc.gnu.org/lists.html
-  40. http://www.fsf.org/
-  41. https://gcc.gnu.org/about.html
-  42. http://validator.w3.org/check/referer
+  36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.4
+  37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.5
+  38. https://gcc.gnu.org/onlinedocs/
+  39. mailto:gcc-help@gcc.gnu.org
+  40. mailto:gcc@gcc.gnu.org
+  41. https://gcc.gnu.org/lists.html
+  42. http://www.fsf.org/
+  43. https://gcc.gnu.org/about.html
+  44. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.7/index.html
                              GCC 4.7 Release Series
@@ -2420,7 +2469,7 @@ GCC 4.7.4
    provided this notice is preserved.
 
    These pages are [55]maintained by the GCC team. Last modified
-   2014-06-12[56].
+   2014-12-06[56].
 
 References
 
@@ -2439,7 +2488,7 @@ References
   13. http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   14. https://gcc.gnu.org/PR14258
   15. https://gcc.gnu.org/PR35688
-  16. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/libstdc++/manual/manual/status.html#status.iso.2011
+  16. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011
   17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
   18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
   19. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
@@ -3465,7 +3514,7 @@ GCC 4.6.4
    provided this notice is preserved.
 
    These pages are [29]maintained by the GCC team. Last modified
-   2014-06-28[30].
+   2014-12-06[30].
 
 References
 
@@ -3480,7 +3529,7 @@ References
    9. https://gcc.gnu.org/PR43680
   10. https://gcc.gnu.org/PR33558
   11. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253
-  12. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x
+  12. https://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++/manual/manual/status.html#status.iso.200x
   13. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html
   14. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races
   15. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
@@ -3856,12 +3905,13 @@ New Languages and Language specific improvements
 
     Runtime Library (libstdc++)
 
-     * [15]Improved experimental support for the upcoming ISO C++
-       standard, C++0x, including:
+     * Improved experimental support for the upcoming ISO C++ standard,
+       C++0x, including:
           + Support for <future>, <functional>, and <random>.
           + Existing facilities now exploit explicit operators and the
             newly implemented core C++0x features.
-     * An experimental [16]profile mode has been added. This is an
+          + The header <cstdatomic> has been renamed to <atomic>.
+     * An experimental [15]profile mode has been added. This is an
        implementation of many C++ standard library constructs with an
        additional analysis layer that gives performance improvement advice
        based on recognition of suboptimal usage patterns. For example,
@@ -3883,7 +3933,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
        These constructs can be substituted for the normal libstdc++
        constructs on a piecemeal basis, or all existing components can be
        transformed via the -D_GLIBCXX_PROFILE macro.
-     * [17]Support for decimal floating-point arithmetic (aka ISO C++ TR
+     * [16]Support for decimal floating-point arithmetic (aka ISO C++ TR
        24733) has been added. This support is in header file
        <decimal/decimal>, uses namespace std::decimal, and includes
        classes decimal32, decimal64, and decimal128.
@@ -3893,7 +3943,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
        components that simplify the internal representation and present a
        more intuitive view of components when used with
        appropriately-advanced versions of GDB. For more information,
-       please consult the more [18]detailed description.
+       please consult the more [17]detailed description.
      * The default behavior for comparing typeinfo names has changed, so
        in <typeinfo>, __GXX_MERGED_TYPEINFO_NAMES now defaults to zero.
      * The new -static-libstdc++ option directs g++ to link the C++
@@ -3906,7 +3956,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
        padding before a variable it is now added afterwards, which
        increases the compatibility with other vendors and helps to obtain
        the correct output in some cases. Cf. also the -falign-commons
-       option ([19]added in 4.4).
+       option ([18]added in 4.4).
      * The -finit-real= option now also supports the value snan for
        signalling not-a-number; to be effective, one additionally needs to
        enable trapping (e.g. via -ffpe-trap=). Note: Compile-time
@@ -3924,7 +3974,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
      * The run-time checking -fcheck=bounds now warns about invalid string
        lengths of character dummy arguments. Additionally, more
        compile-time checks have been added.
-     * The new option [20]-fno-protect-parens has been added; if set, the
+     * The new option [19]-fno-protect-parens has been added; if set, the
        compiler may reorder REAL and COMPLEX expressions without regard to
        parentheses.
      * GNU Fortran no longer links against libgfortranbegin. As before,
@@ -3932,7 +3982,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
        which is invoked by the main function. However, main is now
        generated and put in the same object file as MAIN__. For the time
        being, libgfortranbegin still exists for backward compatibility.
-       For details see the new [21]Mixed-Language Programming chapter in
+       For details see the new [20]Mixed-Language Programming chapter in
        the manual.
      * The I/O library was restructured for performance and cleaner code.
      * Array assignments and WHERE are now run in parallel when OpenMP's
@@ -3944,7 +3994,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
      * More Fortran 2003 and Fortran 2008 mathematical functions can now
        be used as initialization expressions.
      * Some extended attributes such as STDCALL are now supported via the
-       [22]GCC$ compiler directive.
+       [21]GCC$ compiler directive.
      * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN
        intrinsic behaves now as if zero were always positive.
      * For legacy compatibiliy: On Cygwin and MinGW, the special files
@@ -3970,7 +4020,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
             procedure pointer with PASS attribute now have to use CLASS in
             line with the Fortran 2003 standard; the workaround to use
             TYPE is no longer supported.
-          + [23]Experimental, incomplete support for polymorphism,
+          + [22]Experimental, incomplete support for polymorphism,
             including CLASS, SELECT TYPE and dynamic dispatch of
             type-bound procedure calls. Some features do not work yet such
             as unlimited polymorphism (CLASS(*)).
@@ -4172,14 +4222,14 @@ Other significant improvements
 
 GCC 4.5.1
 
-   This is the [24]list of problem reports (PRs) from GCC's bug tracking
+   This is the [23]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 4.5.1 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
   All languages
 
-     * GCC's new link-time optimizer ([25]-flto) now also works on a few
+     * GCC's new link-time optimizer ([24]-flto) now also works on a few
        non-ELF targets:
           + Cygwin (*-cygwin*)
           + MinGW (*-mingw*)
@@ -4189,14 +4239,14 @@ GCC 4.5.1
 
 GCC 4.5.2
 
-   This is the [26]list of problem reports (PRs) from GCC's bug tracking
+   This is the [25]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 4.5.2 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
 GCC 4.5.3
 
-   This is the [27]list of problem reports (PRs) from GCC's bug tracking
+   This is the [26]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 4.5.3 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
@@ -4213,25 +4263,25 @@ GCC 4.5.3
 
 GCC 4.5.4
 
-   This is the [28]list of problem reports (PRs) from GCC's bug tracking
+   This is the [27]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 4.5.4 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
 
     For questions related to the use of GCC, please consult these web
-    pages and the [29]GCC manuals. If that fails, the
-    [30]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [28]GCC manuals. If that fails, the
+    [29]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [31]gcc@gcc.gnu.org. All of [32]our lists have public
+    list at [30]gcc@gcc.gnu.org. All of [31]our lists have public
     archives.
 
-   Copyright (C) [33]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [32]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [34]maintained by the GCC team. Last modified
-   2014-06-28[35].
+   These pages are [33]maintained by the GCC team. Last modified
+   2014-12-06[34].
 
 References
 
@@ -4249,27 +4299,26 @@ References
   12. http://gcc.gnu.org/gcc-4.5/cxx0x_status.html
   13. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757
   14. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
-  15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x
-  16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html
-  17. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
-  18. http://sourceware.org/gdb/wiki/STLSupport
-  19. http://gcc.gnu.org/gcc-4.4/changes.html
-  20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
-  21. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
-  22. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
-  23. https://gcc.gnu.org/wiki/OOP
-  24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
-  25. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
-  26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
-  27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
-  28. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
-  29. https://gcc.gnu.org/onlinedocs/
-  30. mailto:gcc-help@gcc.gnu.org
-  31. mailto:gcc@gcc.gnu.org
-  32. https://gcc.gnu.org/lists.html
-  33. http://www.fsf.org/
-  34. https://gcc.gnu.org/about.html
-  35. http://validator.w3.org/check/referer
+  15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html
+  16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
+  17. http://sourceware.org/gdb/wiki/STLSupport
+  18. http://gcc.gnu.org/gcc-4.4/changes.html
+  19. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
+  20. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
+  21. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
+  22. https://gcc.gnu.org/wiki/OOP
+  23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
+  24. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
+  25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
+  26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
+  27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
+  28. https://gcc.gnu.org/onlinedocs/
+  29. mailto:gcc-help@gcc.gnu.org
+  30. mailto:gcc@gcc.gnu.org
+  31. https://gcc.gnu.org/lists.html
+  32. http://www.fsf.org/
+  33. https://gcc.gnu.org/about.html
+  34. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.4/index.html
                              GCC 4.4 Release Series
@@ -4632,7 +4681,7 @@ New Languages and Language specific improvements
 
     Runtime Library (libstdc++)
 
-     * [8]Improved experimental support for the upcoming ISO C++ standard,
+     * Improved experimental support for the upcoming ISO C++ standard,
        C++0x, including:
           + Support for <chrono>, <condition_variable>, <cstdatomic>,
             <forward_list>, <initializer_list>, <mutex>, <ratio>,
@@ -4654,12 +4703,12 @@ New Languages and Language specific improvements
   Fortran
 
      * GNU Fortran now employs libcpp directly instead of using cc1 as an
-       external preprocessor. The [9]-cpp option was added to allow manual
+       external preprocessor. The [8]-cpp option was added to allow manual
        invocation of the preprocessor without relying on filename
        extensions.
-     * The [10]-Warray-temporaries option warns about array temporaries
+     * The [9]-Warray-temporaries option warns about array temporaries
        generated by the compiler, as an aid to optimization.
-     * The [11]-fcheck-array-temporaries option has been added, printing a
+     * The [10]-fcheck-array-temporaries option has been added, printing a
        notification at run time, when an array temporary had to be created
        for an function argument. Contrary to -Warray-temporaries the
        warning is only printed if the array is noncontiguous.
@@ -4681,7 +4730,7 @@ New Languages and Language specific improvements
      * Fortran 2003 support has been extended:
           + Wide characters (ISO 10646, UCS-4, kind=4) and UTF-8 I/O is
             now supported (except internal reads from/writes to wide
-            strings). [12]-fbackslash now supports also \unnnn and
+            strings). [11]-fbackslash now supports also \unnnn and
             \Unnnnnnnn to enter Unicode characters.
           + Asynchronous I/O (implemented as synchronous I/O) and the
             decimal=, size=, sign=, pad=, blank=, and delim= specifiers
@@ -4910,67 +4959,67 @@ Other significant improvements
 
 GCC 4.4.1
 
-   This is the [13]list of problem reports (PRs) from GCC's bug tracking
+   This is the [12]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 4.4.1 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
 GCC 4.4.2
 
-   This is the [14]list of problem reports (PRs) from GCC's bug tracking
+   This is the [13]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 4.4.2 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
 GCC 4.4.3
 
-   This is the [15]list of problem reports (PRs) from GCC's bug tracking
+   This is the [14]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 4.4.3 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
 GCC 4.4.4
 
-   This is the [16]list of problem reports (PRs) from GCC's bug tracking
+   This is the [15]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 4.4.4 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
 GCC 4.4.5
 
-   This is the [17]list of problem reports (PRs) from GCC's bug tracking
+   This is the [16]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 4.4.5 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
 GCC 4.4.6
 
-   This is the [18]list of problem reports (PRs) from GCC's bug tracking
+   This is the [17]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 4.4.6 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
 GCC 4.4.7
 
-   This is the [19]list of problem reports (PRs) from GCC's bug tracking
+   This is the [18]list of problem reports (PRs) from GCC's bug tracking
    system that are known to be fixed in the 4.4.7 release. This list might
    not be complete (that is, it is possible that some PRs that have been
    fixed are not listed here).
 
 
     For questions related to the use of GCC, please consult these web
-    pages and the [20]GCC manuals. If that fails, the
-    [21]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+    pages and the [19]GCC manuals. If that fails, the
+    [20]gcc-help@gcc.gnu.org mailing list might help. Comments on these
     web pages and the development of GCC are welcome on our developer
-    list at [22]gcc@gcc.gnu.org. All of [23]our lists have public
+    list at [21]gcc@gcc.gnu.org. All of [22]our lists have public
     archives.
 
-   Copyright (C) [24]Free Software Foundation, Inc. Verbatim copying and
+   Copyright (C) [23]Free Software Foundation, Inc. Verbatim copying and
    distribution of this entire article is permitted in any medium,
    provided this notice is preserved.
 
-   These pages are [25]maintained by the GCC team. Last modified
-   2014-06-28[26].
+   These pages are [24]maintained by the GCC team. Last modified
+   2014-12-06[25].
 
 References
 
@@ -4981,25 +5030,24 @@ References
    5. http://openmp.org/wp/openmp-specifications/
    6. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf
    7. http://gcc.gnu.org/gcc-4.4/cxx0x_status.html
-   8. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#id476343
-   9. https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html
-  10. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125
-  11. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221
-  12. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34
-  13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1
-  14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2
-  15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3
-  16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4
-  17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5
-  18. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6
-  19. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7
-  20. https://gcc.gnu.org/onlinedocs/
-  21. mailto:gcc-help@gcc.gnu.org
-  22. mailto:gcc@gcc.gnu.org
-  23. https://gcc.gnu.org/lists.html
-  24. http://www.fsf.org/
-  25. https://gcc.gnu.org/about.html
-  26. http://validator.w3.org/check/referer
+   8. https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html
+   9. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125
+  10. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221
+  11. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34
+  12. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1
+  13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2
+  14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3
+  15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4
+  16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5
+  17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6
+  18. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7
+  19. https://gcc.gnu.org/onlinedocs/
+  20. mailto:gcc-help@gcc.gnu.org
+  21. mailto:gcc@gcc.gnu.org
+  22. https://gcc.gnu.org/lists.html
+  23. http://www.fsf.org/
+  24. https://gcc.gnu.org/about.html
+  25. http://validator.w3.org/check/referer
 ======================================================================
 http://gcc.gnu.org/gcc-4.3/index.html
                              GCC 4.3 Release Series
index abf401c..b94b1c2 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index e569d7a..b479e84 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index d1c67e5..d9304d9 100755 (executable)
--- a/configure
+++ b/configure
@@ -3868,7 +3868,7 @@ fi
   *-mingw*)
     host_makefile_frag="config/mh-mingw"
     ;;
-  alpha*-*-linux*)
+  alpha*-linux*)
     host_makefile_frag="config/mh-alpha-linux"
     ;;
   hppa*-hp-hpux10*)
@@ -6024,6 +6024,55 @@ $as_echo "$gcc_cv_isl" >&6; }
   fi
 
 
+      if test "${gcc_cv_isl}" = no ; then
+
+  if test "${ENABLE_ISL_CHECK}" = yes ; then
+    _isl_saved_CFLAGS=$CFLAGS
+    _isl_saved_LDFLAGS=$LDFLAGS
+    _isl_saved_LIBS=$LIBS
+
+    CFLAGS="${_isl_saved_CFLAGS} ${islinc} ${gmpinc}"
+    LDFLAGS="${_isl_saved_LDFLAGS} ${isllibs}"
+    LIBS="${_isl_saved_LIBS} -lisl"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for version 0.14 of ISL" >&5
+$as_echo_n "checking for version 0.14 of ISL... " >&6; }
+    if test "$cross_compiling" = yes; then :
+  gcc_cv_isl=yes
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <isl/version.h>
+   #include <string.h>
+int
+main ()
+{
+if (strncmp (isl_version (), "isl-0.14", strlen ("isl-0.14")) != 0)
+     return 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gcc_cv_isl=yes
+else
+  gcc_cv_isl=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_isl" >&5
+$as_echo "$gcc_cv_isl" >&6; }
+
+    CFLAGS=$_isl_saved_CFLAGS
+    LDFLAGS=$_isl_saved_LDFLAGS
+    LIBS=$_isl_saved_LIBS
+  fi
+
+
+      fi
     fi
   fi
 
index 1bab680..41a30dd 100644 (file)
@@ -1177,7 +1177,7 @@ case "${host}" in
   *-mingw*)
     host_makefile_frag="config/mh-mingw"
     ;;
-  alpha*-*-linux*)
+  alpha*-linux*)
     host_makefile_frag="config/mh-alpha-linux"
     ;;
   hppa*-hp-hpux10*)
@@ -1658,6 +1658,9 @@ if test "x$with_isl" != "xno" &&
     ISL_CHECK_VERSION(0,11)
     if test "${gcc_cv_isl}" = no ; then
       ISL_CHECK_VERSION(0,12)
+      if test "${gcc_cv_isl}" = no ; then
+        ISL_CHECK_VERSION(0,14)
+      fi
     fi
   fi
   dnl Only execute fail-action, if ISL has been requested.
index 6254a17..09aa702 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 6495664..7d9ae3f 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 602272d..8a4ddbc 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index f1bb068..f98e369 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index dad10c7..c01c413 100644 (file)
@@ -1 +1 @@
-4.9.2
+4.9.3
index b6654c6..7a00da5 100644 (file)
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-06-26  Jakub Jelinek  <jakub@redhat.com>
+
+       * doc/cpp.texi: Update displayed copyright years.
+       * doc/cppinternals.texi: Likewise.
+       * doc/gcc.texi: Likewise.
+       * doc/gccint.texi: Likewise.
+       * doc/gcov.texi: Likewise.
+       * doc/install.texi: Likewise.
+       * doc/invoke.texi: Likewise.
+       * gcc.c: Likewise.
+       * gcov-dump.c: Likewise.
+       * gcov.c: Likewise.
+
+2015-06-23  Matthias Klose  <doko@ubuntu.com>
+
+       PR target/66483
+       Backport from mainline r212178.
+       2014-06-30  Joseph Myers  <joseph@codesourcery.com>
+
+        * var-tracking.c (add_stores): Return instead of asserting if old
+        and new values for conditional store are the same.
+
+2015-06-23  Ludovic Courtès  <ludo@gnu.org>
+
+       PR 65711
+       * config/arm/linux-elf.h (LINUX_TARGET_LINK_SPEC): Move
+       '-dynamic-linker' within %{!shared: ...}.
+
+2015-06-22  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR bootstrap/63740
+       * lra-lives.c (process_bb_lives): Check insn copying the same
+       reload pseudo and don't create a copy for it.
+
+2015-06-19  Christophe Lyon  <christophe.lyon@linaro.org>
+
+       Backport from mainline r215707.
+       2014-09-30  David Sherwood  <david.sherwood@arm.com>
+
+       * ira-int.h (ira_allocno): Add "wmode" field.
+       * ira-build.c (create_insn_allocnos): Add new "parent" function
+       parameter.
+       * ira-conflicts.c (ira_build_conflicts): Add conflicts for registers
+       that cannot be accessed in wmode.
+
+2015-06-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/66233
+       * fold-const.c (fold_unary_loc): Don't handle vector types.
+       Simplify.
+       * tree-ssa-forwprop.c (combine_conversions): Likewise.
+
+2015-06-16  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+       PR target/66200
+       * config/aarch64/aarch64.c (TARGET_RELAXED_ORDERING): Define.
+
+2015-06-16  Richard Biener  <rguenther@suse.de>
+
+       Revert
+       2015-06-01  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2015-05-26  Michael Matz  <matz@suse.de>
+
+       PR middle-end/66251
+       * tree-vect-stmts.c (vect_create_vectorized_demotion_stmts): Always set
+       STMT_VINFO_VEC_STMT, also with SLP.
+
+       2015-05-22  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/66251
+       * tree-vect-stmts.c (vectorizable_conversion): Properly
+       set STMT_VINFO_VEC_STMT even for the SLP case.
+
+2015-06-16  Christophe Lyon  <christophe.lyon@linaro.org>
+
+       Backported from mainline r217076.
+       2014-11-04  Michael Collison <michael.collison@linaro.org>
+
+       * config/aarch64/iterators.md (lconst_atomic): New mode attribute
+       to support constraints for CONST_INT in atomic operations.
+       * config/aarch64/atomics.md
+       (atomic_<atomic_optab><mode>): Use lconst_atomic constraint.
+       (atomic_nand<mode>): Likewise.
+       (atomic_fetch_<atomic_optab><mode>): Likewise.
+       (atomic_fetch_nand<mode>): Likewise.
+       (atomic_<atomic_optab>_fetch<mode>): Likewise.
+       (atomic_nand_fetch<mode>): Likewise.
+
+2015-06-12  Michael Matz  <matz@suse.de>
+
+       Backported from mainline
+       2014-10-23  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/63623
+       * var-tracking.c (stack_adjust_offset_pre_post_cb): New function.
+       (stack_adjust_offset_pre_post): Use it through for_each_inc_dec,
+       instead of only handling autoinc in dest if it is a MEM.
+
+2015-06-12  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-12-15  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/62642
+       * ira.c (rtx_moveable_p): Prevent UNSPEC_VOLATILE moves.
+
+2015-06-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/63608
+       Backported from mainline
+       2014-05-16  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * fold-const (fold_unary_loc) <NON_LVALUE_EXPR>: New case.
+       <CASE_CONVERT>: Pass arg0 instead of op0 to fold_convert_const.
+
+2015-06-11  John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/pa/pa.c (pa_output_global_address): Handle LABEL_REF plus
+       CONST_INT for goto.
+
+2015-06-11  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR bootstrap/66252
+       * config/sparc/sparc.c (hard_regno_mode_classes): Add ??? comment.
+       * config/sparc/sparc.md (zero_extendsidi2_insn_sp32): Use single order.
+       (*addx_extend_sp32): Fix pasto.
+       (*subx_extend): Rename into...
+       (*subx_extend_sp32): ...this.
+       (*adddi3_extend_sp32): Add earlyclobber.
+       (*subdi3_insn_sp32): Likewise.
+       (*subdi3_extend_sp32): Likewise.
+       (*and_not_di_sp32): Likewise.
+       (*or_not_di_sp32): Likewise.
+       (*xor_not_di_sp32): Likewise.
+       (*negdi2_sp32): Likewise.
+       (*one_cmpldi2_sp32): Likewise.
+
+2015-06-11  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/66503
+       * dwarf2out.c (resolve_addr): Guard backport of PR66549
+       with in_lto_p.
+
+2015-06-10  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline:
+       2015-06-10  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/66474
+       * doc/md.texi (Machine Constraints): Document that on the PowerPC
+       if you use a constraint that targets a VSX register, you must use
+       %x<n> in the template.
+
+2015-06-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/66470
+       * config/i386/i386.c (ix86_split_long_move): For collisions
+       involving direct tls segment refs, move the UNSPEC_TP possibly
+       wrapped in ZERO_EXTEND out of the address for lea, to each of
+       the memory loads.
+
+2015-06-08  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline:
+       2015-06-03  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/66275
+       * config/i386/i386.c (ix86_function_arg_regno): Use ix86_cfun_abi
+       to determine current function ABI.
+       (ix86_function_value_regno_p): Ditto.
+
+2015-06-08  Venkataramanan Kumar  <venkataramanan.kumar@amd.com>
+
+       * config/i386/sse.md (sse3_mwait): Swap the operand constriants.
+
+2015-06-03  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-05-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/66133
+       * omp-low.c (expand_omp_taskreg): For GIMPLE_OMP_TASK expansion,
+       make sure it is never noreturn, even when the task body does not
+       return.
+       (lower_omp_taskreg): For GIMPLE_OMP_TASK, emit GIMPLE_OMP_CONTINUE
+       right before GIMPLE_OMP_RETURN.
+       (make_gimple_omp_edges): Accept GIMPLE_OMP_CONTINUE as ->cont
+       for GIMPLE_OMP_TASK.  For GIMPLE_OMP_RETURN corresponding to
+       GIMPLE_OMP_TASK add an EDGE_ABNORMAL edge from entry to exit.
+
+       2015-05-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/65984
+       * ubsan.c: Include tree-cfg.h.
+       (instrument_bool_enum_load): Use stmt_ends_bb_p instead of
+       stmt_could_throw_p test, rename can_throw variable to ends_bb.
+
+       2015-04-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/65680
+       * expr.c (get_inner_reference): Handle bit_offset that doesn't fit
+       into signed HOST_WIDE_INT the same as negative bit_offset.
+
+       2015-03-23  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/65504
+       * config/i386/i386.c (ix86_copy_addr_to_reg): Set REG_POINTER
+       on the pseudo.
+       (expand_set_or_movmem_prologue_epilogue_by_misaligned_moves): Set
+       REG_POINTER on *destptr after adjusting it for prologue size.
+
+       2015-03-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/65450
+       * tree-vect-data-refs.c (vect_duplicate_ssa_name_ptr_info): New
+       function.
+       (vect_create_addr_base_for_vector_ref, vect_create_data_ref_ptr): Use
+       it instead of duplicate_ssa_name_ptr_info.
+
+       2015-03-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/65427
+       * tree-vect-generic.c (do_cond, expand_vector_scalar_condition): New
+       functions.
+       (expand_vector_operations_1): Handle BLKmode vector COND_EXPR.
+
+       2015-03-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/65368
+       * config/i386/i386.md (bmi2_bzhi_<mode>3): Removed define_insn,
+       new define_expand.
+       (*bmi2_bzhi_<mode>3, *bmi2_bzhi_<mode>3_1): New define_insns.
+
+       2015-02-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR gcov-profile/64634
+       * tree-eh.c (frob_into_branch_around): Fix up typos
+       in function comment.
+       (lower_catch): Put eh_seq resulting from EH lowering of
+       the cleanup sequence after the cleanup rather than before
+       it.
+
+2015-06-03  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2015-05-26  Michael Matz  <matz@suse.de>
+
+       PR middle-end/66251
+       * tree-vect-stmts.c (vect_create_vectorized_demotion_stmts): Always set
+       STMT_VINFO_VEC_STMT, also with SLP.
+
+       2015-05-22  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/66251
+       * tree-vect-stmts.c (vectorizable_conversion): Properly
+       set STMT_VINFO_VEC_STMT even for the SLP case.
+
+       2015-05-27  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/66272
+       Revert parts of
+       2014-08-15  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/62031
+       * tree-data-ref.c (dr_analyze_indices): Do not set
+       DR_UNCONSTRAINED_BASE.
+       (dr_may_alias_p): All indirect accesses have to go the
+       formerly DR_UNCONSTRAINED_BASE path.
+       * tree-data-ref.h (struct indices): Remove
+       unconstrained_base member.
+       (DR_UNCONSTRAINED_BASE): Remove.
+
+       2015-05-13  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/66123
+       * tree-ssa-dom.c (propagate_rhs_into_lhs): Check if we found
+       a taken edge.
+
+       2015-06-02  Richard Biener  <rguenther@suse.de>
+
+       PR debug/65549
+       * dwarf2out.c (lookup_context_die): New function.
+       (resolve_addr): Avoid forcing a full DIE for the
+       target of a DW_TAG_GNU_call_site during late compilation.
+       Instead create a stub DIE without a type if we have a
+       context DIE present.
+
+       2015-03-23  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/65518
+       * tree-vect-stmts.c (vectorizable_load): Reject single-element
+       interleaving cases we generate absymal code for.
+
+2015-06-01  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2015-05-29  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       PR target/66215
+       * config/s390/s390.c (s390_reorg): Fix placement of post-label NOPs
+       with -mhotpatch=.
+
+2015-05-28  Mike Frysinger  <vapier@gentoo.org>
+
+       * config/nios2/linux.h (CPP_SPEC): Define.
+
+2015-05-28  Mike Frysinger  <vapier@gentoo.org>
+
+       * config/microblaze/linux.h (CPP_SPEC): Define.
+
+2015-05-28  Mike Frysinger  <vapier@gentoo.org>
+
+       * config/pa/pa-linux.h (CPP_SPEC): Change so -D_REENTRANT is used when
+       -pthread is specified.
+
+2015-05-27  John David Anglin  <danglin@gcc.gnu.org>
+
+       PR target/66148
+       * config/pa/pa.c (pa_emit_move_sequence): Correct placement of
+       REG_EQUAL note when doing insert.
+
+2015-05-26  Rohit Arul Raj  <rohitarulraj@freescale.com>
+
+       Backported from mainline
+       2015-05-14  Rohit Arul Raj  <rohitarulraj@freescale.com>
+
+       * varasm.c (output_constant_pool_1): Pass down alignment from
+       constant pool entry's descriptor to output_constant_pool_2.
+       (output_object_block): Add comment prior to call to
+       output_constant_pool_1.
+
+2015-05-21  Sandra Loosemore  <sandra@codesourcery.com>
+
+       Backport from mainline r223418:
+       * config.gcc [powerpc*-*-linux*]: Allow --enable-targets=all
+       to build a biarch toolchain again.
+
+2015-05-19  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * doc/invoke.texi: Add missing cpu types for march option: z196
+       and zEC12.
+
+2015-05-16  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/66140
+       * config/alpha/alpha.c (get_aligned_mem): Also look for reload
+       replacements in memory addresses.
+       (get_unaligned_address): Ditto.
+
+2015-05-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Backport from mainline
+       2015-05-12  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       PR target/65955
+       * config/arm/arm.md (movcond_addsi): Check that operands[2] is a
+       REG before taking its REGNO.
+
+2015-05-12  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * config/s390/2827.md: Split zEC12_simple into zEC12_simple_int
+       and zEC12_simple_fp.
+       * config/s390/s390.c (s390_issue_rate): Set issue rate for zEC12
+       to 1.
+
+2015-05-12  Yvan Roux  <yvan.roux@linaro.org>
+
+       Backport from mainline.
+       2015-05-05  Yvan Roux  <yvan.roux@linaro.org>
+
+       * config/aarch64/aarch64-elf-raw.h (CA53_ERR_843419_SPEC): Define.
+       (LINK_SPEC): Include CA53_ERR_843419_SPEC.
+       * config/aarch64/aarch64-linux.h (CA53_ERR_843419_SPEC): Define.
+       (LINK_SPEC): Include CA53_ERR_843419_SPEC.
+       * config/aarch64/aarch64.opt (mfix-cortex-a53-843419): New option.
+       * configure: Regenerate.
+       * configure.ac: Add --enable-fix-cortex-a53-843419 option.
+       * doc/install.texi (aarch64*-*-*): Document new
+       --enable-fix-cortex-a53-843419 option.
+       * doc/invoke.texi (AArch64 Options): Document -mfix-cortex-a53-843419
+       and -mno-fix-cortex-a53-843419 options.
+
+2015-05-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/65990
+       * config/i386/i386.c (ix86_parse_stringop_strategy_string): Error out
+       if rep_8byte stringop strategy was specified for 32-bit target.
+
+2015-05-05  Jack Howarth  <howarth.at.gcc@gmail.com>
+
+       Backport from mainline
+       2014-05-29  Mike Stump  <mikestump@comcast.net>
+       PR debug/61352
+       * collect2.c (maybe_run_lto_and_relink): Be sure to always run
+       post ld passes when lto is used.
+
+2015-05-05  Shanyao Chen  <chenshanyao@huawei.com>
+
+       Backported from mainline
+       2015-01-19  Jiong Wang  <jiong.wang@arm.com>
+                   Andrew Pinski  <apinski@cavium.com>
+
+       PR target/64304
+       * config/aarch64/aarch64.md (define_insn "*ashl<mode>3_insn"): Deleted.
+       (ashl<mode>3): Don't expand if operands[2] is not constant.
+
+2015-05-05  Peter Bergner  <bergner@vnet.ibm.com>
+
+       Backport from mainline.
+       2015-04-27  Peter Bergner  <bergner@vnet.ibm.com>
+
+       PR target/64579
+       * config/rs6000/htm.md: Remove all define_expands.
+       (UNSPECV_HTM_TABORTDC, UNSPECV_HTM_TABORTDCI, UNSPECV_HTM_TABORTWC,
+       UNSPECV_HTM_TABORTWCI): Remove.
+       (UNSPECV_HTM_TABORTXC, UNSPECV_HTM_TABORTXCI, UNSPECV_HTM_TTEST): New.
+       (tabort_internal, tbegin_internal, tcheck_internal, tend_internal,
+       trechkpt_internal, treclaim_internal, tsr_internal): Rename from this...
+       (tabort, tbegin, tcheck, tend, trechkpt, treclaim, tsr): ...to this.
+       (tabortdc_internal, tabortdci_internal, tabortwc_internal,
+       tabortwci_internal): Remove define_insns.
+       (tabort<wd>c, tabort<wd>ci): New define_insns.
+       (tabort): Use gpc_reg_operand.
+       (tcheck): Remove operand.
+       (htm_mfspr_<mode>, htm_mtspr_<mode>): Use GPR mode macro.
+       * config/rs6000/htmxlintrin.h (__TM_end): Use _HTM_TRANSACTIONAL as
+       expected value.
+       * config/rs6000/rs6000-builtin.def (BU_HTM_SPR0): Remove.
+       (BU_HTM_SPR1): Rename to BU_HTM_V1.  Remove use of RS6000_BTC_SPR.
+       (tabort, tabortdc, tabortdci, tabortwc, tabortwci, tbegin,
+       tcheck, tend, tendall, trechkpt, treclaim, tresume, tsuspend,
+       tsr, ttest): Pass in the RS6000_BTC_CR attribute.
+       (get_tfhar, set_tfhar, get_tfiar, set_tfiar, get_texasr, set_texasr,
+       get_texasru, set_texasru): Pass in the RS6000_BTC_SPR attribute.
+       (tcheck): Remove builtin argument.
+       * config/rs6000/rs6000.c (rs6000_htm_spr_icode): Use TARGET_POWERPC64
+       not TARGET_64BIT.
+       (htm_expand_builtin): Fix usage of expandedp.  Disallow usage of the
+       tabortdc and tabortdci builtins when not in 64-bit mode.
+       Modify code to handle the loss of the HTM define_expands.
+       Emit code to copy the CR register to TARGET.
+       (htm_init_builtins): Modify code to handle the loss of the HTM
+       define_expands.
+       * config/rs6000/rs6000.h (RS6000_BTC_32BIT): Delete.
+       (RS6000_BTC_64BIT): Likewise.
+       (RS6000_BTC_CR): New macro.
+       * doc/extend.texi: Update documentation for htm builtins.
+
+2015-04-28  Tejas Belagod  <tejas.belagod@arm.com>
+
+       Backport from Mainline
+       2014-11-20  Tejas Belagod  <tejas.belagod@arm.com>
+
+       * config/aarch64/aarch64-protos.h (aarch64_classify_symbol):
+       Fixup prototype.
+       * config/aarch64/aarch64.c (aarch64_expand_mov_immediate,
+       aarch64_cannot_force_const_mem, aarch64_classify_address,
+       aarch64_classify_symbolic_expression): Fixup call to
+       aarch64_classify_symbol.
+       (aarch64_classify_symbol): Add range-checking for
+       symbol + offset addressing for tiny and small models.
+
+2015-04-24  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2015-04-24  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/65849
+       * config/rs6000/rs6000.opt (-mvsx-align-128): Make options that
+       save to independent variables use the Save attribute.  This will
+       allow these options to be modified with the #pragma/attribute
+       target support.
+       (-mallow-movmisalign): Likewise.
+       (-mallow-df-permute): Likewise.
+       (-msched-groups): Likewise.
+       (-malways-hint): Likewise.
+       (-malign-branch-targets): Likewise.
+       (-mvectorize-builtins): Likewise.
+       (-msave-toc-indirect): Likewise.
+
+       * config/rs6000/rs6000.c (rs6000_opt_masks): Add more options that
+       can be set via the #pragma/attribute target support.
+       (rs6000_opt_vars): Likewise.
+       (rs6000_inner_target_options): If VSX was set, also set
+       -mno-avoid-indexed-addresses.
+
+2015-04-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline r222385
+       2015-04-23  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/altivec.md (*altivec_lvx_<mode>_internal): Remove
+       asterisk from name so this can be generated directly.
+       (*altivec_stvx_<mode>_internal): Likewise.
+       * config/rs6000/rs6000.c (rs6000_emit_le_vsx_store): Add assert
+       that this is never called during or after reload/lra.
+       (rs6000_frame_related): Remove split_reg
+       argument and logic that references it.
+       (emit_frame_save): Remove last parameter from call to
+       rs6000_frame_related.
+       (rs6000_emit_prologue): Remove last parameter from eight calls to
+       rs6000_frame_related.  Force generation of stvx instruction for
+       Altivec register saves.  Remove split_reg handling, which is no
+       longer needed.
+       (rs6000_emit_epilogue):  Force generation of lvx instruction for
+       Altivec register restores.
+
+2015-04-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline r222362
+       2015-04-23  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/crypto.md (crypto_vpmsum<CR_char>): Change
+       TARGET_CRYPTO to TARGET_P8_VECTOR>
+       (crypto_vpermxor_<mode>): Likewise.
+       * config/rs6000/rs6000-builtin.def (BU_CRYPTO_2A): New #define.
+       (BU_CRYPTO_3A): Likewise.
+       (BU_CRYPTO_OVERLOAD_2A): Rename from BU_CRYPTO_OVERLOAD_2.
+       (BU_CRYPTO_OVERLOAD_3A): New #define.
+       (VPMSUMB): Change from BU_CRYPTO_2 to BU_CRYPTO_2A.
+       (VPMSUMH): Likewise.
+       (VPMSUMW): Likewise.
+       (VPMSUMD): Likewise.
+       (VPERMXOR_V2DI): Change from BU_CRYPTO_3 to BU_CRYPTO_3A.
+       (VPERMXOR_V4SI): Likewise.
+       (VPERMXOR_V8HI): Likewise.
+       (VPERMXOR_V16QI): Likewise.
+       (VPMSUM): Change from BU_CRYPTO_OVERLOAD_2 to
+       BU_CRYPTO_OVERLOAD_2A.
+       (VPERMXOR): Change from BU_CRYPTO_OVERLOAD3 to
+       BU_CRYPTO_OVERLOAD_3A.
+       * config/rs6000/rs6000.opt (mcrypto): Change description of
+       option.
+
+       Backport from mainline r222362
+       2015-04-23  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/rs6000.opt (mcrypto): Change option description to
+       match category changes in ISA 2.07B.
+
+2015-04-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline r222351
+       2015-04-22  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/rs6000.c (rtx_is_swappable_p): Commentary
+       adjustments.
+       (insn_is_swappable_p): Return 1 for a convert from double to
+       single precision when all of its uses are splats of BE element
+       zero.
+
+2015-04-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline r222349
+       2015-04-22  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR target/65456
+       * config/rs6000/rs6000.c (rs6000_option_override_internal):  For
+       VSX + POWER8, enable TARGET_ALLOW_MOVMISALIGN and
+       TARGET_EFFICIENT_UNALIGNED_VSX if not selected by command line
+       option.
+       (rs6000_builtin_mask_for_load): Return 0 for targets with
+       efficient unaligned VSX accesses so that the vectorizer will use
+       direct unaligned loads.
+       (rs6000_builtin_support_vector_misalignment): Always return true
+       for targets with efficient unaligned VSX accesses.
+       (rs6000_builtin_vectorization_cost): Cost of unaligned loads and
+       stores on targets with efficient unaligned VSX accesses is almost
+       always the same as the cost of an aligned load or store, so model
+       it that way.
+       * config/rs6000/rs6000.h (SLOW_UNALIGNED_ACCESS): Return 0 for
+       unaligned vectors if we have efficient unaligned VSX accesses.
+       * config/rs6000/rs6000.opt (mefficient-unaligned-vector): New
+       undocumented option.
+
+2015-04-18  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       Backport from mainline r222205
+       2015-04-17  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+                   Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/65787
+       * config/rs6000/rs6000.c (rtx_is_swappable_p): Ensure that a
+       subsequent SH_NONE operand does not overwrite an existing *special
+       value.
+       (adjust_extract): Handle case where a vec_extract operation is
+       wrapped in a PARALLEL.
+
+2015-04-16  Kirill Yukhin  <kirill.yukhin@intel.com>
+
+       PR target/65676
+       * config/i386/i386.c (fixup_modeless_constant): New.
+       (ix86_expand_args_builtin): Fixup modeless constant operand.
+       (ix86_expand_round_builtin): Ditto.
+       (ix86_expand_special_args_builtin): Ditto.
+       (ix86_expand_builtin): Ditto.
+
+2015-04-10  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/65710
+       * lra-assigns.c (spill_for): Update smallest_bad_spills_num.
+       Print bad_spills_num and insn_pseudos_num.
+
+2015-04-09  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/65710
+       * lra-int.h (lra_bad_spill_regno_start): New.
+       * lra.c (lra_bad_spill_regno_start): New.
+       (lra): Set up lra_bad_spill_regno_start.  Set up
+       lra_constraint_new_regno_start unconditionally.
+       * lra-assigns.c (spill_for): Use lra_bad_spill_regno_start for
+       spill preferences.
+
+2015-04-07  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2015-04-04  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/64909
+       PR tree-optimization/65660
+       * tree-vectorizer.h (vect_get_known_peeling_cost): Adjust
+       to take a cost vector for scalar iteration cost.
+       (vect_get_single_scalar_iteration_cost): Likewise.
+       * tree-vect-loop.c (vect_get_single_scalar_iteration_cost):
+       Compute the scalar iteration cost into a cost vector.
+       (vect_get_known_peeling_cost): Use the scalar cost vector to
+       account for the cost of the peeled iterations.
+       (vect_estimate_min_profitable_iters): Likewise.
+       * tree-vect-data-refs.c (vect_peeling_hash_get_lowest_cost):
+       Likewise.
+
+2015-04-05  Yvan Roux  <yvan.roux@linaro.org>
+
+       Backport from trunk r221867
+       2015-04-04  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/65647
+       * lra.c (lra): Stop updating lra_constraint_new_regno_start after
+       switching off inheritance.
+
+2015-04-02  John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/pa/pa.c (pa_output_move_double): Directly handle register
+       indexed memory operand.  Simplify handling of scaled register indexed
+       memory operands.
+
+2015-03-31  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       * config/s390/s390.c (s390_function_num_hotpatch_hw): Allow hotpatching
+       nested functions.
+       (s390_reorg): Adapt to new signature of s390_function_num_hotpatch_hw.
+       (s390_asm_output_function_label): Adapt to new signature of
+       s390_function_num_hotpatch_hw
+       Optimise the code generating assembler output.
+       Add comments to assembler file.
+
+2015-03-27  Vladimir Makarov  <vmakarov@redhat.com>
+
+       Backport from mainline
+       2015-01-30  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/64688
+       * lra-constraints.c (original_subreg_reg_mode): New.
+       (simplify_operand_subreg): Try to simplify subreg of const.  Use
+       original_subreg_reg_mode for it.
+       (swap_operands): Update original_subreg_reg_mode.
+       (curr_insn_transform): Set up original_subreg_reg_mode.
+
+2015-03-26  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/65561
+       * config/i386/sse.md (avx512f_vextract<shuffletype>32x4_1_maskm):
+       Check operand 6 and operand 0 for equality.
+       (vec_extract_lo_<mode>_maskm): Check operand 2 and operand 0
+       for equality.
+       (vec_extract_hi_<mode>_maskm): Ditto.
+
+2015-03-26  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport of r214242, r214254, and bug fix patches from mainline
+       * config/rs6000/rs6000.c (context.h): New #include.
+       (tree-pass.h): Likewise.
+       (make_pass_analyze_swaps): New declaration.
+       (rs6000_option_override): Register swap-optimization pass.
+       (swap_web_entry): New class.
+       (special_handling_values): New enum.
+       (union_defs): New function.
+       (union_uses): Likewise.
+       (insn_is_load_p): Likewise.
+       (insn_is_store_p): Likewise.
+       (insn_is_swap_p): Likewise.
+       (rtx_is_swappable_p): Likewise.
+       (insn_is_swappable_p): Likewise.
+       (chain_purpose): New enum.
+       (chain_contains_only_swaps): New function.
+       (mark_swaps_for_removal): Likewise.
+       (swap_const_vector_halves): Likewise.
+       (adjust_subreg_index): Likewise.
+       (permute_load): Likewise.
+       (permute_store): Likewise.
+       (adjust_extract): Likewise.
+       (adjust_splat): Likewise.
+       (handle_special_swappables): Likewise.
+       (replace_swap_with_copy): Likewise.
+       (dump_swap_insn_table): Likewise.
+       (rs6000_analyze_swaps): Likewise.
+       (pass_data_analyze_swaps): New pass_data.
+       (pass_analyze_swaps): New class.
+       (pass_analyze_swaps::gate): New method.
+       (pass_analyze_swaps::execute): New method.
+       (make_pass_analyze_swaps): New function.
+       * config/rs6000/rs6000.opt (moptimize-swaps): New option.
+       * df.h (web_entry_base): New class, replacing struct web_entry.
+       (web_entry_base::pred): New method.
+       (web_entry_base::set_pred): Likewise.
+       (web_entry_base::unionfind_root): Likewise.
+       (web_entry_base::unionfind_union): Likewise.
+       (unionfind_root): Delete external reference.
+       (unionfind_union): Likewise.
+       (union_defs): Likewise.
+       * web.c (web_entry_base::unionfind_root): Convert to method.
+       (web_entry_base::unionfind_union): Likewise.
+       (web_entry): New class.
+       (union_match_dups): Convert to use class structure.
+       (union_defs): Likewise.
+       (entry_register): Likewise.
+       (web_main): Likewise.
+
+2015-03-26  Alan Modra  <amodra@gmail.com>
+
+       PR target/63150
+       Backport from trunk 211857 and 221445.
+       2014-06-20  Maciej W. Rozycki  <macro@codesourcery.com>
+       * config/rs6000/rs6000.md: Append `DONE' to preparation
+       statements of `bswap' pattern splitters.
+
+       2015-03-16  Alan Modra  <amodra@gmail.com>
+       * config/rs6000/rs6000.md (bswapdi2): Remove one scratch reg.
+       Modify Z->r bswapdi splitter to use dest in place of scratch.
+       In r->Z and Z->r bswapdi splitter rename word_high, word_low
+       to word1, word2 and rearrange logic to suit.
+       (bswapdi2_64bit): Remove early clobber on Z->r alternative.
+       (bswapdi2_ldbrx): Likewise.  Remove '??' on r->r.
+       (bswapdi2_32bit): Remove early clobber on Z->r alternative.
+       Add one '?' on r->r.  Modify Z->r splitter to avoid need for
+       early clobber.
+
+2015-03-26  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2015-03-26  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       * config/sh/t-sh (MULTILIB_EXCEPTIONS): Handle default endian.
+
+2015-03-24  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR rtl-optimization/60851
+       * recog.c (constrain_operands): Accept a pseudo register before reload
+       for LRA enabled targets.
+
+2015-03-23  Yvan Roux  <yvan.roux@linaro.org>
+
+       Backport from trunk r220616.
+       2015-02-11  Martin Liska  <mliska@suse.cz>
+
+       PR ipa/64813
+       * cgraphunit.c (cgraph_node::expand_thunk): Do not create a return
+       value for call to a function that is noreturn.
+
+2015-03-23  Yvan Roux  <yvan.roux@linaro.org>
+
+       Backport from trunk r216841.
+       2014-10-29  Martin Liska  <mliska@suse.cz>
+
+       PR ipa/63587
+       * cgraphunit.c (cgraph_node::expand_thunk): Only VAR_DECLs are put
+       to local declarations.
+       * function.c (add_local_decl): Implementation moved from header file,
+       assert introduced for tree type.
+       * function.h: Likewise.
+
+2015-03-19  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Backport from mainline
+       2015-03-12  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       PR rtl-optimization/65235
+       * simplify-rtx.c (simplify_binary_operation_1, VEC_SELECT case):
+       When first element of vec_concat is const_int, calculate its size
+       using second element.
+
+2015-03-16  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR middle-end/65409
+       * expr.c (store_field): Do not do a direct block copy if the source is
+       a PARALLEL with BLKmode.
+
+2015-03-12  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       * config/s390/s390.c (s390_reorg): Move code to output nops after label
+       to s390_reorg ().
+       (s390_asm_output_function_label): Likewise.
+       * config/s390/s390.c (s390_asm_output_function_label):
+       Fix function label alignment with -mhtopatch.
+       * config/s390/s390.md ("unspecv"): New values UNSPECV_NOP_2_BYTE,
+       UNSPECV_NOP_4_BYTE and UNSPECV_NOP_6_BYTE
+       ("nop_2_byte"): New define_insn.
+       ("nop_4_byte"): Likewise.
+       ("nop_6_byte"): Likewise.
+       * doc/extend.texi (hotpatch): hotpatch attribute doc fixes.
+       * doc/invoke.texi (-mhotpatch): -mhotpatch doc fixes.
+
+2015-03-12  Marek Polacek  <polacek@redhat.com>
+
+       Backported from mainline
+       2015-03-11  Marek Polacek  <polacek@redhat.com>
+
+       PR tree-optimization/65388
+       * tree-ssa-tail-merge.c (same_succ_def::equal): Fix typo in comparison.
+
+2015-03-11  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/65296
+       * configure.ac [avr]: Check as for option -mrmw.
+       * configure: Regenerate.
+       * config.in: Regenerate.
+       * config/avr/driver-avr.c (avr_device_to_as): Don't add -mrmw to
+       assembler options if not HAVE_AS_AVR_MRMW_OPTION.
+
+2015-03-11  Marek Polacek  <polacek@redhat.com>
+
+       Backported from mainline
+       2014-12-04  Marek Polacek  <polacek@redhat.com>
+
+       PR middle-end/56917
+       * fold-const.c (fold_unary_loc): Perform the negation in A's type
+       when transforming ~ (A - 1) or ~ (A + -1) to -A.
+
+2015-03-10  Yvan Roux  <yvan.roux@linaro.org>
+
+       Backport from trunk r220489.
+       2015-02-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR ipa/64896
+       * cgraphunit.c (cgraph_node::expand_thunk): If
+       restype is not is_gimple_reg_type nor the thunk_fndecl
+       returns aggregate_value_p, set restmp to a temporary variable
+       instead of resdecl.
+
+2015-03-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/65286
+       * config/rs6000/t-linux: For powerpc64* target set
+       MULTILIB_OSDIRNAMES instead of MULTIARCH_DIRNAME.
+
+2015-03-10  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/53988
+       * config/sh/sh.md (*tst<mode>_t_zero): Remove insns.
+
+2015-03-10  Alan Modra  <amodra@gmail.com>
+
+       PR target/65286
+       * config.gcc (powerpc*-*-linux*): Arrange for powerpc64le-linux
+       to be single-arch by default.  Set cpu_is_64bit for powerpc64
+       given --with-cpu=native.
+       * config/rs6000/t-fprules: Do not set default MULTILIB vars.
+       * config/rs6000/t-linux (MULTIARCH_DIRNAME): Support powerpc64
+       and powerpc64le.
+       * config/rs6000/linux64.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Test
+       rs6000_isa_flags rather than TARGET_64BIT.
+
+2015-03-05  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from trunk
+       2015-03-03  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR 65138/target
+       * config/rs6000/rs6000-cpus.def (powerpc64le): Add new generic
+       processor type for 64-bit little endian PowerPC.
+
+       * config/rs6000/rs6000.c (rs6000_option_override_internal): If
+       -mdebug=reg, print TARGET_DEFAULT.  Fix logic to use
+       TARGET_DEFAULT if there is no default cpu.  Fix -mdebug=reg
+       printing built-in mask so it does not pass NULL pointers.
+
+       * config/rs6000/rs6000-tables.opt: Regenerate.
+
+       * doc/invoke.texi (IBM RS/6000 and PowerPC options): Document
+       -mcpu=powerpc64le.
+
+       Backport from trunk
+       2015-01-19  David Edelsohn  <dje.gcc@gmail.com>
+
+       * config/rs6000/default64.h: Include rs6000-cpus.def.
+       (TARGET_DEFAULT) [LITTLE_ENDIAN]: Use ISA 2.7 (POWER8).
+       (TARGET_DEFAULT) [BIG_ENDIAN]: Use POWER4.
+       * config/rs6000/driver-rs6000.c (detect_processor_aix): Add POWER7
+       and POWER8.
+       * config/rs6000/linux64.h (PROCESSOR_DEFAULT64): Always default to
+       POWER8.
+       * config/rs6000/rs6000.c (rs6000_file_start): Emit .machine
+       pseudo-op to specify assembler dialect.
+
+2015-03-04  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       Backport from mainline
+       2014-11-27  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       PR target/59593
+       * config/arm/arm.c (dump_minipool): dispatch to consttable pattern
+       based on mode size.
+       * config/arm/arm.md (consttable_1): Make it TARGET_EITHER.
+       (consttable_2): Make it TARGET_EITHER and move HFmode handling from
+       consttable_4 to it.
+       (consttable_4): Move HFmode handling to consttable_2 pattern.
+
+2015-03-03  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       PR target/65249
+       * config/sh/sh.md (symGOT_load): Use R0 reg for operands[2] when
+       called for __stack_chk_guard symbol.
+
+2015-03-03  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/64331
+       * config/avr/avr.c (context.h, tree-pass.h): Include them.
+       (avr_pass_data_recompute_notes): New static variable.
+       (avr_pass_recompute_notes): New class.
+       (avr_register_passes): New static function.
+       (avr_option_override): Call it.
+
+2015-03-03  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/ia64/ia64.c (expand_vec_perm_interleave_2): Use gen_raw_REG
+       to create a register in testing mode.
+
+2015-03-03  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       Backport from mainline
+       2015-01-14  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       PR target/64453
+       * config/arm/arm.c (callee_saved_reg_p): Define.
+       (arm_compute_save_reg0_reg12_mask): Use callee_saved_reg_p to check if
+       register is callee saved instead of !call_used_regs[reg].
+       (thumb1_compute_save_reg_mask): Likewise.
+
+2015-02-27  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/63175
+       * builtins.c (get_object_alignment_2): Make sure to re-apply
+       the ANDed mask after recursing to its operand gets us a new
+       misalignment bit position.
+
+2015-02-27  Andrew Pinski  <apinski@cavium.com>
+           Naveen H.S  <Naveen.Hurugalawadi@caviumnetworks.com>
+
+       * config/aarch64/aarch64.c (*aarch64_load_symref_appropriately):
+       Check whether the destination of SYMBOL_SMALL_TPREL is Pmode.
+
+2015-02-27  Richard Biener  <rguenther@suse.de>
+
+       PR lto/65193
+       Backport from mainline
+       2014-07-24  Jan Hubicka  <hubicka@ucw.cz>
+
+       * lto-streamer-out.c (tree_is_indexable): Consider IMPORTED_DECL
+       as non-indexable.
+
+2015-02-25  Peter Bergner  <bergner@vnet.ibm.com>
+
+       Backport from mainline
+       2015-02-25  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
+
+       * config/rs6000/htm.md (tcheck): Fix assembly encoding.
+
+2015-02-26  Matthew Fortune  <matthew.fortune@imgtec.com>
+
+       PR target/64569
+       Backported from mainline: r213872, r217446, r217939, r219867
+
+       * config.in [!USED_FOR_TARGET] (HAVE_AS_DOT_MODULE): Undefine.
+       * config/mips/mips.h (FP_ASM_SPEC): New macro.
+       (ASM_SPEC): Use FP_ASM_SPEC.
+       * configure.ac (HAVE_AS_DOT_MODULE): Detect support for .module
+       and FPXX extensions.
+       * configure: Regenerate.
+
+2015-02-25  Jason Merrill  <jason@redhat.com>
+
+       * common.opt (-flifetime-dse): New.
+
+2015-02-25  Kai Tietz  <ktietz@redhat.com>
+
+       PR tree-optimization/61917
+       * tree-vect-loop.c (vectorizable_reduction): Handle obvious case
+       that reduc_def_stmt is null.
+
+       Merged from mainline
+       PR target/64212
+       * symtab.c (symtab::make_decl_local): Set DECL_IMPORT_P explicit to 0.
+       (symtab::noninterposable_alias): Likewise.
+
+2015-02-25  Richard Biener  <rguenther@suse.de>
+       Kai Tietz  <ktietz@redhat.com>
+
+       Backported from mainline
+       PR tree-optimization/61917
+       * tree-vect-loop.c (vectorizable_reduction): Allow
+       vect_internal_def without reduction to exit graceful.
+
+2015-02-25  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/65196
+       * config/avr/avr.c (avr_adjust_insn_length): Call recog_memoized
+       only with NONDEBUG_INSN_P.
+
+2015-02-25  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       Backport from mainline
+       2015-02-23  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       PR target/65153
+       * config/sh/sh.md (movsicc_true+3): Remove peephole.
+       * config/sh/sh-protos.h (replace_n_hard_rtx): Don't declare.
+       * config/sh/sh.c (replace_n_hard_rtx): Remove.
+
+2015-02-24  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2015-02-11  Richard Biener  <rguenther@suse.de>
+
+       PR lto/65015
+       * dwarf2out.c (gen_producer_string): Drop -fltrans-output-list
+       and -fresolution.
+
+       2015-02-13  Richard Biener  <rguenther@suse.de>
+
+       PR lto/65015
+       * dwarf2out.c (dwarf2out_finish): Use <artificial> as DW_AT_name
+       for LTO produced CUs.
+
+       2015-02-16  Richard Biener  <rguenther@suse.de>
+
+       PR lto/65015
+       * varasm.c (default_file_start): For LTO produced units
+       emit <artificial> as file directive.
+
+       2015-01-17  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * dwarf2out.c (gen_producer_string): Ignore also OPT_fpreprocessed.
+
+2015-02-23  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2015-02-23  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/65163
+       * config/sh/sh.md (swapbsi2, related peephole2): Use const_int -65536
+       instead of const_int 4294901760.
+
+2015-02-23  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-11-19  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/63844
+       * omp-low.c (fixup_child_record_type): Use a restrict qualified
+       referece type for the receiver parameter.
+
+       2014-11-27  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/61634
+       * tree-vect-slp.c: Include gimple-walk.h.
+       (vect_detect_hybrid_slp_stmts): Rewrite to propagate hybrid
+       down the SLP tree for one scalar statement.
+       (vect_detect_hybrid_slp_1): New walker function.
+       (vect_detect_hybrid_slp_2): Likewise.
+       (vect_detect_hybrid_slp): Properly handle pattern statements
+       in a pre-scan over all loop stmts.
+
+       2015-01-14  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/59354
+       * tree-vect-slp.c (vect_build_slp_tree_1): Treat loads from
+       groups larger than the slp group size as having gaps.
+
+       2015-02-10  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/64909
+       * tree-vect-loop.c (vect_estimate_min_profitable_iters): Properly
+       pass a scalar-stmt count estimate to the cost model.
+       * tree-vect-data-refs.c (vect_peeling_hash_get_lowest_cost): Likewise.
+
+2015-02-20  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Backport from mainline
+       2015-02-20  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/aarch64/aarch64.md (*aarch64_lshr_sisd_or_int_<mode>3):
+       Mark operand 0 as earlyclobber in 2nd alternative.
+       (1st define_split below *aarch64_lshr_sisd_or_int_<mode>3):
+       Write negated shift amount into QI lowpart operand 0 and use it
+       in the shift step.
+       (2nd define_split below *aarch64_lshr_sisd_or_int_<mode>3): Likewise.
+
+2015-02-20  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2015-02-20 trunk r220847.
+
+       PR target/64452
+       * config/avr/avr.md (pushhi_insn): New insn.
+       (push<mode>1): Push virtual regs in one chunk using pushhi1_insn.
+
+2015-02-20  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2015-01-12  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/64530
+       * tree-loop-distribution.c (pg_add_dependence_edges): Shuffle
+       back dr1.
+
+       2015-02-13  Richard Biener  <rguenther@suse.de>
+
+       PR lto/64373
+       * lto-streamer-out.c (tree_is_indexable): Guard for NULL
+       DECL_CONTEXT.
+
+       2015-02-16  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/63593
+       * tree-predcom.c (execute_pred_commoning_chain): Delay removing
+       stmts and releasing SSA names until...
+       (execute_pred_commoning): ... after processing all chains.
+
+       2015-02-18  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/65063
+       * tree-predcom.c (determine_unroll_factor): Return 1 if we
+       have replaced looparound PHIs.
+
+2015-02-19  John David Anglin  <danlgin@gcc.gnu.org>
+
+       * config/pa/pa.c (pa_reloc_rw_mask): New function.
+       (TARGET_ASM_RELOC_RW_MASK): Define.
+       (pa_cannot_force_const_mem): Revert previous change.
+
+2015-02-19  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-12-09  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/64199
+       * fold-const.c (fold_binary_loc): Use TREE_OVERFLOW_P.
+
+       2015-01-14  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/64493
+       PR tree-optimization/64495
+       * tree-vect-loop.c (vect_finalize_reduction): For double-reductions
+       assign the proper vectorized PHI to the inner loop exit PHIs.
+
+       2015-01-27  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/56273
+       PR tree-optimization/59124
+       PR tree-optimization/64277
+       * tree-vrp.c (vrp_finalize): Emit array-bound warnings only
+       from the first VRP pass.
+
+       2015-02-19  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2015-01-15  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/64365
+       * tree-data-ref.c (dr_analyze_indices): Make sure that accesses
+       for MEM_REF access functions with the same base can never partially
+       overlap.
+
+2015-02-17  Ilya Tocar  <ilya.tocar@intel.com>
+
+       Backported from mainline
+       2015-01-14  Ilya Tocar  <ilya.tocar@intel.com>
+
+       PR target/64387
+       * config/i386/sse.md (vec_unpacks_hi_v8sf): Fix predicate.
+       (vec_unpacks_hi_v16sf): Ditto.
+
+2015-02-15  John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/pa/pa.c (pa_secondary_reload): Request a secondary reload
+       for all floading point loads and stores except those using a register
+       index address.
+       * config/pa/pa.md: Add new patterns to load a lo_sum DLT operand
+       to a register.
+
+2015-02-13  John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/pa/constraints.md: Change "Q" and "T" constraints to memory
+       constraints.
+       * config/pa/pa.c (pa_cannot_force_const_mem): Don't allow constant
+       symbolic references to data to be forced to constant memory on the
+       SOM target.
+
+2015-02-11  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-02-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/64979
+       * tree-stdarg.c (pass_stdarg::execute): Scan phi node args for
+       va_list escapes.
+
+2015-02-11  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/alpha/alpha.md (reload_out<mode>_aligned): Make operands 2
+       and 3 earlyclobber operands.
+
+2015-02-09  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       * doc/extend.texi: s/390: Update documentation of hotpatch attribute.
+       * doc/invoke.texi (-mhotpatch): s/390: Update documentation of
+       -mhotpatch= option.
+       * config/s390/s390.opt (mhotpatch): s/390: Remove -mhotpatch and
+       -mno-hotpatch options.  Change syntax of -mhotpatch= option.
+       * config/s390/s390.c (s390_hotpatch_trampoline_halfwords_default):
+       Renamed.
+       (s390_hotpatch_trampoline_halfwords_max): Renamed.
+       (s390_hotpatch_hw_max): New name.
+       (s390_hotpatch_trampoline_halfwords): Renamed.
+       (s390_hotpatch_hw_before_label): New name.
+       (get_hotpatch_attribute): Removed.
+       (s390_hotpatch_hw_after_label): New name.
+       (s390_handle_hotpatch_attribute): Add second parameter to hotpatch
+       attribute.
+       (s390_attribute_table): Ditto.
+       (s390_function_num_hotpatch_trampoline_halfwords): Renamed.
+       (s390_function_num_hotpatch_hw): New name.
+       Remove special handling of inline functions and hotpatching.
+       Return number of nops before and after the function label.
+       (s390_can_inline_p): Removed.
+       (s390_asm_output_function_label): Emit a configurable number of nops
+       after the function label.
+       (s390_option_override): Update -mhotpatch= syntax and remove -mhotpatch.
+       (TARGET_CAN_INLINE_P) Removed.
+       (TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P): New.
+
+2015-02-05  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/64580
+       Backport from mainline
+       * config.rs6000/rs6000.c (compute_vrsave_mask): Reverse loop order.
+       (rs6000_stack_info): Add assert.
+       (rs6000_output_savres_externs): New function, split off from...
+       (rs6000_output_function_prologue): ... here.  Do not call it for
+       thunks.
+
+2015-02-04  Matthias Klose  <doko@ubuntu.com>
+
+       PR target/64938
+       Backport from mainline
+       2015-01-15  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/64068
+       PR ipa/64559
+       * ipa.c (symbol_table::remove_unreachable_nodes):
+       Do not put abstract origins into boundary.
+
+2015-02-04  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2015-01-31  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/64882
+       * config/i386/predicates.md (address_no_seg_operand): Reject
+       non-CONST_INT_P operands in invalid mode.
+
+       Backport from mainline
+       2015-01-31  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.md (*prefetch_prefetchw1): Remove mode of
+       address_operand 0.  Rename from *prefetch_prefetchwt1_<mode>.
+       * config/i386/predicates.md (address_no_seg_operand): Call
+       address_operand with VOIDmode.
+       (vsib_address_operand): Ditto.
+
+2015-02-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backported from mainline
+       2015-01-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/i386/driver-i386.c (host_detect_local_cpu): Check new
+       Silvermont, Haswell, Broadwell and Knights Landing model numbers.
+       * config/i386/i386.c (processor_model): Add
+       M_INTEL_COREI7_BROADWELL.
+       (arch_names_table): Add "broadwell".
+
+2015-02-01  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-01-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/61058
+       * jump.c (cleanup_barriers): Update basic block boundaries
+       if BLOCK_FOR_INSN is non-NULL on PREV.
+
+       2015-01-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/64421
+       * omp-low.c (simd_clone_mangle): If DECL_ASSEMBLER_NAME starts
+       with asterisk, skip the first character.
+
+       * config/rs6000/rs6000-cpus.def (POWERPC_MASKS): Add
+       OPTION_MASK_QUAD_MEMORY_ATOMIC.
+
+       2015-01-23  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/63637
+       PR rtl-optimization/60663
+       * cse.c (merge_equiv_classes): Set new_elt->cost to MAX_COST
+       if elt->cost is MAX_COST for ASM_OPERANDS.
+       (find_sets_in_insn): Fix up comment typo.
+       (cse_insn): Don't set src_volatile for all non-volatile
+       ASM_OPERANDS in PARALLELs, but just those with multiple outputs
+       or with "memory" clobber.  Set elt->cost to MAX_COST
+       for ASM_OPERANDS in PARALLEL.  Set src_elt->cost to MAX_COST
+       if new_src is ASM_OPERANDS and elt->cost is MAX_COST.
+
+       PR debug/64511
+       * dwarf2out.c (struct dw_loc_descr_node): Add chain_next
+       GTY markup.
+
+       2015-01-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/64663
+       * dwarf2out.c (decl_piece_node): Don't put bitsize into
+       mode if bitsize <= 0.
+       (decl_piece_bitsize, adjust_piece_list, add_var_loc_to_decl,
+       dw_sra_loc_expr): Use HOST_WIDE_INT instead of int for bit
+       sizes and positions.
+
+2015-01-29  Ilya Tocar  <ilya.tocar@intel.com>
+
+       * config/i386/avx2intrin.h (_mm256_bslli_epi128,
+       _mm256_bsrli_epi128): New.
+       * config/i386/emmintrin.h (_mm_bsrli_si128, _mm_bslli_si128): Ditto.
+
+2015-01-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       * config/s390/s390.c (s390_memory_move_cost): Increase costs for
+       memory accesses.
+
+2015-01-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       * config/s390/s390.c (s390_register_move_cost): Increase costs for
+       FPR->GPR moves.
+
+2015-01-26  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2015-01-26  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/64795
+       * config/i386/i386.md (*movdi_internal): Also check operand 0
+       to determine TYPE_LEA operand.
+       (*movsi_internal): Ditto.
+
+       Backport from mainline
+       2015-01-23  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/sse.md (sse2_loadld): Set attribute isa to sse2 for
+       alternative 1.
+
+2015-01-23  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/64734
+       * omp-low.c (scan_sharing_clauses): Don't ignore
+       OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION GOMP_MAP_POINTER clauses
+       on target data/update constructs.
+
+2015-01-23  Wei Mi  <wmi@google.com>
+
+       Backported from trunk.
+       2015-01-22  Wei Mi  <wmi@google.com>
+
+       PR rtl-optimization/64557
+       * dse.c (record_store): Call get_addr for mem_addr.
+       (check_mem_read_rtx): Likewise.
+
+2015-01-22  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       * config/s390/s390.md (atomic code attribute): Fix typo "ior" ->
+       "or".
+
+2015-01-21  Wei Mi  <wmi@google.com>
+
+       Backported from trunk.
+       2014-11-22  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/63970
+       * ipa.c (symbol_table::remove_unreachable_nodes): Mark all inline clones
+       as having abstract origin used.
+       * ipa-inline-transform.c (can_remove_node_now_p_1): Drop abstract
+       origin check.
+       (clone_inlined_nodes): Copy abstract originflag.
+       * lto-cgraph.c (compute_ltrans_boundary): Use get_create to get
+       abstract origin node.
+
+2015-01-20  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       Backport from mainline
+       * config/nios2/nios2.c (nios2_asm_file_end): Implement
+       TARGET_ASM_FILE_END hook for adding .note.GNU-stack section when
+       needed.
+       (TARGET_ASM_FILE_END): Define.
+
+2015-01-15  Martin Liska  <mliska@suse.cz>
+
+       Backport from mainline
+       2014-11-27  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/63704
+       * alias.c (mems_in_disjoint_alias_sets_p): Remove assert
+       and instead return false when !fstrict-aliasing.
+
+2015-01-15  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * expr.c (expand_expr_real_1) <normal_inner_ref>: Use the expression to
+       set the memory attributes in all cases but clear MEM_EXPR if need be.
+
+2015-01-14  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-01-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/64513
+       * config/i386/i386.c (ix86_expand_prologue): Add
+       REG_FRAME_RELATED_EXPR to %rax and %r10 pushes.
+
+       2015-01-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/64286
+       * ree.c (combine_reaching_defs): Move part of comment earlier,
+       remove !SCALAR_INT_MODE_P check.
+       (add_removable_extension): Don't add vector mode
+       extensions if all uses of the source register aren't the same
+       vector extensions.
+
+       2015-01-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/64563
+       * tree-vrp.c (vrp_evaluate_conditional): Check for VR_RANGE
+       instead of != VR_VARYING.
+
+2015-01-14  Marek Polacek  <polacek@redhat.com>
+
+       Backport from mainline
+       2015-01-13  Marek Polacek  <polacek@redhat.com>
+
+       PR middle-end/64391
+       * trans-mem.c (get_attrs_for): Return NULL_TREE if X is NULL_TREE.
+
+2015-01-13  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR c++/54442
+       * tree.c (build_qualified_type): Use a canonical type for
+       TYPE_CANONICAL.
+
+2015-01-13  Pat Haugen  <pthaugen@us.ibm.com>
+
+       Backport from mainline
+       2014-12-20  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/64358
+       * config/rs6000/rs6000.c (rs6000_split_logical_inner): Swap the
+       input operands if only the second is inverted.
+       * config/rs6000/rs6000.md (*boolc<mode>3_internal1 for BOOL_128):
+       Swap BOOL_REGS_OP1 and BOOL_REGS_OP2.  Correct arguments to
+       rs6000_split_logical.
+       (*boolc<mode>3_internal2 for TI2): Swap operands[1] and operands[2].
+
+2015-01-13  Renlin Li  <renlin.li@arm.com>
+
+       Backport from mainline:
+       2014-11-19 Renlin Li <renlin.li@arm.com>
+
+       PR target/63424
+       * config/aarch64/aarch64-simd.md (<su><maxmin>v2di3): New.
+
+2015-01-13  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport form mainline
+       2015-01-13  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/64479
+       * rtlanal.c (set_reg_p): Handle SEQUENCE constructs.
+
+2015-01-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/64536
+       * cfgrtl.c (rtl_tidy_fallthru_edge): Handle removal of degenerate
+       tablejumps.
+
+2015-01-09  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline:
+       2015-01-06  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/64505
+       * config/rs6000/rs6000.c (rs6000_secondary_reload): Return the
+       correct reload handler if -m32 -mpowerpc64 is used.
+
+2015-01-09  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       Backport from mainline:
+       2015-01-09  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       * config/rs6000/rtems.h (CPP_OS_RTEMS_SPEC): Define __PPC_CPU_E6500__
+       for -mcpu=e6500.
+       * config/rs6000/t-rtems: Add e6500 multilibs.
+
+2015-01-09  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       Backport from mainline:
+       2015-01-09  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       * config/rs6000/t-rtems: Add -mno-spe to soft-float multilib for
+       MPC8540.
+
+2015-01-09  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       Backport from mainline:
+       2015-01-09  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       * config/rs6000/t-rtems: Use MULTILIB_REQUIRED instead of
+       MULTILIB_EXCEPTIONS.
+
+2015-01-09  Renlin Li  <renlin.li@arm.com>
+
+       Backport from mainline:
+       2014-08-12 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+
+       PR target/61413
+       * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Fix definition
+       of __ARM_SIZEOF_WCHAR_T.
+
+2015-01-08  Christian Bruel  <christian.bruel@st.com>
+
+       PR target/64507
+       * config/sh/sh-mem.cc (sh_expand_cmpnstr): Check 0 length.
+
+2015-01-03  John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/pa/pa.md (decrement_and_branch_until_zero): Use `Q' constraint
+       instead of `m' constraint.  Likewise for unnamed movb comparison
+       patterns using reg_before_reload_operand predicate.
+       * config/pa/predicates.md (reg_before_reload_operand): Tighten
+       predicate to reject register index and LO_SUM DLT memory forms
+       after reload.
+
+2014-12-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline:
+       2014-12-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/64409
+       * config/i386/i386.c (ix86_function_type_abi): Issue an error
+       when ms_abi attribute is used with x32.
+
+2014-12-27  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/mmx.md (*vec_extractv2sf_1): Do not emit unpckhps.
+       Emit movshdup for SSE3 and shufps otherwise.
+       (*vec_extractv2si_1): Do not emit punpckhdq and unpckhps.
+       Emit pshufd for SSE2 and shufps otherwise.
+
+2014-12-24  Nick Clifton  <nickc@redhat.com>
+
+       Backport from mainline:
+       2014-06-13  Nick Clifton  <nickc@redhat.com>
+
+       * config/rx/rx.h (JUMP_ALIGN): Return the log value if user
+       requested alignment is active.
+       (LABEL_ALIGN): Likewise.
+       (LOOP_ALIGN): Likewise.
+
+       2014-03-25  Nick Clifton  <nickc@redhat.com>
+
+       * config/rx/rx.c (rx_print_operand): Allow R operator to accept
+       SImode values.
+
+2014-12-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+       Backport from mainline
+       2014-12-03  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+       PR rtl-optimization/64010
+       * reload.c (push_reload): Before reusing a register contained
+       in an operand as input reload register, ensure that it is not
+       used in CALL_INSN_FUNCTION_USAGE.
+
+2014-12-15  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/64265
+       * tsan.c (instrument_func_entry): Insert __tsan_func_entry
+       call on edge from entry block to single succ instead
+       of after labels of single succ of entry block.
+
+2014-12-14  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backported from mainline
+       2014-12-14  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/64037
+       * combine.c (setup_incoming_promotions): Pass the argument
+       before any promotions happen to promote_function_mode.
+
+2014-12-14  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backported from mainline
+       2014-12-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/64200
+       * config/i386/i386.c (decide_alg): Don't assert "alg != libcall"
+       for TARGET_INLINE_STRINGOPS_DYNAMICALLY.
+
+2014-12-13  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-12-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/64269
+       * tree-ssa-forwprop.c (simplify_builtin_call): Bail out if
+       len2 or diff are too large.
+
+2014-12-11  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * doc/md.texi (Insn Lengths): Fix description of (pc).
+
+2014-12-11  Renlin Li  <renlin.li@arm.com>
+
+       Backport from mainline
+       2014-12-11  Renlin Li  <renlin.li@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_parse_cpu): Don't define
+       selected_tune.
+       (aarch64_override_options): Use selected_cpu's tuning.
+
+2014-12-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2014-09-02  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/rs6000-builtin.def (XVCVSXDDP_SCALE):  New
+       built-in definition.
+       (XVCVUXDDP_SCALE): Likewise.
+       (XVCVDPSXDS_SCALE): Likewise.
+       (XVCVDPUXDS_SCALE): Likewise.
+       * config/rs6000/rs6000-c.c (altivec_overloaded_builtins):  Add
+       entries for VSX_BUILTIN_XVCVSXDDP_SCALE,
+       VSX_BUILTIN_XVCVUXDDP_SCALE, VSX_BUILTIN_XVCVDPSXDS_SCALE, and
+       VSX_BUILTIN_XVCVDPUXDS_SCALE.
+       * config/rs6000/rs6000-protos.h (rs6000_scale_v2df): New
+       prototype.
+       * config/rs6000/rs6000.c (real.h): New include.
+       (rs6000_scale_v2df): New function.
+       * config/rs6000/vsx.md (UNSPEC_VSX_XVCVSXDDP): New unspec.
+       (UNSPEC_VSX_XVCVUXDDP): Likewise.
+       (UNSPEC_VSX_XVCVDPSXDS): Likewise.
+       (UNSPEC_VSX_XVCVDPUXDS): Likewise.
+       (vsx_xvcvsxddp_scale): New define_expand.
+       (vsx_xvcvsxddp): New define_insn.
+       (vsx_xvcvuxddp_scale): New define_expand.
+       (vsx_xvcvuxddp): New define_insn.
+       (vsx_xvcvdpsxds_scale): New define_expand.
+       (vsx_xvcvdpsxds): New define_insn.
+       (vsx_xvcvdpuxds_scale): New define_expand.
+       (vsx_xvcvdpuxds): New define_insn.
+       * doc/extend.texi (vec_ctf): Add new prototypes.
+       (vec_cts): Likewise.
+       (vec_ctu): Likewise.
+       (vec_splat): Likewise.
+       (vec_div): Likewise.
+       (vec_mul): Likewise.
+
+       Backport from mainline
+       2014-08-28  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/altivec.h (vec_xl): New #define.
+       (vec_xst): Likewise.
+       * config/rs6000/rs6000-builtin.def (XXSPLTD_V2DF): New built-in.
+       (XXSPLTD_V2DI): Likewise.
+       (DIV_V2DI): Likewise.
+       (UDIV_V2DI): Likewise.
+       (MUL_V2DI): Likewise.
+       * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add
+       entries for VSX_BUILTIN_XVRDPI, VSX_BUILTIN_DIV_V2DI,
+       VSX_BUILTIN_UDIV_V2DI, VSX_BUILTIN_MUL_V2DI,
+       VSX_BUILTIN_XXSPLTD_V2DF, and VSX_BUILTIN_XXSPLTD_V2DI).
+       * config/rs6000/vsx.md (UNSPEC_VSX_XXSPLTD): New unspec.
+       (UNSPEC_VSX_DIVSD): Likewise.
+       (UNSPEC_VSX_DIVUD): Likewise.
+       (UNSPEC_VSX_MULSD): Likewise.
+       (vsx_mul_v2di): New insn-and-split.
+       (vsx_div_v2di): Likewise.
+       (vsx_udiv_v2di): Likewise.
+       (vsx_xxspltd_<mode>): New insn.
+
+       Backport from mainline
+       2014-08-20  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/altivec.h (vec_cpsgn): New #define.
+       (vec_mergee): Likewise.
+       (vec_mergeo): Likewise.
+       (vec_cntlz): Likewise.
+       * config/rs600/rs6000-c.c (altivec_overloaded_builtins): Add new
+       entries for VEC_AND, VEC_ANDC, VEC_MERGEH, VEC_MERGEL, VEC_NOR,
+       VEC_OR, VEC_PACKSU, VEC_XOR, VEC_PERM, VEC_SEL, VEC_VCMPGT_P,
+       VMRGEW, and VMRGOW.
+       * doc/extend.texi: Document various forms of vec_cpsgn,
+       vec_splats, vec_and, vec_andc, vec_mergeh, vec_mergel, vec_nor,
+       vec_or, vec_perm, vec_sel, vec_sub, vec_xor, vec_all_eq,
+       vec_all_ge, vec_all_gt, vec_all_le, vec_all_lt, vec_all_ne,
+       vec_any_eq, vec_any_ge, vec_any_gt, vec_any_le, vec_any_lt,
+       vec_any_ne, vec_mergee, vec_mergeo, vec_packsu, and vec_cntlz.
+
+       Backport from mainline
+       2014-07-20  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/altivec.md (unspec enum):  Fix typo in UNSPEC_VSLDOI.
+       (altivec_vsldoi_<mode>): Likewise.
+
+
+2014-12-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/62021
+       * omp-low.c (simd_clone_adjust_return_type): Use
+       vector of pointer_sized_int_node types instead vector of pointer
+       types.
+       (simd_clone_adjust_argument_types): Likewise.
+
+2014-12-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline:
+       2014-12-09  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR middle-end/64225
+       * tree-ssa-reassoc.c (acceptable_pow_call): Disable transformation
+       for BUILT_IN_POW when flag_errno_math is present.
+
+2014-12-10  Marek Polacek  <polacek@redhat.com>
+
+       Backport from mainline
+       2014-12-10  Marek Polacek  <polacek@redhat.com>
+
+       PR tree-optimization/61686
+       * tree-ssa-reassoc.c (range_entry_cmp): Use q->high instead of
+       p->high.
+
+2014-12-09  David Edelsohn  <dje.gcc@gmail.com>
+
+       Backport from mainline
+       2014-12-05  David Edelsohn  <dje.gcc@gmail.com>
+
+       * config/rs6000/xcoff.h (ASM_OUTPUT_ALIGNED_LOCAL): Append
+       alignment to section name. Increase default alignment to
+       word.
+
+2014-12-09  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR bootstrap/64213
+       Revert:
+       2014-11-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/64037
+       * combine.c (setup_incoming_promotions): Pass the argument
+       before any promotions happen to promote_function_mode.
+
+2014-12-09  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/64191
+       * tree-vect-stmts.c (vect_stmt_relevant_p): Clobbers are
+       not relevant (nor are their uses).
+
+2014-12-07  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2014-12-07  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/50751
+       * config/sh/sh.md (extendqihi2): Allow only for TARGET_SH1.
+
+2014-12-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline
+       2014-12-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/64108
+       * config/i386/i386.c (decide_alg): Stop only if there aren't
+       any usable algorithms.
+
+2014-12-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline
+       2014-11-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/64037
+       * combine.c (setup_incoming_promotions): Pass the argument
+       before any promotions happen to promote_function_mode.
+
+2014-12-04  Tobias Burnus  <burnus@net-b.de>
+
+       * configure.ac
+       (ac_has_isl_schedule_constraints_compute_schedule):
+       New check.
+       * graphite-clast-to-gimple.c: For ISL 0.14, include deprecate headers.
+       * graphite-interchange.c: Ditto.
+       * graphite-poly.c: Ditto.
+       * graphite-sese-to-poly.c: Ditto.
+       * graphite-optimize-isl.c (getScheduleForBandList): Ditto.
+       Conditionally use ISL 0.13+ functions.
+       * config.in: Regenerate.
+       * configure: Regenerate.
+
+2014-12-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/56493
+       * convert.c (convert_to_real, convert_to_expr, convert_to_complex):
+       Handle COMPOUND_EXPR.
+
+2014-12-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/59708
+       * expmed.c (expand_widening_mult): Return const0_rtx if
+       coeff is 0.
+
+2014-12-03  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/64153
+       * ipa-inline-analysis.c (evaluate_conditions_for_known_args): Check
+       type sizes before view_converting.
+
+2014-12-03  Shanyao Chen  <chenshanyao@huawei.com>
+
+       Backport from mainline
+       2014-11-20  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+       PR target/59593
+       * config/arm/arm.md (*movhi_insn): Use right formatting
+       for immediate.
+
+       2014-11-19  Felix Yang  <felix.yang@huawei.com>
+                   Shanyao Chen  <chenshanyao@huawei.com>
+
+       PR target/59593
+       * config/arm/arm.md (define_attr "arch"): Add v6t2.
+       (define_attr "arch_enabled"): Add test for the above.
+       (*movhi_insn_arch4): Add new alternative.
+
+2014-12-03  Renlin Li  <Renlin.Li@arm.com>
+
+       Backported from mainline
+       2014-12-03  Renlin Li  <Renlin.Li@arm.com>
+
+       PR middle-end/63762
+       PR target/63661
+       * ira.c (ira): Update preferred class.
+
+2014-12-02  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/64113
+       * config/alpha/alpha.md (call_value_osf_tlsgd): Do not split insn
+       using post-reload splitter.  Use peephole2 pass instead.
+       (call_value_osf_tlsldm): Ditto.
+       (TLS_CALL): New int iterator.
+       (tls): New int attribute.
+       (call_value_osf_<tls>): Merge insn pattern from call_value_osf_tlsgd
+       and call_value_tlsldm using TLS_CALL int iterator.
+
+2014-12-02  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+       PR target/64115
+       * config/rs6000/rs6000.c (rs6000_delegitimize_address): Remove
+       invalid UNSPEC_TOCREL sanity check under ENABLE_CHECKING.
+
+2014-12-01  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/64111
+       * tree.c (int_cst_hash_hash): Use TYPE_UID instead of
+       htab_hash_pointer to not break PCH.
+
+2014-12-01  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/63551
+       * ipa-inline-analysis.c (evaluate_conditions_for_known_args): Convert
+       value of the argument to the type of the value in the condition.
+
+2014-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-11-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/64067
+       * expr.c (expand_expr_addr_expr_1) <case COMPOUND_LITERAL_EXPR>:
+       Handle it by returning address of COMPOUND_LITERAL_EXPR_DECL
+       not only if modifier is EXPAND_INITIALIZER, but whenever
+       COMPOUND_LITERAL_EXPR_DECL is non-NULL and TREE_STATIC.
+
+       2014-11-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/63915
+       * tree-vect-stmts.c (vectorizable_simd_clone_call): Pass
+       true instead of false as last argument to gsi_replace.
+
+       PR sanitizer/63913
+       * ubsan.c: Include tree-eh.h.
+       (instrument_bool_enum_load): Handle loads that can throw.
+
+       2014-10-31  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/63659
+       * ree.c (update_reg_equal_equiv_notes): New function.
+       (combine_set_extension, transform_ifelse): Use it.
+
+2014-11-28  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+       Backport from mainline.
+       2014-11-28  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+       * config/arm/t-aprofile (MULTILIB_MATCHES): New entry for
+       -march=armv8-a+crc.
+
+2014-11-26  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/63738
+       * tree-data-ref.c (split_constant_offset_1): Do not follow
+       SSA edges for SSA names with SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
+
+2014-11-26  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-11-26  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/62238
+       * tree-predcom.c (ref_at_iteration): Unshare the expression
+       before gimplifying it.
+
+       2014-11-25  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/61927
+       * tree-vect-loop.c (vect_analyze_loop_2): Revert ordering
+       of group and pattern analysis to the one in GCC 4.8.
+
+       2014-11-07  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/63605
+       * fold-const.c (fold_binary_loc): Properly use element_precision
+       for types that may not be scalar.
+
+       2014-10-28  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/63665
+       * fold-const.c (fold_comparison): Properly guard simplifying
+       against INT_MAX/INT_MIN with !TYPE_OVERFLOW_WRAPS.
+
+2014-11-25  Rohit  <rohitarulraj@freescale.com>
+
+       PR bootstrap/63703
+       * config/rs6000/darwin.h (REGISTER_NAMES): Update based on 32 newly
+       added GCC hard register numbers for SPE high registers.
+
+2014-11-23  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2014-11-23  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/53976
+       * config/sh/sh_optimize_sett_clrt.cc
+       (sh_optimize_sett_clrt::find_last_ccreg_values): Return bool instead
+       of void.  Abort at complex edges.
+       (sh_optimize_sett_clrt::execute): Do nothing if find_last_ccreg_values
+       returned false.
+
+2014-11-22  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2014-11-22  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/63783
+       PR target/51244
+       * config/sh/sh_treg_combine.cc (sh_treg_combine::make_not_reg_insn):
+       Do not emit bitwise not insn.  Emit logical not insn sequence instead.
+       Adjust related comments throughout the file.
+
+2014-11-22  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2014-11-20  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR target/60111
+       * config/sh/sh.c: Use signed char for signed field.
+
+2014-11-21  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR target/63673
+       * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Allow
+       the base pointer of vec_vsx_ld and vec_vsx_st to take a pointer to
+       double.
+
+2014-11-21  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/61750
+       * tree-ssa-forwprop.c (simplify_vce): Verify type sizes
+       match for the resulting VIEW_CONVERT_EXPR.
+
+2014-11-19  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/63947
+       * config/i386/i386.c (put_condition_code) <case LTU, case GEU>:
+       Output "b" and "nb" suffix for FP mode.
+
+2014-11-19  Tom de Vries  <tom@codesourcery.com>
+
+       Backport from mainline
+       PR tree-optimization/62167
+       * tree-ssa-tail-merge.c (stmt_local_def): Handle statements with vuse
+       conservatively.
+       (gimple_equal_p): Don't use vn_valueize to compare for lhs equality of
+       assigns.
+
+2014-11-16  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * doc/tm.texi.in (TARGET_FLAGS_REGNUM): Move around.
+       * doc/tm.texi: Regenerate.
+
+2014-11-14  Felix Yang  <felix.yang@huawei.com>
+
+       Backport from mainline
+       2014-11-14  Felix Yang  <felix.yang@huawei.com>
+                   Jiji Jiang  <jiangjiji@huawei.com>
+
+       * config/aarch64/aarch64-simd.md (*aarch64_simd_ld1r<mode>): Use
+       VALL mode iterator instead of VALLDI.
+
+2014-11-13  Teresa Johnson  <tejohnson@google.com>
+
+       PR tree-optimization/63841
+       * tree-ssa-strlen.c (strlen_optimize_stmt): Ignore clobbers.
+
+2014-11-13  Christophe Lyon  <christophe.lyon@linaro.org>
+
+       Backport from mainline
+       2014-11-02  Michael Collison  <michael.collison@linaro.org>
+
+       * config/arm/arm.h (CLZ_DEFINED_VALUE_AT_ZERO) : Update
+       to support vector modes.
+       (CTZ_DEFINED_VALUE_AT_ZERO): Ditto.
+
+2014-11-13  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * doc/tm.texi.in (SELECT_CC_MODE): Update example.
+       (REVERSIBLE_CC_MODE): Fix example.
+       (REVERSE_CONDITION): Fix typo.
+       * doc/tm.texi: Regenerate.
+
+2014-11-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR ipa/63838
+       * ipa-pure-const.c (propagate_nothrow): Walk w->indirect_calls
+       chain instead of node->indirect_calls.
+
+2014-11-11  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR target/61535
+       * config/sparc/sparc.c (function_arg_vector_value): Deal with vectors
+       smaller than 8 bytes.
+       (sparc_function_arg_1): Tweak.
+       (sparc_function_value_1): Tweak.
+
+2014-11-08  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/arm/arm.c (arm_set_return_address): Mark the store as frame
+       related, if any.
+       (thumb_set_return_address): Likewise.
+
+2014-11-07  Daniel Hellstrom  <daniel@gaisler.com>
+
+       * config.gcc (sparc-*-rtems*): Clean away unused t-elf.
+       * config/sparc/t-rtems: Add leon3v7 and muser-mode multilibs.
+
+2014-11-07  Marek Polacek  <polacek@redhat.com>
+
+       Backported from mainline
+       2014-10-23  Marek Polacek  <polacek@redhat.com>
+
+       * c-ubsan.c (ubsan_instrument_shift): Perform the MINUS_EXPR
+       in unsigned type.
+
+2014-11-06  John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/pa/pa.md (trap): New insn.  Add "trap" to attribute type.
+       Don't allow trap insn in in_branch_delay, in_nullified_branch_delay
+       or in_call_delay.
+
+2014-11-06  Daniel Hellstrom  <daniel@gaisler.com>
+
+       * config.gcc (sparc*-*-*): Accept mcpu=leon3v7 processor.
+       * doc/invoke.texi (SPARC options): Add mcpu=leon3v7 comment.
+       * config/sparc/leon.md (leon3_load, leon_store, leon_fp_*): Handle
+       leon3v7 as leon3.
+       * config/sparc/sparc-opts.h (enum processor_type): Add LEON3V7.
+       * config/sparc/sparc.c (sparc_option_override): Add leon3v7 support.
+       * config/sparc/sparc.h (TARGET_CPU_leon3v7): New define.
+       * config/sparc/sparc.md (cpu): Add leon3v7.
+       * config/sparc/sparc.opt (enum processor_type): Add leon3v7.
+
+2014-11-05  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/63538
+       * config/i386/i386.c (in_large_data_p): Reject automatic variables.
+       (ix86_encode_section_info): Do not check for non-automatic varibles
+       when setting SYMBOL_FLAG_FAR_ADDR flag.
+       (x86_64_elf_select_section): Do not check ix86_cmodel here.
+       (x86_64_elf_unique_section): Ditto.
+       (x86_elf_aligned_common): Emit tab before .largecomm.
+
+2014-11-05  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline:
+       2014-10-20  Uros Bizjak  <ubizjak@gmail.com>
+
+       * varasm.c (const_alias_set): Remove.
+       (init_varasm_once): Remove initialization of const_alias_set.
+       (build_constant_desc): Do not set alias set to const_alias_set.
+
+       Backport from mainline:
+       2014-10-14  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR rtl-optimization/63475
+       * alias.c (true_dependence_1): Always use get_addr to extract
+       true address operands from x_addr and mem_addr.  Use extracted
+       address operands to check for references with alignment ANDs.
+       Use extracted address operands with find_base_term and
+       base_alias_check. For noncanonicalized operands call canon_rtx with
+       extracted address operand.
+       (write_dependence_1): Ditto.
+       (may_alias_p): Ditto.  Remove unused calls to canon_rtx.
+
+       Backport from mainline:
+       2014-10-10  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR rtl-optimization/63483
+       * alias.c (true_dependence_1): Do not exit early for MEM_READONLY_P
+       references when alignment ANDs are involved.
+       (write_dependence_p): Ditto.
+       (may_alias_p): Ditto.
+
+2014-10-31  DJ Delorie  <dj@redhat.com>
+
+       * expmed.c (strict_volatile_bitfield_p): Fix off-by-one error.
+
+2014-10-31  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/aarch64/aarch64-elf-raw.h (CA53_ERR_835769_SPEC): Define.
+       (LINK_SPEC): Include CA53_ERR_835769_SPEC.
+       * config/aarch64/aarch64-linux.h (CA53_ERR_835769_SPEC): Define.
+       (LINK_SPEC): Include CA53_ERR_835769_SPEC.
+
+2014-10-31  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/63697
+       * tree-vrp.c (simplify_internal_call_using_ranges): For subcode ==
+       MINUS_EXPR, check overflow on vr0.min - vr1.max and vr0.max - vr1.min
+       instead of vr0.min - vr1.min and vr0.max - vr1.max.
+
+2014-10-30  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR63633
+       * config/avr/avr-protos.h (regmask): New inline function.
+       (avr_fix_inputs, avr_emit3_fix_outputs): New protos.
+       * config/avr/avr.c (avr_fix_operands, avr_move_fixed_operands)
+       (avr_fix_inputs, avr_emit3_fix_outputs): New functions.
+       * config/avr/avr-fixed.md (mulqq3_nomul, muluqq3_nomul)
+       (mul<ALL2QA>3, mul<ALL4A>3, <usdiv><ALL1Q>3, <usdiv><ALL2QA>3)
+       (<usdiv><ALL4A>3, round<ALL124QA>3): Fix input operands.
+       * config/avr/avr-dimode.md (add<ALL8>3, sub<ALL8>3)
+       (<ss_addsub><ALL8S>3, <us_addsub><ALL8U>3, cbranch<ALL8>4)
+       (<di_shifts><ALL8>3, <any_extend>mulsidi3): Fix input operands.
+       * config/avr/avr.md (mulqi3_call, mulhi3_call, mulsi3, mulpsi3)
+       (mulu<QIHI>si3, muls<QIHI>si3, mulohisi3, <any_extend>mulhisi3)
+       (usmulhisi3, <any_extend>mulhi3_highpart, mulsqipsi3)
+       (fmul, fmuls, fmulsu): Fix operands.  Turn insn into expander as
+       needed.
+
+2014-10-30  Jakub Jelinek  <jakub@redhat.com>
+
+       * BASE-VER: Set to 4.9.3.
+       * DEV-PHASE: Set to prerelease.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
        Backport from mainline
        2014-06-24  Max Ostapenko  <m.ostapenko@partner.samsung.com>
 
-       * asan.c (instrument_strlen_call): Do not instrument first byte in strlen
-       if already instrumented.
+       * asan.c (instrument_strlen_call): Do not instrument first byte in
+       strlen if already instrumented.
 
 2014-10-16  Yury Gribov  <y.gribov@samsung.com>
 
 
        Backport from mainline
        2014-10-10  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
-                   Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+                   Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
        * config/aarch64/aarch64.h (FINAL_PRESCAN_INSN): Define.
        (ADJUST_INSN_LENGTH): Define.
        * cgraphunit.c: (analyze_function): Remove forward declaration,
        rename to cgraph_analyze_function, made external.
        * cgraphclones.c (duplicate_thunk_for_node): Copy arguments of the
-        new decl properly.  Analyze the new thunk if it is expanded.
+       new decl properly.  Analyze the new thunk if it is expanded.
 
 2014-09-11  H.J. Lu  <hongjiu.lu@intel.com>
 
        Backport from mainline
        2014-08-27  Kaz Kojima  <kkojima@gcc.gnu.org>
 
-        PR target/62261
-        * config/sh/sh.md (ashlsi3): Handle negative shift count for
+       PR target/62261
+       * config/sh/sh.md (ashlsi3): Handle negative shift count for
        TARGET_SHMEDIA.
        (ashldi3, ashrsi3, ashrdi3, lshrsi3, lshrdi3): Likewise.
 
 2014-08-12  Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
 
        Backport from mainline
-       2014-08-04  Ganesh Gopalasubramanian 
+       2014-08-04  Ganesh Gopalasubramanian
                    <Ganesh.Gopalasubramanian@amd.com>
 
-       * config/i386/driver-i386.c (host_detect_local_cpu): Handle AMD's extended
-       family information. Handle BTVER2 cpu with cpuid family value.
+       * config/i386/driver-i386.c (host_detect_local_cpu): Handle AMD's
+       extended family information. Handle BTVER2 cpu with cpuid family value.
 
 2014-08-12  Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
 
        Backport from mainline
-       2014-06-16  Ganesh Gopalasubramanian 
+       2014-06-16  Ganesh Gopalasubramanian
                    <Ganesh.Gopalasubramanian@amd.com>
 
        * config/i386/i386.c (ix86_expand_sse2_mulvxdi3): Issue
 
 2014-07-24  Kyle McMartin  <kyle@redhat.com>
 
-        * config/aarch64/aarch64-linux.h (TARGET_ASM_FILE_END): Define.
+       * config/aarch64/aarch64-linux.h (TARGET_ASM_FILE_END): Define.
 
 2014-07-24  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
 
        * omp-low.c (create_omp_child_function): Don't set DECL_NAMELESS
        on the FUNCTION_DECL.
 
-       * BASE-VER: Set to 4.9.1.
+       * BASE-VER: Set to 4.9.2.
        * DEV-PHASE: Set to prerelease.
 
 2014-07-16  Release Manager
        Backport from mainline
 
        2014-06-20  Julian Brown  <julian@codesourcery.com>
-                   Chung-Lin Tang  <cltang@codesourcery.com>
+                   Chung-Lin Tang  <cltang@codesourcery.com>
 
        * config/arm/arm.c (arm_output_mi_thunk): Fix offset for
        TARGET_THUMB1_ONLY. Add comments.
 
        PR tree-optimization/61289
        * tree-ssa-threadedge.c (invalidate_equivalences): Remove SRC_MAP and
-       DST_MAP parameters.   Invalidate by walking all the SSA_NAME_VALUES
+       DST_MAP parameters.  Invalidate by walking all the SSA_NAME_VALUES
        looking for those which match LHS.  All callers changed.
        (record_temporary_equivalences_from_phis): Remove SRC_MAP and DST_MAP
        parameters and code which manipulated them.  All callers changed.
        * tree-ssa-propagate.c (valid_gimple_rhs_p): Only allow effective
        boolean results for comparisons.
 
-2014-04-22   Richard Biener  <rguenther@suse.de>
+2014-04-22  Richard Biener  <rguenther@suse.de>
 
        Backport from mainline
-       2014-04-17   Richard Biener  <rguenther@suse.de>
+       2014-04-17  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/60841
        * tree-vect-data-refs.c (vect_analyze_data_refs): Count stmts.
        PR ipa/60306
 
        Revert:
-       2013-12-14   Jan Hubicka  <jh@suse.cz>
+       2013-12-14  Jan Hubicka  <jh@suse.cz>
        PR middle-end/58477
        * ipa-prop.c (stmt_may_be_vtbl_ptr_store): Skip clobbers.
 
        * Makefile.in: Add vec.o to OBJS-libcommon
 
 2014-01-23  Kirill Yukhin  <kirill.yukhin@intel.com>
-           Ilya Tocar     <ilya.tocar@intel.com>
+           Ilya Tocar  <ilya.tocar@intel.com>
 
        * config/i386/avx512fintrin.h (_mm512_kmov): New.
        * config/i386/i386.c (IX86_BUILTIN_KMOV16): Ditto.
index bc560ac..1ae7d93 100644 (file)
@@ -1 +1 @@
-20141030
+20150626
index de30982..7275025 100644 (file)
@@ -1,3 +1,46 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-03-16  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/utils2.c (gnat_invariant_expr): Return null if the type
+       of the expression ends up being composite.
+
+2015-02-08  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/decl.c (is_cplusplus_method): Use Is_Primitive flag to
+       detect primitive operations of tagged and untagged types.
+
+2015-01-05  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR ada/64492
+       * gcc-interface/Makefile.in (../stamp-tools): Reinstate dropped code.
+
+2014-11-24  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/trans.c (push_range_check_info): Replace early test
+       with assertion.
+       (Raise_Error_to_gnu): Do not call push_range_check_info if the loop
+       stack is empty.
+       * gcc-interface/utils.c (convert_to_fat_pointer): Fix formatting.
+       * gcc-interface/utils2.c (gnat_invariant_expr): Deal with padded types
+       and revert latest change.
+
+2014-11-22  Eric Botcazou  <ebotcazou@adacore.com>
+
+       Backport from mainline
+       2014-11-20  Vincent Celier  <celier@adacore.com>
+
+       PR ada/47500
+       * back_end.adb (Scan_Back_End_Switches): Skip switch -G and
+       its argument.
+
+2014-11-11  Simon Wright  <simon@pushface.org>
+
+       PR ada/42978
+       * mlib-utl.adb (ar): Output the options passed to ranlib.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index bb442ad..53146c8 100644 (file)
@@ -210,9 +210,10 @@ package body Back_End is
          Last  : constant Natural  := Switch_Last (Switch_Chars);
 
       begin
-         --  Skip -o or internal GCC switches together with their argument
+         --  Skip -o, -G or internal GCC switches together with their argument.
 
          if Switch_Chars (First .. Last) = "o"
+           or else Switch_Chars (First .. Last) = "G"
            or else Is_Internal_GCC_Switch (Switch_Chars)
          then
             Next_Arg := Next_Arg + 1;
index 5c36962..e2cc4a9 100644 (file)
@@ -2510,9 +2510,16 @@ GCC_LINK=$(CXX) $(GCC_LINK_FLAGS) $(ADA_INCLUDES) $(LDFLAGS)
 # Build directory for the tools. Let's copy the target-dependent
 # sources using the same mechanism as for gnatlib. The other sources are
 # accessed using the vpath directive below
-# Note: dummy target, stamp-tools is mainly handled by gnattools.
 
 ../stamp-tools:
+       -$(RM) tools/*
+       -$(RMDIR) tools
+       -$(MKDIR) tools
+       -(cd tools; $(LN_S) ../sdefault.adb ../snames.ads ../snames.adb .)
+       -$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
+                 $(RM) tools/$(word 1,$(subst <, ,$(PAIR)));\
+                 $(LN_S) $(fsrcpfx)ada/$(word 2,$(subst <, ,$(PAIR))) \
+                       tools/$(word 1,$(subst <, ,$(PAIR)));)
        touch ../stamp-tools
 
 # when compiling the tools, the runtime has to be first on the path so that
index 95bc778..0f62af7 100644 (file)
@@ -5510,16 +5510,17 @@ is_cplusplus_method (Entity_Id gnat_entity)
   if (Convention (gnat_entity) != Convention_CPP)
     return false;
 
-  /* This is the main case: C++ method imported as a primitive operation.  */
-  if (Is_Dispatching_Operation (gnat_entity))
+  /* This is the main case: C++ method imported as a primitive operation.
+     Note that a C++ class with no virtual functions can be imported as a
+     limited record type so the operation is not necessarily dispatching.  */
+  if (Is_Primitive (gnat_entity))
     return true;
 
   /* A thunk needs to be handled like its associated primitive operation.  */
   if (Is_Subprogram (gnat_entity) && Is_Thunk (gnat_entity))
     return true;
 
-  /* C++ classes with no virtual functions can be imported as limited
-     record types, but we need to return true for the constructors.  */
+  /* A constructor is a method on the C++ side.  */
   if (Is_Constructor (gnat_entity))
     return true;
 
index 03bf098..30a1666 100644 (file)
@@ -2424,9 +2424,6 @@ push_range_check_info (tree var)
   struct loop_info_d *iter = NULL;
   unsigned int i;
 
-  if (vec_safe_is_empty (gnu_loop_stack))
-    return NULL;
-
   var = remove_conversions (var, false);
 
   if (TREE_CODE (var) != VAR_DECL)
@@ -2435,6 +2432,8 @@ push_range_check_info (tree var)
   if (decl_function_context (var) != current_function_decl)
     return NULL;
 
+  gcc_assert (vec_safe_length (gnu_loop_stack) > 0);
+
   for (i = vec_safe_length (gnu_loop_stack) - 1;
        vec_safe_iterate (gnu_loop_stack, i, &iter);
        i--)
@@ -5165,6 +5164,7 @@ Raise_Error_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p)
             the original checks reinstated, and a run time selection.
             The former loop will be suitable for vectorization.  */
          if (flag_unswitch_loops
+             && !vec_safe_is_empty (gnu_loop_stack)
              && (!gnu_low_bound
                  || (gnu_low_bound = gnat_invariant_expr (gnu_low_bound)))
              && (!gnu_high_bound
index 15b7236..820d2ce 100644 (file)
@@ -4371,8 +4371,7 @@ convert_to_fat_pointer (tree type, tree expr)
        {
          /* The template type can still be dummy at this point so we build an
             empty constructor.  The middle-end will fill it in with zeros.  */
-         t = build_constructor (template_type,
-                                NULL);
+         t = build_constructor (template_type, NULL);
          TREE_CONSTANT (t) = TREE_STATIC (t) = 1;
          null_bounds = build_unary_op (ADDR_EXPR, NULL_TREE, t);
          SET_TYPE_NULL_BOUNDS (ptr_template_type, null_bounds);
index dd4151b..e17cae3 100644 (file)
@@ -2784,7 +2784,19 @@ gnat_invariant_expr (tree expr)
          || (TREE_CODE (expr) == VAR_DECL && TREE_READONLY (expr)))
         && decl_function_context (expr) == current_function_decl
         && DECL_INITIAL (expr))
-    expr = remove_conversions (DECL_INITIAL (expr), false);
+    {
+      expr = DECL_INITIAL (expr);
+      /* Look into CONSTRUCTORs built to initialize padded types.  */
+      if (TYPE_IS_PADDING_P (TREE_TYPE (expr)))
+       expr = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (expr))), expr);
+      expr = remove_conversions (expr, false);
+    }
+
+  /* We are only interested in scalar types at the moment and, even if we may
+     have gone through padding types in the above loop, we must be back to a
+     scalar value at this point.  */
+  if (AGGREGATE_TYPE_P (TREE_TYPE (expr)))
+    return NULL_TREE;
 
   if (TREE_CONSTANT (expr))
     return fold_convert (type, expr);
@@ -2840,7 +2852,7 @@ object:
   if (!TREE_READONLY (t))
     return NULL_TREE;
 
-  if (TREE_CODE (t) == CONSTRUCTOR || TREE_CODE (t) == PARM_DECL)
+  if (TREE_CODE (t) == PARM_DECL)
     return fold_convert (type, expr);
 
   if (TREE_CODE (t) == VAR_DECL
index 756add1..7e2d56b 100644 (file)
@@ -282,6 +282,10 @@ package body MLib.Utl is
          if not Opt.Quiet_Output then
             Write_Str  (Ranlib_Name.all);
             Write_Char (' ');
+            for J in Ranlib_Options'Range loop
+               Write_Str  (Ranlib_Options (J).all);
+               Write_Char (' ');
+            end loop;
             Write_Line (Arguments (Ar_Options'Length + 1).all);
          end if;
 
index 434ae7a..9956306 100644 (file)
@@ -383,17 +383,9 @@ get_alias_set_entry (alias_set_type alias_set)
 static inline int
 mems_in_disjoint_alias_sets_p (const_rtx mem1, const_rtx mem2)
 {
-/* Perform a basic sanity check.  Namely, that there are no alias sets
-   if we're not using strict aliasing.  This helps to catch bugs
-   whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or
-   where a MEM is allocated in some way other than by the use of
-   gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared.  If we begin to
-   use alias sets to indicate that spilled registers cannot alias each
-   other, we might need to remove this check.  */
-  gcc_assert (flag_strict_aliasing
-             || (!MEM_ALIAS_SET (mem1) && !MEM_ALIAS_SET (mem2)));
-
-  return ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1), MEM_ALIAS_SET (mem2));
+  return (flag_strict_aliasing
+         && ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1),
+                                     MEM_ALIAS_SET (mem2)));
 }
 
 /* Insert the NODE into the splay tree given by DATA.  Used by
@@ -2517,6 +2509,7 @@ static int
 true_dependence_1 (const_rtx mem, enum machine_mode mem_mode, rtx mem_addr,
                   const_rtx x, rtx x_addr, bool mem_canonicalized)
 {
+  rtx true_mem_addr;
   rtx base;
   int ret;
 
@@ -2536,17 +2529,9 @@ true_dependence_1 (const_rtx mem, enum machine_mode mem_mode, rtx mem_addr,
       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
     return 1;
 
-  /* Read-only memory is by definition never modified, and therefore can't
-     conflict with anything.  We don't expect to find read-only set on MEM,
-     but stupid user tricks can produce them, so don't die.  */
-  if (MEM_READONLY_P (x))
-    return 0;
-
-  /* If we have MEMs referring to different address spaces (which can
-     potentially overlap), we cannot easily tell from the addresses
-     whether the references overlap.  */
-  if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
-    return 1;
+  if (! x_addr)
+    x_addr = XEXP (x, 0);
+  x_addr = get_addr (x_addr);
 
   if (! mem_addr)
     {
@@ -2554,22 +2539,23 @@ true_dependence_1 (const_rtx mem, enum machine_mode mem_mode, rtx mem_addr,
       if (mem_mode == VOIDmode)
        mem_mode = GET_MODE (mem);
     }
+  true_mem_addr = get_addr (mem_addr);
 
-  if (! x_addr)
-    {
-      x_addr = XEXP (x, 0);
-      if (!((GET_CODE (x_addr) == VALUE
-            && GET_CODE (mem_addr) != VALUE
-            && reg_mentioned_p (x_addr, mem_addr))
-           || (GET_CODE (x_addr) != VALUE
-               && GET_CODE (mem_addr) == VALUE
-               && reg_mentioned_p (mem_addr, x_addr))))
-       {
-         x_addr = get_addr (x_addr);
-         if (! mem_canonicalized)
-           mem_addr = get_addr (mem_addr);
-       }
-    }
+  /* Read-only memory is by definition never modified, and therefore can't
+     conflict with anything.  However, don't assume anything when AND
+     addresses are involved and leave to the code below to determine
+     dependence.  We don't expect to find read-only set on MEM, but
+     stupid user tricks can produce them, so don't die.  */
+  if (MEM_READONLY_P (x)
+      && GET_CODE (x_addr) != AND
+      && GET_CODE (true_mem_addr) != AND)
+    return 0;
+
+  /* If we have MEMs referring to different address spaces (which can
+     potentially overlap), we cannot easily tell from the addresses
+     whether the references overlap.  */
+  if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
+    return 1;
 
   base = find_base_term (x_addr);
   if (base && (GET_CODE (base) == LABEL_REF
@@ -2577,14 +2563,14 @@ true_dependence_1 (const_rtx mem, enum machine_mode mem_mode, rtx mem_addr,
                   && CONSTANT_POOL_ADDRESS_P (base))))
     return 0;
 
-  rtx mem_base = find_base_term (mem_addr);
-  if (! base_alias_check (x_addr, base, mem_addr, mem_base,
+  rtx mem_base = find_base_term (true_mem_addr);
+  if (! base_alias_check (x_addr, base, true_mem_addr, mem_base,
                          GET_MODE (x), mem_mode))
     return 0;
 
   x_addr = canon_rtx (x_addr);
   if (!mem_canonicalized)
-    mem_addr = canon_rtx (mem_addr);
+    mem_addr = canon_rtx (true_mem_addr);
 
   if ((ret = memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
                                 SIZE_FOR_MODE (x), x_addr, 0)) != -1)
@@ -2637,6 +2623,7 @@ write_dependence_p (const_rtx mem,
                    bool mem_canonicalized, bool x_canonicalized, bool writep)
 {
   rtx mem_addr;
+  rtx true_mem_addr, true_x_addr;
   rtx base;
   int ret;
 
@@ -2657,8 +2644,20 @@ write_dependence_p (const_rtx mem,
       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
     return 1;
 
-  /* A read from read-only memory can't conflict with read-write memory.  */
-  if (!writep && MEM_READONLY_P (mem))
+  if (!x_addr)
+    x_addr = XEXP (x, 0);
+  true_x_addr = get_addr (x_addr);
+
+  mem_addr = XEXP (mem, 0);
+  true_mem_addr = get_addr (mem_addr);
+
+  /* A read from read-only memory can't conflict with read-write memory.
+     Don't assume anything when AND addresses are involved and leave to
+     the code below to determine dependence.  */
+  if (!writep
+      && MEM_READONLY_P (mem)
+      && GET_CODE (true_x_addr) != AND
+      && GET_CODE (true_mem_addr) != AND)
     return 0;
 
   /* If we have MEMs referring to different address spaces (which can
@@ -2667,24 +2666,7 @@ write_dependence_p (const_rtx mem,
   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
     return 1;
 
-  mem_addr = XEXP (mem, 0);
-  if (!x_addr)
-    {
-      x_addr = XEXP (x, 0);
-      if (!((GET_CODE (x_addr) == VALUE
-            && GET_CODE (mem_addr) != VALUE
-            && reg_mentioned_p (x_addr, mem_addr))
-           || (GET_CODE (x_addr) != VALUE
-               && GET_CODE (mem_addr) == VALUE
-               && reg_mentioned_p (mem_addr, x_addr))))
-       {
-         x_addr = get_addr (x_addr);
-         if (!mem_canonicalized)
-           mem_addr = get_addr (mem_addr);
-       }
-    }
-
-  base = find_base_term (mem_addr);
+  base = find_base_term (true_mem_addr);
   if (! writep
       && base
       && (GET_CODE (base) == LABEL_REF
@@ -2692,18 +2674,18 @@ write_dependence_p (const_rtx mem,
              && CONSTANT_POOL_ADDRESS_P (base))))
     return 0;
 
-  rtx x_base = find_base_term (x_addr);
-  if (! base_alias_check (x_addr, x_base, mem_addr, base, GET_MODE (x),
-                         GET_MODE (mem)))
+  rtx x_base = find_base_term (true_x_addr);
+  if (! base_alias_check (true_x_addr, x_base, true_mem_addr, base,
+                         GET_MODE (x), GET_MODE (mem)))
     return 0;
 
   if (!x_canonicalized)
     {
-      x_addr = canon_rtx (x_addr);
+      x_addr = canon_rtx (true_x_addr);
       x_mode = GET_MODE (x);
     }
   if (!mem_canonicalized)
-    mem_addr = canon_rtx (mem_addr);
+    mem_addr = canon_rtx (true_mem_addr);
 
   if ((ret = memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
                                 GET_MODE_SIZE (x_mode), x_addr, 0)) != -1)
@@ -2771,10 +2753,20 @@ may_alias_p (const_rtx mem, const_rtx x)
       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
     return 1;
 
+  x_addr = XEXP (x, 0);
+  x_addr = get_addr (x_addr);
+
+  mem_addr = XEXP (mem, 0);
+  mem_addr = get_addr (mem_addr);
+
   /* Read-only memory is by definition never modified, and therefore can't
-     conflict with anything.  We don't expect to find read-only set on MEM,
-     but stupid user tricks can produce them, so don't die.  */
-  if (MEM_READONLY_P (x))
+     conflict with anything.  However, don't assume anything when AND
+     addresses are involved and leave to the code below to determine
+     dependence.  We don't expect to find read-only set on MEM, but
+     stupid user tricks can produce them, so don't die.  */
+  if (MEM_READONLY_P (x)
+      && GET_CODE (x_addr) != AND
+      && GET_CODE (mem_addr) != AND)
     return 0;
 
   /* If we have MEMs referring to different address spaces (which can
@@ -2783,28 +2775,12 @@ may_alias_p (const_rtx mem, const_rtx x)
   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
     return 1;
 
-  x_addr = XEXP (x, 0);
-  mem_addr = XEXP (mem, 0);
-  if (!((GET_CODE (x_addr) == VALUE
-        && GET_CODE (mem_addr) != VALUE
-        && reg_mentioned_p (x_addr, mem_addr))
-       || (GET_CODE (x_addr) != VALUE
-           && GET_CODE (mem_addr) == VALUE
-           && reg_mentioned_p (mem_addr, x_addr))))
-    {
-      x_addr = get_addr (x_addr);
-      mem_addr = get_addr (mem_addr);
-    }
-
   rtx x_base = find_base_term (x_addr);
   rtx mem_base = find_base_term (mem_addr);
   if (! base_alias_check (x_addr, x_base, mem_addr, mem_base,
                          GET_MODE (x), GET_MODE (mem_addr)))
     return 0;
 
-  x_addr = canon_rtx (x_addr);
-  mem_addr = canon_rtx (mem_addr);
-
   if (nonoverlapping_memrefs_p (mem, x, true))
     return 0;
 
index dd57b1a..0825391 100644 (file)
@@ -369,13 +369,15 @@ get_object_alignment_2 (tree exp, unsigned int *alignp,
       tree addr = TREE_OPERAND (exp, 0);
       unsigned ptr_align;
       unsigned HOST_WIDE_INT ptr_bitpos;
+      unsigned HOST_WIDE_INT ptr_bitmask = ~0;
 
+      /* If the address is explicitely aligned, handle that.  */
       if (TREE_CODE (addr) == BIT_AND_EXPR
          && TREE_CODE (TREE_OPERAND (addr, 1)) == INTEGER_CST)
        {
-         align = (TREE_INT_CST_LOW (TREE_OPERAND (addr, 1))
-                   & -TREE_INT_CST_LOW (TREE_OPERAND (addr, 1)));
-         align *= BITS_PER_UNIT;
+         ptr_bitmask = TREE_INT_CST_LOW (TREE_OPERAND (addr, 1));
+         ptr_bitmask *= BITS_PER_UNIT;
+         align = ptr_bitmask & -ptr_bitmask;
          addr = TREE_OPERAND (addr, 0);
        }
 
@@ -383,6 +385,9 @@ get_object_alignment_2 (tree exp, unsigned int *alignp,
        = get_pointer_alignment_1 (addr, &ptr_align, &ptr_bitpos);
       align = MAX (ptr_align, align);
 
+      /* Re-apply explicit alignment to the bitpos.  */
+      ptr_bitpos &= ptr_bitmask;
+
       /* The alignment of the pointer operand in a TARGET_MEM_REF
         has to take the variable offset parts into account.  */
       if (TREE_CODE (exp) == TARGET_MEM_REF)
index c1f2fc0..86ecae9 100644 (file)
@@ -1,3 +1,49 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-03-06  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * g++.dg/other/dump-ada-spec-3.C: Remove include and adjust.
+
+2015-03-06  Eric Botcazou  <ebotcazou@adacore.com>
+            Jonathan Wakely  <jwakely.gcc@gmail.com>
+
+       * c-ada-spec.c (dump_ada_double_name): Fix pasto.
+
+2015-03-05  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR ada/65319
+       * c-ada-spec.c (print_destructor): Remove obsolete code.
+
+2015-02-11  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-02-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/64824
+       PR c/64868
+       * c-omp.c (c_finish_omp_atomic): Use TRUNC_DIV_EXPR
+       instead of RDIV_EXPR.  Use build_binary_op instead of
+       build2_loc.
+
+2015-02-11  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-07-24  Marek Polacek  <polacek@redhat.com>
+
+       PR c/57653
+       * c-opts.c (c_finish_options): If -imacros is in effect, return.
+
+2015-01-20  Marek Polacek  <polacek@redhat.com>
+
+       Backport from mainline
+       2014-06-23  Marek Polacek  <polacek@redhat.com>
+
+       PR c/61553
+       * c-common.c (get_atomic_generic_size): Don't segfault if the
+       type doesn't have a size.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index fc21b62..f23869e 100644 (file)
@@ -1392,7 +1392,7 @@ dump_ada_double_name (pretty_printer *buffer, tree t1, tree t2, const char *s)
 
   pp_underscore (buffer);
 
-  if (DECL_NAME (t1))
+  if (DECL_NAME (t2))
     pp_ada_tree_identifier (buffer, DECL_NAME (t2), t2, false);
   else
     {
@@ -2538,18 +2538,9 @@ static void
 print_destructor (pretty_printer *buffer, tree t)
 {
   tree decl_name = DECL_NAME (DECL_ORIGIN (t));
-  const char *s = IDENTIFIER_POINTER (decl_name);
 
-  if (*s == '_')
-    {
-      for (s += 2; *s != ' '; s++)
-       pp_character (buffer, *s);
-    }
-  else
-    {
-      pp_string (buffer, "Delete_");
-      pp_ada_tree_identifier (buffer, decl_name, t, false);
-    }
+  pp_string (buffer, "Delete_");
+  pp_ada_tree_identifier (buffer, decl_name, t, false);
 }
 
 /* Return the name of type T.  */
index 487fb4e..8856701 100644 (file)
@@ -10402,7 +10402,8 @@ get_atomic_generic_size (location_t loc, tree function,
                    function);
          return 0;
        }
-      size = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (type)));
+      tree type_size = TYPE_SIZE_UNIT (TREE_TYPE (type));
+      size = type_size ? tree_to_uhwi (type_size) : 0;
       if (size != size_0)
        {
          error_at (loc, "size mismatch in argument %d of %qE", x + 1,
index 6a0e419..bdcedb2 100644 (file)
@@ -156,6 +156,9 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
       return error_mark_node;
     }
 
+  if (opcode == RDIV_EXPR)
+    opcode = TRUNC_DIV_EXPR;
+
   /* ??? Validate that rhs does not overlap lhs.  */
 
   /* Take and save the address of the lhs.  From then on we'll reference it
@@ -190,7 +193,7 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
      to do this, and then take it apart again.  */
   if (swapped)
     {
-      rhs = build2_loc (loc, opcode, TREE_TYPE (lhs), rhs, lhs);
+      rhs = build_binary_op (loc, opcode, rhs, lhs, 1);
       opcode = NOP_EXPR;
     }
   bool save = in_late_binary_op;
index 29e9a35..dd5fd23 100644 (file)
@@ -1363,6 +1363,12 @@ c_finish_options (void)
 static void
 push_command_line_include (void)
 {
+  /* This can happen if disabled by -imacros for example.
+     Punt so that we don't set "<command-line>" as the filename for
+     the header.  */
+  if (include_cursor > deferred_count)
+    return;
+
   if (!done_preinclude)
     {
       done_preinclude = true;
index e89ebc1..2c0d009 100644 (file)
@@ -98,19 +98,19 @@ ubsan_instrument_shift (location_t loc, enum tree_code code,
   tree op1_utype = unsigned_type_for (type1);
   HOST_WIDE_INT op0_prec = TYPE_PRECISION (type0);
   tree uprecm1 = build_int_cst (op1_utype, op0_prec - 1);
-  tree precm1 = build_int_cst (type1, op0_prec - 1);
 
   t = fold_convert_loc (loc, op1_utype, op1);
   t = fold_build2 (GT_EXPR, boolean_type_node, t, uprecm1);
 
   /* For signed x << y, in C99/C11, the following:
-     (unsigned) x >> (precm1 - y)
+     (unsigned) x >> (uprecm1 - y)
      if non-zero, is undefined.  */
   if (code == LSHIFT_EXPR
       && !TYPE_UNSIGNED (type0)
       && flag_isoc99)
     {
-      tree x = fold_build2 (MINUS_EXPR, integer_type_node, precm1, op1);
+      tree x = fold_build2 (MINUS_EXPR, unsigned_type_node, uprecm1,
+                           fold_convert (op1_utype, op1));
       tt = fold_convert_loc (loc, unsigned_type_for (type0), op0);
       tt = fold_build2 (RSHIFT_EXPR, TREE_TYPE (tt), tt, x);
       tt = fold_build2 (NE_EXPR, boolean_type_node, tt,
@@ -118,13 +118,14 @@ ubsan_instrument_shift (location_t loc, enum tree_code code,
     }
 
   /* For signed x << y, in C++11/C++14, the following:
-     x < 0 || ((unsigned) x >> (precm1 - y))
+     x < 0 || ((unsigned) x >> (uprecm1 - y))
      if > 1, is undefined.  */
   if (code == LSHIFT_EXPR
       && !TYPE_UNSIGNED (TREE_TYPE (op0))
       && (cxx_dialect == cxx11 || cxx_dialect == cxx1y))
     {
-      tree x = fold_build2 (MINUS_EXPR, integer_type_node, precm1, op1);
+      tree x = fold_build2 (MINUS_EXPR, unsigned_type_node, uprecm1,
+                           fold_convert (op1_utype, op1));
       tt = fold_convert_loc (loc, unsigned_type_for (type0), op0);
       tt = fold_build2 (RSHIFT_EXPR, TREE_TYPE (tt), tt, x);
       tt = fold_build2 (GT_EXPR, boolean_type_node, tt,
index deb70eb..85f1d2e 100644 (file)
@@ -1,3 +1,51 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-06-03  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-03-19  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-decl.c (c_decl_attributes): Also add "omp declare target"
+       attribute for DECL_EXTERNAL VAR_DECLs.
+
+2015-02-27  Marek Polacek  <polacek@redhat.com>
+
+       Backported from mainline
+       2015-02-27  Marek Polacek  <polacek@redhat.com>
+
+       PR c/65228
+       * c-decl.c (start_decl): Return NULL_TREE if decl is an error node.
+
+2015-02-11  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/64824
+       * c-parser.c (c_parser_binary_expression): Fix OpenMP stack[sp].prec
+       check in the POP macro.
+
+       Backported from mainline
+       2015-02-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/64824
+       PR c/64868
+       * c-parser.c (c_parser_omp_atomic): Handle RDIV_EXPR.
+
+2015-02-01  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-01-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/64766
+       * c-typeck.c (store_init_value): Don't overwrite DECL_INITIAL
+       of FUNCTION_DECLs with error_mark_node.
+
+       2015-01-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/64778
+       * c-typeck.c (convert_arguments): Return -1 if there are
+       error_args, even if we've diagnosed too many arguments.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 47907d5..0751a52 100644 (file)
@@ -4014,7 +4014,8 @@ c_decl_attributes (tree *node, tree attributes, int flags)
 {
   /* Add implicit "omp declare target" attribute if requested.  */
   if (current_omp_declare_target_attribute
-      && ((TREE_CODE (*node) == VAR_DECL && TREE_STATIC (*node))
+      && ((TREE_CODE (*node) == VAR_DECL
+          && (TREE_STATIC (*node) || DECL_EXTERNAL (*node)))
          || TREE_CODE (*node) == FUNCTION_DECL))
     {
       if (TREE_CODE (*node) == VAR_DECL
@@ -4067,8 +4068,8 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
   decl = grokdeclarator (declarator, declspecs,
                         NORMAL, initialized, NULL, &attributes, &expr, NULL,
                         deprecated_state);
-  if (!decl)
-    return 0;
+  if (!decl || decl == error_mark_node)
+    return NULL_TREE;
 
   if (expr)
     add_stmt (fold_convert (void_type_node, expr));
index 264c170..09e7a28 100644 (file)
@@ -6103,8 +6103,8 @@ c_parser_binary_expression (c_parser *parser, struct c_expr *after,
     if (__builtin_expect (omp_atomic_lhs != NULL_TREE, 0) && sp == 1         \
        && c_parser_peek_token (parser)->type == CPP_SEMICOLON                \
        && ((1 << stack[sp].prec)                                             \
-           & (1 << (PREC_BITOR | PREC_BITXOR | PREC_BITAND | PREC_SHIFT      \
-                    | PREC_ADD | PREC_MULT)))                                \
+           & ((1 << PREC_BITOR) | (1 << PREC_BITXOR) | (1 << PREC_BITAND)    \
+              | (1 << PREC_SHIFT) | (1 << PREC_ADD) | (1 << PREC_MULT)))     \
        && stack[sp].op != TRUNC_MOD_EXPR                                     \
        && stack[0].expr.value != error_mark_node                             \
        && stack[1].expr.value != error_mark_node                             \
@@ -11423,6 +11423,7 @@ restart:
            {
            case MULT_EXPR:
            case TRUNC_DIV_EXPR:
+           case RDIV_EXPR:
            case PLUS_EXPR:
            case MINUS_EXPR:
            case LSHIFT_EXPR:
index d096ad4..2a335ae 100644 (file)
@@ -3085,7 +3085,7 @@ convert_arguments (location_t loc, vec<location_t> arg_loc, tree typelist,
          else
            error_at (loc, "too many arguments to function %qE", function);
          inform_declaration (fundecl);
-         return parmnum;
+         return error_args ? -1 : (int) parmnum;
        }
 
       if (selector && argnum > 2)
@@ -6249,7 +6249,8 @@ store_init_value (location_t init_loc, tree decl, tree init, tree origtype)
     warning (OPT_Wtraditional, "traditional C rejects automatic "
             "aggregate initialization");
 
-  DECL_INITIAL (decl) = value;
+  if (value != error_mark_node || TREE_CODE (decl) != FUNCTION_DECL)
+    DECL_INITIAL (decl) = value;
 
   /* ANSI wants warnings about out-of-range constant initializers.  */
   STRIP_TYPE_NOPS (value);
index 60b0c06..f0e3167 100644 (file)
@@ -1761,6 +1761,22 @@ rtl_tidy_fallthru_edge (edge e)
       && (any_uncondjump_p (q)
          || single_succ_p (b)))
     {
+      rtx label, table;
+
+      if (tablejump_p (q, &label, &table))
+       {
+         /* The label is likely mentioned in some instruction before
+            the tablejump and might not be DCEd, so turn it into
+            a note instead and move before the tablejump that is going to
+            be deleted.  */
+         const char *name = LABEL_NAME (label);
+         PUT_CODE (label, NOTE);
+         NOTE_KIND (label) = NOTE_INSN_DELETED_LABEL;
+         NOTE_DELETED_LABEL_NAME (label) = name;
+         reorder_insns (label, label, PREV_INSN (q));
+         delete_insn (table);
+       }
+
 #ifdef HAVE_cc0
       /* If this was a conditional jump, we need to also delete
         the insn that set cc0.  */
index 8f57607..f189980 100644 (file)
@@ -1532,6 +1532,7 @@ expand_thunk (struct cgraph_node *node, bool output_asm_thunks)
 
       gimple call;
       gimple ret;
+      bool alias_is_noreturn = TREE_THIS_VOLATILE (alias);
 
       if (in_lto_p)
        cgraph_get_body (node);
@@ -1566,15 +1567,22 @@ expand_thunk (struct cgraph_node *node, bool output_asm_thunks)
       bsi = gsi_start_bb (bb);
 
       /* Build call to the function being thunked.  */
-      if (!VOID_TYPE_P (restype))
+      if (!VOID_TYPE_P (restype) && !alias_is_noreturn)
        {
          if (DECL_BY_REFERENCE (resdecl))
            restmp = gimple_fold_indirect_ref (resdecl);
          else if (!is_gimple_reg_type (restype))
            {
-             restmp = resdecl;
-             add_local_decl (cfun, restmp);
-             BLOCK_VARS (DECL_INITIAL (current_function_decl)) = restmp;
+             if (aggregate_value_p (resdecl, TREE_TYPE (thunk_fndecl)))
+               {
+                 restmp = resdecl;
+
+             if (TREE_CODE (restmp) == VAR_DECL)
+                   add_local_decl (cfun, restmp);
+                 BLOCK_VARS (DECL_INITIAL (current_function_decl)) = restmp;
+               }
+             else
+               restmp = create_tmp_var (restype, "retval");
            }
          else
            restmp = create_tmp_reg (restype, "retval");
@@ -1605,14 +1613,14 @@ expand_thunk (struct cgraph_node *node, bool output_asm_thunks)
       call = gimple_build_call_vec (build_fold_addr_expr_loc (0, alias), vargs);
       node->callees->call_stmt = call;
       gimple_call_set_from_thunk (call, true);
-      if (restmp)
+      if (restmp && !alias_is_noreturn)
        {
           gimple_call_set_lhs (call, restmp);
          gcc_assert (useless_type_conversion_p (TREE_TYPE (restmp),
                                                 TREE_TYPE (TREE_TYPE (alias))));
        }
       gsi_insert_after (&bsi, call, GSI_NEW_STMT);
-      if (!(gimple_call_flags (call) & ECF_NORETURN))
+      if (!alias_is_noreturn)
        {
          if (restmp && !this_adjusting
              && (fixed_offset || virtual_offset))
index 2c587a0..7a76a12 100644 (file)
@@ -848,6 +848,8 @@ maybe_run_lto_and_relink (char **lto_ld_argv, char **object_lst,
       fork_execute ("ld", lto_ld_argv);
       post_ld_pass (false);
     }
+  else
+    post_ld_pass (true);
 }
 \f
 /* Main program.  */
index 7c00452..adea2c1 100644 (file)
@@ -1529,8 +1529,8 @@ setup_incoming_promotions (rtx first)
       uns3 = TYPE_UNSIGNED (DECL_ARG_TYPE (arg));
 
       /* The mode and signedness of the argument as it is actually passed,
-         after any TARGET_PROMOTE_FUNCTION_ARGS-driven ABI promotions.  */
-      mode3 = promote_function_mode (DECL_ARG_TYPE (arg), mode2, &uns3,
+         see assign_parm_setup_reg in function.c.  */
+      mode3 = promote_function_mode (TREE_TYPE (arg), mode1, &uns3,
                                     TREE_TYPE (cfun->decl), 0);
 
       /* The mode of the register in which the argument is being passed.  */
index 2259f29..51ddd77 100644 (file)
@@ -1745,6 +1745,11 @@ fregmove
 Common Ignore
 Does nothing. Preserved for backward compatibility.
 
+flifetime-dse
+Common Report Var(flag_lifetime_dse) Init(1) Optimization
+Tell DSE that the storage for a C++ object is dead when the constructor
+starts and when the destructor finishes.
+
 flive-range-shrinkage
 Common Report Var(flag_live_range_shrinkage) Init(0) Optimization
 Relief of register pressure through live range shrinkage
index 9d3fa57..7ade8e5 100644 (file)
@@ -2273,28 +2273,33 @@ powerpc-*-rtems*)
 powerpc*-*-linux*)
        tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h rs6000/sysv4.h"
        extra_options="${extra_options} rs6000/sysv4.opt"
-       tmake_file="rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
+       tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-ppccomm"
        extra_objs="$extra_objs rs6000-linux.o"
        case ${target} in
            powerpc*le-*-*)
                tm_file="${tm_file} rs6000/sysv4le.h" ;;
        esac
-       maybe_biarch=yes
+       case ${target}:${with_cpu} in
+           powerpc64*: | powerpc64*:native) cpu_is_64bit=yes ;;
+       esac
+       maybe_biarch=${cpu_is_64bit}
+       case ${enable_targets} in
+           *powerpc64*) maybe_biarch=yes ;;
+           all) maybe_biarch=yes ;;
+       esac
        case ${target} in
            powerpc64*-*-linux*spe* | powerpc64*-*-linux*paired*)
-               echo "*** Configuration ${target} not supported" 1>&2
+               echo "*** Configuration ${target} not supported" 1>&2
                exit 1
                ;;
            powerpc*-*-linux*spe* | powerpc*-*-linux*paired*)
                maybe_biarch=
                ;;
-           powerpc64*-*-linux*)
-               test x$with_cpu != x || cpu_is_64bit=yes
-               maybe_biarch=always
-               ;;
        esac
-       case ${maybe_biarch}:${enable_targets}:${cpu_is_64bit} in
-           always:* | yes:*powerpc64* | yes:all:* | yes:*:yes)
+       case ${target}:${enable_targets}:${maybe_biarch} in
+           powerpc64-* | powerpc-*:*:yes | *:*powerpc64-*:yes | *:all:yes \
+           | powerpc64le*:*powerpcle* | powerpc64le*:*powerpc-* \
+           | powerpcle-*:*powerpc64le*:yes)
                if test x$cpu_is_64bit = xyes; then
                    tm_file="${tm_file} rs6000/default64.h"
                fi
@@ -2315,9 +2320,14 @@ powerpc*-*-linux*)
                esac
                extra_options="${extra_options} rs6000/linux64.opt"
                ;;
+           powerpc64*)
+               tm_file="${tm_file} rs6000/default64.h rs6000/linux64.h glibc-stdint.h"
+               extra_options="${extra_options} rs6000/linux64.opt"
+               tmake_file="${tmake_file} rs6000/t-linux"
+               ;;
            *)
                tm_file="${tm_file} rs6000/linux.h glibc-stdint.h"
-               tmake_file="$tmake_file rs6000/t-linux"
+               tmake_file="${tmake_file} rs6000/t-ppcos rs6000/t-linux"
                ;;
        esac
        case ${target} in
@@ -2662,7 +2672,7 @@ sparc-*-elf*)
        ;;
 sparc-*-rtems*)
        tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h"
-       tmake_file="${tmake_file} sparc/t-sparc sparc/t-elf sparc/t-rtems"
+       tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems"
        ;;
 sparc-*-linux*)
        tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h"
@@ -3205,6 +3215,9 @@ if test x$with_cpu = x ; then
        *-leon[3-9]*)
          with_cpu=leon3
          ;;
+       *-leon[3-9]v7*)
+         with_cpu=leon3v7
+         ;;
        *)
          with_cpu="`echo ${target} | sed 's/-.*$//'`"
          ;;
@@ -3993,7 +4006,7 @@ case "${target}" in
                        case ${val} in
                        "" | sparc | sparcv9 | sparc64 \
                        | v7 | cypress \
-                       | v8 | supersparc | hypersparc | leon | leon3 \
+                       | v8 | supersparc | hypersparc | leon | leon3 | leon3v7 \
                        | sparclite | f930 | f934 | sparclite86x \
                        | sparclet | tsc701 \
                        | v9 | ultrasparc | ultrasparc3 | niagara | niagara2 \
index 1e85325..ba3b7fc 100644 (file)
 #endif
 
 
+/* Define if your assembler supports -mrmw option. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_AVR_MRMW_OPTION
+#endif
+
+
 /* Define if your assembler supports cmpb. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_AS_CMPB
 #endif
 
 
+/* Define if your assembler supports .module. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_DOT_MODULE
+#endif
+
+
 /* Define if your assembler supports DSPR1 mult. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_AS_DSPR1_MULT
 #endif
 
 
+/* Define if isl_schedule_constraints_compute_schedule exists. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+#endif
+
+
 /* Define to 1 if you have the `kill' function. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_KILL
index adec7e7..48e3dfb 100644 (file)
 #define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
 #define ENDFILE_SPEC " crtend%O%s crtn%O%s"
 
+#ifdef TARGET_FIX_ERR_A53_835769_DEFAULT
+#define CA53_ERR_835769_SPEC \
+  " %{!mno-fix-cortex-a53-835769:--fix-cortex-a53-835769}"
+#else
+#define CA53_ERR_835769_SPEC \
+  " %{mfix-cortex-a53-835769:--fix-cortex-a53-835769}"
+#endif
+
+#ifdef TARGET_FIX_ERR_A53_843419_DEFAULT
+#define CA53_ERR_843419_SPEC \
+  " %{!mno-fix-cortex-a53-843419:--fix-cortex-a53-843419}"
+#else
+#define CA53_ERR_843419_SPEC \
+  " %{mfix-cortex-a53-843419:--fix-cortex-a53-843419}"
+#endif
+
 #ifndef LINK_SPEC
 #define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} -X \
-  -maarch64elf%{mabi=ilp32*:32}%{mbig-endian:b}"
+  -maarch64elf%{mabi=ilp32*:32}%{mbig-endian:b}" \
+  CA53_ERR_835769_SPEC \
+  CA53_ERR_843419_SPEC
 #endif
 
 #endif /* GCC_AARCH64_ELF_RAW_H */
index 57893fc..b7d2d60 100644 (file)
    %{mbig-endian:-EB} %{mlittle-endian:-EL}     \
    -maarch64linux%{mbig-endian:b}"
 
-#define LINK_SPEC LINUX_TARGET_LINK_SPEC
+#ifdef TARGET_FIX_ERR_A53_835769_DEFAULT
+#define CA53_ERR_835769_SPEC \
+  " %{!mno-fix-cortex-a53-835769:--fix-cortex-a53-835769}"
+#else
+#define CA53_ERR_835769_SPEC \
+  " %{mfix-cortex-a53-835769:--fix-cortex-a53-835769}"
+#endif
+
+#ifdef TARGET_FIX_ERR_A53_843419_DEFAULT
+#define CA53_ERR_843419_SPEC \
+  " %{!mno-fix-cortex-a53-843419:--fix-cortex-a53-843419}"
+#else
+#define CA53_ERR_843419_SPEC \
+  " %{mfix-cortex-a53-843419:--fix-cortex-a53-843419}"
+#endif
+
+#define LINK_SPEC LINUX_TARGET_LINK_SPEC \
+                  CA53_ERR_835769_SPEC \
+                  CA53_ERR_843419_SPEC
 
 #define TARGET_OS_CPP_BUILTINS()               \
   do                                           \
index bef58bf..1113211 100644 (file)
@@ -195,7 +195,7 @@ bool aarch64_uimm12_shift (HOST_WIDE_INT);
 const char *aarch64_output_casesi (rtx *);
 const char *aarch64_rewrite_selected_cpu (const char *name);
 
-enum aarch64_symbol_type aarch64_classify_symbol (rtx,
+enum aarch64_symbol_type aarch64_classify_symbol (rtx, rtx,
                                                  enum aarch64_symbol_context);
 enum aarch64_symbol_type aarch64_classify_tls_symbol (rtx);
 enum reg_class aarch64_regno_regclass (unsigned);
index 851e77a..7626ed3 100644 (file)
   [(set_attr "type" "neon_minmax<q>")]
 )
 
+(define_expand "<su><maxmin>v2di3"
+  [(parallel [
+    (set (match_operand:V2DI 0 "register_operand" "")
+        (MAXMIN:V2DI (match_operand:V2DI 1 "register_operand" "")
+                 (match_operand:V2DI 2 "register_operand" "")))
+    (clobber (reg:CC CC_REGNUM))])]
+  "TARGET_SIMD"
+{
+  enum rtx_code cmp_operator;
+  rtx cmp_fmt;
+
+  switch (<CODE>)
+    {
+    case UMIN:
+      cmp_operator = LTU;
+      break;
+    case SMIN:
+      cmp_operator = LT;
+      break;
+    case UMAX:
+      cmp_operator = GTU;
+      break;
+    case SMAX:
+      cmp_operator = GT;
+      break;
+    default:
+      gcc_unreachable ();
+    }
+
+  cmp_fmt = gen_rtx_fmt_ee (cmp_operator, V2DImode, operands[1], operands[2]);
+  emit_insn (gen_aarch64_vcond_internalv2div2di (operands[0], operands[1],
+              operands[2], cmp_fmt, operands[1], operands[2]));
+  DONE;
+})
+
 ;; vec_concat gives a new vector with the low elements from operand 1, and
 ;; the high elements from operand 2.  That is to say, given op1 = { a, b }
 ;; op2 = { c, d }, vec_concat (op1, op2) = { a, b, c, d }.
 })
 
 (define_insn "*aarch64_simd_ld1r<mode>"
-  [(set (match_operand:VALLDI 0 "register_operand" "=w")
-       (vec_duplicate:VALLDI
+  [(set (match_operand:VALL 0 "register_operand" "=w")
+       (vec_duplicate:VALL
          (match_operand:<VEL> 1 "aarch64_simd_struct_operand" "Utv")))]
   "TARGET_SIMD"
   "ld1r\\t{%0.<Vtype>}, %1"
index 52c0471..752df4e 100644 (file)
@@ -659,6 +659,10 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm,
     case SYMBOL_SMALL_TPREL:
       {
        rtx tp = aarch64_load_tp (NULL);
+
+       if (GET_MODE (dest) != Pmode)
+         tp = gen_lowpart (GET_MODE (dest), tp);
+
        emit_insn (gen_tlsle_small (dest, tp, imm));
        set_unique_reg_note (get_last_insn (), REG_EQUIV, imm);
        return;
@@ -915,7 +919,7 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm)
         before we start classifying the symbol.  */
       split_const (imm, &base, &offset);
 
-      sty = aarch64_classify_symbol (base, SYMBOL_CONTEXT_ADR);
+      sty = aarch64_classify_symbol (base, offset, SYMBOL_CONTEXT_ADR);
       switch (sty)
        {
        case SYMBOL_FORCE_TO_MEM:
@@ -2783,7 +2787,7 @@ aarch64_cannot_force_const_mem (enum machine_mode mode ATTRIBUTE_UNUSED, rtx x)
   split_const (x, &base, &offset);
   if (GET_CODE (base) == SYMBOL_REF || GET_CODE (base) == LABEL_REF)
     {
-      if (aarch64_classify_symbol (base, SYMBOL_CONTEXT_ADR)
+      if (aarch64_classify_symbol (base, offset, SYMBOL_CONTEXT_ADR)
          != SYMBOL_FORCE_TO_MEM)
        return true;
       else
@@ -3182,7 +3186,7 @@ aarch64_classify_address (struct aarch64_address_info *info,
          rtx sym, offs;
          split_const (info->offset, &sym, &offs);
          if (GET_CODE (sym) == SYMBOL_REF
-             && (aarch64_classify_symbol (sym, SYMBOL_CONTEXT_MEM)
+             && (aarch64_classify_symbol (sym, offs, SYMBOL_CONTEXT_MEM)
                  == SYMBOL_SMALL_ABSOLUTE))
            {
              /* The symbol and offset must be aligned to the access size.  */
@@ -3239,7 +3243,7 @@ aarch64_classify_symbolic_expression (rtx x,
   rtx offset;
 
   split_const (x, &x, &offset);
-  return aarch64_classify_symbol (x, context);
+  return aarch64_classify_symbol (x, offset, context);
 }
 
 
@@ -5152,7 +5156,6 @@ aarch64_parse_cpu (void)
       if (strlen (cpu->name) == len && strncmp (cpu->name, str, len) == 0)
        {
          selected_cpu = cpu;
-         selected_tune = cpu;
          aarch64_isa_flags = selected_cpu->flags;
 
          if (ext != NULL)
@@ -5248,9 +5251,8 @@ aarch64_override_options (void)
 
   gcc_assert (selected_cpu);
 
-  /* The selected cpu may be an architecture, so lookup tuning by core ID.  */
   if (!selected_tune)
-    selected_tune = &all_cores[selected_cpu->core];
+    selected_tune = selected_cpu;
 
   aarch64_tune_flags = selected_tune->flags;
   aarch64_tune = selected_tune->core;
@@ -5372,7 +5374,7 @@ aarch64_classify_tls_symbol (rtx x)
    LABEL_REF X in context CONTEXT.  */
 
 enum aarch64_symbol_type
-aarch64_classify_symbol (rtx x,
+aarch64_classify_symbol (rtx x, rtx offset,
                         enum aarch64_symbol_context context ATTRIBUTE_UNUSED)
 {
   if (GET_CODE (x) == LABEL_REF)
@@ -5406,12 +5408,25 @@ aarch64_classify_symbol (rtx x,
       switch (aarch64_cmodel)
        {
        case AARCH64_CMODEL_TINY:
-         if (SYMBOL_REF_WEAK (x))
+         /* When we retreive symbol + offset address, we have to make sure
+            the offset does not cause overflow of the final address.  But
+            we have no way of knowing the address of symbol at compile time
+            so we can't accurately say if the distance between the PC and
+            symbol + offset is outside the addressible range of +/-1M in the
+            TINY code model.  So we rely on images not being greater than
+            1M and cap the offset at 1M and anything beyond 1M will have to
+            be loaded using an alternative mechanism.  */
+         if (SYMBOL_REF_WEAK (x)
+             || INTVAL (offset) < -1048575 || INTVAL (offset) > 1048575)
            return SYMBOL_FORCE_TO_MEM;
          return SYMBOL_TINY_ABSOLUTE;
 
        case AARCH64_CMODEL_SMALL:
-         if (SYMBOL_REF_WEAK (x))
+         /* Same reasoning as the tiny code model, but the offset cap here is
+            4G.  */
+         if (SYMBOL_REF_WEAK (x)
+             || INTVAL (offset) < (HOST_WIDE_INT) -4294967263
+             || INTVAL (offset) > (HOST_WIDE_INT) 4294967264)
            return SYMBOL_FORCE_TO_MEM;
          return SYMBOL_SMALL_ABSOLUTE;
 
@@ -8656,6 +8671,9 @@ aarch64_cannot_change_mode_class (enum machine_mode from,
 #undef TARGET_FIXED_CONDITION_CODE_REGS
 #define TARGET_FIXED_CONDITION_CODE_REGS aarch64_fixed_condition_code_regs
 
+#undef TARGET_RELAXED_ORDERING
+#define TARGET_RELAXED_ORDERING true
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 
 #include "gt-aarch64.h"
index 46d9e9f..1085e4d 100644 (file)
            DONE;
           }
       }
+    else
+      FAIL;
   }
 )
 
 
 ;; Logical right shift using SISD or Integer instruction
 (define_insn "*aarch64_lshr_sisd_or_int_<mode>3"
-  [(set (match_operand:GPI 0 "register_operand" "=w,w,r")
+  [(set (match_operand:GPI 0 "register_operand" "=w,&w,r")
         (lshiftrt:GPI
           (match_operand:GPI 1 "register_operand" "w,w,r")
           (match_operand:QI 2 "aarch64_reg_or_shift_imm_<mode>" "Us<cmode>,w,rUs<cmode>")))]
            (match_operand:DI 1 "aarch64_simd_register")
            (match_operand:QI 2 "aarch64_simd_register")))]
   "TARGET_SIMD && reload_completed"
-  [(set (match_dup 2)
+  [(set (match_dup 3)
         (unspec:QI [(match_dup 2)] UNSPEC_SISD_NEG))
    (set (match_dup 0)
-        (unspec:DI [(match_dup 1) (match_dup 2)] UNSPEC_SISD_USHL))]
-  ""
+        (unspec:DI [(match_dup 1) (match_dup 3)] UNSPEC_SISD_USHL))]
+  {
+    operands[3] = gen_lowpart (QImode, operands[0]);
+  }
 )
 
 (define_split
            (match_operand:SI 1 "aarch64_simd_register")
            (match_operand:QI 2 "aarch64_simd_register")))]
   "TARGET_SIMD && reload_completed"
-  [(set (match_dup 2)
+  [(set (match_dup 3)
         (unspec:QI [(match_dup 2)] UNSPEC_SISD_NEG))
    (set (match_dup 0)
-        (unspec:SI [(match_dup 1) (match_dup 2)] UNSPEC_USHL_2S))]
-  ""
+        (unspec:SI [(match_dup 1) (match_dup 3)] UNSPEC_USHL_2S))]
+  {
+    operands[3] = gen_lowpart (QImode, operands[0]);
+  }
 )
 
 ;; Arithmetic right shift using SISD or Integer instruction
   [(set_attr "type" "shift_reg")]
 )
 
-(define_insn "*ashl<mode>3_insn"
-  [(set (match_operand:SHORT 0 "register_operand" "=r")
-       (ashift:SHORT (match_operand:SHORT 1 "register_operand" "r")
-                     (match_operand:QI 2 "aarch64_reg_or_shift_imm_si" "rUss")))]
-  ""
-  "lsl\\t%<w>0, %<w>1, %<w>2"
-  [(set_attr "type" "shift_reg")]
-)
-
 (define_insn "*<optab><mode>3_insn"
   [(set (match_operand:SHORT 0 "register_operand" "=r")
        (ASHIFT:SHORT (match_operand:SHORT 1 "register_operand" "r")
index fc0307e..266d873 100644 (file)
@@ -71,6 +71,10 @@ mfix-cortex-a53-835769
 Target Report Var(aarch64_fix_a53_err835769) Init(2)
 Workaround for ARM Cortex-A53 Erratum number 835769
 
+mfix-cortex-a53-843419
+Target Report
+Workaround for ARM Cortex-A53 Erratum number 843419
+
 mlittle-endian
 Target Report RejectNegative InverseMask(BIG_END)
 Assume target CPU is configured as little endian
index bffa465..eb7daa1 100644 (file)
   [(set (match_operand:ALLI 0 "aarch64_sync_memory_operand" "+Q")
     (unspec_volatile:ALLI
       [(atomic_op:ALLI (match_dup 0)
-       (match_operand:ALLI 1 "<atomic_op_operand>" "rn"))
+       (match_operand:ALLI 1 "<atomic_op_operand>" "r<lconst_atomic>"))
        (match_operand:SI 2 "const_int_operand")]               ;; model
       UNSPECV_ATOMIC_OP))
        (clobber (reg:CC CC_REGNUM))
     (unspec_volatile:ALLI
       [(not:ALLI
        (and:ALLI (match_dup 0)
-         (match_operand:ALLI 1 "aarch64_logical_operand" "rn")))
+         (match_operand:ALLI 1 "aarch64_logical_operand" "r<lconst_atomic>")))
        (match_operand:SI 2 "const_int_operand")]               ;; model
       UNSPECV_ATOMIC_OP))
    (clobber (reg:CC CC_REGNUM))
    (set (match_dup 1)
     (unspec_volatile:ALLI
       [(atomic_op:ALLI (match_dup 1)
-       (match_operand:ALLI 2 "<atomic_op_operand>" "rn"))
+       (match_operand:ALLI 2 "<atomic_op_operand>" "r<lconst_atomic>"))
        (match_operand:SI 3 "const_int_operand")]               ;; model
       UNSPECV_ATOMIC_OP))
    (clobber (reg:CC CC_REGNUM))
     (unspec_volatile:ALLI
       [(not:ALLI
         (and:ALLI (match_dup 1)
-          (match_operand:ALLI 2 "aarch64_logical_operand" "rn")))
+          (match_operand:ALLI 2 "aarch64_logical_operand" "r<lconst_atomic>")))
        (match_operand:SI 3 "const_int_operand")]               ;; model
       UNSPECV_ATOMIC_OP))
    (clobber (reg:CC CC_REGNUM))
   [(set (match_operand:ALLI 0 "register_operand" "=&r")
     (atomic_op:ALLI
       (match_operand:ALLI 1 "aarch64_sync_memory_operand" "+Q")
-      (match_operand:ALLI 2 "<atomic_op_operand>" "rn")))
+      (match_operand:ALLI 2 "<atomic_op_operand>" "r<lconst_atomic>")))
    (set (match_dup 1)
     (unspec_volatile:ALLI
       [(match_dup 1) (match_dup 2)
     (not:ALLI
       (and:ALLI
        (match_operand:ALLI 1 "aarch64_sync_memory_operand" "+Q")
-       (match_operand:ALLI 2 "aarch64_logical_operand" "rn"))))
+       (match_operand:ALLI 2 "aarch64_logical_operand" "r<lconst_atomic>"))))
    (set (match_dup 1)
     (unspec_volatile:ALLI
       [(match_dup 1) (match_dup 2)
index cfb1811..f11c711 100644 (file)
 ;; Attribute to describe constants acceptable in logical operations
 (define_mode_attr lconst [(SI "K") (DI "L")])
 
+;; Attribute to describe constants acceptable in atomic logical operations
+(define_mode_attr lconst_atomic [(QI "K") (HI "K") (SI "K") (DI "L")])
+
 ;; Map a mode to a specific constraint character.
 (define_mode_attr cmode [(QI "q") (HI "h") (SI "s") (DI "d")])
 
index d5c7908..398a613 100644 (file)
@@ -1389,8 +1389,7 @@ get_aligned_mem (rtx ref, rtx *paligned_mem, rtx *pbitnum)
 
   gcc_assert (MEM_P (ref));
 
-  if (reload_in_progress
-      && ! memory_address_p (GET_MODE (ref), XEXP (ref, 0)))
+  if (reload_in_progress)
     {
       base = find_replacement (&XEXP (ref, 0));
       gcc_assert (memory_address_p (GET_MODE (ref), base));
@@ -1435,11 +1434,9 @@ get_unaligned_address (rtx ref)
 
   gcc_assert (MEM_P (ref));
 
-  if (reload_in_progress
-      && ! memory_address_p (GET_MODE (ref), XEXP (ref, 0)))
+  if (reload_in_progress)
     {
       base = find_replacement (&XEXP (ref, 0));
-
       gcc_assert (memory_address_p (GET_MODE (ref), base));
     }
   else
index 795b4df..3eabba2 100644 (file)
 (define_insn_and_split "reload_out<mode>_aligned"
   [(set (match_operand:I12MODE 0 "memory_operand" "=m")
         (match_operand:I12MODE 1 "register_operand" "r"))
-   (clobber (match_operand:SI 2 "register_operand" "=r"))
-   (clobber (match_operand:SI 3 "register_operand" "=r"))]
+   (clobber (match_operand:SI 2 "register_operand" "=&r"))
+   (clobber (match_operand:SI 3 "register_operand" "=&r"))]
   "!TARGET_BWX && (reload_in_progress || reload_completed)"
   "#"
   "!TARGET_BWX && reload_completed"
   [(set_attr "type" "jsr")
    (set_attr "length" "*,*,8")])
 
-(define_insn_and_split "call_value_osf_tlsgd"
+(define_int_iterator TLS_CALL
+       [UNSPEC_TLSGD_CALL
+        UNSPEC_TLSLDM_CALL])
+
+(define_int_attr tls
+       [(UNSPEC_TLSGD_CALL "tlsgd")
+        (UNSPEC_TLSLDM_CALL "tlsldm")])
+
+(define_insn "call_value_osf_<tls>"
   [(set (match_operand 0)
        (call (mem:DI (match_operand:DI 1 "symbolic_operand"))
              (const_int 0)))
-   (unspec [(match_operand:DI 2 "const_int_operand")] UNSPEC_TLSGD_CALL)
+   (unspec [(match_operand:DI 2 "const_int_operand")] TLS_CALL)
    (use (reg:DI 29))
    (clobber (reg:DI 26))]
   "HAVE_AS_TLS"
-  "#"
-  "&& reload_completed"
+  "ldq $27,%1($29)\t\t!literal!%2\;jsr $26,($27),%1\t\t!lituse_<tls>!%2\;ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*"
+  [(set_attr "type" "jsr")
+   (set_attr "length" "16")])
+
+;; We must use peep2 instead of a split because we need accurate life
+;; information for $gp.
+(define_peephole2
+  [(parallel
+    [(set (match_operand 0)
+         (call (mem:DI (match_operand:DI 1 "symbolic_operand"))
+               (const_int 0)))
+     (unspec [(match_operand:DI 2 "const_int_operand")] TLS_CALL)
+     (use (reg:DI 29))
+     (clobber (reg:DI 26))])]
+  "HAVE_AS_TLS && reload_completed
+   && peep2_regno_dead_p (1, 29)"
   [(set (match_dup 3)
        (unspec:DI [(match_dup 5)
                    (match_dup 1)
    (parallel [(set (match_dup 0)
                   (call (mem:DI (match_dup 3))
                         (const_int 0)))
-             (set (match_dup 5)
-                  (unspec:DI [(match_dup 5) (match_dup 4)] UNSPEC_LDGP1))
+             (use (match_dup 5))
              (use (match_dup 1))
-             (use (unspec [(match_dup 2)] UNSPEC_TLSGD_CALL))
+             (use (unspec [(match_dup 2)] TLS_CALL))
              (clobber (reg:DI 26))])
    (set (match_dup 5)
        (unspec:DI [(match_dup 5) (match_dup 4)] UNSPEC_LDGP2))]
   operands[3] = gen_rtx_REG (Pmode, 27);
   operands[4] = GEN_INT (alpha_next_sequence_number++);
   operands[5] = pic_offset_table_rtx;
-}
-  [(set_attr "type" "multi")])
+})
 
-(define_insn_and_split "call_value_osf_tlsldm"
-  [(set (match_operand 0)
-       (call (mem:DI (match_operand:DI 1 "symbolic_operand"))
-             (const_int 0)))
-   (unspec [(match_operand:DI 2 "const_int_operand")] UNSPEC_TLSLDM_CALL)
-   (use (reg:DI 29))
-   (clobber (reg:DI 26))]
-  "HAVE_AS_TLS"
-  "#"
-  "&& reload_completed"
+(define_peephole2
+  [(parallel
+    [(set (match_operand 0)
+         (call (mem:DI (match_operand:DI 1 "symbolic_operand"))
+               (const_int 0)))
+     (unspec [(match_operand:DI 2 "const_int_operand")] TLS_CALL)
+     (use (reg:DI 29))
+     (clobber (reg:DI 26))])]
+  "HAVE_AS_TLS && reload_completed
+   && !peep2_regno_dead_p (1, 29)"
   [(set (match_dup 3)
        (unspec:DI [(match_dup 5)
                    (match_dup 1)
              (set (match_dup 5)
                   (unspec:DI [(match_dup 5) (match_dup 4)] UNSPEC_LDGP1))
              (use (match_dup 1))
-             (use (unspec [(match_dup 2)] UNSPEC_TLSLDM_CALL))
+             (use (unspec [(match_dup 2)] TLS_CALL))
              (clobber (reg:DI 26))])
    (set (match_dup 5)
        (unspec:DI [(match_dup 5) (match_dup 4)] UNSPEC_LDGP2))]
   operands[3] = gen_rtx_REG (Pmode, 27);
   operands[4] = GEN_INT (alpha_next_sequence_number++);
   operands[5] = pic_offset_table_rtx;
-}
-  [(set_attr "type" "multi")])
+})
 
 (define_insn "*call_value_osf_1"
   [(set (match_operand 0)
index 439a4de..4fea1a6 100644 (file)
@@ -16274,7 +16274,7 @@ dump_minipool (rtx scan)
              fputc ('\n', dump_file);
            }
 
-         switch (mp->fix_size)
+         switch (GET_MODE_SIZE (mp->mode))
            {
 #ifdef HAVE_consttable_1
            case 1:
@@ -18601,6 +18601,14 @@ output_ascii_pseudo_op (FILE *stream, const unsigned char *p, int len)
   fputs ("\"\n", stream);
 }
 \f
+/* Whether a register is callee saved or not.  This is necessary because high
+   registers are marked as caller saved when optimizing for size on Thumb-1
+   targets despite being callee saved in order to avoid using them.  */
+#define callee_saved_reg_p(reg) \
+  (!call_used_regs[reg] \
+   || (TARGET_THUMB1 && optimize_size \
+       && reg >= FIRST_HI_REGNUM && reg <= LAST_HI_REGNUM))
+
 /* Compute the register save mask for registers 0 through 12
    inclusive.  This code is used by arm_compute_save_reg_mask.  */
 
@@ -18661,7 +18669,7 @@ arm_compute_save_reg0_reg12_mask (void)
       /* In the normal case we only need to save those registers
         which are call saved and which are used by this function.  */
       for (reg = 0; reg <= 11; reg++)
-       if (df_regs_ever_live_p (reg) && ! call_used_regs[reg])
+       if (df_regs_ever_live_p (reg) && callee_saved_reg_p (reg))
          save_reg_mask |= (1 << reg);
 
       /* Handle the frame pointer as a special case.  */
@@ -18824,7 +18832,7 @@ thumb1_compute_save_reg_mask (void)
 
   mask = 0;
   for (reg = 0; reg < 12; reg ++)
-    if (df_regs_ever_live_p (reg) && !call_used_regs[reg])
+    if (df_regs_ever_live_p (reg) && callee_saved_reg_p (reg))
       mask |= 1 << reg;
 
   if (flag_pic
@@ -18857,7 +18865,7 @@ thumb1_compute_save_reg_mask (void)
       if (reg * UNITS_PER_WORD <= (unsigned) arm_size_return_regs ())
        reg = LAST_LO_REGNUM;
 
-      if (! call_used_regs[reg])
+      if (callee_saved_reg_p (reg))
        mask |= 1 << reg;
     }
 
@@ -28492,7 +28500,11 @@ arm_set_return_address (rtx source, rtx scratch)
 
          addr = plus_constant (Pmode, addr, delta);
        }
-      emit_move_insn (gen_frame_mem (Pmode, addr), source);
+      /* The store needs to be marked as frame related in order to prevent
+        DSE from deleting it as dead if it is based on fp.  */
+      rtx insn = emit_move_insn (gen_frame_mem (Pmode, addr), source);
+      RTX_FRAME_RELATED_P (insn) = 1;
+      add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (Pmode, LR_REGNUM));
     }
 }
 
@@ -28544,7 +28556,11 @@ thumb_set_return_address (rtx source, rtx scratch)
       else
        addr = plus_constant (Pmode, addr, delta);
 
-      emit_move_insn (gen_frame_mem (Pmode, addr), source);
+      /* The store needs to be marked as frame related in order to prevent
+        DSE from deleting it as dead if it is based on fp.  */
+      rtx insn = emit_move_insn (gen_frame_mem (Pmode, addr), source);
+      RTX_FRAME_RELATED_P (insn) = 1;
+      add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (Pmode, LR_REGNUM));
     }
   else
     emit_move_insn (gen_rtx_REG (Pmode, LR_REGNUM), source);
@@ -29663,8 +29679,7 @@ arm_conditional_register_usage (void)
       /* When optimizing for size on Thumb-1, it's better not
         to use the HI regs, because of the overhead of
         stacking them.  */
-      for (regno = FIRST_HI_REGNUM;
-          regno <= LAST_HI_REGNUM; ++regno)
+      for (regno = FIRST_HI_REGNUM; regno <= LAST_HI_REGNUM; ++regno)
        fixed_regs[regno] = call_used_regs[regno] = 1;
     }
 
index c60d9a4..23333eb 100644 (file)
@@ -74,8 +74,8 @@ extern char arm_arch_name[];
        builtin_define_with_int_value (                         \
          "__ARM_SIZEOF_MINIMAL_ENUM",                          \
          flag_short_enums ? 1 : 4);                            \
-       builtin_define_with_int_value (                         \
-         "__ARM_SIZEOF_WCHAR_T", WCHAR_TYPE_SIZE);             \
+       builtin_define_type_sizeof ("__ARM_SIZEOF_WCHAR_T",     \
+                                   wchar_type_node);           \
        if (TARGET_ARM_ARCH_PROFILE)                            \
          builtin_define_with_int_value (                       \
            "__ARM_ARCH_PROFILE", TARGET_ARM_ARCH_PROFILE);     \
@@ -2138,9 +2138,10 @@ extern int making_const_table;
    ? reverse_condition_maybe_unordered (code) \
    : reverse_condition (code))
 
-/* The arm5 clz instruction returns 32.  */
-#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE)  ((VALUE) = 32, 1)
-#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE)  ((VALUE) = 32, 1)
+#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \
+  ((VALUE) = GET_MODE_UNIT_BITSIZE (MODE))
+#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \
+  ((VALUE) = GET_MODE_UNIT_BITSIZE (MODE))
 \f
 #define CC_STATUS_INIT \
   do { cfun->machine->thumb1_cc_insn = NULL_RTX; } while (0)
index 2a57d6e..7ca8162 100644 (file)
 ; This can be "a" for ARM, "t" for either of the Thumbs, "32" for
 ; TARGET_32BIT, "t1" or "t2" to specify a specific Thumb mode.  "v6"
 ; for ARM or Thumb-2 with arm_arch6, and nov6 for ARM without
-; arm_arch6.  This attribute is used to compute attribute "enabled",
-; use type "any" to enable an alternative in all cases.
-(define_attr "arch" "any,a,t,32,t1,t2,v6,nov6,neon_for_64bits,avoid_neon_for_64bits,iwmmxt,iwmmxt2"
+; arm_arch6.  "v6t2" for Thumb-2 with arm_arch6.  This attribute is
+; used to compute attribute "enabled", use type "any" to enable an
+; alternative in all cases.
+(define_attr "arch" "any,a,t,32,t1,t2,v6,nov6,v6t2,neon_for_64bits,avoid_neon_for_64bits,iwmmxt,iwmmxt2"
   (const_string "any"))
 
 (define_attr "arch_enabled" "no,yes"
              (match_test "TARGET_32BIT && !arm_arch6"))
         (const_string "yes")
 
+        (and (eq_attr "arch" "v6t2")
+             (match_test "TARGET_32BIT && arm_arch6 && arm_arch_thumb2"))
+        (const_string "yes")
+
         (and (eq_attr "arch" "avoid_neon_for_64bits")
              (match_test "TARGET_NEON")
              (not (match_test "TARGET_PREFER_NEON_64BITS")))
 
 ;; Pattern to recognize insn generated default case above
 (define_insn "*movhi_insn_arch4"
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,r")
-       (match_operand:HI 1 "general_operand"      "rI,K,r,mi"))]
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,m,r")
+       (match_operand:HI 1 "general_operand"      "rI,K,n,r,mi"))]
   "TARGET_ARM
    && arm_arch4
    && (register_operand (operands[0], HImode)
   "@
    mov%?\\t%0, %1\\t%@ movhi
    mvn%?\\t%0, #%B1\\t%@ movhi
+   movw%?\\t%0, %L1\\t%@ movhi
    str%(h%)\\t%1, %0\\t%@ movhi
    ldr%(h%)\\t%0, %1\\t%@ movhi"
   [(set_attr "predicable" "yes")
-   (set_attr "pool_range" "*,*,*,256")
-   (set_attr "neg_pool_range" "*,*,*,244")
+   (set_attr "pool_range" "*,*,*,*,256")
+   (set_attr "neg_pool_range" "*,*,*,*,244")
+   (set_attr "arch" "*,*,v6t2,*,*")
    (set_attr_alternative "type"
                          [(if_then_else (match_operand 1 "const_int_operand" "")
                                         (const_string "mov_imm" )
                                         (const_string "mov_reg"))
                           (const_string "mvn_imm")
+                          (const_string "mov_imm")
                           (const_string "store1")
                           (const_string "load1")])]
 )
     enum rtx_code rc = GET_CODE (operands[5]);
     operands[6] = gen_rtx_REG (mode, CC_REGNUM);
     gcc_assert (!(mode == CCFPmode || mode == CCFPEmode));
-    if (REGNO (operands[2]) != REGNO (operands[0]))
+    if (!REG_P (operands[2]) || REGNO (operands[2]) != REGNO (operands[0]))
       rc = reverse_condition (rc);
     else 
       {
 
 (define_insn "consttable_1"
   [(unspec_volatile [(match_operand 0 "" "")] VUNSPEC_POOL_1)]
-  "TARGET_THUMB1"
+  "TARGET_EITHER"
   "*
   making_const_table = TRUE;
   assemble_integer (operands[0], 1, BITS_PER_WORD, 1);
 
 (define_insn "consttable_2"
   [(unspec_volatile [(match_operand 0 "" "")] VUNSPEC_POOL_2)]
-  "TARGET_THUMB1"
+  "TARGET_EITHER"
   "*
-  making_const_table = TRUE;
-  gcc_assert (GET_MODE_CLASS (GET_MODE (operands[0])) != MODE_FLOAT);
-  assemble_integer (operands[0], 2, BITS_PER_WORD, 1);
-  assemble_zeros (2);
-  return \"\";
-  "
+  {
+    rtx x = operands[0];
+    making_const_table = TRUE;
+    switch (GET_MODE_CLASS (GET_MODE (x)))
+      {
+      case MODE_FLOAT:
+       arm_emit_fp16_const (x);
+       break;
+      default:
+       assemble_integer (operands[0], 2, BITS_PER_WORD, 1);
+       assemble_zeros (2);
+       break;
+      }
+    return \"\";
+  }"
   [(set_attr "length" "4")
    (set_attr "type" "no_insn")]
 )
     switch (GET_MODE_CLASS (GET_MODE (x)))
       {
       case MODE_FLOAT:
-       if (GET_MODE (x) == HFmode)
-         arm_emit_fp16_const (x);
-       else
-         {
-           REAL_VALUE_TYPE r;
-           REAL_VALUE_FROM_CONST_DOUBLE (r, x);
-           assemble_real (r, GET_MODE (x), BITS_PER_WORD);
-         }
-       break;
+       {
+         REAL_VALUE_TYPE r;
+         REAL_VALUE_FROM_CONST_DOUBLE (r, x);
+         assemble_real (r, GET_MODE (x), BITS_PER_WORD);
+         break;
+       }
       default:
        /* XXX: Sometimes gcc does something really dumb and ends up with
           a HIGH in a constant pool entry, usually because it's trying to
index 2bf361a..47e8b46 100644 (file)
@@ -70,7 +70,7 @@
    %{symbolic:-Bsymbolic} \
    %{!static: \
      %{rdynamic:-export-dynamic} \
-     -dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \
+     %{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \
    -X \
    %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
    SUBTARGET_EXTRA_LINK_SPEC
index ff9e2e1..86741e6 100644 (file)
@@ -88,6 +88,9 @@ MULTILIB_MATCHES       += march?armv8-a=mcpu?cortex-a53
 MULTILIB_MATCHES       += march?armv8-a=mcpu?cortex-a57
 MULTILIB_MATCHES       += march?armv8-a=mcpu?cortex-a57.cortex-a53
 
+# Arch Matches
+MULTILIB_MATCHES       += march?armv8-a=march?armv8-a+crc
+
 # FPU matches
 MULTILIB_MATCHES       += mfpu?vfpv3-d16=mfpu?vfpv3
 MULTILIB_MATCHES       += mfpu?vfpv3-d16=mfpu?vfpv3-fp16
index 6398105..56cd304 100644 (file)
@@ -68,6 +68,7 @@
   {
     rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
 
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, ACC_A));
     emit_move_insn (acc_a, operands[1]);
 
     if (DImode == <MODE>mode
   {
     rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
 
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, ACC_A));
     emit_move_insn (acc_a, operands[1]);
 
     if (const_operand (operands[2], GET_MODE (operands[2])))
   {
     rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
 
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, ACC_A));
     emit_move_insn (acc_a, operands[1]);
 
     if (const_operand (operands[2], GET_MODE (operands[2])))
   {
     rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
 
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, ACC_A));
     emit_move_insn (acc_a, operands[1]);
 
     if (const_operand (operands[2], GET_MODE (operands[2])))
   {
     rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
 
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, ACC_A));
     emit_move_insn (acc_a, operands[1]);
 
     if (s8_operand (operands[2], VOIDmode))
   {
     rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
 
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, ACC_A));
     emit_move_insn (acc_a, operands[1]);
     emit_move_insn (gen_rtx_REG (QImode, 16), operands[2]);
     emit_insn (gen_<code_stdname><mode>3_insn ());
               (clobber (any_extend:SI (match_dup 1)))])]
   "avr_have_dimode"
   {
+    avr_fix_inputs (operands, 1 << 2, regmask (SImode, 22));
     emit_move_insn (gen_rtx_REG (SImode, 22), operands[1]);
     emit_move_insn (gen_rtx_REG (SImode, 18), operands[2]);
     emit_insn (gen_<extend_u>mulsidi3_insn());
index 9c8489e..6763f59 100644 (file)
               (clobber (reg:HI 24))])
    (set (match_operand:QQ 0 "register_operand" "")
         (reg:QQ 23))]
-  "!AVR_HAVE_MUL")
+  "!AVR_HAVE_MUL"
+  {
+    avr_fix_inputs (operands, 1 << 2, regmask (QQmode, 24));
+  })
+
 
 (define_expand "muluqq3_nomul"
   [(set (reg:UQQ 22)
               (clobber (reg:HI 22))])
    (set (match_operand:UQQ 0 "register_operand" "")
         (reg:UQQ 25))]
-  "!AVR_HAVE_MUL")
+  "!AVR_HAVE_MUL"
+  {
+    avr_fix_inputs (operands, 1 << 2, regmask (UQQmode, 22));
+  })
 
 (define_insn "*mulqq3.call"
   [(set (reg:QQ 23)
               (clobber (reg:HI 22))])
    (set (match_operand:ALL2QA 0 "register_operand" "")
         (reg:ALL2QA 24))]
-  "AVR_HAVE_MUL")
+  "AVR_HAVE_MUL"
+  {
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, 18));
+  })
 
 ;; "*mulhq3.call"  "*muluhq3.call"
 ;; "*mulha3.call"  "*muluha3.call"
                     (reg:ALL4A 20)))
    (set (match_operand:ALL4A 0 "register_operand" "")
         (reg:ALL4A 24))]
-  "AVR_HAVE_MUL")
+  "AVR_HAVE_MUL"
+  {
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, 16));
+  })
 
 ;; "*mulsa3.call" "*mulusa3.call"
 (define_insn "*mul<mode>3.call"
                                 (reg:ALL1Q 22)))
               (clobber (reg:QI 25))])
    (set (match_operand:ALL1Q 0 "register_operand" "")
-        (reg:ALL1Q 24))])
+        (reg:ALL1Q 24))]
+  ""
+  {
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, 25));
+  })
+
 
 ;; "*divqq3.call" "*udivuqq3.call"
 (define_insn "*<code><mode>3.call"
               (clobber (reg:HI 26))
               (clobber (reg:QI 21))])
    (set (match_operand:ALL2QA 0 "register_operand" "")
-        (reg:ALL2QA 24))])
+        (reg:ALL2QA 24))]
+  ""
+  {
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, 26));
+  })
 
 ;; "*divhq3.call" "*udivuhq3.call"
 ;; "*divha3.call" "*udivuha3.call"
               (clobber (reg:HI 26))
               (clobber (reg:HI 30))])
    (set (match_operand:ALL4A 0 "register_operand" "")
-        (reg:ALL4A 22))])
+        (reg:ALL4A 22))]
+  ""
+  {
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, 24));
+  })
 
 ;; "*divsa3.call" "*udivusa3.call"
 (define_insn "*<code><mode>3.call"
 
     operands[3] = gen_rtx_REG (<MODE>mode, regno_out[(size_t) GET_MODE_SIZE (<MODE>mode)]);
     operands[4] = gen_rtx_REG (<MODE>mode,  regno_in[(size_t) GET_MODE_SIZE (<MODE>mode)]);
+    avr_fix_inputs (operands, 1 << 2, regmask (<MODE>mode, REGNO (operands[4])));
     operands[5] = simplify_gen_subreg (QImode, force_reg (HImode, operands[2]), HImode, 0);
     // $2 is no more needed, but is referenced for expand.
     operands[2] = const0_rtx;
index c5ce784..4a899a2 100644 (file)
@@ -124,6 +124,15 @@ extern bool avr_mem_memx_p (rtx);
 extern bool avr_load_libgcc_p (rtx);
 extern bool avr_xload_libgcc_p (enum machine_mode);
 
+static inline unsigned
+regmask (enum machine_mode mode, unsigned regno)
+{
+  return ((1u << GET_MODE_SIZE (mode)) - 1) << regno;
+}
+
+extern void avr_fix_inputs (rtx*, unsigned, unsigned);
+extern bool avr_emit3_fix_outputs (rtx (*)(rtx,rtx,rtx), rtx*, unsigned, unsigned);
+
 extern rtx lpm_reg_rtx;
 extern rtx lpm_addr_reg_rtx;
 extern rtx tmp_reg_rtx;
index fa979df..3130c0c 100644 (file)
@@ -51,6 +51,8 @@
 #include "target-def.h"
 #include "params.h"
 #include "df.h"
+#include "context.h"
+#include "tree-pass.h"
 
 /* Maximal allowed offset for an address in the LD command */
 #define MAX_LD_OFFSET(MODE) (64 - (signed)GET_MODE_SIZE (MODE))
@@ -285,6 +287,58 @@ avr_to_int_mode (rtx x)
 }
 
 
+static const pass_data avr_pass_data_recompute_notes =
+{
+  RTL_PASS,       // type
+  "",             // name (will be patched)
+  OPTGROUP_NONE,  // optinfo_flags
+  false,          // has_gate
+  true,           // has_execute
+  TV_DF_SCAN,     // tv_id
+  0,              // properties_required
+  0,              // properties_provided
+  0,              // properties_destroyed
+  0,              // todo_flags_start
+  // todo_flags_finish
+  TODO_df_finish | TODO_verify_rtl_sharing | TODO_verify_flow
+};
+
+
+class avr_pass_recompute_notes : public rtl_opt_pass
+{
+public:
+  avr_pass_recompute_notes (gcc::context *ctxt, const char *name)
+    : rtl_opt_pass (avr_pass_data_recompute_notes, ctxt)
+  {
+    this->name = name;
+  }
+
+  unsigned int execute (void)
+  {
+    df_note_add_problem ();
+    df_analyze ();
+
+    return 0;
+  }
+}; // avr_pass_recompute_notes
+
+
+static void
+avr_register_passes (void)
+{
+  /* This avr-specific pass (re)computes insn notes, in particular REG_DEAD
+     notes which are used by `avr.c::reg_unused_after' and branch offset
+     computations.  These notes must be correct, i.e. there must be no
+     dangling REG_DEAD notes; otherwise wrong code might result, cf. PR64331.
+
+     DF needs (correct) CFG, hence right before free_cfg is the last
+     opportunity to rectify notes.  */
+
+  register_pass (new avr_pass_recompute_notes (g, "avr-notes-free-cfg"),
+                 PASS_POS_INSERT_BEFORE, "*free_cfg", 1);
+}
+
+
 /* Implement `TARGET_OPTION_OVERRIDE'.  */
 
 static void
@@ -346,6 +400,11 @@ avr_option_override (void)
   init_machine_status = avr_init_machine_status;
 
   avr_log_set_avr_log();
+
+  /* Register some avr-specific pass(es).  There is no canonical place for
+     pass registration.  This function is convenient.  */
+
+  avr_register_passes ();
 }
 
 /* Function to set up the backend function structure.  */
@@ -7778,7 +7837,8 @@ avr_adjust_insn_length (rtx insn, int len)
      It is easier to state this in an insn attribute "adjust_len" than
      to clutter up code here...  */
 
-  if (-1 == recog_memoized (insn))
+  if (!NONDEBUG_INSN_P (insn)
+      || -1 == recog_memoized (insn))
     {
       return len;
     }
@@ -11118,6 +11178,115 @@ avr_convert_to_type (tree type, tree expr)
 }
 
 
+/* PR63633: The middle-end might come up with hard regs as input operands.
+
+   RMASK is a bit mask representing a subset of hard registers R0...R31:
+   Rn is an element of that set iff bit n of RMASK is set.
+   OPMASK describes a subset of OP[]:  If bit n of OPMASK is 1 then
+   OP[n] has to be fixed; otherwise OP[n] is left alone.
+
+   For each element of OPMASK which is a hard register overlapping RMASK,
+   replace OP[n] with a newly created pseudo register
+
+   HREG == 0:  Also emit a move insn that copies the contents of that
+               hard register into the new pseudo.
+
+   HREG != 0:  Also set HREG[n] to the hard register.  */
+
+static void
+avr_fix_operands (rtx *op, rtx *hreg, unsigned opmask, unsigned rmask)
+{
+  for (; opmask; opmask >>= 1, op++)
+    {
+      rtx reg = *op;
+
+      if (hreg)
+        *hreg = NULL_RTX;
+
+      if ((opmask & 1)
+          && REG_P (reg)
+          && REGNO (reg) < FIRST_PSEUDO_REGISTER
+          // This hard-reg overlaps other prohibited hard regs?
+          && (rmask & regmask (GET_MODE (reg), REGNO (reg))))
+        {
+          *op = gen_reg_rtx (GET_MODE (reg));
+          if (hreg == NULL)
+            emit_move_insn (*op, reg);
+          else
+            *hreg = reg;
+        }
+
+      if (hreg)
+        hreg++;
+    }
+}
+
+
+void
+avr_fix_inputs (rtx *op, unsigned opmask, unsigned rmask)
+{
+  avr_fix_operands (op, NULL, opmask, rmask);
+}
+
+
+/* Helper for the function below:  If bit n of MASK is set and
+   HREG[n] != NULL, then emit a move insn to copy OP[n] to HREG[n].
+   Otherwise do nothing for that n.  Return TRUE.  */
+
+static bool
+avr_move_fixed_operands (rtx *op, rtx *hreg, unsigned mask)
+{
+  for (; mask; mask >>= 1, op++, hreg++)
+    if ((mask & 1)
+        && *hreg)
+      emit_move_insn (*hreg, *op);
+
+  return true;
+}
+
+
+/* PR63633: The middle-end might come up with hard regs as output operands.
+
+   GEN is a sequence generating function like gen_mulsi3 with 3 operands OP[].
+   RMASK is a bit mask representing a subset of hard registers R0...R31:
+   Rn is an element of that set iff bit n of RMASK is set.
+   OPMASK describes a subset of OP[]:  If bit n of OPMASK is 1 then
+   OP[n] has to be fixed; otherwise OP[n] is left alone.
+
+   Emit the insn sequence as generated by GEN() with all elements of OPMASK
+   which are hard registers overlapping RMASK replaced by newly created
+   pseudo registers.  After the sequence has been emitted, emit insns that
+   move the contents of respective pseudos to their hard regs.  */
+
+bool
+avr_emit3_fix_outputs (rtx (*gen)(rtx,rtx,rtx), rtx *op,
+                       unsigned opmask, unsigned rmask)
+{
+  const int n = 3;
+  rtx hreg[n];
+
+  /* It is legitimate for GEN to call this function, and in order not to
+     get self-recursive we use the following static kludge.  This is the
+     only way not to duplicate all expanders and to avoid ugly and
+     hard-to-maintain C-code instead of the much more appreciated RTL
+     representation as supplied by define_expand.  */
+  static bool lock = false;
+
+  gcc_assert (opmask < (1u << n));
+
+  if (lock)
+    return false;
+
+  avr_fix_operands (op, hreg, opmask, rmask);
+
+  lock = true;
+  emit_insn (gen (op[0], op[1], op[2]));
+  lock = false;
+
+  return avr_move_fixed_operands (op, hreg, opmask);
+}
+
+
 /* Worker function for movmemhi expander.
    XOP[0]  Destination as MEM:BLK
    XOP[1]  Source      "     "
index 2d90b76..0728620 100644 (file)
        push __zero_reg__"
   [(set_attr "length" "1,1")])
 
+(define_insn "pushhi1_insn"
+  [(set (mem:HI (post_dec:HI (reg:HI REG_SP)))
+        (match_operand:HI 0 "register_operand" "r"))]
+  ""
+  "push %B0\;push %A0"
+  [(set_attr "length" "2")])
+
 ;; All modes for a multi-byte push.  We must include complex modes here too,
 ;; lest emit_single_push_insn "helpfully" create the auto-inc itself.
 (define_mode_iterator MPUSH
   [(match_operand:MPUSH 0 "" "")]
   ""
   {
-    int i;
-
-    // Avoid (subreg (mem)) for non-generic address spaces below.  Because
-    // of the poor addressing capabilities of these spaces it's better to
-    // load them in one chunk.  And it avoids PR61443.
-
     if (MEM_P (operands[0])
         && !ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (operands[0])))
-      operands[0] = copy_to_mode_reg (<MODE>mode, operands[0]);
+      {
+        // Avoid (subreg (mem)) for non-generic address spaces.  Because
+        // of the poor addressing capabilities of these spaces it's better to
+        // load them in one chunk.  And it avoids PR61443.
 
-    for (i = GET_MODE_SIZE (<MODE>mode) - 1; i >= 0; --i)
+        operands[0] = copy_to_mode_reg (<MODE>mode, operands[0]);
+      }
+    else if (REG_P (operands[0])
+             && IN_RANGE (REGNO (operands[0]), FIRST_VIRTUAL_REGISTER,
+                          LAST_VIRTUAL_REGISTER))
+      {
+        // Byte-wise pushing of virtual regs might result in something like
+        //
+        //     (set (mem:QI (post_dec:HI (reg:HI 32 SP)))
+        //          (subreg:QI (plus:HI (reg:HI 28)
+        //                              (const_int 17)) 0))
+        //
+        // after elimination.  This cannot be handled by reload, cf. PR64452.
+        // Reload virtuals in one chunk.  That way it's possible to reload
+        // above situation and finally
+        //
+        //    (set (reg:HI **)
+        //         (const_int 17))
+        //    (set (reg:HI **)
+        //         (plus:HI (reg:HI **)
+        //                  (reg:HI 28)))
+        //    (set (mem:HI (post_dec:HI (reg:HI 32 SP))
+        //         (reg:HI **)))
+        emit_insn (gen_pushhi1_insn (operands[0]));
+        DONE;
+      }
+
+    for (int i = GET_MODE_SIZE (<MODE>mode) - 1; i >= 0; --i)
       {
         rtx part = simplify_gen_subreg (QImode, operands[0], <MODE>mode, i);
         if (part != const0_rtx)
    (set (reg:QI 22) (match_operand:QI 2 "register_operand" ""))
    (parallel [(set (reg:QI 24) (mult:QI (reg:QI 24) (reg:QI 22)))
               (clobber (reg:QI 22))])
-   (set (match_operand:QI 0 "register_operand" "") (reg:QI 24))])
+   (set (match_operand:QI 0 "register_operand" "") (reg:QI 24))]
+  ""
+  {
+    avr_fix_inputs (operands, 1 << 2, regmask (QImode, 24));
+  })
 
 (define_insn "*mulqi3_call"
   [(set (reg:QI 24) (mult:QI (reg:QI 24) (reg:QI 22)))
    (parallel [(set (reg:HI 24) (mult:HI (reg:HI 24) (reg:HI 22)))
               (clobber (reg:HI 22))
               (clobber (reg:QI 21))])
-   (set (match_operand:HI 0 "register_operand" "") (reg:HI 24))])
+   (set (match_operand:HI 0 "register_operand" "")
+        (reg:HI 24))]
+  ""
+  {
+    avr_fix_inputs (operands, (1 << 2), regmask (HImode, 24));
+  })
+
 
 (define_insn "*mulhi3_call"
   [(set (reg:HI 24) (mult:HI (reg:HI 24) (reg:HI 22)))
         emit_insn (gen_mulohisi3 (operands[0], operands[2], operands[1]));
         DONE;
       }
+
+    if (avr_emit3_fix_outputs (gen_mulsi3, operands, 1 << 0,
+                               regmask (DImode, 18) | regmask (HImode, 26)))
+      DONE;
   })
 
 (define_insn_and_split "*mulsi3"
 
 ;; "muluqisi3"
 ;; "muluhisi3"
-(define_insn_and_split "mulu<mode>si3"
+(define_expand "mulu<mode>si3"
+  [(parallel [(set (match_operand:SI 0 "pseudo_register_operand" "")
+                   (mult:SI (zero_extend:SI (match_operand:QIHI 1 "pseudo_register_operand" ""))
+                            (match_operand:SI 2 "pseudo_register_or_const_int_operand" "")))
+              (clobber (reg:HI 26))
+              (clobber (reg:DI 18))])]
+  "AVR_HAVE_MUL"
+  {
+    avr_fix_inputs (operands, (1 << 1) | (1 << 2), -1u);
+    if (avr_emit3_fix_outputs (gen_mulu<mode>si3, operands, 1 << 0,
+                               regmask (DImode, 18) | regmask (HImode, 26)))
+      DONE;
+  })
+
+;; "*muluqisi3"
+;; "*muluhisi3"
+(define_insn_and_split "*mulu<mode>si3"
   [(set (match_operand:SI 0 "pseudo_register_operand"                           "=r")
         (mult:SI (zero_extend:SI (match_operand:QIHI 1 "pseudo_register_operand" "r"))
                  (match_operand:SI 2 "pseudo_register_or_const_int_operand"      "rn")))
 
 ;; "mulsqisi3"
 ;; "mulshisi3"
-(define_insn_and_split "muls<mode>si3"
+(define_expand "muls<mode>si3"
+  [(parallel [(set (match_operand:SI 0 "pseudo_register_operand" "")
+                   (mult:SI (sign_extend:SI (match_operand:QIHI 1 "pseudo_register_operand" ""))
+                            (match_operand:SI 2 "pseudo_register_or_const_int_operand" "")))
+              (clobber (reg:HI 26))
+              (clobber (reg:DI 18))])]
+  "AVR_HAVE_MUL"
+  {
+    avr_fix_inputs (operands, (1 << 1) | (1 << 2), -1u);
+    if (avr_emit3_fix_outputs (gen_muls<mode>si3, operands, 1 << 0,
+                               regmask (DImode, 18) | regmask (HImode, 26)))
+      DONE;
+  })
+
+;; "*mulsqisi3"
+;; "*mulshisi3"
+(define_insn_and_split "*muls<mode>si3"
   [(set (match_operand:SI 0 "pseudo_register_operand"                           "=r")
         (mult:SI (sign_extend:SI (match_operand:QIHI 1 "pseudo_register_operand" "r"))
                  (match_operand:SI 2 "pseudo_register_or_const_int_operand"      "rn")))
 
 ;; One-extend operand 1
 
-(define_insn_and_split "mulohisi3"
+(define_expand "mulohisi3"
+  [(parallel [(set (match_operand:SI 0 "pseudo_register_operand" "")
+                   (mult:SI (not:SI (zero_extend:SI
+                                     (not:HI (match_operand:HI 1 "pseudo_register_operand" ""))))
+                            (match_operand:SI 2 "pseudo_register_or_const_int_operand" "")))
+              (clobber (reg:HI 26))
+              (clobber (reg:DI 18))])]
+  "AVR_HAVE_MUL"
+  {
+    avr_fix_inputs (operands, (1 << 1) | (1 << 2), -1u);
+    if (avr_emit3_fix_outputs (gen_mulohisi3, operands, 1 << 0,
+                               regmask (DImode, 18) | regmask (HImode, 26)))
+      DONE;
+  })
+
+(define_insn_and_split "*mulohisi3"
   [(set (match_operand:SI 0 "pseudo_register_operand"                          "=r")
         (mult:SI (not:SI (zero_extend:SI
                           (not:HI (match_operand:HI 1 "pseudo_register_operand" "r"))))
                             (any_extend:SI (match_operand:HI 2 "register_operand" ""))))
               (clobber (reg:HI 26))
               (clobber (reg:DI 18))])]
-  "AVR_HAVE_MUL")
+  "AVR_HAVE_MUL"
+  {
+    if (avr_emit3_fix_outputs (gen_<extend_u>mulhisi3, operands, 1 << 0,
+                               regmask (DImode, 18) | regmask (HImode, 26)))
+      DONE;
+  })
 
 (define_expand "usmulhisi3"
   [(parallel [(set (match_operand:SI 0 "register_operand" "")
                             (sign_extend:SI (match_operand:HI 2 "register_operand" ""))))
               (clobber (reg:HI 26))
               (clobber (reg:DI 18))])]
-  "AVR_HAVE_MUL")
+  "AVR_HAVE_MUL"
+  {
+    if (avr_emit3_fix_outputs (gen_usmulhisi3, operands, 1 << 0,
+                               regmask (DImode, 18) | regmask (HImode, 26)))
+      DONE;
+  })
 
 ;; "*uumulqihisi3" "*uumulhiqisi3" "*uumulhihisi3" "*uumulqiqisi3"
 ;; "*usmulqihisi3" "*usmulhiqisi3" "*usmulhihisi3" "*usmulqiqisi3"
               (clobber (reg:HI 22))])
    (set (match_operand:HI 0 "register_operand" "")
         (reg:HI 24))]
-  "AVR_HAVE_MUL")
+  "AVR_HAVE_MUL"
+  {
+    avr_fix_inputs (operands, 1 << 2, regmask (HImode, 18));
+  })
 
 
 (define_insn "*mulsi3_call"
         emit_insn (gen_mulsqipsi3 (operands[0], reg, operands[1]));
         DONE;
       }
+
+    if (avr_emit3_fix_outputs (gen_mulpsi3, operands, 1u << 0,
+                               regmask (DImode, 18) | regmask (HImode, 26)))
+      DONE;
   })
 
 (define_insn "*umulqihipsi3"
   [(set_attr "length" "7")
    (set_attr "cc" "clobber")])
 
-(define_insn_and_split "mulsqipsi3"
+(define_expand "mulsqipsi3"
+  [(parallel [(set (match_operand:PSI 0 "pseudo_register_operand" "")
+                   (mult:PSI (sign_extend:PSI (match_operand:QI 1 "pseudo_register_operand" ""))
+                             (match_operand:PSI 2 "pseudo_register_or_const_int_operand""")))
+              (clobber (reg:HI 26))
+              (clobber (reg:DI 18))])]
+  "AVR_HAVE_MUL"
+  {
+    avr_fix_inputs (operands, (1 << 1) | (1 << 2), -1u);
+    if (avr_emit3_fix_outputs (gen_mulsqipsi3, operands, 1 << 0,
+                               regmask (DImode, 18) | regmask (HImode, 26)))
+      DONE;
+  })
+
+(define_insn_and_split "*mulsqipsi3"
   [(set (match_operand:PSI 0 "pseudo_register_operand"                          "=r")
         (mult:PSI (sign_extend:PSI (match_operand:QI 1 "pseudo_register_operand" "r"))
                   (match_operand:PSI 2 "pseudo_register_or_const_int_operand"    "rn")))
         emit_insn (gen_fmul_insn (operand0, operand1, operand2));
         DONE;
       }
+    avr_fix_inputs (operands, 1 << 2, regmask (QImode, 24));
   })
 
 (define_insn "fmul_insn"
         emit_insn (gen_fmuls_insn (operand0, operand1, operand2));
         DONE;
       }
+    avr_fix_inputs (operands, 1 << 2, regmask (QImode, 24));
   })
 
 (define_insn "fmuls_insn"
         emit_insn (gen_fmulsu_insn (operand0, operand1, operand2));
         DONE;
       }
+    avr_fix_inputs (operands, 1 << 2, regmask (QImode, 24));
   })
 
 (define_insn "fmulsu_insn"
index 76c8b39..2d95f1b 100644 (file)
@@ -60,7 +60,10 @@ avr_device_to_as (int argc, const char **argv)
 
   return concat ("-mmcu=", avr_current_arch->arch_name,
     avr_current_device->dev_attribute & AVR_ERRATA_SKIP ? "" : " -mno-skip-bug",
-    avr_current_device->dev_attribute & AVR_ISA_RMW ? " -mrmw" : "", NULL);
+#ifdef HAVE_AS_AVR_MRMW_OPTION
+    avr_current_device->dev_attribute & AVR_ISA_RMW ? " -mrmw" : "",
+#endif // have as -mrmw
+    NULL);
 }
 
 /* Returns command line parameters to pass to ld.  */
index d04c972..76233b5 100644 (file)
@@ -648,11 +648,20 @@ _mm256_sign_epi32 (__m256i __X, __m256i __Y)
 #ifdef __OPTIMIZE__
 extern __inline __m256i
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_bslli_epi128 (__m256i __A, const int __N)
+{
+  return (__m256i)__builtin_ia32_pslldqi256 (__A, __N * 8);
+}
+
+extern __inline __m256i
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 _mm256_slli_si256 (__m256i __A, const int __N)
 {
   return (__m256i)__builtin_ia32_pslldqi256 (__A, __N * 8);
 }
 #else
+#define _mm256_bslli_epi128(A, N) \
+  ((__m256i)__builtin_ia32_pslldqi256 ((__m256i)(A), (int)(N) * 8))
 #define _mm256_slli_si256(A, N) \
   ((__m256i)__builtin_ia32_pslldqi256 ((__m256i)(A), (int)(N) * 8))
 #endif
@@ -730,11 +739,20 @@ _mm256_sra_epi32 (__m256i __A, __m128i __B)
 #ifdef __OPTIMIZE__
 extern __inline __m256i
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_bsrli_epi128 (__m256i __A, const int __N)
+{
+  return (__m256i)__builtin_ia32_psrldqi256 (__A, __N * 8);
+}
+
+extern __inline __m256i
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 _mm256_srli_si256 (__m256i __A, const int __N)
 {
   return (__m256i)__builtin_ia32_psrldqi256 (__A, __N * 8);
 }
 #else
+#define _mm256_bsrli_epi128(A, N) \
+  ((__m256i)__builtin_ia32_psrldqi256 ((__m256i)(A), (int)(N) * 8))
 #define _mm256_srli_si256(A, N) \
   ((__m256i)__builtin_ia32_psrldqi256 ((__m256i)(A), (int)(N) * 8))
 #endif
index 722c546..992f91f 100644 (file)
@@ -670,7 +670,10 @@ const char *host_detect_local_cpu (int argc, const char **argv)
          cpu = "bonnell";
          break;
        case 0x37:
+       case 0x4a:
        case 0x4d:
+       case 0x5a:
+       case 0x5d:
          /* Silvermont.  */
          cpu = "silvermont";
          break;
@@ -705,11 +708,22 @@ const char *host_detect_local_cpu (int argc, const char **argv)
          cpu = "ivybridge";
          break;
        case 0x3c:
+       case 0x3f:
        case 0x45:
        case 0x46:
          /* Haswell.  */
          cpu = "haswell";
          break;
+       case 0x3d:
+       case 0x4f:
+       case 0x56:
+         /* Broadwell.  */
+         cpu = "broadwell";
+         break;
+       case 0x57:
+         /* Knights Landing.  */
+         cpu = "knl";
+         break;
        default:
          if (arch)
            {
index a2bdf0e..8eb5cab 100644 (file)
@@ -1161,6 +1161,18 @@ _mm_srai_epi32 (__m128i __A, int __B)
 
 #ifdef __OPTIMIZE__
 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_bsrli_si128 (__m128i __A, const int __N)
+{
+  return (__m128i)__builtin_ia32_psrldqi128 (__A, __N * 8);
+}
+
+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_bslli_si128 (__m128i __A, const int __N)
+{
+  return (__m128i)__builtin_ia32_pslldqi128 (__A, __N * 8);
+}
+
+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _mm_srli_si128 (__m128i __A, const int __N)
 {
   return (__m128i)__builtin_ia32_psrldqi128 (__A, __N * 8);
@@ -1172,6 +1184,10 @@ _mm_slli_si128 (__m128i __A, const int __N)
   return (__m128i)__builtin_ia32_pslldqi128 (__A, __N * 8);
 }
 #else
+#define _mm_bsrli_si128(A, N) \
+  ((__m128i)__builtin_ia32_psrldqi128 ((__m128i)(A), (int)(N) * 8))
+#define _mm_bslli_si128(A, N) \
+  ((__m128i)__builtin_ia32_pslldqi128 ((__m128i)(A), (int)(N) * 8))
 #define _mm_srli_si128(A, N) \
   ((__m128i)__builtin_ia32_psrldqi128 ((__m128i)(A), (int)(N) * 8))
 #define _mm_slli_si128(A, N) \
index 668c1d1..5d20841 100644 (file)
@@ -2934,6 +2934,17 @@ ix86_parse_stringop_strategy_string (char *strategy_str, bool is_memset)
           return;
         }
 
+      if ((stringop_alg) i == rep_prefix_8_byte
+         && !TARGET_64BIT)
+       {
+         /* rep; movq isn't available in 32-bit code.  */
+         error ("stringop strategy name %s specified for option %s "
+                "not supported for 32-bit code",
+                 alg_name,
+                 is_memset ? "-mmemset_strategy=" : "-mmemcpy_strategy=");
+         return;
+       }
+
       input_ranges[n].max = maxs;
       input_ranges[n].alg = (stringop_alg) i;
       if (!strcmp (align, "align"))
@@ -5006,6 +5017,10 @@ ix86_in_large_data_p (tree exp)
   if (TREE_CODE (exp) == FUNCTION_DECL)
     return false;
 
+  /* Automatic variables are never large data.  */
+  if (TREE_CODE (exp) == VAR_DECL && !is_global_var (exp))
+    return false;
+
   if (TREE_CODE (exp) == VAR_DECL && DECL_SECTION_NAME (exp))
     {
       const char *section = TREE_STRING_POINTER (DECL_SECTION_NAME (exp));
@@ -5036,8 +5051,7 @@ ATTRIBUTE_UNUSED static section *
 x86_64_elf_select_section (tree decl, int reloc,
                           unsigned HOST_WIDE_INT align)
 {
-  if ((ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_MEDIUM_PIC)
-      && ix86_in_large_data_p (decl))
+  if (ix86_in_large_data_p (decl))
     {
       const char *sname = NULL;
       unsigned int flags = SECTION_WRITE;
@@ -5123,8 +5137,7 @@ x86_64_elf_section_type_flags (tree decl, const char *name, int reloc)
 static void ATTRIBUTE_UNUSED
 x86_64_elf_unique_section (tree decl, int reloc)
 {
-  if ((ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_MEDIUM_PIC)
-      && ix86_in_large_data_p (decl))
+  if (ix86_in_large_data_p (decl))
     {
       const char *prefix = NULL;
       /* We only need to use .gnu.linkonce if we don't have COMDAT groups.  */
@@ -5193,7 +5206,7 @@ x86_elf_aligned_common (FILE *file,
 {
   if ((ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_MEDIUM_PIC)
       && size > (unsigned int)ix86_section_threshold)
-    fputs (".largecomm\t", file);
+    fputs ("\t.largecomm\t", file);
   else
     fputs (COMMON_ASM_OP, file);
   assemble_name (file, name);
@@ -5892,6 +5905,7 @@ bool
 ix86_function_arg_regno_p (int regno)
 {
   int i;
+  enum calling_abi call_abi;
   const int *parm_regs;
 
   if (!TARGET_64BIT)
@@ -5914,16 +5928,18 @@ ix86_function_arg_regno_p (int regno)
   /* TODO: The function should depend on current function ABI but
      builtins.c would need updating then. Therefore we use the
      default ABI.  */
+  call_abi = ix86_cfun_abi ();
 
   /* RAX is used as hidden argument to va_arg functions.  */
-  if (ix86_abi == SYSV_ABI && regno == AX_REG)
+  if (call_abi == SYSV_ABI && regno == AX_REG)
     return true;
 
-  if (ix86_abi == MS_ABI)
+  if (call_abi == MS_ABI)
     parm_regs = x86_64_ms_abi_int_parameter_registers;
   else
     parm_regs = x86_64_int_parameter_registers;
-  for (i = 0; i < (ix86_abi == MS_ABI
+
+  for (i = 0; i < (call_abi == MS_ABI
                   ? X86_64_MS_REGPARM_MAX : X86_64_REGPARM_MAX); i++)
     if (regno == parm_regs[i])
       return true;
@@ -5972,7 +5988,18 @@ ix86_function_type_abi (const_tree fntype)
       if (abi == SYSV_ABI)
        {
          if (lookup_attribute ("ms_abi", TYPE_ATTRIBUTES (fntype)))
-           abi = MS_ABI;
+           {
+             if (TARGET_X32)
+               {
+                 static bool warned = false;
+                 if (!warned)
+                   {
+                     error ("X32 does not support ms_abi attribute");
+                     warned = true;
+                   }
+               }
+             abi = MS_ABI;
+           }
        }
       else if (lookup_attribute ("sysv_abi", TYPE_ATTRIBUTES (fntype)))
        abi = SYSV_ABI;
@@ -7756,7 +7783,7 @@ ix86_function_value_regno_p (const unsigned int regno)
       return true;
     case DI_REG:
     case SI_REG:
-      return TARGET_64BIT && ix86_abi != MS_ABI;
+      return TARGET_64BIT && ix86_cfun_abi () != MS_ABI;
 
       /* Complex values are returned in %st(0)/%st(1) pair.  */
     case ST0_REG:
@@ -7764,7 +7791,7 @@ ix86_function_value_regno_p (const unsigned int regno)
       /* TODO: The function should depend on current function ABI but
        builtins.c would need updating then. Therefore we use the
        default ABI.  */
-      if (TARGET_64BIT && ix86_abi == MS_ABI)
+      if (TARGET_64BIT && ix86_cfun_abi () == MS_ABI)
        return false;
       return TARGET_FLOAT_RETURNS_IN_80387;
 
@@ -11063,6 +11090,10 @@ ix86_expand_prologue (void)
              if (sp_is_cfa_reg)
                m->fs.cfa_offset += UNITS_PER_WORD;
              RTX_FRAME_RELATED_P (insn) = 1;
+             add_reg_note (insn, REG_FRAME_RELATED_EXPR,
+                           gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+                                        plus_constant (Pmode, stack_pointer_rtx,
+                                                       -UNITS_PER_WORD)));
            }
        }
 
@@ -11076,6 +11107,10 @@ ix86_expand_prologue (void)
              if (sp_is_cfa_reg)
                m->fs.cfa_offset += UNITS_PER_WORD;
              RTX_FRAME_RELATED_P (insn) = 1;
+             add_reg_note (insn, REG_FRAME_RELATED_EXPR,
+                           gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+                                        plus_constant (Pmode, stack_pointer_rtx,
+                                                       -UNITS_PER_WORD)));
            }
        }
 
@@ -14503,7 +14538,7 @@ put_condition_code (enum rtx_code code, enum machine_mode mode, bool reverse,
       if (mode == CCmode)
        suffix = "b";
       else if (mode == CCCmode)
-       suffix = "c";
+       suffix = fp ? "b" : "c";
       else
        gcc_unreachable ();
       break;
@@ -14526,9 +14561,9 @@ put_condition_code (enum rtx_code code, enum machine_mode mode, bool reverse,
       break;
     case GEU:
       if (mode == CCmode)
-       suffix = fp ? "nb" : "ae";
+       suffix = "nb";
       else if (mode == CCCmode)
-       suffix = "nc";
+       suffix = fp ? "nb" : "nc";
       else
        gcc_unreachable ();
       break;
@@ -22237,7 +22272,7 @@ ix86_split_long_move (rtx operands[])
         Do an lea to the last part and use only one colliding move.  */
       else if (collisions > 1)
        {
-         rtx base;
+         rtx base, addr, tls_base = NULL_RTX;
 
          collisions = 1;
 
@@ -22248,10 +22283,50 @@ ix86_split_long_move (rtx operands[])
          if (GET_MODE (base) != Pmode)
            base = gen_rtx_REG (Pmode, REGNO (base));
 
-         emit_insn (gen_rtx_SET (VOIDmode, base, XEXP (part[1][0], 0)));
+         addr = XEXP (part[1][0], 0);
+         if (TARGET_TLS_DIRECT_SEG_REFS)
+           {
+             struct ix86_address parts;
+             int ok = ix86_decompose_address (addr, &parts);
+             gcc_assert (ok);
+             if (parts.seg == DEFAULT_TLS_SEG_REG)
+               {
+                 /* It is not valid to use %gs: or %fs: in
+                    lea though, so we need to remove it from the
+                    address used for lea and add it to each individual
+                    memory loads instead.  */
+                 addr = copy_rtx (addr);
+                 rtx *x = &addr;
+                 while (GET_CODE (*x) == PLUS)
+                   {
+                     for (i = 0; i < 2; i++)
+                       {
+                         rtx u = XEXP (*x, i);
+                         if (GET_CODE (u) == ZERO_EXTEND)
+                           u = XEXP (u, 0);
+                         if (GET_CODE (u) == UNSPEC
+                             && XINT (u, 1) == UNSPEC_TP)
+                           {
+                             tls_base = XEXP (*x, i);
+                             *x = XEXP (*x, 1 - i);
+                             break;
+                           }
+                       }
+                     if (tls_base)
+                       break;
+                     x = &XEXP (*x, 0);
+                   }
+                 gcc_assert (tls_base);
+               }
+           }
+         emit_insn (gen_rtx_SET (VOIDmode, base, addr));
+         if (tls_base)
+           base = gen_rtx_PLUS (GET_MODE (base), base, tls_base);
          part[1][0] = replace_equiv_address (part[1][0], base);
          for (i = 1; i < nparts; i++)
            {
+             if (tls_base)
+               base = copy_rtx (base);
              tmp = plus_constant (Pmode, base, UNITS_PER_WORD * i);
              part[1][i] = replace_equiv_address (part[1][i], tmp);
            }
@@ -22757,12 +22832,19 @@ counter_mode (rtx count_exp)
 static rtx
 ix86_copy_addr_to_reg (rtx addr)
 {
+  rtx reg;
   if (GET_MODE (addr) == Pmode || GET_MODE (addr) == VOIDmode)
-    return copy_addr_to_reg (addr);
+    {
+      reg = copy_addr_to_reg (addr);
+      REG_POINTER (reg) = 1;
+      return reg;
+    }
   else
     {
       gcc_assert (GET_MODE (addr) == DImode && Pmode == SImode);
-      return gen_rtx_SUBREG (SImode, copy_to_mode_reg (DImode, addr), 0);
+      reg = copy_to_mode_reg (DImode, addr);
+      REG_POINTER (reg) = 1;
+      return gen_rtx_SUBREG (SImode, reg, 0);
     }
 }
 
@@ -23653,6 +23735,8 @@ expand_set_or_movmem_prologue_epilogue_by_misaligned_moves (rtx destmem, rtx src
       *destptr = expand_simple_binop (GET_MODE (*destptr), PLUS, *destptr,
                                      GEN_INT (prolog_size),
                                      NULL_RTX, 1, OPTAB_DIRECT);
+      if (REG_P (*destptr) && REG_P (saveddest) && REG_POINTER (saveddest))
+       REG_POINTER (*destptr) = 1;
       *destptr = expand_simple_binop (GET_MODE (*destptr), AND, *destptr,
                                      GEN_INT (-desired_align),
                                      *destptr, 1, OPTAB_DIRECT);
@@ -23662,8 +23746,8 @@ expand_set_or_movmem_prologue_epilogue_by_misaligned_moves (rtx destmem, rtx src
                                       saveddest, 1, OPTAB_DIRECT);
       /* Adjust srcptr and count.  */
       if (!issetmem)
-       *srcptr = expand_simple_binop (GET_MODE (*srcptr), MINUS, *srcptr, saveddest,
-                                       *srcptr, 1, OPTAB_DIRECT);
+       *srcptr = expand_simple_binop (GET_MODE (*srcptr), MINUS, *srcptr,
+                                      saveddest, *srcptr, 1, OPTAB_DIRECT);
       *count = expand_simple_binop (GET_MODE (*count), PLUS, *count,
                                    saveddest, *count, 1, OPTAB_DIRECT);
       /* We copied at most size + prolog_size.  */
@@ -23890,7 +23974,8 @@ decide_alg (HOST_WIDE_INT count, HOST_WIDE_INT expected_size,
                      *noalign = alg_noalign;
                      return alg;
                    }
-                 break;
+                 else if (!any_alg_usable_p)
+                   break;
                }
              else if (alg_usable_p (candidate, memset))
                {
@@ -23928,9 +24013,10 @@ decide_alg (HOST_WIDE_INT count, HOST_WIDE_INT expected_size,
       alg = decide_alg (count, max / 2, min_size, max_size, memset,
                        zero_memset, dynamic_check, noalign);
       gcc_assert (*dynamic_check == -1);
-      gcc_assert (alg != libcall);
       if (TARGET_INLINE_STRINGOPS_DYNAMICALLY)
        *dynamic_check = max;
+      else
+       gcc_assert (alg != libcall);
       return alg;
     }
   return (alg_usable_p (algs->unknown_size, memset)
@@ -32344,7 +32430,8 @@ fold_builtin_cpu (tree fndecl, tree *args)
     M_AMDFAM15H_BDVER3,
     M_AMDFAM15H_BDVER4,
     M_INTEL_COREI7_IVYBRIDGE,
-    M_INTEL_COREI7_HASWELL
+    M_INTEL_COREI7_HASWELL,
+    M_INTEL_COREI7_BROADWELL
   };
 
   static struct _arch_names_table
@@ -32365,6 +32452,7 @@ fold_builtin_cpu (tree fndecl, tree *args)
       {"sandybridge", M_INTEL_COREI7_SANDYBRIDGE},
       {"ivybridge", M_INTEL_COREI7_IVYBRIDGE},
       {"haswell", M_INTEL_COREI7_HASWELL},
+      {"broadwell", M_INTEL_COREI7_BROADWELL},
       {"bonnell", M_INTEL_BONNELL},
       {"silvermont", M_INTEL_SILVERMONT},
       {"amdfam10h", M_AMDFAM10H},
@@ -32723,6 +32811,15 @@ safe_vector_operand (rtx x, enum machine_mode mode)
   return x;
 }
 
+/* Fixup modeless constants to fit required mode.  */
+static rtx
+fixup_modeless_constant (rtx x, machine_mode mode)
+{
+  if (GET_MODE (x) == VOIDmode)
+    x = convert_to_mode (mode, x, 1);
+  return x;
+}
+
 /* Subroutine of ix86_expand_builtin to take care of binop insns.  */
 
 static rtx
@@ -34083,6 +34180,8 @@ ix86_expand_args_builtin (const struct builtin_description *d,
          if (memory_operand (op, mode))
            num_memory++;
 
+         op = fixup_modeless_constant (op, mode);
+
          if (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
            {
              if (optimize || !match || num_memory > 1)
@@ -34450,6 +34549,8 @@ ix86_expand_round_builtin (const struct builtin_description *d,
          if (VECTOR_MODE_P (mode))
            op = safe_vector_operand (op, mode);
 
+         op = fixup_modeless_constant (op, mode);
+
          if (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
            {
              if (optimize || !match)
@@ -34796,6 +34897,8 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
              if (VECTOR_MODE_P (mode))
                op = safe_vector_operand (op, mode);
 
+             op = fixup_modeless_constant (op, mode);
+
              if (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
                op = copy_to_mode_reg (mode, op);
              else
@@ -35822,6 +35925,9 @@ addcarryx:
        op1 = copy_to_mode_reg (Pmode, op1);
       if (!insn_data[icode].operand[3].predicate (op2, mode2))
        op2 = copy_to_mode_reg (mode2, op2);
+
+      op3 = fixup_modeless_constant (op3, mode3);
+
       if (GET_MODE (op3) == mode3 || GET_MODE (op3) == VOIDmode)
        {
          if (!insn_data[icode].operand[4].predicate (op3, mode3))
@@ -35963,6 +36069,8 @@ addcarryx:
       if (!insn_data[icode].operand[0].predicate (op0, Pmode))
        op0 = copy_to_mode_reg (Pmode, op0);
 
+      op1 = fixup_modeless_constant (op1, mode1);
+
       if (GET_MODE (op1) == mode1 || GET_MODE (op1) == VOIDmode)
        {
          if (!insn_data[icode].operand[1].predicate (op1, mode1))
@@ -36009,6 +36117,8 @@ addcarryx:
       mode3 = insn_data[icode].operand[3].mode;
       mode4 = insn_data[icode].operand[4].mode;
 
+      op0 = fixup_modeless_constant (op0, mode0);
+
       if (GET_MODE (op0) == mode0
          || (GET_MODE (op0) == VOIDmode && op0 != constm1_rtx))
        {
@@ -41076,9 +41186,7 @@ ix86_encode_section_info (tree decl, rtx rtl, int first)
 {
   default_encode_section_info (decl, rtl, first);
 
-  if (TREE_CODE (decl) == VAR_DECL
-      && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))
-      && ix86_in_large_data_p (decl))
+  if (ix86_in_large_data_p (decl))
     SYMBOL_REF_FLAGS (XEXP (rtl, 0)) |= SYMBOL_FLAG_FAR_ADDR;
 }
 
index cd7eadb..4584bbb 100644 (file)
              (const_string "ssemov")
            (eq_attr "alternative" "19,20")
              (const_string "ssecvt")
-           (match_operand 1 "pic_32bit_operand")
+           (and (match_operand 0 "register_operand")
+                (match_operand 1 "pic_32bit_operand"))
              (const_string "lea")
           ]
           (const_string "imov")))
              (const_string "sselog1")
            (eq_attr "alternative" "7,8,9,10,12")
              (const_string "ssemov")
-           (match_operand 1 "pic_32bit_operand")
+           (and (match_operand 0 "register_operand")
+                (match_operand 1 "pic_32bit_operand"))
              (const_string "lea")
           ]
           (const_string "imov")))
    (set_attr "mode" "<MODE>")])
 
 ;; BMI2 instructions.
-(define_insn "bmi2_bzhi_<mode>3"
+(define_expand "bmi2_bzhi_<mode>3"
+  [(parallel
+    [(set (match_operand:SWI48 0 "register_operand")
+         (zero_extract:SWI48
+           (match_operand:SWI48 1 "nonimmediate_operand")
+           (umin:SWI48
+             (and:SWI48 (match_operand:SWI48 2 "register_operand")
+                        (const_int 255))
+             (match_dup 3))
+           (const_int 0)))
+     (clobber (reg:CC FLAGS_REG))])]
+  "TARGET_BMI2"
+  "operands[3] = GEN_INT (<MODE_SIZE> * BITS_PER_UNIT);")
+
+(define_insn "*bmi2_bzhi_<mode>3"
   [(set (match_operand:SWI48 0 "register_operand" "=r")
-       (and:SWI48 (lshiftrt:SWI48 (const_int -1)
-                                  (match_operand:SWI48 2 "register_operand" "r"))
-                  (match_operand:SWI48 1 "nonimmediate_operand" "rm")))
+       (zero_extract:SWI48
+         (match_operand:SWI48 1 "nonimmediate_operand" "rm")
+         (umin:SWI48
+           (and:SWI48 (match_operand:SWI48 2 "register_operand" "r")
+                      (const_int 255))
+           (match_operand:SWI48 3 "const_int_operand" "n"))
+         (const_int 0)))
    (clobber (reg:CC FLAGS_REG))]
-  "TARGET_BMI2"
+  "TARGET_BMI2 && INTVAL (operands[3]) == <MODE_SIZE> * BITS_PER_UNIT"
   "bzhi\t{%2, %1, %0|%0, %1, %2}"
   [(set_attr "type" "bitmanip")
    (set_attr "prefix" "vex")
    (set_attr "mode" "<MODE>")])
 
+(define_mode_attr k [(SI "k") (DI "q")])
+(define_insn "*bmi2_bzhi_<mode>3_1"
+  [(set (match_operand:SWI48 0 "register_operand" "=r")
+       (zero_extract:SWI48
+         (match_operand:SWI48 1 "nonimmediate_operand" "rm")
+         (umin:SWI48
+           (zero_extend:SWI48 (match_operand:QI 2 "register_operand" "r"))
+           (match_operand:SWI48 3 "const_int_operand" "n"))
+         (const_int 0)))
+   (clobber (reg:CC FLAGS_REG))]
+  "TARGET_BMI2 && INTVAL (operands[3]) == <MODE_SIZE> * BITS_PER_UNIT"
+  "bzhi\t{%<k>2, %1, %0|%0, %1, %<k>2}"
+  [(set_attr "type" "bitmanip")
+   (set_attr "prefix" "vex")
+   (set_attr "mode" "<MODE>")])
+
 (define_insn "bmi2_pdep_<mode>3"
   [(set (match_operand:SWI48 0 "register_operand" "=r")
         (unspec:SWI48 [(match_operand:SWI48 1 "register_operand" "r")
        (symbol_ref "memory_address_length (operands[0], false)"))
    (set_attr "memory" "none")])
 
-(define_insn "*prefetch_prefetchwt1_<mode>"
-  [(prefetch (match_operand:P 0 "address_operand" "p")
+(define_insn "*prefetch_prefetchwt1"
+  [(prefetch (match_operand 0 "address_operand" "p")
             (const_int 1)
             (const_int 2))]
   "TARGET_PREFETCHWT1"
index 214acde..a7d2a7e 100644 (file)
 ;; Avoid combining registers from different units in a single alternative,
 ;; see comment above inline_secondary_memory_needed function in i386.c
 (define_insn "*vec_extractv2sf_1"
-  [(set (match_operand:SF 0 "nonimmediate_operand"     "=y,x,y,x,f,r")
+  [(set (match_operand:SF 0 "nonimmediate_operand"     "=y,x,x,y,x,f,r")
        (vec_select:SF
-         (match_operand:V2SF 1 "nonimmediate_operand" " 0,0,o,o,o,o")
+         (match_operand:V2SF 1 "nonimmediate_operand" " 0,x,x,o,o,o,o")
          (parallel [(const_int 1)])))]
   "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
   "@
    punpckhdq\t%0, %0
-   unpckhps\t%0, %0
+   %vmovshdup\t{%1, %0|%0, %1}
+   shufps\t{$0xe5, %1, %0|%0, %1, 0xe5}
    #
    #
    #
    #"
-  [(set_attr "type" "mmxcvt,sselog1,mmxmov,ssemov,fmov,imov")
-   (set_attr "mode" "DI,V4SF,SF,SF,SF,SF")])
+  [(set_attr "isa" "*,sse3,noavx,*,*,*,*")
+   (set_attr "type" "mmxcvt,sse,sseshuf1,mmxmov,ssemov,fmov,imov")
+   (set_attr "length_immediate" "*,*,1,*,*,*,*")
+   (set_attr "prefix_rep" "*,1,*,*,*,*,*")
+   (set_attr "prefix" "orig,maybe_vex,orig,orig,orig,orig,orig")
+   (set_attr "mode" "DI,V4SF,V4SF,SF,SF,SF,SF")])
 
 (define_split
   [(set (match_operand:SF 0 "register_operand")
 ;; Avoid combining registers from different units in a single alternative,
 ;; see comment above inline_secondary_memory_needed function in i386.c
 (define_insn "*vec_extractv2si_1"
-  [(set (match_operand:SI 0 "nonimmediate_operand"     "=y,x,x,x,y,x,r")
+  [(set (match_operand:SI 0 "nonimmediate_operand"     "=y,x,x,y,x,r")
        (vec_select:SI
-         (match_operand:V2SI 1 "nonimmediate_operand" " 0,0,x,0,o,o,o")
+         (match_operand:V2SI 1 "nonimmediate_operand" " 0,x,x,o,o,o")
          (parallel [(const_int 1)])))]
   "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
   "@
    punpckhdq\t%0, %0
-   punpckhdq\t%0, %0
-   pshufd\t{$85, %1, %0|%0, %1, 85}
-   unpckhps\t%0, %0
+   %vpshufd\t{$0xe5, %1, %0|%0, %1, 0xe5}
+   shufps\t{$0xe5, %1, %0|%0, %1, 0xe5}
    #
    #
    #"
-  [(set (attr "isa")
-     (if_then_else (eq_attr "alternative" "1,2")
-       (const_string "sse2")
-       (const_string "*")))
-   (set_attr "type" "mmxcvt,sselog1,sselog1,sselog1,mmxmov,ssemov,imov")
-   (set_attr "length_immediate" "*,*,1,*,*,*,*")
-   (set_attr "mode" "DI,TI,TI,V4SF,SI,SI,SI")])
+  [(set_attr "isa" "*,sse2,noavx,*,*,*")
+   (set_attr "type" "mmxcvt,sseshuf1,sseshuf1,mmxmov,ssemov,imov")
+   (set_attr "length_immediate" "*,1,1,*,*,*")
+   (set_attr "prefix" "orig,maybe_vex,orig,orig,orig,orig")
+   (set_attr "mode" "DI,TI,V4SF,SI,SI,SI")])
 
 (define_split
   [(set (match_operand:SI 0 "register_operand")
index 2ef1384..4ba2e6f 100644 (file)
 ;; a segment override.  Defined as a special predicate to allow
 ;; mode-less const_int operands pass to address_operand.
 (define_special_predicate "address_no_seg_operand"
-  (match_operand 0 "address_operand")
+  (match_test "address_operand (op, VOIDmode)")
 {
   struct ix86_address parts;
   int ok;
 
+  if (!CONST_INT_P (op)
+      && mode != VOIDmode
+      && GET_MODE (op) != mode)
+    return false;
+
   ok = ix86_decompose_address (op, &parts);
   gcc_assert (ok);
   return parts.seg == SEG_DEFAULT;
 ;; Return true if op if a valid base register, displacement or
 ;; sum of base register and displacement for VSIB addressing.
 (define_predicate "vsib_address_operand"
-  (match_operand 0 "address_operand")
+  (match_test "address_operand (op, VOIDmode)")
 {
   struct ix86_address parts;
   int ok;
index c700425..8f5120f 100644 (file)
 (define_expand "vec_unpacks_hi_v8sf"
   [(set (match_dup 2)
        (vec_select:V4SF
-         (match_operand:V8SF 1 "nonimmediate_operand")
+         (match_operand:V8SF 1 "register_operand")
          (parallel [(const_int 4) (const_int 5)
                     (const_int 6) (const_int 7)])))
    (set (match_operand:V4DF 0 "register_operand")
 (define_expand "vec_unpacks_hi_v16sf"
   [(set (match_dup 2)
        (vec_select:V8SF
-         (match_operand:V16SF 1 "nonimmediate_operand")
+         (match_operand:V16SF 1 "register_operand")
          (parallel [(const_int 8) (const_int 9)
                     (const_int 10) (const_int 11)
                     (const_int 12) (const_int 13)
   "TARGET_AVX512F
    && (INTVAL (operands[2]) == (INTVAL (operands[3]) - 1)
        && INTVAL (operands[3]) == (INTVAL (operands[4]) - 1)
-       && INTVAL (operands[4]) == (INTVAL (operands[5]) - 1))"
+       && INTVAL (operands[4]) == (INTVAL (operands[5]) - 1))
+   && rtx_equal_p (operands[6], operands[0])"
 {
   operands[2] = GEN_INT ((INTVAL (operands[2])) >> 2);
   return "vextract<shuffletype>32x4\t{%2, %1, %0%{%7%}|%0%{%7%}, %1, %2}";
              (const_int 2) (const_int 3)]))
          (match_operand:<ssehalfvecmode> 2 "memory_operand" "0")
          (match_operand:QI 3 "register_operand" "Yk")))]
-  "TARGET_AVX512F"
-"vextract<shuffletype>64x4\t{$0x0, %1, %0%{%3%}|%0%{%3%}, %1, 0x0}"
+  "TARGET_AVX512F
+   && rtx_equal_p (operands[2], operands[0])"
+  "vextract<shuffletype>64x4\t{$0x0, %1, %0%{%3%}|%0%{%3%}, %1, 0x0}"
   [(set_attr "type" "sselog")
    (set_attr "prefix_extra" "1")
    (set_attr "length_immediate" "1")
              (const_int 6) (const_int 7)]))
          (match_operand:<ssehalfvecmode> 2 "memory_operand" "0")
          (match_operand:QI 3 "register_operand" "Yk")))]
-  "TARGET_AVX512F"
+  "TARGET_AVX512F
+   && rtx_equal_p (operands[2], operands[0])"
   "vextract<shuffletype>64x4\t{$0x1, %1, %0%{%3%}|%0%{%3%}, %1, 0x1}"
   [(set_attr "type" "sselog")
    (set_attr "prefix_extra" "1")
    movss\t{%2, %0|%0, %2}
    movss\t{%2, %0|%0, %2}
    vmovss\t{%2, %1, %0|%0, %1, %2}"
-  [(set_attr "isa" "sse2,*,noavx,noavx,avx")
+  [(set_attr "isa" "sse2,sse2,noavx,noavx,avx")
    (set_attr "type" "ssemov")
    (set_attr "prefix" "maybe_vex,maybe_vex,orig,orig,vex")
    (set_attr "mode" "TI,TI,V4SF,SF,SF")])
    (set_attr "atom_sse_attr" "fence")
    (set_attr "memory" "unknown")])
 
-
+;; As per AMD and Intel ISA manuals, the first operand is extensions
+;; and it goes to %ecx. The second operand received is hints and it goes
+;; to %eax.
 (define_insn "sse3_mwait"
-  [(unspec_volatile [(match_operand:SI 0 "register_operand" "a")
-                    (match_operand:SI 1 "register_operand" "c")]
+  [(unspec_volatile [(match_operand:SI 0 "register_operand" "c")
+                    (match_operand:SI 1 "register_operand" "a")]
                    UNSPECV_MWAIT)]
   "TARGET_SSE3"
 ;; 64bit version is "mwait %rax,%rcx". But only lower 32bits are used.
index 41adc4a..229a0f3 100644 (file)
@@ -11495,7 +11495,10 @@ expand_vec_perm_interleave_2 (struct expand_vec_perm_d *d)
       gcc_assert (e < nelt);
       dfinal.perm[i] = e;
     }
-  dfinal.op0 = gen_reg_rtx (dfinal.vmode);
+  if (d->testing_p)
+    dfinal.op0 = gen_raw_REG (dfinal.vmode, LAST_VIRTUAL_REGISTER + 1);
+  else
+    dfinal.op0 = gen_reg_rtx (dfinal.vmode);
   dfinal.op1 = dfinal.op0;
   dfinal.one_operand_p = true;
   dremap.target = dfinal.op0;
index 48038d5..ffe1aa6 100644 (file)
@@ -22,6 +22,9 @@
 #undef TARGET_SUPPORTS_PIC
 #define TARGET_SUPPORTS_PIC 1
 
+#undef CPP_SPEC
+#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
+
 #undef TLS_NEEDS_GOT
 #define TLS_NEEDS_GOT 1
 
index a786d4c..ff88d98 100644 (file)
@@ -1163,6 +1163,22 @@ struct mips_cpu_info {
 #define SUBTARGET_ASM_SPEC ""
 #endif
 
+/* FP_ASM_SPEC represents the floating-point options that must be passed
+   to the assembler when FPXX support exists.  Prior to that point the
+   assembler could accept the options but were not required for
+   correctness.  We only add the options when absolutely necessary
+   because passing -msoft-float to the assembler will cause it to reject
+   all hard-float instructions which may require some user code to be
+   updated.  */
+
+#ifdef HAVE_AS_DOT_MODULE
+#define FP_ASM_SPEC "\
+%{mhard-float} %{msoft-float} \
+%{msingle-float} %{mdouble-float}"
+#else
+#define FP_ASM_SPEC
+#endif
+
 #undef ASM_SPEC
 #define ASM_SPEC "\
 %{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} \
@@ -1188,7 +1204,8 @@ struct mips_cpu_info {
 %{mfp32} %{mfp64} %{mnan=*} \
 %{mshared} %{mno-shared} \
 %{msym32} %{mno-sym32} \
-%{mtune=*} \
+%{mtune=*}" \
+FP_ASM_SPEC "\
 %(subtarget_asm_spec)"
 
 /* Extra switches sometimes passed to the linker.  */
index 3e77ca6..1b3fd99 100644 (file)
@@ -26,6 +26,9 @@
     }                                           \
   while (0)
 
+#undef CPP_SPEC
+#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
+
 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-nios2.so.1"
 
 #undef LINK_SPEC
index cdd2e6b..047b615 100644 (file)
@@ -2135,6 +2135,18 @@ nios2_output_dwarf_dtprel (FILE *file, int size, rtx x)
   fprintf (file, ")");
 }
 
+/* Implemet TARGET_ASM_FILE_END.  */
+
+static void
+nios2_asm_file_end (void)
+{
+  /* The Nios II Linux stack is mapped non-executable by default, so add a
+     .note.GNU-stack section for switching to executable stacks only when
+     trampolines are generated.  */
+  if (TARGET_LINUX_ABI && trampolines_created)
+    file_end_indicate_exec_stack ();
+}
+
 /* Implement TARGET_ASM_FUNCTION_PROLOGUE.  */
 static void
 nios2_asm_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
@@ -3313,6 +3325,9 @@ nios2_merge_decl_attributes (tree olddecl, tree newdecl)
 #undef TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA
 #define TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA nios2_output_addr_const_extra
 
+#undef TARGET_ASM_FILE_END
+#define TARGET_ASM_FILE_END nios2_asm_file_end
+
 #undef TARGET_OPTION_OVERRIDE
 #define TARGET_OPTION_OVERRIDE nios2_option_override
 
index a9117b9..bfcba37 100644 (file)
   (and (match_code "mem")
        (match_test "IS_LO_SUM_DLT_ADDR_P (XEXP (op, 0))")))
 
-(define_constraint "Q"
+(define_memory_constraint "Q"
   "A memory operand that can be used as the destination operand of an
    integer store, or the source operand of an integer load.  That is
    any memory operand that isn't a symbolic, indexed or lo_sum memory
   (and (match_code "mem")
        (match_test "IS_INDEX_ADDR_P (XEXP (op, 0))")))
 
-(define_constraint "T"
+(define_memory_constraint "T"
   "A memory operand for floating-point loads and stores."
   (match_test "floating_point_store_memory_operand (op, mode)"))
 
index 399308a..b4c2697 100644 (file)
@@ -31,7 +31,7 @@ along with GCC; see the file COPYING3.  If not see
   while (0)
 
 #undef CPP_SPEC
-#define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
+#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
 
 #undef ASM_SPEC
 #define ASM_SPEC \
index 8019820..bae1cf4 100644 (file)
@@ -119,6 +119,7 @@ static void pa_output_function_epilogue (FILE *, HOST_WIDE_INT);
 static int pa_adjust_cost (rtx, rtx, rtx, int);
 static int pa_adjust_priority (rtx, int);
 static int pa_issue_rate (void);
+static int pa_reloc_rw_mask (void);
 static void pa_som_asm_init_sections (void) ATTRIBUTE_UNUSED;
 static section *pa_som_tm_clone_table_section (void) ATTRIBUTE_UNUSED;
 static section *pa_select_section (tree, int, unsigned HOST_WIDE_INT)
@@ -294,6 +295,9 @@ static size_t n_deferred_plabels = 0;
 #define TARGET_ASM_FILE_END output_deferred_plabels
 #endif
 
+#undef TARGET_ASM_RELOC_RW_MASK
+#define TARGET_ASM_RELOC_RW_MASK pa_reloc_rw_mask
+
 #undef TARGET_PRINT_OPERAND_PUNCT_VALID_P
 #define TARGET_PRINT_OPERAND_PUNCT_VALID_P pa_print_operand_punct_valid_p
 
@@ -2201,11 +2205,11 @@ pa_emit_move_sequence (rtx *operands, enum machine_mode mode, rtx scratch_reg)
                                          gen_rtx_HIGH (mode, operand1)));
                  emit_move_insn (temp, gen_rtx_LO_SUM (mode, temp, operand1));
                  if (mode == DImode)
-                   emit_insn (gen_insvdi (operand0, GEN_INT (32),
-                                          const0_rtx, temp));
+                   insn = emit_insn (gen_insvdi (operand0, GEN_INT (32),
+                                                 const0_rtx, temp));
                  else
-                   emit_insn (gen_insvsi (operand0, GEN_INT (32),
-                                          const0_rtx, temp));
+                   insn = emit_insn (gen_insvsi (operand0, GEN_INT (32),
+                                                 const0_rtx, temp));
                }
              else
                {
@@ -2227,11 +2231,15 @@ pa_emit_move_sequence (rtx *operands, enum machine_mode mode, rtx scratch_reg)
                        }
 
                      if (mode == DImode)
-                       emit_insn (gen_insvdi (operand0, GEN_INT (len),
-                                              GEN_INT (pos), GEN_INT (v5)));
+                       insn = emit_insn (gen_insvdi (operand0,
+                                                     GEN_INT (len),
+                                                     GEN_INT (pos),
+                                                     GEN_INT (v5)));
                      else
-                       emit_insn (gen_insvsi (operand0, GEN_INT (len),
-                                              GEN_INT (pos), GEN_INT (v5)));
+                       insn = emit_insn (gen_insvsi (operand0,
+                                                     GEN_INT (len),
+                                                     GEN_INT (pos),
+                                                     GEN_INT (v5)));
 
                      len = pos > 0 && pos < 5 ? pos : 5;
                      pos -= len;
@@ -2583,28 +2591,29 @@ pa_output_move_double (rtx *operands)
               && GET_CODE (XEXP (addr, 0)) == MULT)
        {
          rtx xoperands[4];
-         rtx high_reg = gen_rtx_SUBREG (SImode, operands[0], 0);
 
-         if (!reg_overlap_mentioned_p (high_reg, addr))
-           {
-             xoperands[0] = high_reg;
-             xoperands[1] = XEXP (addr, 1);
-             xoperands[2] = XEXP (XEXP (addr, 0), 0);
-             xoperands[3] = XEXP (XEXP (addr, 0), 1);
-             output_asm_insn ("{sh%O3addl %2,%1,%0|shladd,l %2,%O3,%1,%0}",
-                              xoperands);
-             return "ldw 4(%0),%R0\n\tldw 0(%0),%0";
-           }
-         else
-           {
-             xoperands[0] = high_reg;
-             xoperands[1] = XEXP (addr, 1);
-             xoperands[2] = XEXP (XEXP (addr, 0), 0);
-             xoperands[3] = XEXP (XEXP (addr, 0), 1);
-             output_asm_insn ("{sh%O3addl %2,%1,%R0|shladd,l %2,%O3,%1,%R0}",
-                              xoperands);
-             return "ldw 0(%R0),%0\n\tldw 4(%R0),%R0";
-           }
+         /* Load address into left half of destination register.  */
+         xoperands[0] = gen_rtx_SUBREG (SImode, operands[0], 0);
+         xoperands[1] = XEXP (addr, 1);
+         xoperands[2] = XEXP (XEXP (addr, 0), 0);
+         xoperands[3] = XEXP (XEXP (addr, 0), 1);
+         output_asm_insn ("{sh%O3addl %2,%1,%0|shladd,l %2,%O3,%1,%0}",
+                          xoperands);
+         return "ldw 4(%0),%R0\n\tldw 0(%0),%0";
+       }
+      else if (GET_CODE (addr) == PLUS
+              && REG_P (XEXP (addr, 0))
+              && REG_P (XEXP (addr, 1)))
+       {
+         rtx xoperands[3];
+
+         /* Load address into left half of destination register.  */
+         xoperands[0] = gen_rtx_SUBREG (SImode, operands[0], 0);
+         xoperands[1] = XEXP (addr, 0);
+         xoperands[2] = XEXP (addr, 1);
+         output_asm_insn ("{addl|add,l} %1,%2,%0",
+                          xoperands);
+         return "ldw 4(%0),%R0\n\tldw 0(%0),%0";
        }
     }
 
@@ -5405,6 +5414,7 @@ pa_output_global_address (FILE *file, rtx x, int round_constant)
 
       switch (GET_CODE (XEXP (XEXP (x, 0), 0)))
        {
+       case LABEL_REF:
        case SYMBOL_REF:
          base = XEXP (XEXP (x, 0), 0);
          output_addr_const (file, base);
@@ -5418,6 +5428,7 @@ pa_output_global_address (FILE *file, rtx x, int round_constant)
 
       switch (GET_CODE (XEXP (XEXP (x, 0), 1)))
        {
+       case LABEL_REF:
        case SYMBOL_REF:
          base = XEXP (XEXP (x, 0), 1);
          output_addr_const (file, base);
@@ -6013,18 +6024,15 @@ pa_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i,
        {
          x = XEXP (x, 0);
 
-         /* We don't need an intermediate for indexed and LO_SUM DLT
-            memory addresses.  When INT14_OK_STRICT is true, it might
-            appear that we could directly allow register indirect
-            memory addresses.  However, this doesn't work because we
-            don't support SUBREGs in floating-point register copies
-            and reload doesn't tell us when it's going to use a SUBREG.  */
-         if (IS_INDEX_ADDR_P (x)
-             || IS_LO_SUM_DLT_ADDR_P (x))
-           return NO_REGS;
+         /* We don't need a secondary reload for indexed memory addresses.
 
-         /* Request intermediate general register.  */
-         return GENERAL_REGS;
+            When INT14_OK_STRICT is true, it might appear that we could
+            directly allow register indirect memory addresses.  However,
+            this doesn't work because we don't support SUBREGs in
+            floating-point register copies and reload doesn't tell us
+            when it's going to use a SUBREG.  */
+         if (IS_INDEX_ADDR_P (x))
+           return NO_REGS;
        }
 
       /* Request a secondary reload with a general scratch register
@@ -9820,6 +9828,19 @@ pa_select_section (tree exp, int reloc,
     return data_section;
 }
 
+/* Implement pa_reloc_rw_mask.  */
+
+static int
+pa_reloc_rw_mask (void)
+{
+  /* We force (const (plus (symbol) (const_int))) to memory when the
+     const_int doesn't fit in a 14-bit integer.  The SOM linker can't
+     handle this construct in read-only memory and we want to avoid
+     this for ELF.  So, we always force an RTX needing relocation to
+     the data section.  */
+  return 3;
+}
+
 static void
 pa_globalize_label (FILE *stream, const char *name)
 {
index a9421ac..559b157 100644 (file)
 ;; type "binary" insns have two input operands (1,2) and one output (0)
 
 (define_attr "type"
-  "move,unary,binary,shift,nullshift,compare,load,store,uncond_branch,branch,cbranch,fbranch,call,sibcall,dyncall,fpload,fpstore,fpalu,fpcc,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,multi,milli,sh_func_adrs,parallel_branch,fpstore_load,store_fpload"
+  "move,unary,binary,shift,nullshift,compare,load,store,uncond_branch,branch,cbranch,fbranch,call,sibcall,dyncall,fpload,fpstore,fpalu,fpcc,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,multi,milli,sh_func_adrs,parallel_branch,fpstore_load,store_fpload,trap"
   (const_string "binary"))
 
 (define_attr "pa_combine_type"
 ;; For conditional branches. Frame related instructions are not allowed
 ;; because they confuse the unwind support.
 (define_attr "in_branch_delay" "false,true"
-  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch")
+  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch,trap")
                     (eq_attr "length" "4")
                     (not (match_test "RTX_FRAME_RELATED_P (insn)")))
                (const_string "true")
 ;; Disallow instructions which use the FPU since they will tie up the FPU
 ;; even if the instruction is nullified.
 (define_attr "in_nullified_branch_delay" "false,true"
-  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,fpcc,fpalu,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,parallel_branch")
+  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,fpcc,fpalu,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,parallel_branch,trap")
                     (eq_attr "length" "4")
                     (not (match_test "RTX_FRAME_RELATED_P (insn)")))
                (const_string "true")
 ;; For calls and millicode calls.  Allow unconditional branches in the
 ;; delay slot.
 (define_attr "in_call_delay" "false,true"
-  (cond [(and (eq_attr "type" "!uncond_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch")
+  (cond [(and (eq_attr "type" "!uncond_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch,trap")
              (eq_attr "length" "4")
              (not (match_test "RTX_FRAME_RELATED_P (insn)")))
           (const_string "true")
   [(set_attr "type" "binary")
    (set_attr "length" "4")])
 
+(define_insn ""
+ [(set (match_operand:SI 0 "register_operand" "=r")
+       (lo_sum:SI (match_operand:SI 1 "register_operand" "r")
+                 (unspec:SI [(match_operand 2 "" "")] UNSPEC_DLTIND14R)))]
+  "symbolic_operand (operands[2], Pmode)
+   && ! function_label_operand (operands[2], Pmode)
+   && flag_pic"
+  "ldo RT'%G2(%1),%0"
+  [(set_attr "type" "binary")
+   (set_attr "length" "4")])
+
+(define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+       (lo_sum:DI (match_operand:DI 1 "register_operand" "r")
+                 (unspec:DI [(match_operand 2 "" "")] UNSPEC_DLTIND14R)))]
+  "symbolic_operand (operands[2], Pmode)
+   && ! function_label_operand (operands[2], Pmode)
+   && TARGET_64BIT
+   && flag_pic"
+  "ldo RT'%G2(%1),%0"
+  [(set_attr "type" "binary")
+   (set_attr "length" "4")])
+
 ;; Always use addil rather than ldil;add sequences.  This allows the
 ;; HP linker to eliminate the dp relocation if the symbolic operand
 ;; lives in the TEXT space.
   [(set_attr "type" "binary,binary")
    (set_attr "length" "4,4")])
 
+;; Trap instructions.
+
+(define_insn "trap"
+  [(trap_if (const_int 1) (const_int 0))]
+  ""
+  "{addit|addi,tc},<> 1,%%r0,%%r0"
+  [(set_attr "type" "trap")
+   (set_attr "length" "4")])
+
 ;; Clobbering a "register_operand" instead of a match_scratch
 ;; in operand3 of millicode calls avoids spilling %r1 and
 ;; produces better code.
@@ -8926,14 +8958,14 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
 ;; strength reduction is used.  It is actually created when the instruction
 ;; combination phase combines the special loop test.  Since this insn
 ;; is both a jump insn and has an output, it must deal with its own
-;; reloads, hence the `m' constraints.  The `!' constraints direct reload
+;; reloads, hence the `Q' constraints.  The `!' constraints direct reload
 ;; to not choose the register alternatives in the event a reload is needed.
 (define_insn "decrement_and_branch_until_zero"
   [(set (pc)
        (if_then_else
          (match_operator 2 "comparison_operator"
           [(plus:SI
-             (match_operand:SI 0 "reg_before_reload_operand" "+!r,!*f,*m")
+             (match_operand:SI 0 "reg_before_reload_operand" "+!r,!*f,*Q")
              (match_operand:SI 1 "int5_operand" "L,L,L"))
            (const_int 0)])
          (label_ref (match_operand 3 "" ""))
@@ -9022,7 +9054,7 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
           [(match_operand:SI 1 "register_operand" "r,r,r,r") (const_int 0)])
          (label_ref (match_operand 3 "" ""))
          (pc)))
-   (set (match_operand:SI 0 "reg_before_reload_operand" "=!r,!*f,*m,!*q")
+   (set (match_operand:SI 0 "reg_before_reload_operand" "=!r,!*f,*Q,!*q")
        (match_dup 1))]
   ""
 "* return pa_output_movb (operands, insn, which_alternative, 0); "
@@ -9094,7 +9126,7 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
           [(match_operand:SI 1 "register_operand" "r,r,r,r") (const_int 0)])
          (pc)
          (label_ref (match_operand 3 "" ""))))
-   (set (match_operand:SI 0 "reg_before_reload_operand" "=!r,!*f,*m,!*q")
+   (set (match_operand:SI 0 "reg_before_reload_operand" "=!r,!*f,*Q,!*q")
        (match_dup 1))]
   ""
 "* return pa_output_movb (operands, insn, which_alternative, 1); "
index 8dcfce0..405cf7f 100644 (file)
 ;; This predicate is used for branch patterns that internally handle
 ;; register reloading.  We need to accept non-symbolic memory operands
 ;; after reload to ensure that the pattern is still valid if reload
-;; didn't find a hard register for the operand.
+;; didn't find a hard register for the operand.  We also reject index
+;; and lo_sum DLT address as these are invalid for move destinations.
 
 (define_predicate "reg_before_reload_operand"
   (match_code "reg,mem")
 {
+  rtx op0;
+
   if (register_operand (op, mode))
     return true;
 
-  if (reload_completed
-      && memory_operand (op, mode)
-      && !symbolic_memory_operand (op, mode))
-    return true;
+  if (!reload_in_progress && !reload_completed)
+    return false;
 
-  return false;
+  if (! MEM_P (op))
+    return false;
+
+  op0 = XEXP (op, 0);
+
+  return (memory_address_p (mode, op0)
+         && !IS_INDEX_ADDR_P (op0)
+         && !IS_LO_SUM_DLT_ADDR_P (op0)
+         && !symbolic_memory_operand (op, mode));
 })
 
 ;; True iff OP is a register or const_0 operand for MODE.
index 129cf6f..9ee0ae5 100644 (file)
 #define vec_vcfux __builtin_vec_vcfux
 #define vec_cts __builtin_vec_cts
 #define vec_ctu __builtin_vec_ctu
+#define vec_cpsgn __builtin_vec_copysign
 #define vec_expte __builtin_vec_expte
 #define vec_floor __builtin_vec_floor
 #define vec_loge __builtin_vec_loge
 #define vec_lvsl __builtin_vec_lvsl
 #define vec_lvsr __builtin_vec_lvsr
 #define vec_max __builtin_vec_max
+#define vec_mergee __builtin_vec_vmrgew
 #define vec_mergeh __builtin_vec_mergeh
 #define vec_mergel __builtin_vec_mergel
+#define vec_mergeo __builtin_vec_vmrgow
 #define vec_min __builtin_vec_min
 #define vec_mladd __builtin_vec_mladd
 #define vec_msum __builtin_vec_msum
 #define vec_sqrt __builtin_vec_sqrt
 #define vec_vsx_ld __builtin_vec_vsx_ld
 #define vec_vsx_st __builtin_vec_vsx_st
+#define vec_xl __builtin_vec_vsx_ld
+#define vec_xst __builtin_vec_vsx_st
 
 /* Note, xxsldi and xxpermdi were added as __builtin_vsx_<xxx> functions
    instead of __builtin_vec_<xxx>  */
 #define vec_vadduqm __builtin_vec_vadduqm
 #define vec_vbpermq __builtin_vec_vbpermq
 #define vec_vclz __builtin_vec_vclz
+#define vec_cntlz __builtin_vec_vclz
 #define vec_vclzb __builtin_vec_vclzb
 #define vec_vclzd __builtin_vec_vclzd
 #define vec_vclzh __builtin_vec_vclzh
index 682bdae..63e7237 100644 (file)
@@ -67,7 +67,7 @@
    UNSPEC_VCTSXS
    UNSPEC_VLOGEFP
    UNSPEC_VEXPTEFP
-   UNSPEC_VLSDOI
+   UNSPEC_VSLDOI
    UNSPEC_VUNPACK_HI_SIGN
    UNSPEC_VUNPACK_LO_SIGN
    UNSPEC_VUNPACK_HI_SIGN_DIRECT
         (unspec:VM [(match_operand:VM 1 "register_operand" "v")
                    (match_operand:VM 2 "register_operand" "v")
                    (match_operand:QI 3 "immediate_operand" "i")]
-                 UNSPEC_VLSDOI))]
+                 UNSPEC_VSLDOI))]
   "TARGET_ALTIVEC"
   "vsldoi %0,%1,%2,%3"
   [(set_attr "type" "vecperm")])
     }
 })
 
-(define_insn "*altivec_lvx_<mode>_internal"
+(define_insn "altivec_lvx_<mode>_internal"
   [(parallel
     [(set (match_operand:VM2 0 "register_operand" "=v")
          (match_operand:VM2 1 "memory_operand" "Z"))
     }
 })
 
-(define_insn "*altivec_stvx_<mode>_internal"
+(define_insn "altivec_stvx_<mode>_internal"
   [(parallel
     [(set (match_operand:VM2 0 "memory_operand" "=Z")
          (match_operand:VM2 1 "register_operand" "v"))
index b2704a9..cf6ef96 100644 (file)
 ;; along with GCC; see the file COPYING3.  If not see
 ;; <http://www.gnu.org/licenses/>.
 
+;; NOTE: Although this file contains all the instructions from
+;; section 5.11 of ISA 2.07, only those in sections 5.11.1 and
+;; 5.11.2 are in Category:Vector.Crypto.  Those are the only
+;; ones controlled by -m[no-]crypto.
+
+;; FIXME: The builtin names for the instructions in this file
+;; are likely to be deprecated in favor of other names to be
+;; agreed upon with the XL compilers and LLVM.
+
 (define_c_enum "unspec"
   [UNSPEC_VCIPHER
    UNSPEC_VNCIPHER
@@ -65,7 +74,7 @@
        (unspec:CR_mode [(match_operand:CR_mode 1 "register_operand" "v")
                         (match_operand:CR_mode 2 "register_operand" "v")]
                        UNSPEC_VPMSUM))]
-  "TARGET_CRYPTO"
+  "TARGET_P8_VECTOR"
   "vpmsum<CR_char> %0,%1,%2"
   [(set_attr "type" "crypto")])
 
@@ -76,7 +85,7 @@
                         (match_operand:CR_mode 2 "register_operand" "v")
                         (match_operand:CR_mode 3 "register_operand" "v")]
                        UNSPEC_VPERMXOR))]
-  "TARGET_CRYPTO"
+  "TARGET_P8_VECTOR"
   "vpermxor %0,%1,%2,%3"
   [(set_attr "type" "crypto")])
 
index 0329f3f..dfd181e 100644 (file)
@@ -206,7 +206,11 @@ extern int darwin_emit_branch_islands;
     "vrsave", "vscr",                                                  \
     "spe_acc", "spefscr",                                               \
     "sfp",                                                             \
-    "tfhar", "tfiar", "texasr"                                         \
+    "tfhar", "tfiar", "texasr",                                                \
+    "rh0",  "rh1",  "rh2",  "rh3",  "rh4",  "rh5",  "rh6",  "rh7",     \
+    "rh8",  "rh9",  "rh10", "rh11", "rh12", "rh13", "rh14", "rh15",    \
+    "rh16", "rh17", "rh18", "rh19", "rh20", "rh21", "rh22", "rh23",    \
+    "rh24", "rh25", "rh26", "rh27", "rh28", "rh29", "rh30", "rh31"     \
 }
 
 /* This outputs NAME to FILE.  */
index 48dcdf0..7a29672 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions of target machine for GNU compiler,
    for 64 bit powerpc linux defaulting to -m64.
-   Copyright (C) 2003-2014 Free Software Foundation, Inc.
+   Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -18,10 +18,14 @@ 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/>.  */
 
+#define RS6000_CPU(NAME, CPU, FLAGS)
+#include "rs6000-cpus.def"
+#undef RS6000_CPU
+
 #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
 #undef TARGET_DEFAULT
-#define TARGET_DEFAULT (MASK_PPC_GFXOPT | MASK_POWERPC64 | MASK_64BIT | MASK_LITTLE_ENDIAN)
+#define TARGET_DEFAULT (ISA_2_7_MASKS_SERVER | MASK_POWERPC64 | MASK_64BIT | MASK_LITTLE_ENDIAN)
 #else
 #undef TARGET_DEFAULT
-#define TARGET_DEFAULT (MASK_PPC_GFXOPT | MASK_POWERPC64 | MASK_64BIT)
+#define TARGET_DEFAULT (MASK_PPC_GFXOPT | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64 | MASK_64BIT)
 #endif
index 7df5fba..af32471 100644 (file)
@@ -1,5 +1,5 @@
 /* Subroutines for the gcc driver.
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
+   Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -327,6 +327,12 @@ detect_processor_aix (void)
     case 0x4000:
       return "power6";
 
+    case 0x8000:
+      return "power7";
+
+    case 0x10000:
+      return "power8";
+
     default:
       return "powerpc";
     }
index ca7f7fd..dbfd0db 100644 (file)
@@ -1,5 +1,5 @@
 ;; Hardware Transactional Memory (HTM) patterns.
-;; Copyright (C) 2013-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 ;; Contributed by Peter Bergner <bergner@vnet.ibm.com>.
 
 ;; This file is part of GCC.
 
 (define_c_enum "unspecv"
   [UNSPECV_HTM_TABORT
-   UNSPECV_HTM_TABORTDC
-   UNSPECV_HTM_TABORTDCI
-   UNSPECV_HTM_TABORTWC
-   UNSPECV_HTM_TABORTWCI
+   UNSPECV_HTM_TABORTXC
+   UNSPECV_HTM_TABORTXCI
    UNSPECV_HTM_TBEGIN
    UNSPECV_HTM_TCHECK
    UNSPECV_HTM_TEND
    UNSPECV_HTM_TRECHKPT
    UNSPECV_HTM_TRECLAIM
    UNSPECV_HTM_TSR
+   UNSPECV_HTM_TTEST
    UNSPECV_HTM_MFSPR
    UNSPECV_HTM_MTSPR
   ])
 
 
-(define_expand "tabort"
-  [(set (match_dup 2)
-       (unspec_volatile:CC [(match_operand:SI 1 "int_reg_operand" "")]
-                           UNSPECV_HTM_TABORT))
-   (set (match_dup 3)
-       (eq:SI (match_dup 2)
-              (const_int 0)))
-   (set (match_operand:SI 0 "int_reg_operand" "")
-       (minus:SI (const_int 1) (match_dup 3)))]
-  "TARGET_HTM"
-{
-  operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[3] = gen_reg_rtx (SImode);
-})
-
-(define_insn "*tabort_internal"
+(define_insn "tabort"
   [(set (match_operand:CC 1 "cc_reg_operand" "=x")
-       (unspec_volatile:CC [(match_operand:SI 0 "int_reg_operand" "r")]
+       (unspec_volatile:CC [(match_operand:SI 0 "gpc_reg_operand" "r")]
                            UNSPECV_HTM_TABORT))]
   "TARGET_HTM"
   "tabort. %0"
   [(set_attr "type" "htm")
    (set_attr "length" "4")])
 
-(define_expand "tabortdc"
-  [(set (match_dup 4)
-       (unspec_volatile:CC [(match_operand 1 "u5bit_cint_operand" "n")
-                            (match_operand:SI 2 "gpc_reg_operand" "r")
-                            (match_operand:SI 3 "gpc_reg_operand" "r")]
-                           UNSPECV_HTM_TABORTDC))
-   (set (match_dup 5)
-       (eq:SI (match_dup 4)
-              (const_int 0)))
-   (set (match_operand:SI 0 "int_reg_operand" "")
-       (minus:SI (const_int 1) (match_dup 5)))]
-  "TARGET_HTM"
-{
-  operands[4] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[5] = gen_reg_rtx (SImode);
-})
-
-(define_insn "*tabortdc_internal"
+(define_insn "tabort<wd>c"
   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        (unspec_volatile:CC [(match_operand 0 "u5bit_cint_operand" "n")
-                            (match_operand:SI 1 "gpc_reg_operand" "r")
-                            (match_operand:SI 2 "gpc_reg_operand" "r")]
-                           UNSPECV_HTM_TABORTDC))]
+                            (match_operand:GPR 1 "gpc_reg_operand" "r")
+                            (match_operand:GPR 2 "gpc_reg_operand" "r")]
+                           UNSPECV_HTM_TABORTXC))]
   "TARGET_HTM"
-  "tabortdc. %0,%1,%2"
+  "tabort<wd>c. %0,%1,%2"
   [(set_attr "type" "htm")
    (set_attr "length" "4")])
 
-(define_expand "tabortdci"
-  [(set (match_dup 4)
-       (unspec_volatile:CC [(match_operand 1 "u5bit_cint_operand" "n")
-                            (match_operand:SI 2 "gpc_reg_operand" "r")
-                            (match_operand 3 "s5bit_cint_operand" "n")]
-                           UNSPECV_HTM_TABORTDCI))
-   (set (match_dup 5)
-       (eq:SI (match_dup 4)
-              (const_int 0)))
-   (set (match_operand:SI 0 "int_reg_operand" "")
-       (minus:SI (const_int 1) (match_dup 5)))]
-  "TARGET_HTM"
-{
-  operands[4] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[5] = gen_reg_rtx (SImode);
-})
-
-(define_insn "*tabortdci_internal"
+(define_insn "tabort<wd>ci"
   [(set (match_operand:CC 3 "cc_reg_operand" "=x")
        (unspec_volatile:CC [(match_operand 0 "u5bit_cint_operand" "n")
-                            (match_operand:SI 1 "gpc_reg_operand" "r")
+                            (match_operand:GPR 1 "gpc_reg_operand" "r")
                             (match_operand 2 "s5bit_cint_operand" "n")]
-                           UNSPECV_HTM_TABORTDCI))]
-  "TARGET_HTM"
-  "tabortdci. %0,%1,%2"
-  [(set_attr "type" "htm")
-   (set_attr "length" "4")])
-
-(define_expand "tabortwc"
-  [(set (match_dup 4)
-       (unspec_volatile:CC [(match_operand 1 "u5bit_cint_operand" "n")
-                            (match_operand:SI 2 "gpc_reg_operand" "r")
-                            (match_operand:SI 3 "gpc_reg_operand" "r")]
-                           UNSPECV_HTM_TABORTWC))
-   (set (match_dup 5)
-       (eq:SI (match_dup 4)
-              (const_int 0)))
-   (set (match_operand:SI 0 "int_reg_operand" "")
-       (minus:SI (const_int 1) (match_dup 5)))]
-  "TARGET_HTM"
-{
-  operands[4] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[5] = gen_reg_rtx (SImode);
-})
-
-(define_insn "*tabortwc_internal"
-  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
-       (unspec_volatile:CC [(match_operand 0 "u5bit_cint_operand" "n")
-                            (match_operand:SI 1 "gpc_reg_operand" "r")
-                            (match_operand:SI 2 "gpc_reg_operand" "r")]
-                           UNSPECV_HTM_TABORTWC))]
+                           UNSPECV_HTM_TABORTXCI))]
   "TARGET_HTM"
-  "tabortwc. %0,%1,%2"
+  "tabort<wd>ci. %0,%1,%2"
   [(set_attr "type" "htm")
    (set_attr "length" "4")])
 
-(define_expand "tabortwci"
-  [(set (match_dup 4)
-       (unspec_volatile:CC [(match_operand 1 "u5bit_cint_operand" "n")
-                            (match_operand:SI 2 "gpc_reg_operand" "r")
-                            (match_operand 3 "s5bit_cint_operand" "n")]
-                           UNSPECV_HTM_TABORTWCI))
-   (set (match_dup 5)
-       (eq:SI (match_dup 4)
-              (const_int 0)))
-   (set (match_operand:SI 0 "int_reg_operand" "")
-       (minus:SI (const_int 1) (match_dup 5)))]
-  "TARGET_HTM"
-{
-  operands[4] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[5] = gen_reg_rtx (SImode);
-})
-
-(define_expand "ttest"
-  [(set (match_dup 1)
-       (unspec_volatile:CC [(const_int 0)
-                            (reg:SI 0)
-                            (const_int 0)]
-                           UNSPECV_HTM_TABORTWCI))
-   (set (subreg:CC (match_dup 2) 0) (match_dup 1))
-   (set (match_dup 3) (lshiftrt:SI (match_dup 2) (const_int 28)))
-   (parallel [(set (match_operand:SI 0 "int_reg_operand" "")
-                  (and:SI (match_dup 3) (const_int 15)))
-              (clobber (scratch:CC))])]
-  "TARGET_HTM"
-{
-  operands[1] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[2] = gen_reg_rtx (SImode);
-  operands[3] = gen_reg_rtx (SImode);
-})
-
-(define_insn "*tabortwci_internal"
-  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
-       (unspec_volatile:CC [(match_operand 0 "u5bit_cint_operand" "n")
-                            (match_operand:SI 1 "gpc_reg_operand" "r")
-                            (match_operand 2 "s5bit_cint_operand" "n")]
-                           UNSPECV_HTM_TABORTWCI))]
-  "TARGET_HTM"
-  "tabortwci. %0,%1,%2"
-  [(set_attr "type" "htm")
-   (set_attr "length" "4")])
-
-(define_expand "tbegin"
-  [(set (match_dup 2)
-       (unspec_volatile:CC [(match_operand 1 "const_0_to_1_operand" "n")]
-                           UNSPECV_HTM_TBEGIN))
-   (set (match_dup 3)
-       (eq:SI (match_dup 2)
-              (const_int 0)))
-   (set (match_operand:SI 0 "int_reg_operand" "")
-       (minus:SI (const_int 1) (match_dup 3)))]
-  "TARGET_HTM"
-{
-  operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[3] = gen_reg_rtx (SImode);
-})
-
-(define_insn "*tbegin_internal"
+(define_insn "tbegin"
   [(set (match_operand:CC 1 "cc_reg_operand" "=x")
        (unspec_volatile:CC [(match_operand 0 "const_0_to_1_operand" "n")]
                            UNSPECV_HTM_TBEGIN))]
   [(set_attr "type" "htm")
    (set_attr "length" "4")])
 
-(define_expand "tcheck"
-  [(set (match_dup 2)
-       (unspec_volatile:CC [(match_operand 1 "u3bit_cint_operand" "n")]
-                           UNSPECV_HTM_TCHECK))
-   (set (match_dup 3)
-       (eq:SI (match_dup 2)
-              (const_int 0)))
-   (set (match_operand:SI 0 "int_reg_operand" "")
-       (minus:SI (const_int 1) (match_dup 3)))]
-  "TARGET_HTM"
-{
-  operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[3] = gen_reg_rtx (SImode);
-})
-
-(define_insn "*tcheck_internal"
-  [(set (match_operand:CC 1 "cc_reg_operand" "=x")
-       (unspec_volatile:CC [(match_operand 0 "u3bit_cint_operand" "n")]
+(define_insn "tcheck"
+  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
+       (unspec_volatile:CC [(const_int 0)]
                            UNSPECV_HTM_TCHECK))]
   "TARGET_HTM"
-  "tcheck. %0"
+  "tcheck %0"
   [(set_attr "type" "htm")
    (set_attr "length" "4")])
 
-(define_expand "tend"
-  [(set (match_dup 2)
-       (unspec_volatile:CC [(match_operand 1 "const_0_to_1_operand" "n")]
-                           UNSPECV_HTM_TEND))
-   (set (match_dup 3)
-       (eq:SI (match_dup 2)
-              (const_int 0)))
-   (set (match_operand:SI 0 "int_reg_operand" "")
-       (minus:SI (const_int 1) (match_dup 3)))]
-  "TARGET_HTM"
-{
-  operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[3] = gen_reg_rtx (SImode);
-})
-
-(define_insn "*tend_internal"
+(define_insn "tend"
   [(set (match_operand:CC 1 "cc_reg_operand" "=x")
        (unspec_volatile:CC [(match_operand 0 "const_0_to_1_operand" "n")]
                            UNSPECV_HTM_TEND))]
   [(set_attr "type" "htm")
    (set_attr "length" "4")])
 
-(define_expand "trechkpt"
-  [(set (match_dup 1)
-       (unspec_volatile:CC [(const_int 0)]
-                           UNSPECV_HTM_TRECHKPT))
-   (set (match_dup 2)
-       (eq:SI (match_dup 1)
-              (const_int 0)))
-   (set (match_operand:SI 0 "int_reg_operand" "")
-       (minus:SI (const_int 1) (match_dup 2)))]
-  "TARGET_HTM"
-{
-  operands[1] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[2] = gen_reg_rtx (SImode);
-})
-
-(define_insn "*trechkpt_internal"
+(define_insn "trechkpt"
   [(set (match_operand:CC 0 "cc_reg_operand" "=x")
        (unspec_volatile:CC [(const_int 0)]
                            UNSPECV_HTM_TRECHKPT))]
   [(set_attr "type" "htm")
    (set_attr "length" "4")])
 
-(define_expand "treclaim"
-  [(set (match_dup 2)
-       (unspec_volatile:CC [(match_operand:SI 1 "gpc_reg_operand" "r")]
-                           UNSPECV_HTM_TRECLAIM))
-   (set (match_dup 3)
-       (eq:SI (match_dup 2)
-              (const_int 0)))
-   (set (match_operand:SI 0 "int_reg_operand" "")
-       (minus:SI (const_int 1) (match_dup 3)))]
-  "TARGET_HTM"
-{
-  operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[3] = gen_reg_rtx (SImode);
-})
-
-(define_insn "*treclaim_internal"
+(define_insn "treclaim"
   [(set (match_operand:CC 1 "cc_reg_operand" "=x")
        (unspec_volatile:CC [(match_operand:SI 0 "gpc_reg_operand" "r")]
                            UNSPECV_HTM_TRECLAIM))]
   [(set_attr "type" "htm")
    (set_attr "length" "4")])
 
-(define_expand "tsr"
-  [(set (match_dup 2)
-       (unspec_volatile:CC [(match_operand 1 "const_0_to_1_operand" "n")]
-                           UNSPECV_HTM_TSR))
-   (set (match_dup 3)
-       (eq:SI (match_dup 2)
-              (const_int 0)))
-   (set (match_operand:SI 0 "int_reg_operand" "")
-       (minus:SI (const_int 1) (match_dup 3)))]
-  "TARGET_HTM"
-{
-  operands[2] = gen_rtx_REG (CCmode, CR0_REGNO);
-  operands[3] = gen_reg_rtx (SImode);
-})
-
-(define_insn "*tsr_internal"
+(define_insn "tsr"
   [(set (match_operand:CC 1 "cc_reg_operand" "=x")
        (unspec_volatile:CC [(match_operand 0 "const_0_to_1_operand" "n")]
                            UNSPECV_HTM_TSR))]
   [(set_attr "type" "htm")
    (set_attr "length" "4")])
 
+(define_insn "ttest"
+  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
+       (unspec_volatile:CC [(const_int 0)]
+                           UNSPECV_HTM_TTEST))]
+  "TARGET_HTM"
+  "tabortwci. 0,1,0"
+  [(set_attr "type" "htm")
+   (set_attr "length" "4")])
+
 (define_insn "htm_mfspr_<mode>"
-  [(set (match_operand:P 0 "gpc_reg_operand" "=r")
-        (unspec_volatile:P [(match_operand 1 "u10bit_cint_operand" "n")
-                           (match_operand:P 2 "htm_spr_reg_operand" "")]
-                          UNSPECV_HTM_MFSPR))]
+  [(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
+        (unspec_volatile:GPR [(match_operand 1 "u10bit_cint_operand" "n")
+                             (match_operand:GPR 2 "htm_spr_reg_operand" "")]
+                            UNSPECV_HTM_MFSPR))]
   "TARGET_HTM"
   "mfspr %0,%1";
   [(set_attr "type" "htm")
    (set_attr "length" "4")])
 
 (define_insn "htm_mtspr_<mode>"
-  [(set (match_operand:P 2 "htm_spr_reg_operand" "")
-        (unspec_volatile:P [(match_operand:P 0 "gpc_reg_operand" "r")
-                           (match_operand 1 "u10bit_cint_operand" "n")]
-                           UNSPECV_HTM_MTSPR))]
+  [(set (match_operand:GPR 2 "htm_spr_reg_operand" "")
+        (unspec_volatile:GPR [(match_operand:GPR 0 "gpc_reg_operand" "r")
+                             (match_operand 1 "u10bit_cint_operand" "n")]
+                            UNSPECV_HTM_MTSPR))]
   "TARGET_HTM"
   "mtspr %1,%0";
   [(set_attr "type" "htm")
index bf7fe3a..f1be368 100644 (file)
@@ -81,7 +81,8 @@ extern __inline long
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 __TM_end (void)
 {
-  if (__builtin_expect (__builtin_tend (0), 1))
+  unsigned char status = _HTM_STATE (__builtin_tend (0));
+  if (__builtin_expect (status, _HTM_TRANSACTIONAL))
     return 1;
   return 0;
 }
index 0ca05d2..4394db9 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions of target machine for GNU compiler,
    for 64 bit PowerPC linux.
-   Copyright (C) 2000-2014 Free Software Foundation, Inc.
+   Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
    This file is part of GCC.
 
@@ -71,11 +71,7 @@ extern int dot_symbols;
 #undef  PROCESSOR_DEFAULT
 #define PROCESSOR_DEFAULT PROCESSOR_POWER7
 #undef  PROCESSOR_DEFAULT64
-#ifdef LINUX64_DEFAULT_ABI_ELFv2
 #define PROCESSOR_DEFAULT64 PROCESSOR_POWER8
-#else
-#define PROCESSOR_DEFAULT64 PROCESSOR_POWER7
-#endif
 
 /* We don't need to generate entries in .fixup, except when
    -mrelocatable or -mrelocatable-lib is given.  */
@@ -101,7 +97,7 @@ extern int dot_symbols;
     {                                                          \
       if (!global_options_set.x_rs6000_alignment_flags)                \
        rs6000_alignment_flags = MASK_ALIGN_NATURAL;            \
-      if (TARGET_64BIT)                                                \
+      if (rs6000_isa_flags & OPTION_MASK_64BIT)                        \
        {                                                       \
          if (DEFAULT_ABI != ABI_AIX)                           \
            {                                                   \
index 220d1e9..031b964 100644 (file)
                     | RS6000_BTC_BINARY),                              \
                    CODE_FOR_ ## ICODE)                 /* ICODE */
 
+#define BU_CRYPTO_2A(ENUM, NAME, ATTR, ICODE)                          \
+  RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
+                   "__builtin_crypto_" NAME,           /* NAME */      \
+                   RS6000_BTM_P8_VECTOR,               /* MASK */      \
+                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
+                    | RS6000_BTC_BINARY),                              \
+                   CODE_FOR_ ## ICODE)                 /* ICODE */
+
 #define BU_CRYPTO_3(ENUM, NAME, ATTR, ICODE)                           \
   RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_crypto_" NAME,           /* NAME */      \
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_ ## ICODE)                 /* ICODE */
 
+#define BU_CRYPTO_3A(ENUM, NAME, ATTR, ICODE)                          \
+  RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
+                   "__builtin_crypto_" NAME,           /* NAME */      \
+                   RS6000_BTM_P8_VECTOR,               /* MASK */      \
+                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
+                    | RS6000_BTC_TERNARY),                             \
+                   CODE_FOR_ ## ICODE)                 /* ICODE */
+
 #define BU_CRYPTO_OVERLOAD_1(ENUM, NAME)                               \
   RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_crypto_" NAME,           /* NAME */      \
                     | RS6000_BTC_UNARY),                               \
                    CODE_FOR_nothing)                   /* ICODE */
 
-#define BU_CRYPTO_OVERLOAD_2(ENUM, NAME)                               \
+#define BU_CRYPTO_OVERLOAD_2A(ENUM, NAME)                              \
   RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_crypto_" NAME,           /* NAME */      \
-                   RS6000_BTM_CRYPTO,                  /* MASK */      \
+                   RS6000_BTM_P8_VECTOR,               /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_BINARY),                              \
                    CODE_FOR_nothing)                   /* ICODE */
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_nothing)                   /* ICODE */
 
+#define BU_CRYPTO_OVERLOAD_3A(ENUM, NAME)                              \
+  RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
+                   "__builtin_crypto_" NAME,           /* NAME */      \
+                   RS6000_BTM_P8_VECTOR,               /* MASK */      \
+                   (RS6000_BTC_OVERLOADED              /* ATTR */      \
+                    | RS6000_BTC_TERNARY),                             \
+                   CODE_FOR_nothing)                   /* ICODE */
+
 /* HTM convenience macros.  */
 #define BU_HTM_0(ENUM, NAME, ATTR, ICODE)                              \
   RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM,              /* ENUM */      \
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_ ## ICODE)                 /* ICODE */
 
-#define BU_HTM_SPR0(ENUM, NAME, ATTR, ICODE)                           \
-  RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM,              /* ENUM */      \
-                   "__builtin_" NAME,                  /* NAME */      \
-                   RS6000_BTM_HTM,                     /* MASK */      \
-                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
-                    | RS6000_BTC_SPR),                                 \
-                   CODE_FOR_ ## ICODE)                 /* ICODE */
-
-#define BU_HTM_SPR1(ENUM, NAME, ATTR, ICODE)                           \
+#define BU_HTM_V1(ENUM, NAME, ATTR, ICODE)                             \
   RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM,              /* ENUM */      \
                    "__builtin_" NAME,                  /* NAME */      \
                    RS6000_BTM_HTM,                     /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_UNARY                                 \
-                    | RS6000_BTC_SPR                                   \
                     | RS6000_BTC_VOID),                                \
                    CODE_FOR_ ## ICODE)                 /* ICODE */
 
@@ -1258,6 +1273,16 @@ BU_VSX_2 (VEC_MERGEL_V2DF,    "mergel_2df",      CONST,  vsx_mergel_v2df)
 BU_VSX_2 (VEC_MERGEL_V2DI,    "mergel_2di",    CONST,  vsx_mergel_v2di)
 BU_VSX_2 (VEC_MERGEH_V2DF,    "mergeh_2df",    CONST,  vsx_mergeh_v2df)
 BU_VSX_2 (VEC_MERGEH_V2DI,    "mergeh_2di",    CONST,  vsx_mergeh_v2di)
+BU_VSX_2 (XXSPLTD_V2DF,       "xxspltd_2df",    CONST,  vsx_xxspltd_v2df)
+BU_VSX_2 (XXSPLTD_V2DI,       "xxspltd_2di",    CONST,  vsx_xxspltd_v2di)
+BU_VSX_2 (DIV_V2DI,           "div_2di",        CONST,  vsx_div_v2di)
+BU_VSX_2 (UDIV_V2DI,          "udiv_2di",       CONST,  vsx_udiv_v2di)
+BU_VSX_2 (MUL_V2DI,           "mul_2di",        CONST,  vsx_mul_v2di)
+
+BU_VSX_2 (XVCVSXDDP_SCALE,    "xvcvsxddp_scale", CONST, vsx_xvcvsxddp_scale)
+BU_VSX_2 (XVCVUXDDP_SCALE,    "xvcvuxddp_scale", CONST, vsx_xvcvuxddp_scale)
+BU_VSX_2 (XVCVDPSXDS_SCALE,   "xvcvdpsxds_scale", CONST, vsx_xvcvdpsxds_scale)
+BU_VSX_2 (XVCVDPUXDS_SCALE,   "xvcvdpuxds_scale", CONST, vsx_xvcvdpuxds_scale)
 
 /* VSX abs builtin functions.  */
 BU_VSX_A (XVABSDP,           "xvabsdp",        CONST,  absv2df2)
@@ -1601,52 +1626,52 @@ BU_CRYPTO_2 (VCIPHER,           "vcipher",        CONST, crypto_vcipher)
 BU_CRYPTO_2 (VCIPHERLAST,      "vcipherlast",    CONST, crypto_vcipherlast)
 BU_CRYPTO_2 (VNCIPHER,         "vncipher",       CONST, crypto_vncipher)
 BU_CRYPTO_2 (VNCIPHERLAST,     "vncipherlast",   CONST, crypto_vncipherlast)
-BU_CRYPTO_2 (VPMSUMB,          "vpmsumb",        CONST, crypto_vpmsumb)
-BU_CRYPTO_2 (VPMSUMH,          "vpmsumh",        CONST, crypto_vpmsumh)
-BU_CRYPTO_2 (VPMSUMW,          "vpmsumw",        CONST, crypto_vpmsumw)
-BU_CRYPTO_2 (VPMSUMD,          "vpmsumd",        CONST, crypto_vpmsumd)
+BU_CRYPTO_2A (VPMSUMB,         "vpmsumb",        CONST, crypto_vpmsumb)
+BU_CRYPTO_2A (VPMSUMH,         "vpmsumh",        CONST, crypto_vpmsumh)
+BU_CRYPTO_2A (VPMSUMW,         "vpmsumw",        CONST, crypto_vpmsumw)
+BU_CRYPTO_2A (VPMSUMD,         "vpmsumd",        CONST, crypto_vpmsumd)
 
 /* 3 argument crypto functions.  */
-BU_CRYPTO_3 (VPERMXOR_V2DI,    "vpermxor_v2di",  CONST, crypto_vpermxor_v2di)
-BU_CRYPTO_3 (VPERMXOR_V4SI,    "vpermxor_v4si",  CONST, crypto_vpermxor_v4si)
-BU_CRYPTO_3 (VPERMXOR_V8HI,    "vpermxor_v8hi",  CONST, crypto_vpermxor_v8hi)
-BU_CRYPTO_3 (VPERMXOR_V16QI,   "vpermxor_v16qi", CONST, crypto_vpermxor_v16qi)
+BU_CRYPTO_3A (VPERMXOR_V2DI,   "vpermxor_v2di",  CONST, crypto_vpermxor_v2di)
+BU_CRYPTO_3A (VPERMXOR_V4SI,   "vpermxor_v4si",  CONST, crypto_vpermxor_v4si)
+BU_CRYPTO_3A (VPERMXOR_V8HI,   "vpermxor_v8hi",  CONST, crypto_vpermxor_v8hi)
+BU_CRYPTO_3A (VPERMXOR_V16QI,  "vpermxor_v16qi", CONST, crypto_vpermxor_v16qi)
 BU_CRYPTO_3 (VSHASIGMAW,       "vshasigmaw",     CONST, crypto_vshasigmaw)
 BU_CRYPTO_3 (VSHASIGMAD,       "vshasigmad",     CONST, crypto_vshasigmad)
 
 /* 2 argument crypto overloaded functions.  */
-BU_CRYPTO_OVERLOAD_2 (VPMSUM,   "vpmsum")
+BU_CRYPTO_OVERLOAD_2A (VPMSUM,  "vpmsum")
 
 /* 3 argument crypto overloaded functions.  */
-BU_CRYPTO_OVERLOAD_3 (VPERMXOR,         "vpermxor")
+BU_CRYPTO_OVERLOAD_3A (VPERMXOR,        "vpermxor")
 BU_CRYPTO_OVERLOAD_3 (VSHASIGMA, "vshasigma")
 
 \f
 /* HTM functions.  */
-BU_HTM_1  (TABORT,     "tabort",       MISC,   tabort)
-BU_HTM_3  (TABORTDC,   "tabortdc",     MISC,   tabortdc)
-BU_HTM_3  (TABORTDCI,  "tabortdci",    MISC,   tabortdci)
-BU_HTM_3  (TABORTWC,   "tabortwc",     MISC,   tabortwc)
-BU_HTM_3  (TABORTWCI,  "tabortwci",    MISC,   tabortwci)
-BU_HTM_1  (TBEGIN,     "tbegin",       MISC,   tbegin)
-BU_HTM_1  (TCHECK,     "tcheck",       MISC,   tcheck)
-BU_HTM_1  (TEND,       "tend",         MISC,   tend)
-BU_HTM_0  (TENDALL,    "tendall",      MISC,   tend)
-BU_HTM_0  (TRECHKPT,   "trechkpt",     MISC,   trechkpt)
-BU_HTM_1  (TRECLAIM,   "treclaim",     MISC,   treclaim)
-BU_HTM_0  (TRESUME,    "tresume",      MISC,   tsr)
-BU_HTM_0  (TSUSPEND,   "tsuspend",     MISC,   tsr)
-BU_HTM_1  (TSR,                "tsr",          MISC,   tsr)
-BU_HTM_0  (TTEST,      "ttest",        MISC,   ttest)
-
-BU_HTM_SPR0 (GET_TFHAR,                "get_tfhar",    MISC,   nothing)
-BU_HTM_SPR1 (SET_TFHAR,                "set_tfhar",    MISC,   nothing)
-BU_HTM_SPR0 (GET_TFIAR,                "get_tfiar",    MISC,   nothing)
-BU_HTM_SPR1 (SET_TFIAR,                "set_tfiar",    MISC,   nothing)
-BU_HTM_SPR0 (GET_TEXASR,       "get_texasr",   MISC,   nothing)
-BU_HTM_SPR1 (SET_TEXASR,       "set_texasr",   MISC,   nothing)
-BU_HTM_SPR0 (GET_TEXASRU,      "get_texasru",  MISC,   nothing)
-BU_HTM_SPR1 (SET_TEXASRU,      "set_texasru",  MISC,   nothing)
+BU_HTM_1  (TABORT,     "tabort",       CR,     tabort)
+BU_HTM_3  (TABORTDC,   "tabortdc",     CR,     tabortdc)
+BU_HTM_3  (TABORTDCI,  "tabortdci",    CR,     tabortdci)
+BU_HTM_3  (TABORTWC,   "tabortwc",     CR,     tabortwc)
+BU_HTM_3  (TABORTWCI,  "tabortwci",    CR,     tabortwci)
+BU_HTM_1  (TBEGIN,     "tbegin",       CR,     tbegin)
+BU_HTM_0  (TCHECK,     "tcheck",       CR,     tcheck)
+BU_HTM_1  (TEND,       "tend",         CR,     tend)
+BU_HTM_0  (TENDALL,    "tendall",      CR,     tend)
+BU_HTM_0  (TRECHKPT,   "trechkpt",     CR,     trechkpt)
+BU_HTM_1  (TRECLAIM,   "treclaim",     CR,     treclaim)
+BU_HTM_0  (TRESUME,    "tresume",      CR,     tsr)
+BU_HTM_0  (TSUSPEND,   "tsuspend",     CR,     tsr)
+BU_HTM_1  (TSR,                "tsr",          CR,     tsr)
+BU_HTM_0  (TTEST,      "ttest",        CR,     ttest)
+
+BU_HTM_0  (GET_TFHAR,  "get_tfhar",    SPR,    nothing)
+BU_HTM_V1 (SET_TFHAR,  "set_tfhar",    SPR,    nothing)
+BU_HTM_0  (GET_TFIAR,  "get_tfiar",    SPR,    nothing)
+BU_HTM_V1 (SET_TFIAR,  "set_tfiar",    SPR,    nothing)
+BU_HTM_0  (GET_TEXASR, "get_texasr",   SPR,    nothing)
+BU_HTM_V1 (SET_TEXASR, "set_texasr",   SPR,    nothing)
+BU_HTM_0  (GET_TEXASRU,        "get_texasru",  SPR,    nothing)
+BU_HTM_V1 (SET_TEXASRU,        "set_texasru",  SPR,    nothing)
 
 \f
 /* 3 argument paired floating point builtins.  */
index 5e8bfea..8dedeec 100644 (file)
@@ -597,6 +597,8 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0, 0 },
   { ALTIVEC_BUILTIN_VEC_ROUND, ALTIVEC_BUILTIN_VRFIN,
     RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0, 0 },
+  { ALTIVEC_BUILTIN_VEC_ROUND, VSX_BUILTIN_XVRDPI,
+    RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0, 0 },
   { ALTIVEC_BUILTIN_VEC_RECIP, ALTIVEC_BUILTIN_VRECIPFP,
     RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
   { ALTIVEC_BUILTIN_VEC_RECIP, VSX_BUILTIN_RECIP_V2DF,
@@ -877,6 +879,18 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
   { ALTIVEC_BUILTIN_VEC_AND, ALTIVEC_BUILTIN_VAND,
     RS6000_BTI_V2DF, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DF, 0 },
   { ALTIVEC_BUILTIN_VEC_AND, ALTIVEC_BUILTIN_VAND,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_AND, ALTIVEC_BUILTIN_VAND,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_AND, ALTIVEC_BUILTIN_VAND,
+    RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_AND, ALTIVEC_BUILTIN_VAND,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_AND, ALTIVEC_BUILTIN_VAND,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_AND, ALTIVEC_BUILTIN_VAND,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_AND, ALTIVEC_BUILTIN_VAND,
     RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, 0 },
   { ALTIVEC_BUILTIN_VEC_AND, ALTIVEC_BUILTIN_VAND,
     RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_V4SI, 0 },
@@ -931,6 +945,18 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
   { ALTIVEC_BUILTIN_VEC_ANDC, ALTIVEC_BUILTIN_VANDC,
     RS6000_BTI_V2DF, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DF, 0 },
   { ALTIVEC_BUILTIN_VEC_ANDC, ALTIVEC_BUILTIN_VANDC,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_ANDC, ALTIVEC_BUILTIN_VANDC,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_ANDC, ALTIVEC_BUILTIN_VANDC,
+    RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_ANDC, ALTIVEC_BUILTIN_VANDC,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_ANDC, ALTIVEC_BUILTIN_VANDC,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_ANDC, ALTIVEC_BUILTIN_VANDC,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_ANDC, ALTIVEC_BUILTIN_VANDC,
     RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, 0 },
   { ALTIVEC_BUILTIN_VEC_ANDC, ALTIVEC_BUILTIN_VANDC,
     RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_V4SI, 0 },
@@ -1118,18 +1144,30 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_V4SF, RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, 0 },
   { ALTIVEC_BUILTIN_VEC_CTF, ALTIVEC_BUILTIN_VCFSX,
     RS6000_BTI_V4SF, RS6000_BTI_V4SI, RS6000_BTI_INTSI, 0 },
+  { ALTIVEC_BUILTIN_VEC_CTF, VSX_BUILTIN_XVCVSXDDP_SCALE,
+    RS6000_BTI_V2DF, RS6000_BTI_V2DI, RS6000_BTI_INTSI, 0},
+  { ALTIVEC_BUILTIN_VEC_CTF, VSX_BUILTIN_XVCVUXDDP_SCALE,
+    RS6000_BTI_V2DF, RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI, 0},
   { ALTIVEC_BUILTIN_VEC_VCFSX, ALTIVEC_BUILTIN_VCFSX,
     RS6000_BTI_V4SF, RS6000_BTI_V4SI, RS6000_BTI_INTSI, 0 },
   { ALTIVEC_BUILTIN_VEC_VCFUX, ALTIVEC_BUILTIN_VCFUX,
     RS6000_BTI_V4SF, RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, 0 },
   { ALTIVEC_BUILTIN_VEC_CTS, ALTIVEC_BUILTIN_VCTSXS,
     RS6000_BTI_V4SI, RS6000_BTI_V4SF, RS6000_BTI_INTSI, 0 },
+  { ALTIVEC_BUILTIN_VEC_CTS, VSX_BUILTIN_XVCVDPSXDS_SCALE,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DF, RS6000_BTI_INTSI, 0 },
   { ALTIVEC_BUILTIN_VEC_CTU, ALTIVEC_BUILTIN_VCTUXS,
     RS6000_BTI_unsigned_V4SI, RS6000_BTI_V4SF, RS6000_BTI_INTSI, 0 },
+  { ALTIVEC_BUILTIN_VEC_CTU, VSX_BUILTIN_XVCVDPUXDS_SCALE,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_V2DF, RS6000_BTI_INTSI, 0 },
   { VSX_BUILTIN_VEC_DIV, VSX_BUILTIN_XVDIVSP,
     RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
   { VSX_BUILTIN_VEC_DIV, VSX_BUILTIN_XVDIVDP,
     RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
+  { VSX_BUILTIN_VEC_DIV, VSX_BUILTIN_DIV_V2DI,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+  { VSX_BUILTIN_VEC_DIV, VSX_BUILTIN_UDIV_V2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
   { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DF,
     RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF, 0 },
   { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX_V2DI,
@@ -1595,6 +1633,16 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
   { ALTIVEC_BUILTIN_VEC_MERGEH, VSX_BUILTIN_VEC_MERGEH_V2DI,
     RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_MERGEH, VSX_BUILTIN_VEC_MERGEH_V2DI,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_MERGEH, VSX_BUILTIN_VEC_MERGEH_V2DI,
+    RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_MERGEH, VSX_BUILTIN_VEC_MERGEH_V2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_MERGEH, VSX_BUILTIN_VEC_MERGEH_V2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_MERGEH, VSX_BUILTIN_VEC_MERGEH_V2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
   { ALTIVEC_BUILTIN_VEC_VMRGHW, ALTIVEC_BUILTIN_VMRGHW,
     RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
   { ALTIVEC_BUILTIN_VEC_VMRGHW, ALTIVEC_BUILTIN_VMRGHW,
@@ -1643,6 +1691,16 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
   { ALTIVEC_BUILTIN_VEC_MERGEL, VSX_BUILTIN_VEC_MERGEL_V2DI,
     RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_MERGEL, VSX_BUILTIN_VEC_MERGEL_V2DI,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_MERGEL, VSX_BUILTIN_VEC_MERGEL_V2DI,
+    RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_MERGEL, VSX_BUILTIN_VEC_MERGEL_V2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_MERGEL, VSX_BUILTIN_VEC_MERGEL_V2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_MERGEL, VSX_BUILTIN_VEC_MERGEL_V2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
   { ALTIVEC_BUILTIN_VEC_VMRGLW, ALTIVEC_BUILTIN_VMRGLW,
     RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
   { ALTIVEC_BUILTIN_VEC_VMRGLW, ALTIVEC_BUILTIN_VMRGLW,
@@ -1771,6 +1829,10 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, 0 },
   { VSX_BUILTIN_VEC_MUL, VSX_BUILTIN_XVMULDP,
     RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
+  { VSX_BUILTIN_VEC_MUL, VSX_BUILTIN_MUL_V2DI,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+  { VSX_BUILTIN_VEC_MUL, VSX_BUILTIN_MUL_V2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
   { ALTIVEC_BUILTIN_VEC_MULE, ALTIVEC_BUILTIN_VMULEUB,
     RS6000_BTI_unsigned_V8HI, RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, 0 },
   { ALTIVEC_BUILTIN_VEC_MULE, ALTIVEC_BUILTIN_VMULESB,
@@ -1812,6 +1874,18 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
   { ALTIVEC_BUILTIN_VEC_NOR, ALTIVEC_BUILTIN_VNOR,
     RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
   { ALTIVEC_BUILTIN_VEC_NOR, ALTIVEC_BUILTIN_VNOR,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_NOR, ALTIVEC_BUILTIN_VNOR,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_NOR, ALTIVEC_BUILTIN_VNOR,
+    RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_NOR, ALTIVEC_BUILTIN_VNOR,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_NOR, ALTIVEC_BUILTIN_VNOR,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_NOR, ALTIVEC_BUILTIN_VNOR,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_NOR, ALTIVEC_BUILTIN_VNOR,
     RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
   { ALTIVEC_BUILTIN_VEC_NOR, ALTIVEC_BUILTIN_VNOR,
     RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, 0 },
@@ -1842,6 +1916,18 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
   { ALTIVEC_BUILTIN_VEC_OR, ALTIVEC_BUILTIN_VOR,
     RS6000_BTI_V2DF, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DF, 0 },
   { ALTIVEC_BUILTIN_VEC_OR, ALTIVEC_BUILTIN_VOR,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_OR, ALTIVEC_BUILTIN_VOR,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_OR, ALTIVEC_BUILTIN_VOR,
+    RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_OR, ALTIVEC_BUILTIN_VOR,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_OR, ALTIVEC_BUILTIN_VOR,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_OR, ALTIVEC_BUILTIN_VOR,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_OR, ALTIVEC_BUILTIN_VOR,
     RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, 0 },
   { ALTIVEC_BUILTIN_VEC_OR, ALTIVEC_BUILTIN_VOR,
     RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_V4SI, 0 },
@@ -1945,6 +2031,8 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_unsigned_V8HI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
   { ALTIVEC_BUILTIN_VEC_PACKSU, P8V_BUILTIN_VPKSDUS,
     RS6000_BTI_unsigned_V4SI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_PACKSU, P8V_BUILTIN_VPKSDUS,
+    RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
   { ALTIVEC_BUILTIN_VEC_VPKSWUS, ALTIVEC_BUILTIN_VPKSWUS,
     RS6000_BTI_unsigned_V8HI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
   { ALTIVEC_BUILTIN_VEC_VPKSHUS, ALTIVEC_BUILTIN_VPKSHUS,
@@ -2127,6 +2215,14 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, 0 },
   { ALTIVEC_BUILTIN_VEC_SPLAT, ALTIVEC_BUILTIN_VSPLTW,
     RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, 0 },
+  { ALTIVEC_BUILTIN_VEC_SPLAT, VSX_BUILTIN_XXSPLTD_V2DF,
+    RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_INTSI, 0 },
+  { ALTIVEC_BUILTIN_VEC_SPLAT, VSX_BUILTIN_XXSPLTD_V2DI,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_INTSI, 0 },
+  { ALTIVEC_BUILTIN_VEC_SPLAT, VSX_BUILTIN_XXSPLTD_V2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI, 0 },
+  { ALTIVEC_BUILTIN_VEC_SPLAT, VSX_BUILTIN_XXSPLTD_V2DI,
+    RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI, 0 },
   { ALTIVEC_BUILTIN_VEC_VSPLTW, ALTIVEC_BUILTIN_VSPLTW,
     RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_INTSI, 0 },
   { ALTIVEC_BUILTIN_VEC_VSPLTW, ALTIVEC_BUILTIN_VSPLTW,
@@ -2519,6 +2615,18 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
   { ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR,
     RS6000_BTI_V2DF, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DF, 0 },
   { ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR,
+    RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR,
+    RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI, 0 },
+  { ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR,
     RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, 0 },
   { ALTIVEC_BUILTIN_VEC_XOR, ALTIVEC_BUILTIN_VXOR,
     RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_V4SI, 0 },
@@ -2778,6 +2886,8 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_unsigned_V16QI },
   { ALTIVEC_BUILTIN_VEC_PERM, ALTIVEC_BUILTIN_VPERM_2DI,
     RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V16QI },
+  { ALTIVEC_BUILTIN_VEC_PERM, ALTIVEC_BUILTIN_VPERM_2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V16QI },
   { ALTIVEC_BUILTIN_VEC_PERM, ALTIVEC_BUILTIN_VPERM_4SF,
     RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_unsigned_V16QI },
   { ALTIVEC_BUILTIN_VEC_PERM, ALTIVEC_BUILTIN_VPERM_4SI,
@@ -2818,6 +2928,12 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI },
   { ALTIVEC_BUILTIN_VEC_SEL, ALTIVEC_BUILTIN_VSEL_2DI,
     RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI },
+  { ALTIVEC_BUILTIN_VEC_SEL, ALTIVEC_BUILTIN_VSEL_2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI },
+  { ALTIVEC_BUILTIN_VEC_SEL, ALTIVEC_BUILTIN_VSEL_2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI },
+  { ALTIVEC_BUILTIN_VEC_SEL, ALTIVEC_BUILTIN_VSEL_2DI,
+    RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_V2DI },
   { ALTIVEC_BUILTIN_VEC_SEL, ALTIVEC_BUILTIN_VSEL_4SF,
     RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_V4SF, RS6000_BTI_bool_V4SI },
   { ALTIVEC_BUILTIN_VEC_SEL, ALTIVEC_BUILTIN_VSEL_4SF,
@@ -3267,6 +3383,8 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
 
   { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVD2X_V2DF,
     RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF, 0 },
+  { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVD2X_V2DF,
+    RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_double, 0 },
   { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVD2X_V2DI,
     RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI, 0 },
   { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVD2X_V2DI,
@@ -3321,6 +3439,8 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
 
   { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVD2X_V2DF,
     RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF },
+  { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVD2X_V2DF,
+    RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_double },
   { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVD2X_V2DI,
     RS6000_BTI_void, RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI },
   { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVD2X_V2DI,
@@ -3431,6 +3551,18 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V4SI, RS6000_BTI_bool_V4SI },
   { ALTIVEC_BUILTIN_VEC_VCMPGT_P, ALTIVEC_BUILTIN_VCMPGTSW_P,
     RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V4SI, RS6000_BTI_V4SI },
+  { ALTIVEC_BUILTIN_VEC_VCMPGT_P, P8V_BUILTIN_VCMPGTUD_P,
+    RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_bool_V2DI, RS6000_BTI_unsigned_V2DI },
+  { ALTIVEC_BUILTIN_VEC_VCMPGT_P, P8V_BUILTIN_VCMPGTUD_P,
+    RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_bool_V2DI },
+  { ALTIVEC_BUILTIN_VEC_VCMPGT_P, P8V_BUILTIN_VCMPGTUD_P,
+    RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V2DI },
+  { ALTIVEC_BUILTIN_VEC_VCMPGT_P, P8V_BUILTIN_VCMPGTSD_P,
+    RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_bool_V2DI, RS6000_BTI_V2DI },
+  { ALTIVEC_BUILTIN_VEC_VCMPGT_P, P8V_BUILTIN_VCMPGTSD_P,
+    RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V2DI, RS6000_BTI_bool_V2DI },
+  { ALTIVEC_BUILTIN_VEC_VCMPGT_P, P8V_BUILTIN_VCMPGTSD_P,
+    RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V2DI, RS6000_BTI_V2DI },
   { ALTIVEC_BUILTIN_VEC_VCMPGT_P, ALTIVEC_BUILTIN_VCMPGTFP_P,
     RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_V4SF, RS6000_BTI_V4SF },
   { ALTIVEC_BUILTIN_VEC_VCMPGT_P, VSX_BUILTIN_XVCMPGTDP_P,
@@ -3889,12 +4021,16 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
   { P8V_BUILTIN_VEC_VMRGEW, P8V_BUILTIN_VMRGEW,
     RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
     RS6000_BTI_unsigned_V4SI, 0 },
+  { P8V_BUILTIN_VEC_VMRGEW, P8V_BUILTIN_VMRGEW,
+    RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, 0 },
 
   { P8V_BUILTIN_VEC_VMRGOW, P8V_BUILTIN_VMRGOW,
     RS6000_BTI_V4SI, RS6000_BTI_V4SI, RS6000_BTI_V4SI, 0 },
   { P8V_BUILTIN_VEC_VMRGOW, P8V_BUILTIN_VMRGOW,
     RS6000_BTI_unsigned_V4SI, RS6000_BTI_unsigned_V4SI,
     RS6000_BTI_unsigned_V4SI, 0 },
+  { P8V_BUILTIN_VEC_VMRGOW, P8V_BUILTIN_VMRGOW,
+    RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V4SI, 0 },
 
   { P8V_BUILTIN_VEC_VPOPCNT, P8V_BUILTIN_VPOPCNTB,
     RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0, 0 },
index b17fd0d..abe0ce6 100644 (file)
@@ -1,5 +1,5 @@
 /* IBM RS/6000 CPU names..
-   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+   Copyright (C) 1991-2015 Free Software Foundation, Inc.
    Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
 
    This file is part of GCC.
@@ -91,6 +91,7 @@
                                 | OPTION_MASK_PPC_GFXOPT               \
                                 | OPTION_MASK_PPC_GPOPT                \
                                 | OPTION_MASK_QUAD_MEMORY              \
+                                | OPTION_MASK_QUAD_MEMORY_ATOMIC       \
                                 | OPTION_MASK_RECIP_PRECISION          \
                                 | OPTION_MASK_SOFT_FLOAT               \
                                 | OPTION_MASK_STRICT_ALIGN_OPTIONAL    \
@@ -188,4 +189,5 @@ RS6000_CPU ("power7", PROCESSOR_POWER7,   /* Don't add MASK_ISEL by default */
 RS6000_CPU ("power8", PROCESSOR_POWER8, MASK_POWERPC64 | ISA_2_7_MASKS_SERVER)
 RS6000_CPU ("powerpc", PROCESSOR_POWERPC, 0)
 RS6000_CPU ("powerpc64", PROCESSOR_POWERPC64, MASK_PPC_GFXOPT | MASK_POWERPC64)
+RS6000_CPU ("powerpc64le", PROCESSOR_POWER8, MASK_POWERPC64 | ISA_2_7_MASKS_SERVER)
 RS6000_CPU ("rs64", PROCESSOR_RS64A, MASK_PPC_GFXOPT | MASK_POWERPC64)
index e1355b3..aa8e762 100644 (file)
@@ -65,6 +65,7 @@ extern void altivec_expand_stvx_be (rtx, rtx, enum machine_mode, unsigned);
 extern void altivec_expand_stvex_be (rtx, rtx, enum machine_mode, unsigned);
 extern void rs6000_expand_extract_even (rtx, rtx, rtx);
 extern void rs6000_expand_interleave (rtx, rtx, rtx, bool);
+extern void rs6000_scale_v2df (rtx, rtx, int);
 extern void build_mask64_2_operands (rtx, rtx *);
 extern int expand_block_clear (rtx[]);
 extern int expand_block_move (rtx[]);
index 85678d2..41e7e14 100644 (file)
@@ -186,5 +186,8 @@ EnumValue
 Enum(rs6000_cpu_opt_value) String(powerpc64) Value(52)
 
 EnumValue
-Enum(rs6000_cpu_opt_value) String(rs64) Value(53)
+Enum(rs6000_cpu_opt_value) String(powerpc64le) Value(53)
+
+EnumValue
+Enum(rs6000_cpu_opt_value) String(rs64) Value(54)
 
index e1a226c..e2277e5 100644 (file)
@@ -1,5 +1,5 @@
 /* Subroutines used for code generation on IBM RS/6000.
-   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+   Copyright (C) 1991-2015 Free Software Foundation, Inc.
    Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
 
    This file is part of GCC.
@@ -79,6 +79,9 @@
 #include "dumpfile.h"
 #include "cgraph.h"
 #include "target-globals.h"
+#include "real.h"
+#include "context.h"
+#include "tree-pass.h"
 #if TARGET_XCOFF
 #include "xcoffout.h"  /* get declarations of xcoff_*_section_name */
 #endif
@@ -1171,6 +1174,7 @@ static bool rs6000_secondary_reload_move (enum rs6000_reg_type,
                                          enum machine_mode,
                                          secondary_reload_info *,
                                          bool);
+rtl_opt_pass *make_pass_analyze_swaps (gcc::context*);
 
 /* Hash table stuff for keeping track of TOC entries.  */
 
@@ -3099,6 +3103,10 @@ rs6000_option_override_internal (bool global_init_p)
     = ((global_init_p || target_option_default_node == NULL)
        ? NULL : TREE_TARGET_OPTION (target_option_default_node));
 
+  /* Print defaults.  */
+  if ((TARGET_DEBUG_REG || TARGET_DEBUG_TARGET) && global_init_p)
+    rs6000_print_isa_options (stderr, 0, "TARGET_DEFAULT", TARGET_DEFAULT);
+
   /* Remember the explicit arguments.  */
   if (global_init_p)
     rs6000_isa_flags_explicit = global_options_set.x_rs6000_isa_flags;
@@ -3175,7 +3183,13 @@ rs6000_option_override_internal (bool global_init_p)
     }
   else
     {
-      const char *default_cpu = (TARGET_POWERPC64 ? "powerpc64" : "powerpc");
+      /* PowerPC 64-bit LE requires at least ISA 2.07.  */
+      const char *default_cpu = ((!TARGET_POWERPC64)
+                                ? "powerpc"
+                                : ((BYTES_BIG_ENDIAN)
+                                   ? "powerpc64"
+                                   : "powerpc64le"));
+
       rs6000_cpu_index = cpu_index = rs6000_cpu_name_lookup (default_cpu);
       have_cpu = false;
     }
@@ -3194,15 +3208,18 @@ rs6000_option_override_internal (bool global_init_p)
                           & set_masks);
     }
   else
-    rs6000_isa_flags |= (processor_target_table[cpu_index].target_enable
-                        & ~rs6000_isa_flags_explicit);
+    {
+      /* If no -mcpu=<xxx>, inherit any default options that were cleared via
+        POWERPC_MASKS.  Originally, TARGET_DEFAULT was used to initialize
+        target_flags via the TARGET_DEFAULT_TARGET_FLAGS hook.  When we switched
+        to using rs6000_isa_flags, we need to do the initialization here.
 
-  /* If no -mcpu=<xxx>, inherit any default options that were cleared via
-     POWERPC_MASKS.  Originally, TARGET_DEFAULT was used to initialize
-     target_flags via the TARGET_DEFAULT_TARGET_FLAGS hook.  When we switched
-     to using rs6000_isa_flags, we need to do the initialization here.  */
-  if (!have_cpu)
-    rs6000_isa_flags |= (TARGET_DEFAULT & ~rs6000_isa_flags_explicit);
+        If there is a TARGET_DEFAULT, use that.  Otherwise fall back to using
+        -mcpu=powerpc, -mcpu=powerpc64, or -mcpu=powerpc64le defaults.  */
+      HOST_WIDE_INT flags = ((TARGET_DEFAULT) ? TARGET_DEFAULT
+                            : processor_target_table[cpu_index].target_enable);
+      rs6000_isa_flags |= (flags & ~rs6000_isa_flags_explicit);
+    }
 
   if (rs6000_tune_index >= 0)
     tune_index = rs6000_tune_index;
@@ -4048,18 +4065,30 @@ rs6000_option_override_internal (bool global_init_p)
        }
     }
 
+  /* Determine when unaligned vector accesses are permitted, and when
+     they are preferred over masked Altivec loads.  Note that if
+     TARGET_ALLOW_MOVMISALIGN has been disabled by the user, then
+     TARGET_EFFICIENT_UNALIGNED_VSX must be as well.  The converse is
+     not true.  */
+  if (TARGET_EFFICIENT_UNALIGNED_VSX == -1) {
+    if (TARGET_VSX && rs6000_cpu == PROCESSOR_POWER8
+       && TARGET_ALLOW_MOVMISALIGN != 0)
+      TARGET_EFFICIENT_UNALIGNED_VSX = 1;
+    else
+      TARGET_EFFICIENT_UNALIGNED_VSX = 0;
+  }
+
+  if (TARGET_ALLOW_MOVMISALIGN == -1 && rs6000_cpu == PROCESSOR_POWER8)
+    TARGET_ALLOW_MOVMISALIGN = 1;
+
   /* Set the builtin mask of the various options used that could affect which
      builtins were used.  In the past we used target_flags, but we've run out
      of bits, and some options like SPE and PAIRED are no longer in
      target_flags.  */
   rs6000_builtin_mask = rs6000_builtin_mask_calculate ();
   if (TARGET_DEBUG_BUILTIN || TARGET_DEBUG_TARGET)
-    {
-      fprintf (stderr,
-              "new builtin mask = " HOST_WIDE_INT_PRINT_HEX ", ",
-              rs6000_builtin_mask);
-      rs6000_print_builtin_options (stderr, 0, NULL, rs6000_builtin_mask);
-    }
+    rs6000_print_builtin_options (stderr, 0, "builtin mask",
+                                 rs6000_builtin_mask);
 
   /* Initialize all of the registers.  */
   rs6000_init_hard_regno_mode_ok (global_init_p);
@@ -4084,6 +4113,15 @@ static void
 rs6000_option_override (void)
 {
   (void) rs6000_option_override_internal (true);
+
+  /* Register machine-specific passes.  This needs to be done at start-up.
+     It's convenient to do it here (like i386 does).  */
+  opt_pass *pass_analyze_swaps = make_pass_analyze_swaps (g);
+
+  static struct register_pass_info analyze_swaps_info
+    = { pass_analyze_swaps, "cse1", 1, PASS_POS_INSERT_BEFORE };
+
+  register_pass (&analyze_swaps_info);
 }
 
 \f
@@ -4091,7 +4129,9 @@ rs6000_option_override (void)
 static tree
 rs6000_builtin_mask_for_load (void)
 {
-  if (TARGET_ALTIVEC || TARGET_VSX)
+  /* Don't use lvsl/vperm for P8 and similarly efficient machines.  */
+  if ((TARGET_ALTIVEC && !TARGET_VSX)
+      || (TARGET_VSX && !TARGET_EFFICIENT_UNALIGNED_VSX))
     return altivec_builtin_mask_for_load;
   else
     return 0;
@@ -4170,6 +4210,9 @@ rs6000_builtin_support_vector_misalignment (enum machine_mode mode,
 {
   if (TARGET_VSX)
     {
+      if (TARGET_EFFICIENT_UNALIGNED_VSX)
+       return true;
+
       /* Return if movmisalign pattern is not supported for this mode.  */
       if (optab_handler (movmisalign_optab, mode) == CODE_FOR_nothing)
         return false;
@@ -4233,6 +4276,9 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost,
         return 3;
 
       case unaligned_load:
+       if (TARGET_EFFICIENT_UNALIGNED_VSX)
+         return 1;
+
         if (TARGET_VSX && TARGET_ALLOW_MOVMISALIGN)
           {
             elements = TYPE_VECTOR_SUBPARTS (vectype);
@@ -4268,6 +4314,9 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost,
         return 2;
 
       case unaligned_store:
+       if (TARGET_EFFICIENT_UNALIGNED_VSX)
+         return 1;
+
         if (TARGET_VSX && TARGET_ALLOW_MOVMISALIGN)
           {
             elements = TYPE_VECTOR_SUBPARTS (vectype);
@@ -4929,6 +4978,28 @@ rs6000_file_start (void)
       switch_to_section (toc_section);
       switch_to_section (text_section);
     }
+
+#ifdef USING_ELFOS_H
+  if (rs6000_default_cpu == 0 || rs6000_default_cpu[0] == '\0'
+      || !global_options_set.x_rs6000_cpu_index)
+    {
+      fputs ("\t.machine ", asm_out_file);
+      if ((rs6000_isa_flags & OPTION_MASK_DIRECT_MOVE) != 0)
+       fputs ("power8\n", asm_out_file);
+      else if ((rs6000_isa_flags & OPTION_MASK_POPCNTD) != 0)
+       fputs ("power7\n", asm_out_file);
+      else if ((rs6000_isa_flags & OPTION_MASK_CMPB) != 0)
+       fputs ("power6\n", asm_out_file);
+      else if ((rs6000_isa_flags & OPTION_MASK_POPCNTB) != 0)
+       fputs ("power5\n", asm_out_file);
+      else if ((rs6000_isa_flags & OPTION_MASK_MFCRF) != 0)
+       fputs ("power4\n", asm_out_file);
+      else if ((rs6000_isa_flags & OPTION_MASK_POWERPC64) != 0)
+       fputs ("ppc64\n", asm_out_file);
+      else
+       fputs ("ppc\n", asm_out_file);
+    }
+#endif
 }
 
 \f
@@ -6896,24 +6967,6 @@ rs6000_delegitimize_address (rtx orig_x)
   if (GET_CODE (y) == UNSPEC
       && XINT (y, 1) == UNSPEC_TOCREL)
     {
-#ifdef ENABLE_CHECKING
-      if (REG_P (XVECEXP (y, 0, 1))
-         && REGNO (XVECEXP (y, 0, 1)) == TOC_REGISTER)
-       {
-         /* All good.  */
-       }
-      else if (GET_CODE (XVECEXP (y, 0, 1)) == DEBUG_EXPR)
-       {
-         /* Weirdness alert.  df_note_compute can replace r2 with a
-            debug_expr when this unspec is in a debug_insn.
-            Seen in gcc.dg/pr51957-1.c  */
-       }
-      else
-       {
-         debug_rtx (orig_x);
-         abort ();
-       }
-#endif
       y = XVECEXP (y, 0, 0);
 
 #ifdef HAVE_AS_TLS
@@ -8167,6 +8220,11 @@ rs6000_emit_le_vsx_store (rtx dest, rtx source, enum machine_mode mode)
 {
   rtx tmp, permute_src, permute_tmp;
 
+  /* This should never be called during or after reload, because it does
+     not re-permute the source register.  It is intended only for use
+     during expand.  */
+  gcc_assert (!reload_in_progress && !lra_in_progress && !reload_completed);
+
   /* Use V2DImode to do swaps of types with 128-bit scalare parts (TImode,
      V1TImode).  */
   if (mode == TImode || mode == V1TImode)
@@ -12364,9 +12422,9 @@ static inline enum insn_code
 rs6000_htm_spr_icode (bool nonvoid)
 {
   if (nonvoid)
-    return (TARGET_64BIT) ? CODE_FOR_htm_mfspr_di : CODE_FOR_htm_mfspr_si;
+    return (TARGET_POWERPC64) ? CODE_FOR_htm_mfspr_di : CODE_FOR_htm_mfspr_si;
   else
-    return (TARGET_64BIT) ? CODE_FOR_htm_mtspr_di : CODE_FOR_htm_mtspr_si;
+    return (TARGET_POWERPC64) ? CODE_FOR_htm_mtspr_di : CODE_FOR_htm_mtspr_si;
 }
 
 /* Expand the HTM builtin in EXP and store the result in TARGET.
@@ -12380,7 +12438,17 @@ htm_expand_builtin (tree exp, rtx target, bool * expandedp)
   const struct builtin_description *d;
   size_t i;
 
-  *expandedp = false;
+  *expandedp = true;
+
+  if (!TARGET_POWERPC64
+      && (fcode == HTM_BUILTIN_TABORTDC
+         || fcode == HTM_BUILTIN_TABORTDCI))
+    {
+      size_t uns_fcode = (size_t)fcode;
+      const char *name = rs6000_builtin_info[uns_fcode].name;
+      error ("builtin %s is only valid in 64-bit mode", name);
+      return const0_rtx;
+    }
 
   /* Expand the HTM builtins.  */
   d = bdesc_htm;
@@ -12393,26 +12461,29 @@ htm_expand_builtin (tree exp, rtx target, bool * expandedp)
        call_expr_arg_iterator iter;
        unsigned attr = rs6000_builtin_info[fcode].attr;
        enum insn_code icode = d->icode;
+       const struct insn_operand_data *insn_op;
+       bool uses_spr = (attr & RS6000_BTC_SPR);
+       rtx cr = NULL_RTX;
 
-       if (attr & RS6000_BTC_SPR)
+       if (uses_spr)
          icode = rs6000_htm_spr_icode (nonvoid);
+        insn_op = &insn_data[icode].operand[0];
 
        if (nonvoid)
          {
-           enum machine_mode tmode = insn_data[icode].operand[0].mode;
+           machine_mode tmode = (uses_spr) ? insn_op->mode : SImode;
            if (!target
                || GET_MODE (target) != tmode
-               || !(*insn_data[icode].operand[0].predicate) (target, tmode))
+               || (uses_spr && !(*insn_op->predicate) (target, tmode)))
              target = gen_reg_rtx (tmode);
-           op[nopnds++] = target;
+           if (uses_spr)
+             op[nopnds++] = target;
          }
 
        FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
        {
-         const struct insn_operand_data *insn_op;
-
          if (arg == error_mark_node || nopnds >= MAX_HTM_OPERANDS)
-           return NULL_RTX;
+           return const0_rtx;
 
          insn_op = &insn_data[icode].operand[nopnds];
 
@@ -12459,10 +12530,17 @@ htm_expand_builtin (tree exp, rtx target, bool * expandedp)
 
        /* If this builtin accesses SPRs, then pass in the appropriate
           SPR number and SPR regno as the last two operands.  */
-       if (attr & RS6000_BTC_SPR)
+       if (uses_spr)
          {
-           op[nopnds++] = gen_rtx_CONST_INT (Pmode, htm_spr_num (fcode));
-           op[nopnds++] = gen_rtx_REG (Pmode, htm_spr_regno (fcode));
+           machine_mode mode = (TARGET_POWERPC64) ? DImode : SImode;
+           op[nopnds++] = gen_rtx_CONST_INT (mode, htm_spr_num (fcode));
+           op[nopnds++] = gen_rtx_REG (mode, htm_spr_regno (fcode));
+         }
+       /* If this builtin accesses a CR, then pass in a scratch
+          CR as the last operand.  */
+       else if (attr & RS6000_BTC_CR)
+         { cr = gen_reg_rtx (CCmode);
+           op[nopnds++] = cr;
          }
 
 #ifdef ENABLE_CHECKING
@@ -12475,7 +12553,7 @@ htm_expand_builtin (tree exp, rtx target, bool * expandedp)
          expected_nopnds = 3;
        if (!(attr & RS6000_BTC_VOID))
          expected_nopnds += 1;
-       if (attr & RS6000_BTC_SPR)
+       if (uses_spr)
          expected_nopnds += 2;
 
        gcc_assert (nopnds == expected_nopnds && nopnds <= MAX_HTM_OPERANDS);
@@ -12502,12 +12580,41 @@ htm_expand_builtin (tree exp, rtx target, bool * expandedp)
          return NULL_RTX;
        emit_insn (pat);
 
-       *expandedp = true;
+       if (attr & RS6000_BTC_CR)
+         {
+           if (fcode == HTM_BUILTIN_TBEGIN)
+             {
+               /* Emit code to set TARGET to true or false depending on
+                  whether the tbegin. instruction successfully or failed
+                  to start a transaction.  We do this by placing the 1's
+                  complement of CR's EQ bit into TARGET.  */
+               rtx scratch = gen_reg_rtx (SImode);
+               emit_insn (gen_rtx_SET (VOIDmode, scratch,
+                                       gen_rtx_EQ (SImode, cr,
+                                                    const0_rtx)));
+               emit_insn (gen_rtx_SET (VOIDmode, target,
+                                       gen_rtx_XOR (SImode, scratch,
+                                                    GEN_INT (1))));
+             }
+           else
+             {
+               /* Emit code to copy the 4-bit condition register field
+                  CR into the least significant end of register TARGET.  */
+               rtx scratch1 = gen_reg_rtx (SImode);
+               rtx scratch2 = gen_reg_rtx (SImode);
+               rtx subreg = simplify_gen_subreg (CCmode, scratch1, SImode, 0);
+               emit_insn (gen_movcc (subreg, cr));
+               emit_insn (gen_lshrsi3 (scratch2, scratch1, GEN_INT (28)));
+               emit_insn (gen_andsi3 (target, scratch2, GEN_INT (0xf)));
+             }
+         }
+
        if (nonvoid)
          return target;
        return const0_rtx;
       }
 
+  *expandedp = false;
   return NULL_RTX;
 }
 
@@ -14998,8 +15105,31 @@ htm_init_builtins (void)
       bool void_func = (attr & RS6000_BTC_VOID);
       int attr_args = (attr & RS6000_BTC_TYPE_MASK);
       int nopnds = 0;
-      tree argtype = (attr & RS6000_BTC_SPR) ? long_unsigned_type_node
-                                            : unsigned_type_node;
+      tree gpr_type_node;
+      tree rettype;
+      tree argtype;
+
+      if (TARGET_32BIT && TARGET_POWERPC64)
+       gpr_type_node = long_long_unsigned_type_node;
+      else
+       gpr_type_node = long_unsigned_type_node;
+
+      if (attr & RS6000_BTC_SPR)
+       {
+         rettype = gpr_type_node;
+         argtype = gpr_type_node;
+       }
+      else if (d->code == HTM_BUILTIN_TABORTDC
+              || d->code == HTM_BUILTIN_TABORTDCI)
+       {
+         rettype = unsigned_type_node;
+         argtype = gpr_type_node;
+       }
+      else
+       {
+         rettype = unsigned_type_node;
+         argtype = unsigned_type_node;
+       }
 
       if ((mask & builtin_mask) != mask)
        {
@@ -15016,7 +15146,7 @@ htm_init_builtins (void)
          continue;
        }
 
-      op[nopnds++] = (void_func) ? void_type_node : argtype;
+      op[nopnds++] = (void_func) ? void_type_node : rettype;
 
       if (attr_args == RS6000_BTC_UNARY)
        op[nopnds++] = argtype;
@@ -16653,10 +16783,13 @@ rs6000_secondary_reload (bool in_p,
              : (offset + 0x8000 < 0x10000 - extra /* legitimate_address_p */
                 && (offset & 3) != 0))
            {
+             /* -m32 -mpowerpc64 needs to use a 32-bit scratch register.  */
              if (in_p)
-               sri->icode = CODE_FOR_reload_di_load;
+               sri->icode = ((TARGET_32BIT) ? CODE_FOR_reload_si_load
+                             : CODE_FOR_reload_di_load);
              else
-               sri->icode = CODE_FOR_reload_di_store;
+               sri->icode = ((TARGET_32BIT) ? CODE_FOR_reload_si_store
+                             : CODE_FOR_reload_di_store);
              sri->extra_cost = 2;
              ret = NO_REGS;
            }
@@ -20705,7 +20838,7 @@ compute_vrsave_mask (void)
      them in again.  More importantly, the mask we compute here is
      used to generate CLOBBERs in the set_vrsave insn, and we do not
      wish the argument registers to die.  */
-  for (i = crtl->args.info.vregno - 1; i >= ALTIVEC_ARG_MIN_REG; --i)
+  for (i = ALTIVEC_ARG_MIN_REG; i < (unsigned) crtl->args.info.vregno; i++)
     mask &= ~ALTIVEC_REG_BIT (i);
 
   /* Similarly, remove the return value from the set.  */
@@ -21114,6 +21247,9 @@ rs6000_savres_strategy (rs6000_stack_t *info,
 static rs6000_stack_t *
 rs6000_stack_info (void)
 {
+  /* We should never be called for thunks, we are not set up for that.  */
+  gcc_assert (!cfun->is_thunk);
+
   rs6000_stack_t *info_ptr = &stack_info;
   int reg_size = TARGET_32BIT ? 4 : 8;
   int ehrd_size;
@@ -22268,7 +22404,7 @@ output_probe_stack_range (rtx reg1, rtx reg2)
 
 static rtx
 rs6000_frame_related (rtx insn, rtx reg, HOST_WIDE_INT val,
-                     rtx reg2, rtx rreg, rtx split_reg)
+                     rtx reg2, rtx rreg)
 {
   rtx real, temp;
 
@@ -22359,11 +22495,6 @@ rs6000_frame_related (rtx insn, rtx reg, HOST_WIDE_INT val,
          }
     }
 
-  /* If a store insn has been split into multiple insns, the
-     true source register is given by split_reg.  */
-  if (split_reg != NULL_RTX)
-    real = gen_rtx_SET (VOIDmode, SET_DEST (real), split_reg);
-
   RTX_FRAME_RELATED_P (insn) = 1;
   add_reg_note (insn, REG_FRAME_RELATED_EXPR, real);
 
@@ -22471,7 +22602,7 @@ emit_frame_save (rtx frame_reg, enum machine_mode mode,
   reg = gen_rtx_REG (mode, regno);
   insn = emit_insn (gen_frame_store (reg, frame_reg, offset));
   return rs6000_frame_related (insn, frame_reg, frame_reg_to_sp,
-                              NULL_RTX, NULL_RTX, NULL_RTX);
+                              NULL_RTX, NULL_RTX);
 }
 
 /* Emit an offset memory reference suitable for a frame store, while
@@ -23051,7 +23182,7 @@ rs6000_emit_prologue (void)
 
       insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
       rs6000_frame_related (insn, frame_reg_rtx, sp_off - frame_off,
-                           treg, GEN_INT (-info->total_size), NULL_RTX);
+                           treg, GEN_INT (-info->total_size));
       sp_off = frame_off = info->total_size;
     }
 
@@ -23136,7 +23267,7 @@ rs6000_emit_prologue (void)
 
          insn = emit_move_insn (mem, reg);
          rs6000_frame_related (insn, frame_reg_rtx, sp_off - frame_off,
-                               NULL_RTX, NULL_RTX, NULL_RTX);
+                               NULL_RTX, NULL_RTX);
          END_USE (0);
        }
     }
@@ -23192,7 +23323,7 @@ rs6000_emit_prologue (void)
                                     info->lr_save_offset,
                                     DFmode, sel);
       rs6000_frame_related (insn, ptr_reg, sp_off,
-                           NULL_RTX, NULL_RTX, NULL_RTX);
+                           NULL_RTX, NULL_RTX);
       if (lr)
        END_USE (0);
     }
@@ -23271,7 +23402,7 @@ rs6000_emit_prologue (void)
                                         SAVRES_SAVE | SAVRES_GPR);
 
          rs6000_frame_related (insn, spe_save_area_ptr, sp_off - save_off,
-                               NULL_RTX, NULL_RTX, NULL_RTX);
+                               NULL_RTX, NULL_RTX);
        }
 
       /* Move the static chain pointer back.  */
@@ -23321,7 +23452,7 @@ rs6000_emit_prologue (void)
                                     info->lr_save_offset + ptr_off,
                                     reg_mode, sel);
       rs6000_frame_related (insn, ptr_reg, sp_off - ptr_off,
-                           NULL_RTX, NULL_RTX, NULL_RTX);
+                           NULL_RTX, NULL_RTX);
       if (lr)
        END_USE (0);
     }
@@ -23337,7 +23468,7 @@ rs6000_emit_prologue (void)
                             info->gp_save_offset + frame_off + reg_size * i);
       insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, p));
       rs6000_frame_related (insn, frame_reg_rtx, sp_off - frame_off,
-                           NULL_RTX, NULL_RTX, NULL_RTX);
+                           NULL_RTX, NULL_RTX);
     }
   else if (!WORLD_SAVE_P (info))
     {
@@ -23660,7 +23791,7 @@ rs6000_emit_prologue (void)
                                     info->altivec_save_offset + ptr_off,
                                     0, V4SImode, SAVRES_SAVE | SAVRES_VR);
       rs6000_frame_related (insn, scratch_reg, sp_off - ptr_off,
-                           NULL_RTX, NULL_RTX, NULL_RTX);
+                           NULL_RTX, NULL_RTX);
       if (REGNO (frame_reg_rtx) == REGNO (scratch_reg))
        {
          /* The oddity mentioned above clobbered our frame reg.  */
@@ -23676,7 +23807,7 @@ rs6000_emit_prologue (void)
       for (i = info->first_altivec_reg_save; i <= LAST_ALTIVEC_REGNO; ++i)
        if (info->vrsave_mask & ALTIVEC_REG_BIT (i))
          {
-           rtx areg, savereg, mem, split_reg;
+           rtx areg, savereg, mem;
            int offset;
 
            offset = (info->altivec_save_offset + frame_off
@@ -23692,20 +23823,13 @@ rs6000_emit_prologue (void)
            mem = gen_frame_mem (V4SImode,
                                 gen_rtx_PLUS (Pmode, frame_reg_rtx, areg));
 
-           insn = emit_move_insn (mem, savereg);
-
-           /* When we split a VSX store into two insns, we need to make
-              sure the DWARF info knows which register we are storing.
-              Pass it in to be used on the appropriate note.  */
-           if (!BYTES_BIG_ENDIAN
-               && GET_CODE (PATTERN (insn)) == SET
-               && GET_CODE (SET_SRC (PATTERN (insn))) == VEC_SELECT)
-             split_reg = savereg;
-           else
-             split_reg = NULL_RTX;
+           /* Rather than emitting a generic move, force use of the stvx
+              instruction, which we always want.  In particular we don't
+              want xxpermdi/stxvd2x for little endian.  */
+           insn = emit_insn (gen_altivec_stvx_v4si_internal (mem, savereg));
 
            rs6000_frame_related (insn, frame_reg_rtx, sp_off - frame_off,
-                                 areg, GEN_INT (offset), split_reg);
+                                 areg, GEN_INT (offset));
          }
     }
 
@@ -23835,11 +23959,10 @@ rs6000_emit_prologue (void)
     }
 }
 
-/* Write function prologue.  */
+/* Output .extern statements for the save/restore routines we use.  */
 
 static void
-rs6000_output_function_prologue (FILE *file,
-                                HOST_WIDE_INT size ATTRIBUTE_UNUSED)
+rs6000_output_savres_externs (FILE *file)
 {
   rs6000_stack_t *info = rs6000_stack_info ();
 
@@ -23871,6 +23994,16 @@ rs6000_output_function_prologue (FILE *file,
          fprintf (file, "\t.extern %s\n", name);
        }
     }
+}
+
+/* Write function prologue.  */
+
+static void
+rs6000_output_function_prologue (FILE *file,
+                                HOST_WIDE_INT size ATTRIBUTE_UNUSED)
+{
+  if (!cfun->is_thunk)
+    rs6000_output_savres_externs (file);
 
   /* ELFv2 ABI r2 setup code and local entry point.  This must follow
      immediately after the global entry point label.  */
@@ -24338,7 +24471,10 @@ rs6000_emit_epilogue (int sibcall)
                mem = gen_frame_mem (V4SImode, addr);
 
                reg = gen_rtx_REG (V4SImode, i);
-               emit_move_insn (reg, mem);
+               /* Rather than emitting a generic move, force use of the
+                  lvx instruction, which we always want.  In particular
+                  we don't want lxvd2x/xxpermdi for little endian.  */
+               (void) emit_insn (gen_altivec_lvx_v4si_internal (reg, mem));
              }
        }
 
@@ -24536,7 +24672,10 @@ rs6000_emit_epilogue (int sibcall)
                mem = gen_frame_mem (V4SImode, addr);
 
                reg = gen_rtx_REG (V4SImode, i);
-               emit_move_insn (reg, mem);
+               /* Rather than emitting a generic move, force use of the
+                  lvx instruction, which we always want.  In particular
+                  we don't want lxvd2x/xxpermdi for little endian.  */
+               (void) emit_insn (gen_altivec_lvx_v4si_internal (reg, mem));
              }
        }
 
@@ -30922,6 +31061,23 @@ rs6000_expand_interleave (rtx target, rtx op0, rtx op1, bool highp)
   rs6000_do_expand_vec_perm (target, op0, op1, vmode, nelt, perm);
 }
 
+/* Scale a V2DF vector SRC by two to the SCALE and place in TGT.  */
+void
+rs6000_scale_v2df (rtx tgt, rtx src, int scale)
+{
+  HOST_WIDE_INT hwi_scale (scale);
+  REAL_VALUE_TYPE r_pow;
+  rtvec v = rtvec_alloc (2);
+  rtx elt;
+  rtx scale_vec = gen_reg_rtx (V2DFmode);
+  (void)real_powi (&r_pow, DFmode, &dconst2, hwi_scale);
+  elt = CONST_DOUBLE_FROM_REAL_VALUE (r_pow, DFmode);
+  RTVEC_ELT (v, 0) = elt;
+  RTVEC_ELT (v, 1) = elt;
+  rs6000_expand_vector_init (scale_vec, gen_rtx_PARALLEL (V2DFmode, v));
+  emit_insn (gen_mulv2df3 (tgt, src, scale_vec));
+}
+
 /* Return an RTX representing where to find the function value of a
    function returning MODE.  */
 static rtx
@@ -31440,10 +31596,11 @@ static struct rs6000_opt_mask const rs6000_opt_masks[] =
   { "quad-memory",             OPTION_MASK_QUAD_MEMORY,        false, true  },
   { "quad-memory-atomic",      OPTION_MASK_QUAD_MEMORY_ATOMIC, false, true  },
   { "recip-precision",         OPTION_MASK_RECIP_PRECISION,    false, true  },
+  { "save-toc-indirect",       OPTION_MASK_SAVE_TOC_INDIRECT,  false, true  },
   { "string",                  OPTION_MASK_STRING,             false, true  },
   { "update",                  OPTION_MASK_NO_UPDATE,          true , true  },
-  { "upper-regs-df",           OPTION_MASK_UPPER_REGS_DF,      false, false },
-  { "upper-regs-sf",           OPTION_MASK_UPPER_REGS_SF,      false, false },
+  { "upper-regs-df",           OPTION_MASK_UPPER_REGS_DF,      false, true  },
+  { "upper-regs-sf",           OPTION_MASK_UPPER_REGS_SF,      false, true  },
   { "vsx",                     OPTION_MASK_VSX,                false, true  },
   { "vsx-timode",              OPTION_MASK_VSX_TIMODE,         false, true  },
 #ifdef OPTION_MASK_64BIT
@@ -31516,6 +31673,42 @@ static struct rs6000_opt_var const rs6000_opt_vars[] =
   { "longcall",
     offsetof (struct gcc_options, x_rs6000_default_long_calls),
     offsetof (struct cl_target_option, x_rs6000_default_long_calls), },
+  { "optimize-swaps",
+    offsetof (struct gcc_options, x_rs6000_optimize_swaps),
+    offsetof (struct cl_target_option, x_rs6000_optimize_swaps), },
+  { "allow-movmisalign",
+    offsetof (struct gcc_options, x_TARGET_ALLOW_MOVMISALIGN),
+    offsetof (struct cl_target_option, x_TARGET_ALLOW_MOVMISALIGN), },
+  { "allow-df-permute",
+    offsetof (struct gcc_options, x_TARGET_ALLOW_DF_PERMUTE),
+    offsetof (struct cl_target_option, x_TARGET_ALLOW_DF_PERMUTE), },
+  { "sched-groups",
+    offsetof (struct gcc_options, x_TARGET_SCHED_GROUPS),
+    offsetof (struct cl_target_option, x_TARGET_SCHED_GROUPS), },
+  { "always-hint",
+    offsetof (struct gcc_options, x_TARGET_ALWAYS_HINT),
+    offsetof (struct cl_target_option, x_TARGET_ALWAYS_HINT), },
+  { "align-branch-targets",
+    offsetof (struct gcc_options, x_TARGET_ALIGN_BRANCH_TARGETS),
+    offsetof (struct cl_target_option, x_TARGET_ALIGN_BRANCH_TARGETS), },
+  { "vectorize-builtins",
+    offsetof (struct gcc_options, x_TARGET_VECTORIZE_BUILTINS),
+    offsetof (struct cl_target_option, x_TARGET_VECTORIZE_BUILTINS), },
+  { "tls-markers",
+    offsetof (struct gcc_options, x_tls_markers),
+    offsetof (struct cl_target_option, x_tls_markers), },
+  { "sched-prolog",
+    offsetof (struct gcc_options, x_TARGET_SCHED_PROLOG),
+    offsetof (struct cl_target_option, x_TARGET_SCHED_PROLOG), },
+  { "sched-epilog",
+    offsetof (struct gcc_options, x_TARGET_SCHED_PROLOG),
+    offsetof (struct cl_target_option, x_TARGET_SCHED_PROLOG), },
+  { "gen-cell-microcode",
+    offsetof (struct gcc_options, x_rs6000_gen_cell_microcode),
+    offsetof (struct cl_target_option, x_rs6000_gen_cell_microcode), },
+  { "warn-cell-microcode",
+    offsetof (struct gcc_options, x_rs6000_warn_cell_microcode),
+    offsetof (struct cl_target_option, x_rs6000_warn_cell_microcode), },
 };
 
 /* Inner function to handle attribute((target("..."))) and #pragma GCC target
@@ -31589,9 +31782,15 @@ rs6000_inner_target_options (tree args, bool attr_p)
                        rs6000_isa_flags_explicit |= mask;
 
                        /* VSX needs altivec, so -mvsx automagically sets
-                          altivec.  */
-                       if (mask == OPTION_MASK_VSX && !invert)
-                         mask |= OPTION_MASK_ALTIVEC;
+                          altivec and disables -mavoid-indexed-addresses.  */
+                       if (!invert)
+                         {
+                           if (mask == OPTION_MASK_VSX)
+                             {
+                               mask |= OPTION_MASK_ALTIVEC;
+                               TARGET_AVOID_XFORM = 0;
+                             }
+                         }
 
                        if (rs6000_opt_masks[i].invert)
                          invert = !invert;
@@ -31612,6 +31811,7 @@ rs6000_inner_target_options (tree args, bool attr_p)
                        size_t j = rs6000_opt_vars[i].global_offset;
                        *((int *) ((char *)&global_options + j)) = !invert;
                        error_p = false;
+                       not_valid_p = false;
                        break;
                      }
                }
@@ -32550,6 +32750,14 @@ rs6000_split_logical_inner (rtx dest,
   if (complement_op2_p)
     op2 = gen_rtx_NOT (mode, op2);
 
+  /* For canonical RTL, if only one arm is inverted it is the first.  */
+  if (!complement_op1_p && complement_op2_p)
+    {
+      rtx temp = op1;
+      op1 = op2;
+      op2 = temp;
+    }
+
   bool_rtx = ((code == NOT)
              ? gen_rtx_NOT (mode, op1)
              : gen_rtx_fmt_ee (code, mode, op1, op2));
@@ -33085,7 +33293,1219 @@ emit_fusion_gpr_load (rtx target, rtx mem)
 
   return "";
 }
+\f
+/* Analyze vector computations and remove unnecessary doubleword
+   swaps (xxswapdi instructions).  This pass is performed only
+   for little-endian VSX code generation.
+
+   For this specific case, loads and stores of 4x32 and 2x64 vectors
+   are inefficient.  These are implemented using the lvx2dx and
+   stvx2dx instructions, which invert the order of doublewords in
+   a vector register.  Thus the code generation inserts an xxswapdi
+   after each such load, and prior to each such store.  (For spill
+   code after register assignment, an additional xxswapdi is inserted
+   following each store in order to return a hard register to its
+   unpermuted value.)
+
+   The extra xxswapdi instructions reduce performance.  This can be
+   particularly bad for vectorized code.  The purpose of this pass
+   is to reduce the number of xxswapdi instructions required for
+   correctness.
+
+   The primary insight is that much code that operates on vectors
+   does not care about the relative order of elements in a register,
+   so long as the correct memory order is preserved.  If we have
+   a computation where all input values are provided by lvxd2x/xxswapdi
+   sequences, all outputs are stored using xxswapdi/stvxd2x sequences,
+   and all intermediate computations are pure SIMD (independent of
+   element order), then all the xxswapdi's associated with the loads
+   and stores may be removed.
+
+   This pass uses some of the infrastructure and logical ideas from
+   the "web" pass in web.c.  We create maximal webs of computations
+   fitting the description above using union-find.  Each such web is
+   then optimized by removing its unnecessary xxswapdi instructions.
+
+   The pass is placed prior to global optimization so that we can
+   perform the optimization in the safest and simplest way possible;
+   that is, by replacing each xxswapdi insn with a register copy insn.
+   Subsequent forward propagation will remove copies where possible.
+
+   There are some operations sensitive to element order for which we
+   can still allow the operation, provided we modify those operations.
+   These include CONST_VECTORs, for which we must swap the first and
+   second halves of the constant vector; and SUBREGs, for which we
+   must adjust the byte offset to account for the swapped doublewords.
+   A remaining opportunity would be non-immediate-form splats, for
+   which we should adjust the selected lane of the input.  We should
+   also make code generation adjustments for sum-across operations,
+   since this is a common vectorizer reduction.
+
+   Because we run prior to the first split, we can see loads and stores
+   here that match *vsx_le_perm_{load,store}_<mode>.  These are vanilla
+   vector loads and stores that have not yet been split into a permuting
+   load/store and a swap.  (One way this can happen is with a builtin
+   call to vec_vsx_{ld,st}.)  We can handle these as well, but rather
+   than deleting a swap, we convert the load/store into a permuting
+   load/store (which effectively removes the swap).  */
+
+/* Notes on Permutes
+
+   We do not currently handle computations that contain permutes.  There
+   is a general transformation that can be performed correctly, but it
+   may introduce more expensive code than it replaces.  To handle these
+   would require a cost model to determine when to perform the optimization.
+   This commentary records how this could be done if desired.
+
+   The most general permute is something like this (example for V16QI):
+
+   (vec_select:V16QI (vec_concat:V32QI (op1:V16QI) (op2:V16QI))
+                     (parallel [(const_int a0) (const_int a1)
+                                 ...
+                                (const_int a14) (const_int a15)]))
+
+   where a0,...,a15 are in [0,31] and select elements from op1 and op2
+   to produce in the result.
+
+   Regardless of mode, we can convert the PARALLEL to a mask of 16
+   byte-element selectors.  Let's call this M, with M[i] representing
+   the ith byte-element selector value.  Then if we swap doublewords
+   throughout the computation, we can get correct behavior by replacing
+   M with M' as follows:
+
+            { M[i+8]+8 : i < 8, M[i+8] in [0,7] U [16,23]
+    M'[i] = { M[i+8]-8 : i < 8, M[i+8] in [8,15] U [24,31]
+            { M[i-8]+8 : i >= 8, M[i-8] in [0,7] U [16,23]
+            { M[i-8]-8 : i >= 8, M[i-8] in [8,15] U [24,31]
+
+   This seems promising at first, since we are just replacing one mask
+   with another.  But certain masks are preferable to others.  If M
+   is a mask that matches a vmrghh pattern, for example, M' certainly
+   will not.  Instead of a single vmrghh, we would generate a load of
+   M' and a vperm.  So we would need to know how many xxswapd's we can
+   remove as a result of this transformation to determine if it's
+   profitable; and preferably the logic would need to be aware of all
+   the special preferable masks.
+
+   Another form of permute is an UNSPEC_VPERM, in which the mask is
+   already in a register.  In some cases, this mask may be a constant
+   that we can discover with ud-chains, in which case the above
+   transformation is ok.  However, the common usage here is for the
+   mask to be produced by an UNSPEC_LVSL, in which case the mask 
+   cannot be known at compile time.  In such a case we would have to
+   generate several instructions to compute M' as above at run time,
+   and a cost model is needed again.  */
+
+/* This is based on the union-find logic in web.c.  web_entry_base is
+   defined in df.h.  */
+class swap_web_entry : public web_entry_base
+{
+ public:
+  /* Pointer to the insn.  */
+  rtx insn;
+  /* Set if insn contains a mention of a vector register.  All other
+     fields are undefined if this field is unset.  */
+  unsigned int is_relevant : 1;
+  /* Set if insn is a load.  */
+  unsigned int is_load : 1;
+  /* Set if insn is a store.  */
+  unsigned int is_store : 1;
+  /* Set if insn is a doubleword swap.  This can either be a register swap
+     or a permuting load or store (test is_load and is_store for this).  */
+  unsigned int is_swap : 1;
+  /* Set if the insn has a live-in use of a parameter register.  */
+  unsigned int is_live_in : 1;
+  /* Set if the insn has a live-out def of a return register.  */
+  unsigned int is_live_out : 1;
+  /* Set if the insn contains a subreg reference of a vector register.  */
+  unsigned int contains_subreg : 1;
+  /* Set if the insn contains a 128-bit integer operand.  */
+  unsigned int is_128_int : 1;
+  /* Set if this is a call-insn.  */
+  unsigned int is_call : 1;
+  /* Set if this insn does not perform a vector operation for which
+     element order matters, or if we know how to fix it up if it does.
+     Undefined if is_swap is set.  */
+  unsigned int is_swappable : 1;
+  /* A nonzero value indicates what kind of special handling for this
+     insn is required if doublewords are swapped.  Undefined if
+     is_swappable is not set.  */
+  unsigned int special_handling : 3;
+  /* Set if the web represented by this entry cannot be optimized.  */
+  unsigned int web_not_optimizable : 1;
+  /* Set if this insn should be deleted.  */
+  unsigned int will_delete : 1;
+};
+
+enum special_handling_values {
+  SH_NONE = 0,
+  SH_CONST_VECTOR,
+  SH_SUBREG,
+  SH_NOSWAP_LD,
+  SH_NOSWAP_ST,
+  SH_EXTRACT,
+  SH_SPLAT
+};
+
+/* Union INSN with all insns containing definitions that reach USE.
+   Detect whether USE is live-in to the current function.  */
+static void
+union_defs (swap_web_entry *insn_entry, rtx insn, df_ref use)
+{
+  struct df_link *link = DF_REF_CHAIN (use);
+
+  if (!link)
+    insn_entry[INSN_UID (insn)].is_live_in = 1;
+
+  while (link)
+    {
+      if (DF_REF_IS_ARTIFICIAL (link->ref))
+       insn_entry[INSN_UID (insn)].is_live_in = 1;
+
+      if (DF_REF_INSN_INFO (link->ref))
+       {
+         rtx def_insn = DF_REF_INSN (link->ref);
+         (void)unionfind_union (insn_entry + INSN_UID (insn),
+                                insn_entry + INSN_UID (def_insn));
+       }
+
+      link = link->next;
+    }
+}
+
+/* Union INSN with all insns containing uses reached from DEF.
+   Detect whether DEF is live-out from the current function.  */
+static void
+union_uses (swap_web_entry *insn_entry, rtx insn, df_ref def)
+{
+  struct df_link *link = DF_REF_CHAIN (def);
+
+  if (!link)
+    insn_entry[INSN_UID (insn)].is_live_out = 1;
+
+  while (link)
+    {
+      /* This could be an eh use or some other artificial use;
+        we treat these all the same (killing the optimization).  */
+      if (DF_REF_IS_ARTIFICIAL (link->ref))
+       insn_entry[INSN_UID (insn)].is_live_out = 1;
+
+      if (DF_REF_INSN_INFO (link->ref))
+       {
+         rtx use_insn = DF_REF_INSN (link->ref);
+         (void)unionfind_union (insn_entry + INSN_UID (insn),
+                                insn_entry + INSN_UID (use_insn));
+       }
+
+      link = link->next;
+    }
+}
+
+/* Return 1 iff INSN is a load insn, including permuting loads that
+   represent an lvxd2x instruction; else return 0.  */
+static unsigned int
+insn_is_load_p (rtx insn)
+{
+  rtx body = PATTERN (insn);
+
+  if (GET_CODE (body) == SET)
+    {
+      if (GET_CODE (SET_SRC (body)) == MEM)
+       return 1;
+
+      if (GET_CODE (SET_SRC (body)) == VEC_SELECT
+         && GET_CODE (XEXP (SET_SRC (body), 0)) == MEM)
+       return 1;
+
+      return 0;
+    }
+
+  if (GET_CODE (body) != PARALLEL)
+    return 0;
+
+  rtx set = XVECEXP (body, 0, 0);
+
+  if (GET_CODE (set) == SET && GET_CODE (SET_SRC (set)) == MEM)
+    return 1;
+
+  return 0;
+}
 
+/* Return 1 iff INSN is a store insn, including permuting stores that
+   represent an stvxd2x instruction; else return 0.  */
+static unsigned int
+insn_is_store_p (rtx insn)
+{
+  rtx body = PATTERN (insn);
+  if (GET_CODE (body) == SET && GET_CODE (SET_DEST (body)) == MEM)
+    return 1;
+  if (GET_CODE (body) != PARALLEL)
+    return 0;
+  rtx set = XVECEXP (body, 0, 0);
+  if (GET_CODE (set) == SET && GET_CODE (SET_DEST (set)) == MEM)
+    return 1;
+  return 0;
+}
+
+/* Return 1 iff INSN swaps doublewords.  This may be a reg-reg swap,
+   a permuting load, or a permuting store.  */
+static unsigned int
+insn_is_swap_p (rtx insn)
+{
+  rtx body = PATTERN (insn);
+  if (GET_CODE (body) != SET)
+    return 0;
+  rtx rhs = SET_SRC (body);
+  if (GET_CODE (rhs) != VEC_SELECT)
+    return 0;
+  rtx parallel = XEXP (rhs, 1);
+  if (GET_CODE (parallel) != PARALLEL)
+    return 0;
+  unsigned int len = XVECLEN (parallel, 0);
+  if (len != 2 && len != 4 && len != 8 && len != 16)
+    return 0;
+  for (unsigned int i = 0; i < len / 2; ++i)
+    {
+      rtx op = XVECEXP (parallel, 0, i);
+      if (GET_CODE (op) != CONST_INT || INTVAL (op) != len / 2 + i)
+       return 0;
+    }
+  for (unsigned int i = len / 2; i < len; ++i)
+    {
+      rtx op = XVECEXP (parallel, 0, i);
+      if (GET_CODE (op) != CONST_INT || INTVAL (op) != i - len / 2)
+       return 0;
+    }
+  return 1;
+}
+
+/* Return 1 iff OP is an operand that will not be affected by having
+   vector doublewords swapped in memory.  */
+static unsigned int
+rtx_is_swappable_p (rtx op, unsigned int *special)
+{
+  enum rtx_code code = GET_CODE (op);
+  int i, j;
+  rtx parallel;
+
+  switch (code)
+    {
+    case LABEL_REF:
+    case SYMBOL_REF:
+    case CLOBBER:
+    case REG:
+      return 1;
+
+    case VEC_CONCAT:
+    case ASM_INPUT:
+    case ASM_OPERANDS:
+      return 0;
+
+    case CONST_VECTOR:
+      {
+       *special = SH_CONST_VECTOR;
+       return 1;
+      }
+
+    case VEC_DUPLICATE:
+      /* Opportunity: If XEXP (op, 0) has the same mode as the result,
+        and XEXP (op, 1) is a PARALLEL with a single QImode const int,
+        it represents a vector splat for which we can do special
+        handling.  */
+      if (GET_CODE (XEXP (op, 0)) == CONST_INT)
+       return 1;
+      else if (GET_CODE (XEXP (op, 0)) == REG
+              && GET_MODE_INNER (GET_MODE (op)) == GET_MODE (XEXP (op, 0)))
+       /* This catches V2DF and V2DI splat, at a minimum.  */
+       return 1;
+      else if (GET_CODE (XEXP (op, 0)) == VEC_SELECT)
+       /* If the duplicated item is from a select, defer to the select
+          processing to see if we can change the lane for the splat.  */
+       return rtx_is_swappable_p (XEXP (op, 0), special);
+      else
+       return 0;
+
+    case VEC_SELECT:
+      /* A vec_extract operation is ok if we change the lane.  */
+      if (GET_CODE (XEXP (op, 0)) == REG
+         && GET_MODE_INNER (GET_MODE (XEXP (op, 0))) == GET_MODE (op)
+         && GET_CODE ((parallel = XEXP (op, 1))) == PARALLEL
+         && XVECLEN (parallel, 0) == 1
+         && GET_CODE (XVECEXP (parallel, 0, 0)) == CONST_INT)
+       {
+         *special = SH_EXTRACT;
+         return 1;
+       }
+      else
+       return 0;
+
+    case UNSPEC:
+      {
+       /* Various operations are unsafe for this optimization, at least
+          without significant additional work.  Permutes are obviously
+          problematic, as both the permute control vector and the ordering
+          of the target values are invalidated by doubleword swapping.
+          Vector pack and unpack modify the number of vector lanes.
+          Merge-high/low will not operate correctly on swapped operands.
+          Vector shifts across element boundaries are clearly uncool,
+          as are vector select and concatenate operations.  Vector
+          sum-across instructions define one operand with a specific
+          order-dependent element, so additional fixup code would be
+          needed to make those work.  Vector set and non-immediate-form
+          vector splat are element-order sensitive.  A few of these
+          cases might be workable with special handling if required.
+          Adding cost modeling would be appropriate in some cases.  */
+       int val = XINT (op, 1);
+       switch (val)
+         {
+         default:
+           break;
+         case UNSPEC_VMRGH_DIRECT:
+         case UNSPEC_VMRGL_DIRECT:
+         case UNSPEC_VPACK_SIGN_SIGN_SAT:
+         case UNSPEC_VPACK_SIGN_UNS_SAT:
+         case UNSPEC_VPACK_UNS_UNS_MOD:
+         case UNSPEC_VPACK_UNS_UNS_MOD_DIRECT:
+         case UNSPEC_VPACK_UNS_UNS_SAT:
+         case UNSPEC_VPERM:
+         case UNSPEC_VPERM_UNS:
+         case UNSPEC_VPERMHI:
+         case UNSPEC_VPERMSI:
+         case UNSPEC_VPKPX:
+         case UNSPEC_VSLDOI:
+         case UNSPEC_VSLO:
+         case UNSPEC_VSRO:
+         case UNSPEC_VSUM2SWS:
+         case UNSPEC_VSUM4S:
+         case UNSPEC_VSUM4UBS:
+         case UNSPEC_VSUMSWS:
+         case UNSPEC_VSUMSWS_DIRECT:
+         case UNSPEC_VSX_CONCAT:
+         case UNSPEC_VSX_SET:
+         case UNSPEC_VSX_SLDWI:
+         case UNSPEC_VUNPACK_HI_SIGN:
+         case UNSPEC_VUNPACK_HI_SIGN_DIRECT:
+         case UNSPEC_VUNPACK_LO_SIGN:
+         case UNSPEC_VUNPACK_LO_SIGN_DIRECT:
+         case UNSPEC_VUPKHPX:
+         case UNSPEC_VUPKHS_V4SF:
+         case UNSPEC_VUPKHU_V4SF:
+         case UNSPEC_VUPKLPX:
+         case UNSPEC_VUPKLS_V4SF:
+         case UNSPEC_VUPKLU_V4SF:
+         case UNSPEC_VSX_CVDPSPN:
+         case UNSPEC_VSX_CVSPDP:
+         case UNSPEC_VSX_CVSPDPN:
+           return 0;
+         case UNSPEC_VSPLT_DIRECT:
+           *special = SH_SPLAT;
+           return 1;
+         }
+      }
+
+    default:
+      break;
+    }
+
+  const char *fmt = GET_RTX_FORMAT (code);
+  int ok = 1;
+
+  for (i = 0; i < GET_RTX_LENGTH (code); ++i)
+    if (fmt[i] == 'e' || fmt[i] == 'u')
+      {
+       unsigned int special_op = SH_NONE;
+       ok &= rtx_is_swappable_p (XEXP (op, i), &special_op);
+       if (special_op == SH_NONE)
+         continue;
+       /* Ensure we never have two kinds of special handling
+          for the same insn.  */
+       if (*special != SH_NONE && *special != special_op)
+         return 0;
+       *special = special_op;
+      }
+    else if (fmt[i] == 'E')
+      for (j = 0; j < XVECLEN (op, i); ++j)
+       {
+         unsigned int special_op = SH_NONE;
+         ok &= rtx_is_swappable_p (XVECEXP (op, i, j), &special_op);
+       if (special_op == SH_NONE)
+         continue;
+         /* Ensure we never have two kinds of special handling
+            for the same insn.  */
+         if (*special != SH_NONE && *special != special_op)
+           return 0;
+         *special = special_op;
+       }
+
+  return ok;
+}
+
+/* Return 1 iff INSN is an operand that will not be affected by
+   having vector doublewords swapped in memory (in which case
+   *SPECIAL is unchanged), or that can be modified to be correct
+   if vector doublewords are swapped in memory (in which case
+   *SPECIAL is changed to a value indicating how).  */
+static unsigned int
+insn_is_swappable_p (swap_web_entry *insn_entry, rtx insn,
+                    unsigned int *special)
+{
+  /* Calls are always bad.  */
+  if (GET_CODE (insn) == CALL_INSN)
+    return 0;
+
+  /* Loads and stores seen here are not permuting, but we can still
+     fix them up by converting them to permuting ones.  Exceptions:
+     UNSPEC_LVE, UNSPEC_LVX, and UNSPEC_STVX, which have a PARALLEL
+     body instead of a SET; and UNSPEC_STVE, which has an UNSPEC
+     for the SET source.  */
+  rtx body = PATTERN (insn);
+  int i = INSN_UID (insn);
+
+  if (insn_entry[i].is_load)
+    {
+      if (GET_CODE (body) == SET)
+       {
+         *special = SH_NOSWAP_LD;
+         return 1;
+       }
+      else
+       return 0;
+    }
+
+  if (insn_entry[i].is_store)
+    {
+      if (GET_CODE (body) == SET && GET_CODE (SET_SRC (body)) != UNSPEC)
+       {
+         *special = SH_NOSWAP_ST;
+         return 1;
+       }
+      else
+       return 0;
+    }
+
+  /* A convert to single precision can be left as is provided that
+     all of its uses are in xxspltw instructions that splat BE element
+     zero.  */
+  if (GET_CODE (body) == SET
+      && GET_CODE (SET_SRC (body)) == UNSPEC
+      && XINT (SET_SRC (body), 1) == UNSPEC_VSX_CVDPSPN)
+    {
+      df_ref *def_rec;
+
+      for (def_rec = DF_INSN_UID_DEFS (i); *def_rec; def_rec++)
+       {
+         df_ref def = *def_rec;
+         struct df_link *link = DF_REF_CHAIN (def);
+         if (!link)
+           return 0;
+
+         for (; link; link = link->next) {
+           rtx use_insn = DF_REF_INSN (link->ref);
+           rtx use_body = PATTERN (use_insn);
+           if (GET_CODE (use_body) != SET
+               || GET_CODE (SET_SRC (use_body)) != UNSPEC
+               || XINT (SET_SRC (use_body), 1) != UNSPEC_VSX_XXSPLTW
+               || XEXP (XEXP (SET_SRC (use_body), 0), 1) != const0_rtx)
+             return 0;
+         }
+       }
+
+      return 1;
+    }
+
+  /* Otherwise check the operands for vector lane violations.  */
+  return rtx_is_swappable_p (body, special);
+}
+
+enum chain_purpose { FOR_LOADS, FOR_STORES };
+
+/* Return true if the UD or DU chain headed by LINK is non-empty,
+   and every entry on the chain references an insn that is a
+   register swap.  Furthermore, if PURPOSE is FOR_LOADS, each such
+   register swap must have only permuting loads as reaching defs.
+   If PURPOSE is FOR_STORES, each such register swap must have only
+   register swaps or permuting stores as reached uses.  */
+static bool
+chain_contains_only_swaps (swap_web_entry *insn_entry, struct df_link *link,
+                          enum chain_purpose purpose)
+{
+  if (!link)
+    return false;
+
+  for (; link; link = link->next)
+    {
+      if (!VECTOR_MODE_P (GET_MODE (DF_REF_REG (link->ref))))
+       continue;
+
+      if (DF_REF_IS_ARTIFICIAL (link->ref))
+       return false;
+
+      rtx reached_insn = DF_REF_INSN (link->ref);
+      unsigned uid = INSN_UID (reached_insn);
+
+      if (!insn_entry[uid].is_swap || insn_entry[uid].is_load
+         || insn_entry[uid].is_store)
+       return false;
+
+      if (purpose == FOR_LOADS)
+       {
+         df_ref *use_rec;
+         for (use_rec = DF_INSN_UID_USES (uid); *use_rec; use_rec++)
+           {
+             df_ref use = *use_rec;
+             struct df_link *swap_link = DF_REF_CHAIN (use);
+
+             while (swap_link)
+               {
+                 if (DF_REF_IS_ARTIFICIAL (link->ref))
+                   return false;
+
+                 rtx swap_def_insn = DF_REF_INSN (swap_link->ref);
+                 unsigned uid2 = INSN_UID (swap_def_insn);
+
+                 /* Only permuting loads are allowed.  */
+                 if (!insn_entry[uid2].is_swap || !insn_entry[uid2].is_load)
+                   return false;
+
+                 swap_link = swap_link->next;
+               }
+           }
+       }
+      else if (purpose == FOR_STORES)
+       {
+         df_ref *def_rec;
+         for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
+           {
+             df_ref def = *def_rec;
+             struct df_link *swap_link = DF_REF_CHAIN (def);
+
+             while (swap_link)
+               {
+                 if (DF_REF_IS_ARTIFICIAL (link->ref))
+                   return false;
+
+                 rtx swap_use_insn = DF_REF_INSN (swap_link->ref);
+                 unsigned uid2 = INSN_UID (swap_use_insn);
+
+                 /* Permuting stores or register swaps are allowed.  */
+                 if (!insn_entry[uid2].is_swap || insn_entry[uid2].is_load)
+                   return false;
+
+                 swap_link = swap_link->next;
+               }
+           }
+       }
+    }
+
+  return true;
+}
+
+/* Mark the xxswapdi instructions associated with permuting loads and
+   stores for removal.  Note that we only flag them for deletion here,
+   as there is a possibility of a swap being reached from multiple
+   loads, etc.  */
+static void
+mark_swaps_for_removal (swap_web_entry *insn_entry, unsigned int i)
+{
+  rtx insn = insn_entry[i].insn;
+  unsigned uid = INSN_UID (insn);
+
+  if (insn_entry[i].is_load)
+    {
+      df_ref *def_rec;
+      for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
+       {
+         df_ref def = *def_rec;
+         struct df_link *link = DF_REF_CHAIN (def);
+
+         /* We know by now that these are swaps, so we can delete
+            them confidently.  */
+         while (link)
+           {
+             rtx use_insn = DF_REF_INSN (link->ref);
+             insn_entry[INSN_UID (use_insn)].will_delete = 1;
+             link = link->next;
+           }
+       }
+    }
+  else if (insn_entry[i].is_store)
+    {
+      df_ref *use_rec;
+      for (use_rec = DF_INSN_UID_USES (uid); *use_rec; use_rec++)
+       {
+         df_ref use = *use_rec;
+         /* Ignore uses for addressability.  */
+         machine_mode mode = GET_MODE (DF_REF_REG (use));
+         if (!VECTOR_MODE_P (mode))
+           continue;
+
+         struct df_link *link = DF_REF_CHAIN (use);
+
+         /* We know by now that these are swaps, so we can delete
+            them confidently.  */
+         while (link)
+           {
+             rtx def_insn = DF_REF_INSN (link->ref);
+             insn_entry[INSN_UID (def_insn)].will_delete = 1;
+             link = link->next;
+           }
+       }
+    }
+}
+
+/* OP is either a CONST_VECTOR or an expression containing one.
+   Swap the first half of the vector with the second in the first
+   case.  Recurse to find it in the second.  */
+static void
+swap_const_vector_halves (rtx op)
+{
+  int i;
+  enum rtx_code code = GET_CODE (op);
+  if (GET_CODE (op) == CONST_VECTOR)
+    {
+      int half_units = GET_MODE_NUNITS (GET_MODE (op)) / 2;
+      for (i = 0; i < half_units; ++i)
+       {
+         rtx temp = CONST_VECTOR_ELT (op, i);
+         CONST_VECTOR_ELT (op, i) = CONST_VECTOR_ELT (op, i + half_units);
+         CONST_VECTOR_ELT (op, i + half_units) = temp;
+       }
+    }
+  else
+    {
+      int j;
+      const char *fmt = GET_RTX_FORMAT (code);
+      for (i = 0; i < GET_RTX_LENGTH (code); ++i)
+       if (fmt[i] == 'e' || fmt[i] == 'u')
+         swap_const_vector_halves (XEXP (op, i));
+       else if (fmt[i] == 'E')
+         for (j = 0; j < XVECLEN (op, i); ++j)
+           swap_const_vector_halves (XVECEXP (op, i, j));
+    }
+}
+
+/* Find all subregs of a vector expression that perform a narrowing,
+   and adjust the subreg index to account for doubleword swapping.  */
+static void
+adjust_subreg_index (rtx op)
+{
+  enum rtx_code code = GET_CODE (op);
+  if (code == SUBREG
+      && (GET_MODE_SIZE (GET_MODE (op))
+         < GET_MODE_SIZE (GET_MODE (XEXP (op, 0)))))
+    {
+      unsigned int index = SUBREG_BYTE (op);
+      if (index < 8)
+       index += 8;
+      else
+       index -= 8;
+      SUBREG_BYTE (op) = index;
+    }
+
+  const char *fmt = GET_RTX_FORMAT (code);
+  int i,j;
+  for (i = 0; i < GET_RTX_LENGTH (code); ++i)
+    if (fmt[i] == 'e' || fmt[i] == 'u')
+      adjust_subreg_index (XEXP (op, i));
+    else if (fmt[i] == 'E')
+      for (j = 0; j < XVECLEN (op, i); ++j)
+       adjust_subreg_index (XVECEXP (op, i, j));
+}
+
+/* Convert the non-permuting load INSN to a permuting one.  */
+static void
+permute_load (rtx insn)
+{
+  rtx body = PATTERN (insn);
+  rtx mem_op = SET_SRC (body);
+  rtx tgt_reg = SET_DEST (body);
+  machine_mode mode = GET_MODE (tgt_reg);
+  int n_elts = GET_MODE_NUNITS (mode);
+  int half_elts = n_elts / 2;
+  rtx par = gen_rtx_PARALLEL (mode, rtvec_alloc (n_elts));
+  int i, j;
+  for (i = 0, j = half_elts; i < half_elts; ++i, ++j)
+    XVECEXP (par, 0, i) = GEN_INT (j);
+  for (i = half_elts, j = 0; j < half_elts; ++i, ++j)
+    XVECEXP (par, 0, i) = GEN_INT (j);
+  rtx sel = gen_rtx_VEC_SELECT (mode, mem_op, par);
+  SET_SRC (body) = sel;
+  INSN_CODE (insn) = -1; /* Force re-recognition.  */
+  df_insn_rescan (insn);
+
+  if (dump_file)
+    fprintf (dump_file, "Replacing load %d with permuted load\n",
+            INSN_UID (insn));
+}
+
+/* Convert the non-permuting store INSN to a permuting one.  */
+static void
+permute_store (rtx insn)
+{
+  rtx body = PATTERN (insn);
+  rtx src_reg = SET_SRC (body);
+  machine_mode mode = GET_MODE (src_reg);
+  int n_elts = GET_MODE_NUNITS (mode);
+  int half_elts = n_elts / 2;
+  rtx par = gen_rtx_PARALLEL (mode, rtvec_alloc (n_elts));
+  int i, j;
+  for (i = 0, j = half_elts; i < half_elts; ++i, ++j)
+    XVECEXP (par, 0, i) = GEN_INT (j);
+  for (i = half_elts, j = 0; j < half_elts; ++i, ++j)
+    XVECEXP (par, 0, i) = GEN_INT (j);
+  rtx sel = gen_rtx_VEC_SELECT (mode, src_reg, par);
+  SET_SRC (body) = sel;
+  INSN_CODE (insn) = -1; /* Force re-recognition.  */
+  df_insn_rescan (insn);
+
+  if (dump_file)
+    fprintf (dump_file, "Replacing store %d with permuted store\n",
+            INSN_UID (insn));
+}
+
+/* Given OP that contains a vector extract operation, adjust the index
+   of the extracted lane to account for the doubleword swap.  */
+static void
+adjust_extract (rtx insn)
+{
+  rtx pattern = PATTERN (insn);
+  if (GET_CODE (pattern) == PARALLEL)
+    pattern = XVECEXP (pattern, 0, 0);
+  rtx src = SET_SRC (pattern);
+  /* The vec_select may be wrapped in a vec_duplicate for a splat, so
+     account for that.  */
+  rtx sel = GET_CODE (src) == VEC_DUPLICATE ? XEXP (src, 0) : src;
+  rtx par = XEXP (sel, 1);
+  int half_elts = GET_MODE_NUNITS (GET_MODE (XEXP (sel, 0))) >> 1;
+  int lane = INTVAL (XVECEXP (par, 0, 0));
+  lane = lane >= half_elts ? lane - half_elts : lane + half_elts;
+  XVECEXP (par, 0, 0) = GEN_INT (lane);
+  INSN_CODE (insn) = -1; /* Force re-recognition.  */
+  df_insn_rescan (insn);
+
+  if (dump_file)
+    fprintf (dump_file, "Changing lane for extract %d\n", INSN_UID (insn));
+}
+
+/* Given OP that contains a vector direct-splat operation, adjust the index
+   of the source lane to account for the doubleword swap.  */
+static void
+adjust_splat (rtx insn)
+{
+  rtx body = PATTERN (insn);
+  rtx unspec = XEXP (body, 1);
+  int half_elts = GET_MODE_NUNITS (GET_MODE (unspec)) >> 1;
+  int lane = INTVAL (XVECEXP (unspec, 0, 1));
+  lane = lane >= half_elts ? lane - half_elts : lane + half_elts;
+  XVECEXP (unspec, 0, 1) = GEN_INT (lane);
+  INSN_CODE (insn) = -1; /* Force re-recognition.  */
+  df_insn_rescan (insn);
+
+  if (dump_file)
+    fprintf (dump_file, "Changing lane for splat %d\n", INSN_UID (insn));
+}
+
+/* The insn described by INSN_ENTRY[I] can be swapped, but only
+   with special handling.  Take care of that here.  */
+static void
+handle_special_swappables (swap_web_entry *insn_entry, unsigned i)
+{
+  rtx insn = insn_entry[i].insn;
+  rtx body = PATTERN (insn);
+
+  switch (insn_entry[i].special_handling)
+    {
+    default:
+      gcc_unreachable ();
+    case SH_CONST_VECTOR:
+      {
+       /* A CONST_VECTOR will only show up somewhere in the RHS of a SET.  */
+       gcc_assert (GET_CODE (body) == SET);
+       rtx rhs = SET_SRC (body);
+       swap_const_vector_halves (rhs);
+       if (dump_file)
+         fprintf (dump_file, "Swapping constant halves in insn %d\n", i);
+       break;
+      }
+    case SH_SUBREG:
+      /* A subreg of the same size is already safe.  For subregs that
+        select a smaller portion of a reg, adjust the index for
+        swapped doublewords.  */
+      adjust_subreg_index (body);
+      if (dump_file)
+       fprintf (dump_file, "Adjusting subreg in insn %d\n", i);
+      break;
+    case SH_NOSWAP_LD:
+      /* Convert a non-permuting load to a permuting one.  */
+      permute_load (insn);
+      break;
+    case SH_NOSWAP_ST:
+      /* Convert a non-permuting store to a permuting one.  */
+      permute_store (insn);
+      break;
+    case SH_EXTRACT:
+      /* Change the lane on an extract operation.  */
+      adjust_extract (insn);
+      break;
+    case SH_SPLAT:
+      /* Change the lane on a direct-splat operation.  */
+      adjust_splat (insn);
+      break;
+    }
+}
+
+/* Find the insn from the Ith table entry, which is known to be a
+   register swap Y = SWAP(X).  Replace it with a copy Y = X.  */
+static void
+replace_swap_with_copy (swap_web_entry *insn_entry, unsigned i)
+{
+  rtx insn = insn_entry[i].insn;
+  rtx body = PATTERN (insn);
+  rtx src_reg = XEXP (SET_SRC (body), 0);
+  rtx copy = gen_rtx_SET (VOIDmode, SET_DEST (body), src_reg);
+  rtx new_insn = emit_insn_before (copy, insn);
+  set_block_for_insn (new_insn, BLOCK_FOR_INSN (insn));
+  df_insn_rescan (new_insn);
+
+  if (dump_file)
+    {
+      unsigned int new_uid = INSN_UID (new_insn);
+      fprintf (dump_file, "Replacing swap %d with copy %d\n", i, new_uid);
+    }
+
+  df_insn_delete (insn);
+  remove_insn (insn);
+  INSN_DELETED_P (insn) = 1;
+}
+
+/* Dump the swap table to DUMP_FILE.  */
+static void
+dump_swap_insn_table (swap_web_entry *insn_entry)
+{
+  int e = get_max_uid ();
+  fprintf (dump_file, "\nRelevant insns with their flag settings\n\n");
+
+  for (int i = 0; i < e; ++i)
+    if (insn_entry[i].is_relevant)
+      {
+       swap_web_entry *pred_entry = (swap_web_entry *)insn_entry[i].pred ();
+       fprintf (dump_file, "%6d %6d  ", i,
+                pred_entry && pred_entry->insn
+                ? INSN_UID (pred_entry->insn) : 0);
+       if (insn_entry[i].is_load)
+         fputs ("load ", dump_file);
+       if (insn_entry[i].is_store)
+         fputs ("store ", dump_file);
+       if (insn_entry[i].is_swap)
+         fputs ("swap ", dump_file);
+       if (insn_entry[i].is_live_in)
+         fputs ("live-in ", dump_file);
+       if (insn_entry[i].is_live_out)
+         fputs ("live-out ", dump_file);
+       if (insn_entry[i].contains_subreg)
+         fputs ("subreg ", dump_file);
+       if (insn_entry[i].is_128_int)
+         fputs ("int128 ", dump_file);
+       if (insn_entry[i].is_call)
+         fputs ("call ", dump_file);
+       if (insn_entry[i].is_swappable)
+         {
+           fputs ("swappable ", dump_file);
+           if (insn_entry[i].special_handling == SH_CONST_VECTOR)
+             fputs ("special:constvec ", dump_file);
+           else if (insn_entry[i].special_handling == SH_SUBREG)
+             fputs ("special:subreg ", dump_file);
+           else if (insn_entry[i].special_handling == SH_NOSWAP_LD)
+             fputs ("special:load ", dump_file);
+           else if (insn_entry[i].special_handling == SH_NOSWAP_ST)
+             fputs ("special:store ", dump_file);
+           else if (insn_entry[i].special_handling == SH_EXTRACT)
+             fputs ("special:extract ", dump_file);
+           else if (insn_entry[i].special_handling == SH_SPLAT)
+             fputs ("special:splat ", dump_file);
+         }
+       if (insn_entry[i].web_not_optimizable)
+         fputs ("unoptimizable ", dump_file);
+       if (insn_entry[i].will_delete)
+         fputs ("delete ", dump_file);
+       fputs ("\n", dump_file);
+      }
+  fputs ("\n", dump_file);
+}
+
+/* Main entry point for this pass.  */
+unsigned int
+rs6000_analyze_swaps (function *fun)
+{
+  swap_web_entry *insn_entry;
+  basic_block bb;
+  rtx insn;
+
+  /* Dataflow analysis for use-def chains.  */
+  df_set_flags (DF_RD_PRUNE_DEAD_DEFS);
+  df_chain_add_problem (DF_DU_CHAIN | DF_UD_CHAIN);
+  df_analyze ();
+  df_set_flags (DF_DEFER_INSN_RESCAN);
+
+  /* Allocate structure to represent webs of insns.  */
+  insn_entry = XCNEWVEC (swap_web_entry, get_max_uid ());
+
+  /* Walk the insns to gather basic data.  */
+  FOR_ALL_BB_FN (bb, fun)
+    FOR_BB_INSNS (bb, insn)
+    {
+      unsigned int uid = INSN_UID (insn);
+      if (NONDEBUG_INSN_P (insn))
+       {
+         insn_entry[uid].insn = insn;
+
+         if (GET_CODE (insn) == CALL_INSN)
+           insn_entry[uid].is_call = 1;
+
+         /* Walk the uses and defs to see if we mention vector regs.
+            Record any constraints on optimization of such mentions.  */
+         df_ref *use_rec;
+         for (use_rec = DF_INSN_UID_USES (uid); *use_rec; use_rec++)
+           {
+             df_ref mention = *use_rec;
+             /* We use DF_REF_REAL_REG here to get inside any subregs.  */
+             machine_mode mode = GET_MODE (DF_REF_REAL_REG (mention));
+
+             /* If a use gets its value from a call insn, it will be
+                a hard register and will look like (reg:V4SI 3 3).
+                The df analysis creates two mentions for GPR3 and GPR4,
+                both DImode.  We must recognize this and treat it as a
+                vector mention to ensure the call is unioned with this
+                use.  */
+             if (mode == DImode && DF_REF_INSN_INFO (mention))
+               {
+                 rtx feeder = DF_REF_INSN (mention);
+                 /* FIXME:  It is pretty hard to get from the df mention
+                    to the mode of the use in the insn.  We arbitrarily
+                    pick a vector mode here, even though the use might
+                    be a real DImode.  We can be too conservative
+                    (create a web larger than necessary) because of
+                    this, so consider eventually fixing this.  */
+                 if (GET_CODE (feeder) == CALL_INSN)
+                   mode = V4SImode;
+               }
+
+             if (VECTOR_MODE_P (mode) || mode == TImode)
+               {
+                 insn_entry[uid].is_relevant = 1;
+                 if (mode == TImode || mode == V1TImode)
+                   insn_entry[uid].is_128_int = 1;
+                 if (DF_REF_INSN_INFO (mention))
+                   insn_entry[uid].contains_subreg
+                     = !rtx_equal_p (DF_REF_REG (mention),
+                                     DF_REF_REAL_REG (mention));
+                 union_defs (insn_entry, insn, mention);
+               }
+           }
+         df_ref *def_rec;
+         for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
+           {
+             df_ref mention = *def_rec;
+             /* We use DF_REF_REAL_REG here to get inside any subregs.  */
+             machine_mode mode = GET_MODE (DF_REF_REAL_REG (mention));
+
+             /* If we're loading up a hard vector register for a call,
+                it looks like (set (reg:V4SI 9 9) (...)).  The df
+                analysis creates two mentions for GPR9 and GPR10, both
+                DImode.  So relying on the mode from the mentions
+                isn't sufficient to ensure we union the call into the
+                web with the parameter setup code.  */
+             if (mode == DImode && GET_CODE (insn) == SET
+                 && VECTOR_MODE_P (GET_MODE (SET_DEST (insn))))
+               mode = GET_MODE (SET_DEST (insn));
+
+             if (VECTOR_MODE_P (mode) || mode == TImode)
+               {
+                 insn_entry[uid].is_relevant = 1;
+                 if (mode == TImode || mode == V1TImode)
+                   insn_entry[uid].is_128_int = 1;
+                 if (DF_REF_INSN_INFO (mention))
+                   insn_entry[uid].contains_subreg
+                     = !rtx_equal_p (DF_REF_REG (mention),
+                                     DF_REF_REAL_REG (mention));
+                 /* REG_FUNCTION_VALUE_P is not valid for subregs. */
+                 else if (REG_FUNCTION_VALUE_P (DF_REF_REG (mention)))
+                   insn_entry[uid].is_live_out = 1;
+                 union_uses (insn_entry, insn, mention);
+               }
+           }
+
+         if (insn_entry[uid].is_relevant)
+           {
+             /* Determine if this is a load or store.  */
+             insn_entry[uid].is_load = insn_is_load_p (insn);
+             insn_entry[uid].is_store = insn_is_store_p (insn);
+
+             /* Determine if this is a doubleword swap.  If not,
+                determine whether it can legally be swapped.  */
+             if (insn_is_swap_p (insn))
+               insn_entry[uid].is_swap = 1;
+             else
+               {
+                 unsigned int special = SH_NONE;
+                 insn_entry[uid].is_swappable
+                   = insn_is_swappable_p (insn_entry, insn, &special);
+                 if (special != SH_NONE && insn_entry[uid].contains_subreg)
+                   insn_entry[uid].is_swappable = 0;
+                 else if (special != SH_NONE)
+                   insn_entry[uid].special_handling = special;
+                 else if (insn_entry[uid].contains_subreg)
+                   insn_entry[uid].special_handling = SH_SUBREG;
+               }
+           }
+       }
+    }
+
+  if (dump_file)
+    {
+      fprintf (dump_file, "\nSwap insn entry table when first built\n");
+      dump_swap_insn_table (insn_entry);
+    }
+
+  /* Record unoptimizable webs.  */
+  unsigned e = get_max_uid (), i;
+  for (i = 0; i < e; ++i)
+    {
+      if (!insn_entry[i].is_relevant)
+       continue;
+
+      swap_web_entry *root
+       = (swap_web_entry*)(&insn_entry[i])->unionfind_root ();
+      unsigned uid = INSN_UID (insn_entry[i].insn);
+
+      if (insn_entry[i].is_live_in || insn_entry[i].is_live_out
+         || (insn_entry[i].contains_subreg
+             && insn_entry[i].special_handling != SH_SUBREG)
+         || insn_entry[i].is_128_int || insn_entry[i].is_call
+         || !(insn_entry[i].is_swappable || insn_entry[i].is_swap))
+       root->web_not_optimizable = 1;
+
+      /* If we have loads or stores that aren't permuting then the
+        optimization isn't appropriate.  */
+      else if ((insn_entry[i].is_load || insn_entry[i].is_store)
+         && !insn_entry[i].is_swap && !insn_entry[i].is_swappable)
+       root->web_not_optimizable = 1;
+
+      /* If we have permuting loads or stores that are not accompanied
+        by a register swap, the optimization isn't appropriate.  */
+      else if (insn_entry[i].is_load && insn_entry[i].is_swap)
+       {
+         df_ref *def_rec;
+
+         for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
+           {
+             df_ref def = *def_rec;
+             struct df_link *link = DF_REF_CHAIN (def);
+
+             if (!chain_contains_only_swaps (insn_entry, link, FOR_LOADS))
+               {
+                 root->web_not_optimizable = 1;
+                 break;
+               }
+           }
+       }
+      else if (insn_entry[i].is_store && insn_entry[i].is_swap)
+       {
+         df_ref *use_rec;
+
+         for (use_rec = DF_INSN_UID_USES (uid); *use_rec; use_rec++)
+           {
+             df_ref use = *use_rec;
+             struct df_link *link = DF_REF_CHAIN (use);
+
+             if (!chain_contains_only_swaps (insn_entry, link, FOR_STORES))
+               {
+                 root->web_not_optimizable = 1;
+                 break;
+               }
+           }
+       }
+    }
+
+  if (dump_file)
+    {
+      fprintf (dump_file, "\nSwap insn entry table after web analysis\n");
+      dump_swap_insn_table (insn_entry);
+    }
+
+  /* For each load and store in an optimizable web (which implies
+     the loads and stores are permuting), find the associated
+     register swaps and mark them for removal.  Due to various
+     optimizations we may mark the same swap more than once.  Also
+     perform special handling for swappable insns that require it.  */
+  for (i = 0; i < e; ++i)
+    if ((insn_entry[i].is_load || insn_entry[i].is_store)
+       && insn_entry[i].is_swap)
+      {
+       swap_web_entry* root_entry
+         = (swap_web_entry*)((&insn_entry[i])->unionfind_root ());
+       if (!root_entry->web_not_optimizable)
+         mark_swaps_for_removal (insn_entry, i);
+      }
+    else if (insn_entry[i].is_swappable && insn_entry[i].special_handling)
+      {
+       swap_web_entry* root_entry
+         = (swap_web_entry*)((&insn_entry[i])->unionfind_root ());
+       if (!root_entry->web_not_optimizable)
+         handle_special_swappables (insn_entry, i);
+      }
+
+  /* Now delete the swaps marked for removal.  */
+  for (i = 0; i < e; ++i)
+    if (insn_entry[i].will_delete)
+      replace_swap_with_copy (insn_entry, i);
+
+  /* Clean up.  */
+  free (insn_entry);
+  return 0;
+}
+
+const pass_data pass_data_analyze_swaps =
+{
+  RTL_PASS, /* type */
+  "swaps", /* name */
+  OPTGROUP_NONE, /* optinfo_flags */
+  true, /* has_gate */
+  true, /* has_execute */
+  TV_NONE, /* tv_id */
+  0, /* properties_required */
+  0, /* properties_provided */
+  0, /* properties_destroyed */
+  0, /* todo_flags_start */
+  TODO_df_finish, /* todo_flags_finish */
+};
+
+class pass_analyze_swaps : public rtl_opt_pass
+{
+public:
+  pass_analyze_swaps(gcc::context *ctxt)
+    : rtl_opt_pass(pass_data_analyze_swaps, ctxt)
+  {}
+
+  /* opt_pass methods: */
+  bool gate ()
+    {
+      return (optimize > 0 && !BYTES_BIG_ENDIAN && TARGET_VSX
+             && rs6000_optimize_swaps);
+    }
+
+  unsigned int execute ()
+    {
+      return rs6000_analyze_swaps (cfun);
+    }
+
+}; // class pass_analyze_swaps
+
+rtl_opt_pass *
+make_pass_analyze_swaps (gcc::context *ctxt)
+{
+  return new pass_analyze_swaps (ctxt);
+}
 \f
 struct gcc_target targetm = TARGET_INITIALIZER;
 
index f363867..bd33ba8 100644 (file)
@@ -899,7 +899,8 @@ enum data_align { align_abi, align_opt, align_both };
    || (((MODE) == SFmode || (MODE) == DFmode || (MODE) == TFmode       \
        || (MODE) == SDmode || (MODE) == DDmode || (MODE) == TDmode)    \
        && (ALIGN) < 32)                                                        \
-   || (VECTOR_MODE_P ((MODE)) && (((int)(ALIGN)) < VECTOR_ALIGN (MODE))))
+   || (!TARGET_EFFICIENT_UNALIGNED_VSX                                  \
+       && (VECTOR_MODE_P ((MODE)) && (((int)(ALIGN)) < VECTOR_ALIGN (MODE)))))
 
 \f
 /* Standard register usage.  */
@@ -2587,9 +2588,8 @@ extern int frame_pointer_needed;
 /* Miscellaneous information.  */
 #define RS6000_BTC_SPR         0x01000000      /* function references SPRs.  */
 #define RS6000_BTC_VOID                0x02000000      /* function has no return value.  */
-#define RS6000_BTC_OVERLOADED  0x04000000      /* function is overloaded.  */
-#define RS6000_BTC_32BIT       0x08000000      /* function references SPRs.  */
-#define RS6000_BTC_64BIT       0x10000000      /* function references SPRs.  */
+#define RS6000_BTC_CR          0x04000000      /* function references a CR.  */
+#define RS6000_BTC_OVERLOADED  0x08000000      /* function is overloaded.  */
 #define RS6000_BTC_MISC_MASK   0x1f000000      /* Mask of the misc info.  */
 
 /* Convenience macros to document the instruction type.  */
index 46837e1..94637f7 100644 (file)
                   (bswap:DI
                    (match_operand:DI 1 "reg_or_mem_operand" "")))
              (clobber (match_scratch:DI 2 ""))
-             (clobber (match_scratch:DI 3 ""))
-             (clobber (match_scratch:DI 4 ""))])]
+             (clobber (match_scratch:DI 3 ""))])]
   ""
 {
   if (!REG_P (operands[0]) && !REG_P (operands[1]))
 
 ;; Power7/cell has ldbrx/stdbrx, so use it directly
 (define_insn "*bswapdi2_ldbrx"
-  [(set (match_operand:DI 0 "reg_or_mem_operand" "=&r,Z,??&r")
+  [(set (match_operand:DI 0 "reg_or_mem_operand" "=r,Z,&r")
        (bswap:DI (match_operand:DI 1 "reg_or_mem_operand" "Z,r,r")))
    (clobber (match_scratch:DI 2 "=X,X,&r"))
-   (clobber (match_scratch:DI 3 "=X,X,&r"))
-   (clobber (match_scratch:DI 4 "=X,X,&r"))]
+   (clobber (match_scratch:DI 3 "=X,X,&r"))]
   "TARGET_POWERPC64 && TARGET_LDBRX
    && (REG_P (operands[0]) || REG_P (operands[1]))"
   "@
 
 ;; Non-power7/cell, fall back to use lwbrx/stwbrx
 (define_insn "*bswapdi2_64bit"
-  [(set (match_operand:DI 0 "reg_or_mem_operand" "=&r,Z,&r")
+  [(set (match_operand:DI 0 "reg_or_mem_operand" "=r,Z,&r")
        (bswap:DI (match_operand:DI 1 "reg_or_mem_operand" "Z,r,r")))
    (clobber (match_scratch:DI 2 "=&b,&b,&r"))
-   (clobber (match_scratch:DI 3 "=&r,&r,&r"))
-   (clobber (match_scratch:DI 4 "=&r,X,&r"))]
+   (clobber (match_scratch:DI 3 "=&r,&r,&r"))]
   "TARGET_POWERPC64 && !TARGET_LDBRX
    && (REG_P (operands[0]) || REG_P (operands[1]))
    && !(MEM_P (operands[0]) && MEM_VOLATILE_P (operands[0]))
   [(set (match_operand:DI 0 "gpc_reg_operand" "")
        (bswap:DI (match_operand:DI 1 "indexed_or_indirect_operand" "")))
    (clobber (match_operand:DI 2 "gpc_reg_operand" ""))
-   (clobber (match_operand:DI 3 "gpc_reg_operand" ""))
-   (clobber (match_operand:DI 4 "gpc_reg_operand" ""))]
+   (clobber (match_operand:DI 3 "gpc_reg_operand" ""))]
   "TARGET_POWERPC64 && !TARGET_LDBRX && reload_completed"
   [(const_int 0)]
   "
   rtx src    = operands[1];
   rtx op2    = operands[2];
   rtx op3    = operands[3];
-  rtx op4    = operands[4];
   rtx op3_32 = simplify_gen_subreg (SImode, op3, DImode,
                                    BYTES_BIG_ENDIAN ? 4 : 0);
-  rtx op4_32 = simplify_gen_subreg (SImode, op4, DImode,
-                                   BYTES_BIG_ENDIAN ? 4 : 0);
+  rtx dest_32 = simplify_gen_subreg (SImode, dest, DImode,
+                                    BYTES_BIG_ENDIAN ? 4 : 0);
   rtx addr1;
   rtx addr2;
-  rtx word_high;
-  rtx word_low;
+  rtx word1;
+  rtx word2;
 
   addr1 = XEXP (src, 0);
   if (GET_CODE (addr1) == PLUS)
       addr2 = gen_rtx_PLUS (Pmode, op2, addr1);
     }
 
+  word1 = change_address (src, SImode, addr1);
+  word2 = change_address (src, SImode, addr2);
+
   if (BYTES_BIG_ENDIAN)
     {
-      word_high = change_address (src, SImode, addr1);
-      word_low  = change_address (src, SImode, addr2);
+      emit_insn (gen_bswapsi2 (op3_32, word2));
+      emit_insn (gen_bswapsi2 (dest_32, word1));
     }
   else
     {
-      word_high = change_address (src, SImode, addr2);
-      word_low  = change_address (src, SImode, addr1);
+      emit_insn (gen_bswapsi2 (op3_32, word1));
+      emit_insn (gen_bswapsi2 (dest_32, word2));
     }
 
-  emit_insn (gen_bswapsi2 (op3_32, word_low));
-  emit_insn (gen_bswapsi2 (op4_32, word_high));
-  emit_insn (gen_ashldi3 (dest, op3, GEN_INT (32)));
-  emit_insn (gen_iordi3 (dest, dest, op4));
+  emit_insn (gen_ashldi3 (op3, op3, GEN_INT (32)));
+  emit_insn (gen_iordi3 (dest, dest, op3));
+  DONE;
 }")
 
 (define_split
   [(set (match_operand:DI 0 "indexed_or_indirect_operand" "")
        (bswap:DI (match_operand:DI 1 "gpc_reg_operand" "")))
    (clobber (match_operand:DI 2 "gpc_reg_operand" ""))
-   (clobber (match_operand:DI 3 "gpc_reg_operand" ""))
-   (clobber (match_operand:DI 4 "" ""))]
+   (clobber (match_operand:DI 3 "gpc_reg_operand" ""))]
   "TARGET_POWERPC64 && !TARGET_LDBRX && reload_completed"
   [(const_int 0)]
   "
                                    BYTES_BIG_ENDIAN ? 4 : 0);
   rtx addr1;
   rtx addr2;
-  rtx word_high;
-  rtx word_low;
+  rtx word1;
+  rtx word2;
 
   addr1 = XEXP (dest, 0);
   if (GET_CODE (addr1) == PLUS)
       addr2 = gen_rtx_PLUS (Pmode, op2, addr1);
     }
 
+  word1 = change_address (dest, SImode, addr1);
+  word2 = change_address (dest, SImode, addr2);
+
   emit_insn (gen_lshrdi3 (op3, src, GEN_INT (32)));
+
   if (BYTES_BIG_ENDIAN)
     {
-      word_high = change_address (dest, SImode, addr1);
-      word_low  = change_address (dest, SImode, addr2);
+      emit_insn (gen_bswapsi2 (word1, src_si));
+      emit_insn (gen_bswapsi2 (word2, op3_si));
     }
   else
     {
-      word_high = change_address (dest, SImode, addr2);
-      word_low  = change_address (dest, SImode, addr1);
+      emit_insn (gen_bswapsi2 (word2, src_si));
+      emit_insn (gen_bswapsi2 (word1, op3_si));
     }
-  emit_insn (gen_bswapsi2 (word_high, src_si));
-  emit_insn (gen_bswapsi2 (word_low, op3_si));
+  DONE;
 }")
 
 (define_split
   [(set (match_operand:DI 0 "gpc_reg_operand" "")
        (bswap:DI (match_operand:DI 1 "gpc_reg_operand" "")))
    (clobber (match_operand:DI 2 "gpc_reg_operand" ""))
-   (clobber (match_operand:DI 3 "gpc_reg_operand" ""))
-   (clobber (match_operand:DI 4 "" ""))]
+   (clobber (match_operand:DI 3 "gpc_reg_operand" ""))]
   "TARGET_POWERPC64 && reload_completed"
   [(const_int 0)]
   "
   emit_insn (gen_bswapsi2 (op3_si, op2_si));
   emit_insn (gen_ashldi3 (dest, dest, GEN_INT (32)));
   emit_insn (gen_iordi3 (dest, dest, op3));
+  DONE;
 }")
 
 (define_insn "bswapdi2_32bit"
-  [(set (match_operand:DI 0 "reg_or_mem_operand" "=&r,Z,&r")
+  [(set (match_operand:DI 0 "reg_or_mem_operand" "=r,Z,?&r")
        (bswap:DI (match_operand:DI 1 "reg_or_mem_operand" "Z,r,r")))
    (clobber (match_scratch:SI 2 "=&b,&b,X"))]
   "!TARGET_POWERPC64 && (REG_P (operands[0]) || REG_P (operands[1]))"
   if (GET_CODE (addr1) == PLUS)
     {
       emit_insn (gen_add3_insn (op2, XEXP (addr1, 0), GEN_INT (4)));
-      if (TARGET_AVOID_XFORM)
+      if (TARGET_AVOID_XFORM
+         || REGNO (XEXP (addr1, 1)) == REGNO (dest2))
        {
          emit_insn (gen_add3_insn (op2, XEXP (addr1, 1), op2));
          addr2 = op2;
       else
        addr2 = gen_rtx_PLUS (SImode, op2, XEXP (addr1, 1));
     }
-  else if (TARGET_AVOID_XFORM)
+  else if (TARGET_AVOID_XFORM
+          || REGNO (addr1) == REGNO (dest2))
     {
       emit_insn (gen_add3_insn (op2, addr1, GEN_INT (4)));
       addr2 = op2;
   word2 = change_address (src, SImode, addr2);
 
   emit_insn (gen_bswapsi2 (dest2, word1));
+  /* The REGNO (dest2) tests above ensure that addr2 has not been trashed,
+     thus allowing us to omit an early clobber on the output.  */
   emit_insn (gen_bswapsi2 (dest1, word2));
+  DONE;
 }")
 
 (define_split
 
   emit_insn (gen_bswapsi2 (word2, src1));
   emit_insn (gen_bswapsi2 (word1, src2));
+  DONE;
 }")
 
 (define_split
 
   emit_insn (gen_bswapsi2 (dest1, src2));
   emit_insn (gen_bswapsi2 (dest2, src1));
+  DONE;
 }")
 
 (define_insn "mulsi3"
   [(set (match_operand:BOOL_128 0 "vlogical_operand" "=<BOOL_REGS_OUTPUT>")
        (match_operator:BOOL_128 3 "boolean_operator"
         [(not:BOOL_128
-          (match_operand:BOOL_128 2 "vlogical_operand" "<BOOL_REGS_OP1>"))
-         (match_operand:BOOL_128 1 "vlogical_operand" "<BOOL_REGS_OP2>")]))]
+          (match_operand:BOOL_128 2 "vlogical_operand" "<BOOL_REGS_OP2>"))
+         (match_operand:BOOL_128 1 "vlogical_operand" "<BOOL_REGS_OP1>")]))]
   "TARGET_P8_VECTOR || (GET_CODE (operands[3]) == AND)"
 {
   if (TARGET_VSX && vsx_register_operand (operands[0], <MODE>mode))
    && reload_completed && int_reg_operand (operands[0], <MODE>mode)"
   [(const_int 0)]
 {
-  rs6000_split_logical (operands, GET_CODE (operands[3]), false, true, false,
+  rs6000_split_logical (operands, GET_CODE (operands[3]), false, false, true,
                        NULL_RTX);
   DONE;
 }
   [(set (match_operand:TI2 0 "int_reg_operand" "=&r,r,r")
        (match_operator:TI2 3 "boolean_operator"
         [(not:TI2
-          (match_operand:TI2 1 "int_reg_operand" "r,0,r"))
-         (match_operand:TI2 2 "int_reg_operand" "r,r,0")]))]
+          (match_operand:TI2 2 "int_reg_operand" "r,0,r"))
+         (match_operand:TI2 1 "int_reg_operand" "r,r,0")]))]
   "!TARGET_P8_VECTOR && (GET_CODE (operands[3]) != AND)"
   "#"
   "reload_completed && !TARGET_P8_VECTOR && (GET_CODE (operands[3]) != AND)"
   [(const_int 0)]
 {
-  rs6000_split_logical (operands, GET_CODE (operands[3]), false, true, false,
+  rs6000_split_logical (operands, GET_CODE (operands[3]), false, false, true,
                        NULL_RTX);
   DONE;
 }
index 4c1a02a..3fb10e6 100644 (file)
@@ -1,6 +1,6 @@
 ; Options for the rs6000 port of the compiler
 ;
-; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 ; Contributed by Aldy Hernandez <aldy@quesejoda.com>.
 ;
 ; This file is part of GCC.
@@ -193,42 +193,46 @@ Target Report Mask(VSX) Var(rs6000_isa_flags)
 Use vector/scalar (VSX) instructions
 
 mvsx-scalar-float
-Target Undocumented Report Var(TARGET_VSX_SCALAR_FLOAT) Init(1)
+Target Undocumented Report Var(TARGET_VSX_SCALAR_FLOAT) Init(1) Save
 ; If -mpower8-vector, use VSX arithmetic instructions for SFmode (on by default)
 
 mvsx-scalar-double
-Target Undocumented Report Var(TARGET_VSX_SCALAR_DOUBLE) Init(1)
+Target Undocumented Report Var(TARGET_VSX_SCALAR_DOUBLE) Init(1) Save
 ; If -mvsx, use VSX arithmetic instructions for DFmode (on by default)
 
 mvsx-scalar-memory
 Target Undocumented Report Alias(mupper-regs-df)
 
 mvsx-align-128
-Target Undocumented Report Var(TARGET_VSX_ALIGN_128)
+Target Undocumented Report Var(TARGET_VSX_ALIGN_128) Save
 ; If -mvsx, set alignment to 128 bits instead of 32/64
 
 mallow-movmisalign
-Target Undocumented Var(TARGET_ALLOW_MOVMISALIGN) Init(-1)
+Target Undocumented Var(TARGET_ALLOW_MOVMISALIGN) Init(-1) Save
 ; Allow/disallow the movmisalign in DF/DI vectors
 
+mefficient-unaligned-vector
+Target Undocumented Report Var(TARGET_EFFICIENT_UNALIGNED_VSX) Init(-1) Save
+; Consider unaligned VSX accesses to be efficient/inefficient
+
 mallow-df-permute
-Target Undocumented Var(TARGET_ALLOW_DF_PERMUTE)
+Target Undocumented Var(TARGET_ALLOW_DF_PERMUTE) Save
 ; Allow/disallow permutation of DF/DI vectors
 
 msched-groups
-Target Undocumented Report Var(TARGET_SCHED_GROUPS) Init(-1)
+Target Undocumented Report Var(TARGET_SCHED_GROUPS) Init(-1) Save
 ; Explicitly set/unset whether rs6000_sched_groups is set
 
 malways-hint
-Target Undocumented Report Var(TARGET_ALWAYS_HINT) Init(-1)
+Target Undocumented Report Var(TARGET_ALWAYS_HINT) Init(-1) Save
 ; Explicitly set/unset whether rs6000_always_hint is set
 
 malign-branch-targets
-Target Undocumented Report Var(TARGET_ALIGN_BRANCH_TARGETS) Init(-1)
+Target Undocumented Report Var(TARGET_ALIGN_BRANCH_TARGETS) Init(-1) Save
 ; Explicitly set/unset whether rs6000_align_branch_targets is set
 
 mvectorize-builtins
-Target Undocumented Report Var(TARGET_VECTORIZE_BUILTINS) Init(-1)
+Target Undocumented Report Var(TARGET_VECTORIZE_BUILTINS) Init(-1) Save
 ; Explicitly control whether we vectorize the builtins or not.
 
 mno-update
@@ -538,7 +542,7 @@ Target Report Var(TARGET_POINTERS_TO_NESTED_FUNCTIONS) Init(1) Save
 Use/do not use r11 to hold the static link in calls to functions via pointers.
 
 msave-toc-indirect
-Target Report Var(TARGET_SAVE_TOC_INDIRECT) Save
+Target Report Mask(SAVE_TOC_INDIRECT) Var(rs6000_isa_flags)
 Control whether we save the TOC in the prologue for indirect calls or generate the save inline
 
 mvsx-timode
@@ -559,7 +563,7 @@ Use/do not use vector and scalar instructions added in ISA 2.07.
 
 mcrypto
 Target Report Mask(CRYPTO) Var(rs6000_isa_flags)
-Use ISA 2.07 crypto instructions
+Use ISA 2.07 Category:Vector.AES and Category:Vector.SHA2 instructions
 
 mdirect-move
 Target Report Mask(DIRECT_MOVE) Var(rs6000_isa_flags)
@@ -588,3 +592,7 @@ Allow double variables in upper registers with -mcpu=power7 or -mvsx
 mupper-regs-sf
 Target Undocumented Mask(UPPER_REGS_SF) Var(rs6000_isa_flags)
 Allow float variables in upper registers with -mcpu=power8 or -mp8-vector
+
+moptimize-swaps
+Target Undocumented Var(rs6000_optimize_swaps) Init(1) Save
+Analyze and remove doubleword swaps from VSX computations.
index 2402d53..0464880 100644 (file)
@@ -52,7 +52,8 @@
 %{mcpu=750:  %{!Dppc*: %{!Dmpc*: -Dmpc750}  } } \
 %{mcpu=821:  %{!Dppc*: %{!Dmpc*: -Dmpc821}  } } \
 %{mcpu=860:  %{!Dppc*: %{!Dmpc*: -Dmpc860}  } } \
-%{mcpu=8540: %{!Dppc*: %{!Dmpc*: -Dppc8540}  } }" 
+%{mcpu=8540: %{!Dppc*: %{!Dmpc*: -Dppc8540}  } } \
+%{mcpu=e6500: -D__PPC_CPU_E6500__}"
 
 #undef  SUBSUBTARGET_EXTRA_SPECS
 #define SUBSUBTARGET_EXTRA_SPECS \
index 5361ff3..cde4364 100644 (file)
@@ -18,9 +18,3 @@
 
 SOFT_FLOAT_CPUS = e300c2 401 403 405 440 464 476 ec603e 801 821 823 860
 MULTILIB_MATCHES_FLOAT = $(foreach cpu, $(SOFT_FLOAT_CPUS), msoft-float=mcpu?$(cpu))
-
-# Build the libraries for both hard and soft floating point by default
-
-MULTILIB_OPTIONS = msoft-float
-MULTILIB_DIRNAMES = soft-float
-MULTILIB_MATCHES       = ${MULTILIB_MATCHES_FLOAT}
index 0b92eba..4cb63bd 100644 (file)
@@ -1,10 +1,20 @@
 # do not define the multiarch name if configured for a soft-float cpu
 # or soft-float.
 ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring soft,$(with_float)))
+ifneq (,$(findstring powerpc64,$(target)))
+MULTILIB_OSDIRNAMES := .=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
+else
 ifneq (,$(findstring spe,$(target)))
-MULTIARCH_DIRNAME = powerpc-linux-gnuspe$(if $(findstring 8548,$(with_cpu)),,v1)
+MULTIARCH_DIRNAME := powerpc-linux-gnuspe$(if $(findstring 8548,$(with_cpu)),,v1)
 else
-MULTIARCH_DIRNAME = powerpc-linux-gnu
+MULTIARCH_DIRNAME := powerpc-linux-gnu
+endif
+endif
+ifneq (,$(findstring powerpcle,$(target)))
+MULTIARCH_DIRNAME := $(subst -linux,le-linux,$(MULTIARCH_DIRNAME))
+endif
+ifneq (,$(findstring powerpc64le,$(target)))
+MULTILIB_OSDIRNAMES := $(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES))
 endif
 endif
 
index 426f75a..eadda0d 100644 (file)
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-MULTILIB_OPTIONS       = \
-mcpu=403/mcpu=505/mcpu=603e/mcpu=604/mcpu=860/mcpu=7400/mcpu=8540 \
-msoft-float/mfloat-gprs=double
+MULTILIB_OPTIONS =
+MULTILIB_DIRNAMES =
+MULTILIB_MATCHES =
+MULTILIB_EXCEPTIONS =
+MULTILIB_REQUIRED =
+
+MULTILIB_OPTIONS += mcpu=403/mcpu=505/mcpu=603e/mcpu=604/mcpu=860/mcpu=7400/mcpu=8540/mcpu=e6500
+MULTILIB_DIRNAMES += m403 m505 m603e m604 m860 m7400 m8540 me6500
+
+MULTILIB_OPTIONS += m32
+MULTILIB_DIRNAMES += m32
 
-MULTILIB_DIRNAMES      = \
-m403 m505 m603e m604 m860 m7400 m8540 \
-nof gprsdouble
+MULTILIB_OPTIONS += msoft-float/mfloat-gprs=double
+MULTILIB_DIRNAMES += nof gprsdouble
+
+MULTILIB_OPTIONS += mno-spe/mno-altivec
+MULTILIB_DIRNAMES += nospe noaltivec
 
-# MULTILIB_MATCHES     = ${MULTILIB_MATCHES_FLOAT}
-MULTILIB_MATCHES       =
 MULTILIB_MATCHES       += ${MULTILIB_MATCHES_ENDIAN}
 MULTILIB_MATCHES       += ${MULTILIB_MATCHES_SYSV}
 # Map 405 to 403
@@ -52,37 +60,20 @@ MULTILIB_MATCHES    += mcpu?8540=mcpu?8548
 # (mfloat-gprs=single is implicit default)
 MULTILIB_MATCHES       += mcpu?8540=mcpu?8540/mfloat-gprs?single
 
-# Soft-float only, default implies msoft-float
-# NOTE: Must match with MULTILIB_MATCHES_FLOAT and MULTILIB_MATCHES
-MULTILIB_SOFTFLOAT_ONLY = \
-*mcpu=401/*msoft-float* \
-*mcpu=403/*msoft-float* \
-*mcpu=405/*msoft-float* \
-*mcpu=801/*msoft-float* \
-*mcpu=821/*msoft-float* \
-*mcpu=823/*msoft-float* \
-*mcpu=860/*msoft-float*
-
-# Hard-float only, take out msoft-float
-MULTILIB_HARDFLOAT_ONLY = \
-*mcpu=505/*msoft-float*
-
-# Targets which do not support gprs
-MULTILIB_NOGPRS = \
-mfloat-gprs=* \
-*mcpu=403/*mfloat-gprs=* \
-*mcpu=505/*mfloat-gprs=* \
-*mcpu=603e/*mfloat-gprs=* \
-*mcpu=604/*mfloat-gprs=* \
-*mcpu=860/*mfloat-gprs=* \
-*mcpu=7400/*mfloat-gprs=*
-
-MULTILIB_EXCEPTIONS =
-
-# Disallow -Dppc and -Dmpc without other options
-MULTILIB_EXCEPTIONS    += Dppc* Dmpc*
+# Enumeration of multilibs
 
-MULTILIB_EXCEPTIONS    += \
-${MULTILIB_SOFTFLOAT_ONLY} \
-${MULTILIB_HARDFLOAT_ONLY} \
-${MULTILIB_NOGPRS}
+MULTILIB_REQUIRED += msoft-float
+MULTILIB_REQUIRED += mcpu=403
+MULTILIB_REQUIRED += mcpu=505
+MULTILIB_REQUIRED += mcpu=603e
+MULTILIB_REQUIRED += mcpu=603e/msoft-float
+MULTILIB_REQUIRED += mcpu=604
+MULTILIB_REQUIRED += mcpu=604/msoft-float
+MULTILIB_REQUIRED += mcpu=7400
+MULTILIB_REQUIRED += mcpu=7400/msoft-float
+MULTILIB_REQUIRED += mcpu=8540
+MULTILIB_REQUIRED += mcpu=8540/msoft-float/mno-spe
+MULTILIB_REQUIRED += mcpu=8540/mfloat-gprs=double
+MULTILIB_REQUIRED += mcpu=860
+MULTILIB_REQUIRED += mcpu=e6500/m32
+MULTILIB_REQUIRED += mcpu=e6500/m32/msoft-float/mno-altivec
index 84bf81a..9aaf064 100644 (file)
    UNSPEC_VSX_ROUND_IC
    UNSPEC_VSX_SLDWI
    UNSPEC_VSX_XXSPLTW
+   UNSPEC_VSX_XXSPLTD
+   UNSPEC_VSX_DIVSD
+   UNSPEC_VSX_DIVUD
+   UNSPEC_VSX_MULSD
+   UNSPEC_VSX_XVCVSXDDP
+   UNSPEC_VSX_XVCVUXDDP
+   UNSPEC_VSX_XVCVDPSXDS
+   UNSPEC_VSX_XVCVDPUXDS
   ])
 
 ;; VSX moves
   [(set_attr "type" "<VStype_simple>")
    (set_attr "fp_type" "<VSfptype_mul>")])
 
+; Emulate vector with scalar for vec_mul in V2DImode
+(define_insn_and_split "vsx_mul_v2di"
+  [(set (match_operand:V2DI 0 "vsx_register_operand" "=wa")
+        (unspec:V2DI [(match_operand:V2DI 1 "vsx_register_operand" "wa")
+                      (match_operand:V2DI 2 "vsx_register_operand" "wa")]
+                     UNSPEC_VSX_MULSD))]
+  "VECTOR_MEM_VSX_P (V2DImode)"
+  "#"
+  "VECTOR_MEM_VSX_P (V2DImode) && !reload_completed && !reload_in_progress"
+  [(const_int 0)]
+  "
+{
+  rtx op0 = operands[0];
+  rtx op1 = operands[1];
+  rtx op2 = operands[2];
+  rtx op3 = gen_reg_rtx (DImode);
+  rtx op4 = gen_reg_rtx (DImode);
+  rtx op5 = gen_reg_rtx (DImode);
+  emit_insn (gen_vsx_extract_v2di (op3, op1, GEN_INT (0)));
+  emit_insn (gen_vsx_extract_v2di (op4, op2, GEN_INT (0)));
+  emit_insn (gen_muldi3 (op5, op3, op4));
+  emit_insn (gen_vsx_extract_v2di (op3, op1, GEN_INT (1)));
+  emit_insn (gen_vsx_extract_v2di (op4, op2, GEN_INT (1)));
+  emit_insn (gen_muldi3 (op3, op3, op4));
+  emit_insn (gen_vsx_concat_v2di (op0, op5, op3));
+}"
+  [(set_attr "type" "vecdouble")])
+
 (define_insn "*vsx_div<mode>3"
   [(set (match_operand:VSX_F 0 "vsx_register_operand" "=<VSr>,?<VSa>")
         (div:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "<VSr>,<VSa>")
   [(set_attr "type" "<VStype_div>")
    (set_attr "fp_type" "<VSfptype_div>")])
 
+; Emulate vector with scalar for vec_div in V2DImode
+(define_insn_and_split "vsx_div_v2di"
+  [(set (match_operand:V2DI 0 "vsx_register_operand" "=wa")
+        (unspec:V2DI [(match_operand:V2DI 1 "vsx_register_operand" "wa")
+                      (match_operand:V2DI 2 "vsx_register_operand" "wa")]
+                     UNSPEC_VSX_DIVSD))]
+  "VECTOR_MEM_VSX_P (V2DImode)"
+  "#"
+  "VECTOR_MEM_VSX_P (V2DImode) && !reload_completed && !reload_in_progress"
+  [(const_int 0)]
+  "
+{
+  rtx op0 = operands[0];
+  rtx op1 = operands[1];
+  rtx op2 = operands[2];
+  rtx op3 = gen_reg_rtx (DImode);
+  rtx op4 = gen_reg_rtx (DImode);
+  rtx op5 = gen_reg_rtx (DImode);
+  emit_insn (gen_vsx_extract_v2di (op3, op1, GEN_INT (0)));
+  emit_insn (gen_vsx_extract_v2di (op4, op2, GEN_INT (0)));
+  emit_insn (gen_divdi3 (op5, op3, op4));
+  emit_insn (gen_vsx_extract_v2di (op3, op1, GEN_INT (1)));
+  emit_insn (gen_vsx_extract_v2di (op4, op2, GEN_INT (1)));
+  emit_insn (gen_divdi3 (op3, op3, op4));
+  emit_insn (gen_vsx_concat_v2di (op0, op5, op3));
+}"
+  [(set_attr "type" "vecdiv")])
+
+(define_insn_and_split "vsx_udiv_v2di"
+  [(set (match_operand:V2DI 0 "vsx_register_operand" "=wa")
+        (unspec:V2DI [(match_operand:V2DI 1 "vsx_register_operand" "wa")
+                      (match_operand:V2DI 2 "vsx_register_operand" "wa")]
+                     UNSPEC_VSX_DIVUD))]
+  "VECTOR_MEM_VSX_P (V2DImode)"
+  "#"
+  "VECTOR_MEM_VSX_P (V2DImode) && !reload_completed && !reload_in_progress"
+  [(const_int 0)]
+  "
+{
+  rtx op0 = operands[0];
+  rtx op1 = operands[1];
+  rtx op2 = operands[2];
+  rtx op3 = gen_reg_rtx (DImode);
+  rtx op4 = gen_reg_rtx (DImode);
+  rtx op5 = gen_reg_rtx (DImode);
+  emit_insn (gen_vsx_extract_v2di (op3, op1, GEN_INT (0)));
+  emit_insn (gen_vsx_extract_v2di (op4, op2, GEN_INT (0)));
+  emit_insn (gen_udivdi3 (op5, op3, op4));
+  emit_insn (gen_vsx_extract_v2di (op3, op1, GEN_INT (1)));
+  emit_insn (gen_vsx_extract_v2di (op4, op2, GEN_INT (1)));
+  emit_insn (gen_udivdi3 (op3, op3, op4));
+  emit_insn (gen_vsx_concat_v2di (op0, op5, op3));
+}"
+  [(set_attr "type" "vecdiv")])
+
 ;; *tdiv* instruction returning the FG flag
 (define_expand "vsx_tdiv<mode>3_fg"
   [(set (match_dup 3)
   "xscvspdpn %x0,%x1"
   [(set_attr "type" "fp")])
 
+;; Convert and scale (used by vec_ctf, vec_cts, vec_ctu for double/long long)
+
+(define_expand "vsx_xvcvsxddp_scale"
+  [(match_operand:V2DF 0 "vsx_register_operand" "")
+   (match_operand:V2DI 1 "vsx_register_operand" "")
+   (match_operand:QI 2 "immediate_operand" "")]
+  "VECTOR_UNIT_VSX_P (V2DFmode)"
+{
+  rtx op0 = operands[0];
+  rtx op1 = operands[1];
+  int scale = INTVAL(operands[2]);
+  emit_insn (gen_vsx_xvcvsxddp (op0, op1));
+  if (scale != 0)
+    rs6000_scale_v2df (op0, op0, -scale);
+  DONE;
+})
+
+(define_insn "vsx_xvcvsxddp"
+  [(set (match_operand:V2DF 0 "vsx_register_operand" "=wa")
+        (unspec:V2DF [(match_operand:V2DI 1 "vsx_register_operand" "wa")]
+                     UNSPEC_VSX_XVCVSXDDP))]
+  "VECTOR_UNIT_VSX_P (V2DFmode)"
+  "xvcvsxddp %x0,%x1"
+  [(set_attr "type" "vecdouble")])
+
+(define_expand "vsx_xvcvuxddp_scale"
+  [(match_operand:V2DF 0 "vsx_register_operand" "")
+   (match_operand:V2DI 1 "vsx_register_operand" "")
+   (match_operand:QI 2 "immediate_operand" "")]
+  "VECTOR_UNIT_VSX_P (V2DFmode)"
+{
+  rtx op0 = operands[0];
+  rtx op1 = operands[1];
+  int scale = INTVAL(operands[2]);
+  emit_insn (gen_vsx_xvcvuxddp (op0, op1));
+  if (scale != 0)
+    rs6000_scale_v2df (op0, op0, -scale);
+  DONE;
+})
+
+(define_insn "vsx_xvcvuxddp"
+  [(set (match_operand:V2DF 0 "vsx_register_operand" "=wa")
+        (unspec:V2DF [(match_operand:V2DI 1 "vsx_register_operand" "wa")]
+                     UNSPEC_VSX_XVCVUXDDP))]
+  "VECTOR_UNIT_VSX_P (V2DFmode)"
+  "xvcvuxddp %x0,%x1"
+  [(set_attr "type" "vecdouble")])
+
+(define_expand "vsx_xvcvdpsxds_scale"
+  [(match_operand:V2DI 0 "vsx_register_operand" "")
+   (match_operand:V2DF 1 "vsx_register_operand" "")
+   (match_operand:QI 2 "immediate_operand" "")]
+  "VECTOR_UNIT_VSX_P (V2DFmode)"
+{
+  rtx op0 = operands[0];
+  rtx op1 = operands[1];
+  rtx tmp = gen_reg_rtx (V2DFmode);
+  int scale = INTVAL(operands[2]);
+  if (scale != 0)
+    rs6000_scale_v2df (tmp, op1, scale);
+  emit_insn (gen_vsx_xvcvdpsxds (op0, tmp));
+  DONE;
+})
+
+(define_insn "vsx_xvcvdpsxds"
+  [(set (match_operand:V2DI 0 "vsx_register_operand" "=wa")
+        (unspec:V2DI [(match_operand:V2DF 1 "vsx_register_operand" "wa")]
+                     UNSPEC_VSX_XVCVDPSXDS))]
+  "VECTOR_UNIT_VSX_P (V2DFmode)"
+  "xvcvdpsxds %x0,%x1"
+  [(set_attr "type" "vecdouble")])
+
+(define_expand "vsx_xvcvdpuxds_scale"
+  [(match_operand:V2DI 0 "vsx_register_operand" "")
+   (match_operand:V2DF 1 "vsx_register_operand" "")
+   (match_operand:QI 2 "immediate_operand" "")]
+  "VECTOR_UNIT_VSX_P (V2DFmode)"
+{
+  rtx op0 = operands[0];
+  rtx op1 = operands[1];
+  rtx tmp = gen_reg_rtx (V2DFmode);
+  int scale = INTVAL(operands[2]);
+  if (scale != 0)
+    rs6000_scale_v2df (tmp, op1, scale);
+  emit_insn (gen_vsx_xvcvdpuxds (op0, tmp));
+  DONE;
+})
+
+(define_insn "vsx_xvcvdpuxds"
+  [(set (match_operand:V2DI 0 "vsx_register_operand" "=wa")
+        (unspec:V2DI [(match_operand:V2DF 1 "vsx_register_operand" "wa")]
+                     UNSPEC_VSX_XVCVDPUXDS))]
+  "VECTOR_UNIT_VSX_P (V2DFmode)"
+  "xvcvdpuxds %x0,%x1"
+  [(set_attr "type" "vecdouble")])
+
 ;; Convert from 64-bit to 32-bit types
 ;; Note, favor the Altivec registers since the usual use of these instructions
 ;; is in vector converts and we need to use the Altivec vperm instruction.
   "xxspltw %x0,%x1,%2"
   [(set_attr "type" "vecperm")])
 
+;; V2DF/V2DI splat for use by vec_splat builtin
+(define_insn "vsx_xxspltd_<mode>"
+  [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
+        (unspec:VSX_D [(match_operand:VSX_D 1 "vsx_register_operand" "wa")
+                      (match_operand:QI 2 "u5bit_cint_operand" "i")]
+                      UNSPEC_VSX_XXSPLTD))]
+  "VECTOR_MEM_VSX_P (<MODE>mode)"
+{
+  if ((VECTOR_ELT_ORDER_BIG && INTVAL (operands[2]) == 0)
+      || (!VECTOR_ELT_ORDER_BIG && INTVAL (operands[2]) == 1))
+    return "xxpermdi %x0,%x1,%x1,0";
+  else
+    return "xxpermdi %x0,%x1,%x1,3";
+}
+  [(set_attr "type" "vecperm")])
+
 ;; V4SF/V4SI interleave
 (define_insn "vsx_xxmrghw_<mode>"
   [(set (match_operand:VSX_W 0 "vsx_register_operand" "=wf,?<VSa>")
index f2b7bd0..1012331 100644 (file)
   do { fputs (LOCAL_COMMON_ASM_OP, (FILE));                    \
        RS6000_OUTPUT_BASENAME ((FILE), (NAME));                        \
        if ((ALIGN) > 32)                                       \
-        fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%s,%u\n",    \
+        fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%s%u_,%u\n", \
                  (SIZE), xcoff_bss_section_name,                       \
+                 floor_log2 ((ALIGN) / BITS_PER_UNIT),                 \
                  floor_log2 ((ALIGN) / BITS_PER_UNIT));                \
        else if ((SIZE) > 4)                                    \
-        fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%s,3\n",     \
+        fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%s3_,3\n",   \
                  (SIZE), xcoff_bss_section_name);              \
        else                                                    \
-        fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%s\n",       \
+        fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%s,2\n",     \
                  (SIZE), xcoff_bss_section_name);              \
      } while (0)
 #endif
index 4242c1a..11a825c 100644 (file)
@@ -733,7 +733,7 @@ rx_print_operand (FILE * file, rtx op, int letter)
       break;
 
     case 'R':
-      gcc_assert (GET_MODE_SIZE (GET_MODE (op)) < 4);
+      gcc_assert (GET_MODE_SIZE (GET_MODE (op)) <= 4);
       unsigned_load = true;
       /* Fall through.  */
     case 'Q':
index d99b19a..06a0ae8 100644 (file)
@@ -433,9 +433,9 @@ typedef unsigned int CUMULATIVE_ARGS;
 /* Compute the alignment needed for label X in various situations.
    If the user has specified an alignment then honour that, otherwise
    use rx_align_for_label.  */
-#define JUMP_ALIGN(x)                          (align_jumps ? align_jumps : rx_align_for_label (x, 0))
-#define LABEL_ALIGN(x)                         (align_labels ? align_labels : rx_align_for_label (x, 3))
-#define LOOP_ALIGN(x)                          (align_loops ? align_loops : rx_align_for_label (x, 2))
+#define JUMP_ALIGN(x)                          (align_jumps > 1 ? align_jumps_log : rx_align_for_label (x, 0))
+#define LABEL_ALIGN(x)                         (align_labels > 1 ? align_labels_log : rx_align_for_label (x, 3))
+#define LOOP_ALIGN(x)                          (align_loops > 1 ? align_loops_log : rx_align_for_label (x, 2))
 #define LABEL_ALIGN_AFTER_BARRIER(x)           rx_align_for_label (x, 0)
 
 #define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM, LOG, MAX_SKIP)       \
index 913b229..9542cf2 100644 (file)
   (cond [(eq_attr "mnemonic" "lnxbr,madb,ltxtr,clc,axtr,msebr,slbgr,xc,alcr,lpxbr,slbr,maebr,mlg,mfy,lxdtr,maeb,lxeb,nc,mxtr,sxtr,dxbr,alc,msdbr,ltxbr,lxdb,madbr,lxdbr,lxebr,mvc,m,mseb,mlr,mlgr,slb,tcxb,msdb,sqxbr,alcgr,oc,flogr,alcg,mxbr,dxtr,axbr,mr,sxbr,slbg,ml,lcxbr,bcr_flush") (const_int 1)]
         (const_int 0)))
 
-(define_insn_reservation "zEC12_simple" 1
+(define_insn_reservation "zEC12_simple_int" 0
   (and (eq_attr "cpu" "zEC12")
-       (eq_attr "mnemonic" "ltg,ogrk,lr,lnebr,lghrl,sdbr,x,asi,lhr,sebr,madb,ar,lhrl,clfxtr,llgfr,clghrl,cgr,cli,agrk,ic,adbr,aebr,lrv,clg,cy,cghi,sy,celfbr,seb,clgfr,al,tm,lang,clfebr,lghr,cdb,lpebr,laa,ark,lh,or,icy,xi,msebr,n,llihl,afi,cs,nrk,sth,lgr,l,lcr,stey,xg,crt,slgfr,ny,ld,j,llihh,slgr,clfhsi,slg,lb,lgrl,lrl,llihf,lndbr,llcr,laxg,mvghi,rllg,sdb,xrk,laag,alhsik,algfi,algr,aly,agfi,lrvr,d,crl,llgc,tmhl,algsi,lgh,icmh,clhrl,xgrk,icm,iilf,ork,lbr,cg,ldgr,lgf,iihf,llghr,sg,clfdbr,llgtr,stam,cebr,tmhh,tceb,slgf,basr,lgbr,maebr,lgb,cgfi,aeb,ltebr,lax,clfit,lrvgr,nihl,ni,clfdtr,srdl,mdb,srk,xihf,stgrl,sthrl,algf,ltr,cdlgbr,cgit,ng,lat,llghrl,ltgr,nihh,clgfrl,srlk,maeb,agr,cxlftr,ler,bcr_flush,stcy,cds,clfi,nihf,ly,clt,lgat,alg,lhy,lgfrl,clghsi,clrt,tmll,srlg,tcdb,ay,sty,clr,lgfi,lan,lpdbr,clgt,adb,ahik,sra,algrk,cdfbr,lcebr,clfxbr,msdbr,ceb,clgr,tmy,tmlh,alghsik,lcgr,mvi,cdbr,ltgf,xr,larl,ldr,llgcr,clgrt,clrl,cghsi,cliy,madbr,oy,ogr,llgt,meebr,slr,clgxbr,chi,s,icmy,llc,ngr,clhhsi,ltgfr,llill,lhi,o,meeb,clgdtr,sll,clgrl,clgf,ledbr,cegbr,mviy,algfr,rll,cdlftr,sldl,cdlgtr,lg,niy,st,sgr,ag,le,xgr,cr,stg,llilh,sr,lzer,cdsg,sllk,mdbr,stoc,csg,clgit,chhsi,strl,llilf,lndfr,ngrk,clgebr,clgfi,llgh,mseb,ltdbr,oill,la,llhrl,stc,lghi,oihl,xiy,sllg,llgf,cgrt,ldeb,cl,sl,cdlfbr,oi,oilh,nr,srak,oihh,ear,slgrk,og,c,slgfi,sthy,oilf,oiy,msdb,oihf,a,cfi,lzxr,lzdr,srag,cdgbr,brasl,alr,cgrl,llgfrl,cit,clgxtr,ley,exrl,lcdfr,lay,xilf,lcdbr,alsi,mvhhi,srl,chsi,lgfr,lrvg,cly,sgrk,ahi,celgbr,nill,clgdbr,jg,slrk,lxr,sar,slfi,cpsdr,lcgfr,aghik,nilh,mvhi,lpdfr,xy,alrk,lao,agsi,ldy,nilf,llhr,alfi,laog,sly,aghi,ldebr,bras,srda,cefbr,lt,fiebra,fidbra,fixbra,fidtr,fixtr")) "nothing")
+       (eq_attr "mnemonic" "ltg,ogrk,lr,lghrl,x,asi,lhr,ar,lhrl,llgfr,clghrl,cgr,cli,agrk,ic,lrv,clg,cy,cghi,sy,clgfr,al,tm,lang,lghr,laa,ark,lh,or,icy,xi,n,llihl,afi,cs,nrk,sth,lgr,l,lcr,stey,xg,crt,slgfr,ny,ld,j,llihh,slgr,clfhsi,slg,lb,lgrl,lrl,llihf,llcr,laxg,mvghi,rllg,xrk,laag,alhsik,algfi,algr,aly,agfi,lrvr,d,crl,llgc,tmhl,algsi,lgh,icmh,clhrl,xgrk,icm,iilf,ork,cg,ldgr,lgf,iihf,llghr,sg,stam,tmhh,slgf,basr,lgb,cgfi,lax,clfit,lrvgr,nihl,ni,srdl,srk,xihf,stgrl,sthrl,algf,cgit,ng,lat,llghrl,ltgr,nihh,clgfrl,srlk,agr,ler,bcr_flush,stcy,cds,clfi,nihf,ly,clt,lgat,alg,lhy,lgfrl,clghsi,clrt,tmll,srlg,ay,sty,clr,lgfi,lan,clgt,ahik,sra,algrk,clgr,tmy,tmlh,alghsik,lcgr,mvi,ltgf,xr,larl,ldr,llgcr,clgrt,clrl,cghsi,cliy,oy,ogr,llgt,slr,chi,s,icmy,llc,ngr,clhhsi,ltgfr,llill,lhi,o,sll,clgrl,clgf,mviy,algfr,rll,sldl,lg,niy,st,sgr,ag,le,xgr,cr,stg,llilh,sr,cdsg,sllk,stoc,csg,clgit,chhsi,strl,llilf,lndfr,ngrk,clgfi,llgh,oill,la,llhrl,stc,lghi,oihl,xiy,sllg,llgf,cgrt,cl,sl,oi,oilh,nr,srak,oihh,ear,slgrk,og,c,slgfi,sthy,oilf,oiy,oihf,a,cfi,srag,brasl,alr,cgrl,llgfrl,cit,ley,exrl,lcdfr,lay,xilf,alsi,mvhhi,srl,chsi,lgfr,lrvg,cly,sgrk,ahi,nill,jg,slrk,lxr,sar,slfi,cpsdr,lcgfr,aghik,nilh,mvhi,lpdfr,xy,alrk,lao,agsi,ldy,nilf,llhr,alfi,laog,sly,aghi,bras,srda,lt,lbr,lzxr,lzdr,lzer")) "nothing")
+
+(define_insn_reservation "zEC12_simple_fp" 1
+  (and (eq_attr "cpu" "zEC12")
+       (eq_attr "mnemonic" "lnebr,sdbr,sebr,clfxtr,adbr,aebr,celfbr,clfebr,lpebr,msebr,lndbr,clfdbr,llgtr,cebr,lgbr,maebr,ltebr,clfdtr,ltr,cdlgbr,cxlftr,lpdbr,cdfbr,lcebr,clfxbr,msdbr,cdbr,madbr,meebr,clgxbr,clgdtr,ledbr,cegbr,cdlftr,cdlgtr,mdbr,clgebr,ltdbr,cdlfbr,cdgbr,clgxtr,lcdbr,celgbr,clgdbr,ldebr,cefbr,fidtr,fixtr,madb,msdb,mseb,fiebra,fidbra,fixbra,aeb,mdb,seb,cdb,tcdb,sdb,adb,tceb,maeb,ceb,meeb,ldeb")) "nothing")
 
 (define_insn_reservation "zEC12_cgdbr" 2
   (and (eq_attr "cpu" "zEC12")
index 866de85..8cae9ba 100644 (file)
@@ -436,24 +436,9 @@ struct GTY(()) machine_function
    bytes on a z10 (or higher) CPU.  */
 #define PREDICT_DISTANCE (TARGET_Z10 ? 384 : 2048)
 
-static const int s390_hotpatch_trampoline_halfwords_default = 12;
-static const int s390_hotpatch_trampoline_halfwords_max = 1000000;
-static int s390_hotpatch_trampoline_halfwords = -1;
-
-/* Return the argument of the given hotpatch attribute or the default value if
-   no argument is present.  */
-
-static inline int
-get_hotpatch_attribute (tree hotpatch_attr)
-{
-  const_tree args;
-
-  args = TREE_VALUE (hotpatch_attr);
-
-  return (args) ?
-    TREE_INT_CST_LOW (TREE_VALUE (args)):
-    s390_hotpatch_trampoline_halfwords_default;
-}
+static const int s390_hotpatch_hw_max = 1000000;
+static int s390_hotpatch_hw_before_label = 0;
+static int s390_hotpatch_hw_after_label = 0;
 
 /* Check whether the hotpatch attribute is applied to a function and, if it has
    an argument, the argument is valid.  */
@@ -462,34 +447,48 @@ static tree
 s390_handle_hotpatch_attribute (tree *node, tree name, tree args,
                                int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
 {
+  tree expr;
+  tree expr2;
+  int err;
+
   if (TREE_CODE (*node) != FUNCTION_DECL)
     {
       warning (OPT_Wattributes, "%qE attribute only applies to functions",
               name);
       *no_add_attrs = true;
     }
-  else if (args)
+  if (args != NULL && TREE_CHAIN (args) != NULL)
+    {
+      expr = TREE_VALUE (args);
+      expr2 = TREE_VALUE (TREE_CHAIN (args));
+    }
+  if (args == NULL || TREE_CHAIN (args) == NULL)
+    err = 1;
+  else if (TREE_CODE (expr) != INTEGER_CST
+          || !INTEGRAL_TYPE_P (TREE_TYPE (expr))
+          || TREE_INT_CST_HIGH (expr) != 0
+          || TREE_INT_CST_LOW (expr) > (unsigned int)s390_hotpatch_hw_max)
+    err = 1;
+  else if (TREE_CODE (expr2) != INTEGER_CST
+          || !INTEGRAL_TYPE_P (TREE_TYPE (expr2))
+          || TREE_INT_CST_HIGH (expr2) != 0
+          || TREE_INT_CST_LOW (expr2) > (unsigned int)s390_hotpatch_hw_max)
+    err = 1;
+  else
+    err = 0;
+  if (err)
     {
-      tree expr = TREE_VALUE (args);
-
-      if (TREE_CODE (expr) != INTEGER_CST
-         || !INTEGRAL_TYPE_P (TREE_TYPE (expr))
-         || TREE_INT_CST_HIGH (expr) != 0
-         || TREE_INT_CST_LOW (expr) > (unsigned int)
-         s390_hotpatch_trampoline_halfwords_max)
-       {
-         error ("requested %qE attribute is not a non-negative integer"
-                " constant or too large (max. %d)", name,
-                s390_hotpatch_trampoline_halfwords_max);
-         *no_add_attrs = true;
-       }
+      error ("requested %qE attribute is not a comma separated pair of"
+            " non-negative integer constants or too large (max. %d)", name,
+            s390_hotpatch_hw_max);
+      *no_add_attrs = true;
     }
 
   return NULL_TREE;
 }
 
 static const struct attribute_spec s390_attribute_table[] = {
-  { "hotpatch", 0, 1, true, false, false, s390_handle_hotpatch_attribute, false
+  { "hotpatch", 2, 2, true, false, false, s390_handle_hotpatch_attribute, false
   },
   /* End element.  */
   { NULL,        0, 0, false, false, false, NULL, false }
@@ -2384,16 +2383,29 @@ s390_float_const_zero_p (rtx value)
 /* Implement TARGET_REGISTER_MOVE_COST.  */
 
 static int
-s390_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED,
+s390_register_move_cost (enum machine_mode mode,
                          reg_class_t from, reg_class_t to)
 {
-  /* On s390, copy between fprs and gprs is expensive as long as no
-     ldgr/lgdr can be used.  */
-  if ((!TARGET_Z10 || GET_MODE_SIZE (mode) != 8)
-      && ((reg_classes_intersect_p (from, GENERAL_REGS)
-          && reg_classes_intersect_p (to, FP_REGS))
-         || (reg_classes_intersect_p (from, FP_REGS)
-             && reg_classes_intersect_p (to, GENERAL_REGS))))
+  /* On s390, copy between fprs and gprs is expensive.  */
+
+  /* It becomes somewhat faster having ldgr/lgdr.  */
+  if (TARGET_Z10 && GET_MODE_SIZE (mode) == 8)
+    {
+      /* ldgr is single cycle. */
+      if (reg_classes_intersect_p (from, GENERAL_REGS)
+         && reg_classes_intersect_p (to, FP_REGS))
+       return 1;
+      /* lgdr needs 3 cycles. */
+      if (reg_classes_intersect_p (to, GENERAL_REGS)
+         && reg_classes_intersect_p (from, FP_REGS))
+       return 3;
+    }
+
+  /* Otherwise copying is done via memory.  */
+  if ((reg_classes_intersect_p (from, GENERAL_REGS)
+       && reg_classes_intersect_p (to, FP_REGS))
+      || (reg_classes_intersect_p (from, FP_REGS)
+         && reg_classes_intersect_p (to, GENERAL_REGS)))
     return 10;
 
   return 1;
@@ -2406,7 +2418,7 @@ s390_memory_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED,
                       reg_class_t rclass ATTRIBUTE_UNUSED,
                       bool in ATTRIBUTE_UNUSED)
 {
-  return 1;
+  return 2;
 }
 
 /* Compute a (partial) cost for rtx X.  Return true if the complete
@@ -5241,53 +5253,35 @@ get_some_local_dynamic_name (void)
   gcc_unreachable ();
 }
 
-/* Returns -1 if the function should not be made hotpatchable.  Otherwise it
-   returns a number >= 0 that is the desired size of the hotpatch trampoline
-   in halfwords. */
+/* Assigns the number of NOP halfwords to be emitted before and after the
+   function label to *HW_BEFORE and *HW_AFTER.  Both pointers must not be NULL.
+   If hotpatching is disabled for the function, the values are set to zero.
+*/
 
-static int s390_function_num_hotpatch_trampoline_halfwords (tree decl,
-                                                           bool do_warn)
+static void
+s390_function_num_hotpatch_hw (tree decl,
+                              int *hw_before,
+                              int *hw_after)
 {
   tree attr;
 
-  if (DECL_DECLARED_INLINE_P (decl)
-      || DECL_ARTIFICIAL (decl)
-      || MAIN_NAME_P (DECL_NAME (decl)))
+  attr = lookup_attribute ("hotpatch", DECL_ATTRIBUTES (decl));
+
+  if (attr)
     {
-      /* - Explicitly inlined functions cannot be hotpatched.
-        - Artificial functions need not be hotpatched.
-        - Making the main function hotpatchable is useless. */
-      return -1;
+      tree args = TREE_VALUE (attr);
+
+      /* If the hotpatch attribute is present, its values are used even if the
+        -mhotpatch cmdline option is used.  */
+      *hw_before = TREE_INT_CST_LOW (TREE_VALUE (args));
+      *hw_after = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args)));
     }
-  attr = lookup_attribute ("hotpatch", DECL_ATTRIBUTES (decl));
-  if (attr || s390_hotpatch_trampoline_halfwords >= 0)
+  else
     {
-      if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (decl)))
-       {
-         if (do_warn)
-           warning (OPT_Wattributes, "function %qE with the %qs attribute"
-                    " is not hotpatchable", DECL_NAME (decl), "always_inline");
-         return -1;
-       }
-      else
-       {
-         return (attr) ?
-           get_hotpatch_attribute (attr) : s390_hotpatch_trampoline_halfwords;
-       }
+      /* Values specified by the -mhotpatch cmdline option.  */
+      *hw_before = s390_hotpatch_hw_before_label;
+      *hw_after = s390_hotpatch_hw_after_label;
     }
-
-  return -1;
-}
-
-/* Hook to determine if one function can safely inline another.  */
-
-static bool
-s390_can_inline_p (tree caller, tree callee)
-{
-  if (s390_function_num_hotpatch_trampoline_halfwords (callee, false) >= 0)
-    return false;
-
-  return default_target_can_inline_p (caller, callee);
 }
 
 /* Write the extra assembler code needed to declare a function properly.  */
@@ -5296,44 +5290,46 @@ void
 s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
                                tree decl)
 {
-  int hotpatch_trampoline_halfwords = -1;
-
-  if (decl)
-    {
-      hotpatch_trampoline_halfwords =
-       s390_function_num_hotpatch_trampoline_halfwords (decl, true);
-      if (hotpatch_trampoline_halfwords >= 0
-         && decl_function_context (decl) != NULL_TREE)
-       {
-         warning_at (DECL_SOURCE_LOCATION (decl), OPT_mhotpatch,
-                     "hotpatching is not compatible with nested functions");
-         hotpatch_trampoline_halfwords = -1;
-       }
-    }
+  int hw_before, hw_after;
 
-  if (hotpatch_trampoline_halfwords > 0)
+  s390_function_num_hotpatch_hw (decl, &hw_before, &hw_after);
+  if (hw_before > 0)
     {
+      unsigned int function_alignment;
       int i;
 
-      /* Add trampoline code area before the function label and initialize it
-        with two-byte nop instructions.  This area can be overwritten with code
+      /* Add trampoline code area before the function label and initialize it
+        with two-byte NOP instructions.  This area can be overwritten with code
         that jumps to a patched version of the function.  */
-      for (i = 0; i < hotpatch_trampoline_halfwords; i++)
-       asm_fprintf (asm_out_file, "\tnopr\t%%r7\n");
+      asm_fprintf (asm_out_file, "\tnopr\t%%r7"
+                  "\t# pre-label NOPs for hotpatch (%d halfwords)\n",
+                  hw_before);
+      for (i = 1; i < hw_before; i++)
+       fputs ("\tnopr\t%r7\n", asm_out_file);
+
       /* Note:  The function label must be aligned so that (a) the bytes of the
-        following nop do not cross a cacheline boundary, and (b) a jump address
+        following NOP do not cross a cacheline boundary, and (b) a jump address
         (eight bytes for 64 bit targets, 4 bytes for 32 bit targets) can be
         stored directly before the label without crossing a cacheline
         boundary.  All this is necessary to make sure the trampoline code can
-        be changed atomically.  */
+        be changed atomically.
+        This alignment is done automatically using the FOUNCTION_BOUNDARY
+        macro, but if there are NOPs before the function label, the alignment
+        is placed before them.  So it is necessary to duplicate the alignment
+        after the NOPs.  */
+      function_alignment = MAX (8, DECL_ALIGN (decl) / BITS_PER_UNIT);
+      if (! DECL_USER_ALIGN (decl))
+       function_alignment = MAX (function_alignment,
+                                 (unsigned int) align_functions);
+      fputs ("\t# alignment for hotpatch\n", asm_out_file);
+      ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (function_alignment));
     }
 
   ASM_OUTPUT_LABEL (asm_out_file, fname);
-
-  /* Output a four-byte nop if hotpatching is enabled.  This can be overwritten
-     atomically with a relative backwards jump to the trampoline area.  */
-  if (hotpatch_trampoline_halfwords >= 0)
-    asm_fprintf (asm_out_file, "\tnop\t0\n");
+  if (hw_after > 0)
+    asm_fprintf (asm_out_file,
+                "\t# post-label NOPs for hotpatch (%d halfwords)\n",
+                hw_after);
 }
 
 /* Output machine-dependent UNSPECs occurring in address constant X
@@ -5907,8 +5903,12 @@ s390_issue_rate (void)
     case PROCESSOR_2817_Z196:
       return 3;
     case PROCESSOR_2097_Z10:
-    case PROCESSOR_2827_ZEC12:
       return 2;
+      /* Starting with EC12 we use the sched_reorder hook to take care
+        of instruction dispatch constraints.  The algorithm only
+        picks the best instruction and assumes only a single
+        instruction gets issued per cycle.  */
+    case PROCESSOR_2827_ZEC12:
     default:
       return 1;
     }
@@ -11311,6 +11311,7 @@ static void
 s390_reorg (void)
 {
   bool pool_overflow = false;
+  int hw_before, hw_after;
 
   /* Make sure all splits have been performed; splits after
      machine_dependent_reorg might confuse insn length counts.  */
@@ -11445,6 +11446,46 @@ s390_reorg (void)
       if (insn_added_p)
        shorten_branches (get_insns ());
     }
+
+  s390_function_num_hotpatch_hw (current_function_decl, &hw_before, &hw_after);
+  if (hw_after > 0)
+    {
+      rtx insn;
+
+      /* Insert NOPs for hotpatching. */
+      for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
+       /* Emit NOPs
+           1. inside the area covered by debug information to allow setting
+              breakpoints at the NOPs,
+           2. before any insn which results in an asm instruction,
+           3. before in-function labels to avoid jumping to the NOPs, for
+              example as part of a loop,
+           4. before any barrier in case the function is completely empty
+              (__builtin_unreachable ()) and has neither internal labels nor
+              active insns.
+       */
+       if (active_insn_p (insn) || BARRIER_P (insn) || LABEL_P (insn))
+         break;
+      /* Output a series of NOPs before the first active insn.  */
+      while (insn && hw_after > 0)
+       {
+         if (hw_after >= 3 && TARGET_CPU_ZARCH)
+           {
+             emit_insn_before (gen_nop_6_byte (), insn);
+             hw_after -= 3;
+           }
+         else if (hw_after >= 2)
+           {
+             emit_insn_before (gen_nop_4_byte (), insn);
+             hw_after -= 2;
+           }
+         else
+           {
+             emit_insn_before (gen_nop_2_byte (), insn);
+             hw_after -= 1;
+           }
+       }
+    }
 }
 
 /* Return true if INSN is a fp load insn writing register REGNO.  */
@@ -11850,29 +11891,44 @@ s390_option_override (void)
       {
        switch (opt->opt_index)
          {
-         case OPT_mhotpatch:
-           s390_hotpatch_trampoline_halfwords = (opt->value) ?
-             s390_hotpatch_trampoline_halfwords_default : -1;
-           break;
          case OPT_mhotpatch_:
            {
-             int val;
-
-             val = integral_argument (opt->arg);
-             if (val == -1)
+             int val1;
+             int val2;
+             char s[256];
+             char *t;
+
+             strncpy (s, opt->arg, 256);
+             s[255] = 0;
+             t = strchr (s, ',');
+             if (t != NULL)
+               {
+                 *t = 0;
+                 t++;
+                 val1 = integral_argument (s);
+                 val2 = integral_argument (t);
+               }
+             else
+               {
+                 val1 = -1;
+                 val2 = -1;
+               }
+             if (val1 == -1 || val2 == -1)
                {
                  /* argument is not a plain number */
-                 error ("argument to %qs should be a non-negative integer",
-                        "-mhotpatch=");
+                 error ("arguments to %qs should be non-negative integers",
+                        "-mhotpatch=n,m");
                  break;
                }
-             else if (val > s390_hotpatch_trampoline_halfwords_max)
+             else if (val1 > s390_hotpatch_hw_max
+                      || val2 > s390_hotpatch_hw_max)
                {
                  error ("argument to %qs is too large (max. %d)",
-                        "-mhotpatch=", s390_hotpatch_trampoline_halfwords_max);
+                        "-mhotpatch=n,m", s390_hotpatch_hw_max);
                  break;
                }
-             s390_hotpatch_trampoline_halfwords = val;
+             s390_hotpatch_hw_before_label = val1;
+             s390_hotpatch_hw_after_label = val2;
              break;
            }
          default:
@@ -12242,8 +12298,8 @@ s390_option_override (void)
 #undef TARGET_ATTRIBUTE_TABLE
 #define TARGET_ATTRIBUTE_TABLE s390_attribute_table
 
-#undef TARGET_CAN_INLINE_P
-#define TARGET_CAN_INLINE_P s390_can_inline_p
+#undef TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P
+#define TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P hook_bool_const_tree_true
 
 #undef TARGET_SET_UP_BY_PROLOGUE
 #define TARGET_SET_UP_BY_PROLOGUE s300_set_up_by_prologue
index b17c1fa..986b0c6 100644 (file)
    UNSPECV_CAS
    UNSPECV_ATOMIC_OP
 
+   ; Hotpatching (unremovable NOPs)
+   UNSPECV_NOP_2_BYTE
+   UNSPECV_NOP_4_BYTE
+   UNSPECV_NOP_6_BYTE
+
    ; Transactional Execution support
    UNSPECV_TBEGIN
    UNSPECV_TBEGIN_TDB
 ;; This iterator and attribute allow to combine most atomic operations.
 (define_code_iterator ATOMIC [and ior xor plus minus mult])
 (define_code_iterator ATOMIC_Z196 [and ior xor plus])
-(define_code_attr atomic [(and "and") (ior "ior") (xor "xor")
+(define_code_attr atomic [(and "and") (ior "or") (xor "xor")
                          (plus "add") (minus "sub") (mult "nand")])
 (define_code_attr noxa [(and "n") (ior "o") (xor "x") (plus "a")])
 
   "lr\t1,1"
   [(set_attr "op_type" "RR")])
 
+;;- Undeletable nops (used for hotpatching)
+
+(define_insn "nop_2_byte"
+  [(unspec_volatile [(const_int 0)] UNSPECV_NOP_2_BYTE)]
+  ""
+  "nopr\t%%r7"
+  [(set_attr "op_type" "RR")])
+
+(define_insn "nop_4_byte"
+  [(unspec_volatile [(const_int 0)] UNSPECV_NOP_4_BYTE)]
+  ""
+  "nop\t0"
+  [(set_attr "op_type" "RX")])
+
+(define_insn "nop_6_byte"
+  [(unspec_volatile [(const_int 0)] UNSPECV_NOP_6_BYTE)]
+  "TARGET_CPU_ZARCH"
+  "brcl\t0, 0"
+  [(set_attr "op_type" "RIL")])
+
 
 ;
 ; Special literal pool access instruction pattern(s).
index 7780f87..c4b5269 100644 (file)
@@ -96,13 +96,15 @@ mhard-float
 Target Report RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT)
 Enable hardware floating point
 
-mhotpatch
-Target Report Var(s390_deferred_options) Defer
-Prepend the function label with 12 two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
-
 mhotpatch=
 Target RejectNegative Report Joined Var(s390_deferred_options) Defer
-Prepend the function label with the given number of two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
+Takes two non-negative integer numbers separated by a comma.
+Prepend the function label with the number of two-byte Nop
+instructions indicated by the first.  Append Nop instructions
+covering the number of halfwords indicated by the second after the
+label.  Nop instructions of the largest possible size are used
+(six, four or two bytes), beginning with the largest possible
+size.  Using 0 for both values disables hotpatching.
 
 mlong-double-128
 Target Report RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128)
index 45af23a..e5ef165 100644 (file)
@@ -1,5 +1,5 @@
 /* Helper routines for memory move and comparison insns.
-   Copyright (C) 2013-2014 Free Software Foundation, Inc.
+   Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -226,7 +226,7 @@ sh_expand_cmpstr (rtx *operands)
   emit_move_insn (tmp3, addr2);
   emit_move_insn (s2_addr, plus_constant (Pmode, s2_addr, 4));
 
-  /*start long loop.  */
+  /* start long loop.  */
   emit_label (L_loop_long);
 
   emit_move_insn (tmp2, tmp3);
@@ -335,7 +335,7 @@ sh_expand_cmpnstr (rtx *operands)
   rtx len = force_reg (SImode, operands[3]);
   int constp = CONST_INT_P (operands[3]);
 
-  /* Loop on a register count. */
+  /* Loop on a register count.  */
   if (constp)
     {
       rtx tmp0 = gen_reg_rtx (SImode);
@@ -364,7 +364,7 @@ sh_expand_cmpnstr (rtx *operands)
               add_int_reg_note (jump, REG_BR_PROB, prob_likely);
             }
 
-          /* word count. Do we have iterations ? */
+          /* word count. Do we have iterations ?  */
           emit_insn (gen_lshrsi3 (lenw, len, GEN_INT (2)));
 
           /*start long loop.  */
@@ -407,6 +407,7 @@ sh_expand_cmpnstr (rtx *operands)
           /* end loop.  Reached max iterations.  */
           if (! sbytes)
             {
+              emit_insn (gen_subsi3 (operands[0], tmp1, tmp2));
               jump = emit_jump_insn (gen_jump_compact (L_return));
               emit_barrier_after (jump);
             }
@@ -482,6 +483,13 @@ sh_expand_cmpnstr (rtx *operands)
       jump = emit_jump_insn (gen_jump_compact( L_end_loop_byte));
       emit_barrier_after (jump);
     }
+  else
+    {
+      emit_insn (gen_cmpeqsi_t (len, const0_rtx));
+      emit_move_insn (operands[0], const0_rtx);
+      jump = emit_jump_insn (gen_branch_true (L_return));
+      add_int_reg_note (jump, REG_BR_PROB, prob_unlikely);
+    }
 
   addr1 = adjust_automodify_address (addr1, QImode, s1_addr, 0);
   addr2 = adjust_automodify_address (addr2, QImode, s2_addr, 0);
@@ -522,14 +530,14 @@ sh_expand_cmpnstr (rtx *operands)
     emit_insn (gen_zero_extendqisi2 (tmp2, gen_lowpart (QImode, tmp2)));
   emit_insn (gen_zero_extendqisi2 (tmp1, gen_lowpart (QImode, tmp1)));
 
-  emit_label (L_return);
-
   emit_insn (gen_subsi3 (operands[0], tmp1, tmp2));
 
+  emit_label (L_return);
+
   return true;
 }
 
-/* Emit code to perform a strlen
+/* Emit code to perform a strlen.
 
    OPERANDS[0] is the destination.
    OPERANDS[1] is the string.
@@ -568,7 +576,7 @@ sh_expand_strlen (rtx *operands)
 
   addr1 = adjust_automodify_address (addr1, SImode, current_addr, 0);
 
-  /*start long loop.  */
+  /* start long loop.  */
   emit_label (L_loop_long);
 
   /* tmp1 is aligned, OK to load.  */
index defc76a..44a045f 100644 (file)
@@ -221,7 +221,6 @@ extern void sh_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree,
                                     signed int, enum machine_mode);
 extern rtx sh_dwarf_register_span (rtx);
 
-extern rtx replace_n_hard_rtx (rtx, rtx *, int , int);
 extern int shmedia_cleanup_truncate (rtx *, void *);
 
 extern bool sh_contains_memref_p (rtx);
index 3d4553a..f247428 100644 (file)
@@ -2957,7 +2957,7 @@ enum
 struct ashl_lshr_sequence
 {
   char insn_count;
-  char amount[6];
+  signed char amount[6];
   char clobbers_t;
 };
 
@@ -12749,146 +12749,6 @@ sh_init_cumulative_args (CUMULATIVE_ARGS *  pcum,
     }
 }
 
-/* Replace any occurrence of FROM(n) in X with TO(n).  The function does
-   not enter into CONST_DOUBLE for the replace.
-
-   Note that copying is not done so X must not be shared unless all copies
-   are to be modified.
-
-   This is like replace_rtx, except that we operate on N_REPLACEMENTS
-   replacements simultaneously - FROM(n) is replacements[n*2] and to(n) is
-   replacements[n*2+1] - and that we take mode changes into account.
-
-   If a replacement is ambiguous, return NULL_RTX.
-
-   If MODIFY is zero, don't modify any rtl in place,
-   just return zero or nonzero for failure / success.  */
-rtx
-replace_n_hard_rtx (rtx x, rtx *replacements, int n_replacements, int modify)
-{
-  int i, j;
-  const char *fmt;
-
-  /* The following prevents loops occurrence when we change MEM in
-     CONST_DOUBLE onto the same CONST_DOUBLE.  */
-  if (x != NULL_RTX && GET_CODE (x) == CONST_DOUBLE)
-    return x;
-
-  for (i = n_replacements - 1; i >= 0 ; i--)
-  if (x == replacements[i*2] && GET_MODE (x) == GET_MODE (replacements[i*2+1]))
-    return replacements[i*2+1];
-
-  /* Allow this function to make replacements in EXPR_LISTs.  */
-  if (x == NULL_RTX)
-    return NULL_RTX;
-
-  if (GET_CODE (x) == SUBREG)
-    {
-      rtx new_rtx = replace_n_hard_rtx (SUBREG_REG (x), replacements,
-                                   n_replacements, modify);
-
-      if (CONST_INT_P (new_rtx))
-       {
-         x = simplify_subreg (GET_MODE (x), new_rtx,
-                              GET_MODE (SUBREG_REG (x)),
-                              SUBREG_BYTE (x));
-         if (! x)
-           abort ();
-       }
-      else if (modify)
-       SUBREG_REG (x) = new_rtx;
-
-      return x;
-    }
-  else if (REG_P (x))
-    {
-      unsigned regno = REGNO (x);
-      unsigned nregs = (regno < FIRST_PSEUDO_REGISTER
-                       ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
-      rtx result = NULL_RTX;
-
-      for (i = n_replacements - 1; i >= 0; i--)
-       {
-         rtx from = replacements[i*2];
-         rtx to = replacements[i*2+1];
-         unsigned from_regno, from_nregs, to_regno, new_regno;
-
-         if (!REG_P (from))
-           continue;
-         from_regno = REGNO (from);
-         from_nregs = (from_regno < FIRST_PSEUDO_REGISTER
-                       ? HARD_REGNO_NREGS (from_regno, GET_MODE (from)) : 1);
-         if (regno < from_regno + from_nregs && regno + nregs > from_regno)
-           {
-             if (regno < from_regno
-                 || regno + nregs > from_regno + nregs
-                 || !REG_P (to)
-                 || result)
-               return NULL_RTX;
-             to_regno = REGNO (to);
-             if (to_regno < FIRST_PSEUDO_REGISTER)
-               {
-                 new_regno = regno + to_regno - from_regno;
-                 if ((unsigned) HARD_REGNO_NREGS (new_regno, GET_MODE (x))
-                     != nregs)
-                   return NULL_RTX;
-                 result = gen_rtx_REG (GET_MODE (x), new_regno);
-               }
-             else if (GET_MODE (x) <= GET_MODE (to))
-               result = gen_lowpart_common (GET_MODE (x), to);
-             else
-               result = gen_lowpart_SUBREG (GET_MODE (x), to);
-           }
-       }
-      return result ? result : x;
-    }
-  else if (GET_CODE (x) == ZERO_EXTEND)
-    {
-      rtx new_rtx = replace_n_hard_rtx (XEXP (x, 0), replacements,
-                                   n_replacements, modify);
-
-      if (CONST_INT_P (new_rtx))
-       {
-         x = simplify_unary_operation (ZERO_EXTEND, GET_MODE (x),
-                                       new_rtx, GET_MODE (XEXP (x, 0)));
-         if (! x)
-           abort ();
-       }
-      else if (modify)
-       XEXP (x, 0) = new_rtx;
-
-      return x;
-    }
-
-  fmt = GET_RTX_FORMAT (GET_CODE (x));
-  for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
-    {
-      rtx new_rtx;
-
-      if (fmt[i] == 'e')
-       {
-         new_rtx = replace_n_hard_rtx (XEXP (x, i), replacements,
-                                   n_replacements, modify);
-         if (!new_rtx)
-           return NULL_RTX;
-         if (modify)
-           XEXP (x, i) = new_rtx;
-       }
-      else if (fmt[i] == 'E')
-       for (j = XVECLEN (x, i) - 1; j >= 0; j--)
-         {
-           new_rtx = replace_n_hard_rtx (XVECEXP (x, i, j), replacements,
-                                     n_replacements, modify);
-         if (!new_rtx)
-           return NULL_RTX;
-           if (modify)
-             XVECEXP (x, i, j) = new_rtx;
-         }
-    }
-
-  return x;
-}
-
 rtx
 sh_gen_truncate (enum machine_mode mode, rtx x, int need_sign_ext)
 {
index 7978be4..a0688e6 100644 (file)
   "tst #255,%0"
   [(set_attr "type" "mt_group")])
 
-;; This pattern might be risky because it also tests the upper bits and not
-;; only the subreg.  However, it seems that combine will get to this only
-;; when testing sign/zero extended values.  In this case the extended upper
-;; bits do not matter.
-(define_insn "*tst<mode>_t_zero"
-  [(set (reg:SI T_REG)
-       (eq:SI
-         (subreg:QIHI
-           (and:SI (match_operand:SI 0 "arith_reg_operand" "%r")
-                   (match_operand:SI 1 "arith_reg_operand" "r")) <lowpart_le>)
-         (const_int 0)))]
-  "TARGET_SH1 && TARGET_LITTLE_ENDIAN"
-  "tst %0,%1"
-  [(set_attr "type" "mt_group")])
-
-(define_insn "*tst<mode>_t_zero"
-  [(set (reg:SI T_REG)
-       (eq:SI
-         (subreg:QIHI
-           (and:SI (match_operand:SI 0 "arith_reg_operand" "%r")
-                   (match_operand:SI 1 "arith_reg_operand" "r")) <lowpart_be>)
-         (const_int 0)))]
-  "TARGET_SH1 && TARGET_BIG_ENDIAN"
-  "tst %0,%1"
-  [(set_attr "type" "mt_group")])
-
 ;; Extract LSB, negate and store in T bit.
 (define_insn "tstsi_t_and_not"
   [(set (reg:SI T_REG)
   replace_rtx (operands[4], operands[0], operands[1]);
 })
 
-(define_peephole2
-  [(set (match_operand 0 "any_register_operand" "")
-       (match_operand 1 "any_register_operand" ""))
-   (set (match_operand 2 "any_register_operand" "") (match_operand 3 "" ""))
-   (set (match_operand 4 "" "") (match_operand 5 "" ""))]
-  "(HARD_REGNO_NREGS (REGNO (operands[0]), GET_MODE (operands[2]))
-    <= HARD_REGNO_NREGS (REGNO (operands[0]), GET_MODE (operands[0])))
-   && peep2_reg_dead_p (3, operands[0]) && peep2_reg_dead_p (3, operands[2])
-   && ! FIND_REG_INC_NOTE (peep2_next_insn (2), operands[0])
-   && ! FIND_REG_INC_NOTE (peep2_next_insn (2), operands[2])
-   && ! reg_overlap_mentioned_p (operands[0], operands[3])
-   && ! reg_overlap_mentioned_p (operands[2], operands[0])
-   && ! reg_overlap_mentioned_p (operands[0], operands[1])
-   && (REGNO_REG_CLASS (REGNO (operands[0]))
-       == REGNO_REG_CLASS (REGNO (operands[2])))
-   && (REGNO_REG_CLASS (REGNO (operands[1]))
-       == REGNO_REG_CLASS (REGNO (operands[0])))"
-  [(set (match_dup 0) (match_dup 3))
-   (set (match_dup 4) (match_dup 5))]
-{
-  rtx set1, set2, insn2;
-  rtx replacements[4];
-
-  /* We want to replace occurrences of operands[0] with operands[1] and
-     operands[2] with operands[0] in operands[4]/operands[5].
-     Doing just two replace_rtx calls naively would result in the second
-     replacement undoing all that the first did if operands[1] and operands[2]
-     are identical, so we must do this simultaneously.  */
-  replacements[0] = operands[0];
-  replacements[1] = operands[1];
-  replacements[2] = operands[2];
-  replacements[3] = operands[0];
-  if (!replace_n_hard_rtx (operands[5], replacements, 2, 0)
-      || !replace_n_hard_rtx (operands[4], replacements, 2, 0)
-      || !replace_n_hard_rtx (operands[2], replacements, 2, 0))
-    FAIL;
-
-  operands[5] = replace_n_hard_rtx (operands[5], replacements, 2, 1);
-  replace_n_hard_rtx (operands[4], replacements, 2, 1);
-  operands[2] = replace_n_hard_rtx (operands[2], replacements, 2, 1);
-  /* The operands array is aliased to recog_data.operand, which gets
-     clobbered by extract_insn, so finish with it now.  */
-  set1 = gen_rtx_SET (VOIDmode, operands[2], operands[3]);
-  set2 = gen_rtx_SET (VOIDmode, operands[4], operands[5]);
-  /* ??? The last insn might be a jump insn, but the generic peephole2 code
-     always uses emit_insn.  */
-  /* Check that we don't violate matching constraints or earlyclobbers.  */
-  extract_insn (emit_insn (set1));
-  if (! constrain_operands (1))
-    goto failure;
-  insn2 = emit (set2);
-  if (GET_CODE (insn2) == BARRIER)
-    goto failure;
-  extract_insn (insn2);
-  if (! constrain_operands (1))
-    {
-      rtx tmp;
-    failure:
-      tmp = replacements[0];
-      replacements[0] = replacements[1];
-      replacements[1] = tmp;
-      tmp = replacements[2];
-      replacements[2] = replacements[3];
-      replacements[3] = tmp;
-      replace_n_hard_rtx (SET_DEST (set1), replacements, 2, 1);
-      replace_n_hard_rtx (SET_DEST (set2), replacements, 2, 1);
-      replace_n_hard_rtx (SET_SRC (set2), replacements, 2, 1);
-      FAIL;
-    }
-  DONE;
-})
-
 ;; The register allocator is rather clumsy in handling multi-way conditional
 ;; moves, so allow the combiner to make them, and we split them up after
 ;; reload.  */
@@ -5847,7 +5749,7 @@ label:
 (define_insn "swapbsi2"
   [(set (match_operand:SI 0 "arith_reg_dest" "=r")
        (ior:SI (and:SI (match_operand:SI 1 "arith_reg_operand" "r")
-                       (const_int 4294901760))
+                       (const_int -65536)) ;; 0xFFFF0000
                (ior:SI (and:SI (ashift:SI (match_dup 1) (const_int 8))
                                (const_int 65280))
                        (and:SI (ashiftrt:SI (match_dup 1) (const_int 8))
@@ -5915,7 +5817,7 @@ label:
 (define_peephole2
   [(set (match_operand:SI 0 "arith_reg_dest" "")
        (ior:SI (and:SI (match_operand:SI 1 "arith_reg_operand" "")
-                       (const_int 4294901760))
+                       (const_int -65536)) ;; 0xFFFF0000
                (ior:SI (and:SI (ashift:SI (match_dup 1) (const_int 8))
                                (const_int 65280))
                        (and:SI (ashiftrt:SI (match_dup 1) (const_int 8))
@@ -5925,7 +5827,7 @@ label:
   "TARGET_SH1 && peep2_reg_dead_p (2, operands[0])"
   [(set (match_dup 2)
        (ior:SI (and:SI (match_operand:SI 1 "arith_reg_operand" "")
-                       (const_int 4294901760))
+                       (const_int -65536)) ;; 0xFFFF0000
                (ior:SI (and:SI (ashift:SI (match_dup 1) (const_int 8))
                                (const_int 65280))
                        (and:SI (ashiftrt:SI (match_dup 1) (const_int 8))
@@ -6331,10 +6233,9 @@ label:
 })
 
 (define_expand "extendqihi2"
-  [(set (match_operand:HI 0 "arith_reg_dest" "")
-       (sign_extend:HI (match_operand:QI 1 "arith_reg_operand" "")))]
-  ""
-  "")
+  [(set (match_operand:HI 0 "arith_reg_dest")
+       (sign_extend:HI (match_operand:QI 1 "arith_reg_operand")))]
+  "TARGET_SH1")
 
 (define_insn "*extendqihi2_compact_reg"
   [(set (match_operand:HI 0 "arith_reg_dest" "=r")
@@ -10237,10 +10138,25 @@ label:
   ""
 {
   rtx mem;
+  bool stack_chk_guard_p = false;
 
   operands[2] = !can_create_pseudo_p () ? operands[0] : gen_reg_rtx (Pmode);
   operands[3] = !can_create_pseudo_p () ? operands[0] : gen_reg_rtx (Pmode);
 
+  if (!TARGET_SHMEDIA
+      && flag_stack_protect
+      && GET_CODE (operands[1]) == CONST
+      && GET_CODE (XEXP (operands[1], 0)) == UNSPEC
+      && GET_CODE (XVECEXP (XEXP (operands[1], 0), 0, 0)) == SYMBOL_REF
+      && strcmp (XSTR (XVECEXP (XEXP (operands[1], 0), 0, 0), 0),
+                "__stack_chk_guard") == 0)
+    stack_chk_guard_p = true;
+
+  /* Use R0 to avoid long R0 liveness which stack-protector tends to
+     produce.  */
+  if (stack_chk_guard_p && ! reload_in_progress && ! reload_completed)
+    operands[2] = gen_rtx_REG (Pmode, R0_REG);
+
   if (TARGET_SHMEDIA)
     {
       rtx reg = operands[2];
@@ -10268,13 +10184,7 @@ label:
      insn to avoid combining (set A (plus rX r12)) and (set op0 (mem A))
      when rX is a GOT address for the guard symbol.  Ugly but doesn't
      matter because this is a rare situation.  */
-  if (!TARGET_SHMEDIA
-      && flag_stack_protect
-      && GET_CODE (operands[1]) == CONST
-      && GET_CODE (XEXP (operands[1], 0)) == UNSPEC
-      && GET_CODE (XVECEXP (XEXP (operands[1], 0), 0, 0)) == SYMBOL_REF
-      && strcmp (XSTR (XVECEXP (XEXP (operands[1], 0), 0, 0), 0),
-                "__stack_chk_guard") == 0)
+  if (stack_chk_guard_p)
     emit_insn (gen_chk_guard_add (operands[3], operands[2]));
   else
     emit_move_insn (operands[3], gen_rtx_PLUS (Pmode, operands[2],
index 313e5b5..3791cc7 100644 (file)
@@ -111,7 +111,7 @@ private:
   // Given a start insn and its basic block, recursively determine all
   // possible ccreg values in all basic block paths that can lead to the
   // start insn.
-  void find_last_ccreg_values (rtx start_insn, basic_block bb,
+  bool find_last_ccreg_values (rtx start_insn, basic_block bb,
                               std::vector<ccreg_value>& values_out,
                               std::vector<basic_block>& prev_visited_bb) const;
 
@@ -226,8 +226,8 @@ sh_optimize_sett_clrt::execute (void)
 
            ccreg_values.clear ();
            visited_bbs.clear ();
-           find_last_ccreg_values (PREV_INSN (i), bb, ccreg_values,
-                                   visited_bbs);
+           bool ok = find_last_ccreg_values (PREV_INSN (i), bb, ccreg_values,
+                                             visited_bbs);
 
            log_msg ("number of ccreg values collected: %u\n",
                     (unsigned int)ccreg_values.size ());
@@ -235,7 +235,7 @@ sh_optimize_sett_clrt::execute (void)
            // If all the collected values are equal and are equal to the
            // constant value of the setcc insn, the setcc insn can be
            // removed.
-           if (all_ccreg_values_equal (ccreg_values)
+           if (ok && all_ccreg_values_equal (ccreg_values)
                && rtx_equal_p (ccreg_values.front ().value, setcc_val))
              {
                log_msg ("all values are ");
@@ -309,7 +309,7 @@ sh_optimize_sett_clrt
     gcc_unreachable ();
 }
 
-void
+bool
 sh_optimize_sett_clrt
 ::find_last_ccreg_values (rtx start_insn, basic_block bb,
                          std::vector<ccreg_value>& values_out,
@@ -348,7 +348,7 @@ sh_optimize_sett_clrt
          log_msg ("\n");
 
          values_out.push_back (v);
-         return;
+         return true;
        }
 
       if (any_condjump_p (i) && onlyjump_p (i) && !prev_visited_bb.empty ())
@@ -372,7 +372,7 @@ sh_optimize_sett_clrt
          log_msg ("\n");
 
          values_out.push_back (v);
-         return;
+         return true;
        }
     }
 
@@ -393,10 +393,14 @@ sh_optimize_sett_clrt
       for (edge_iterator ei = ei_start (bb->preds); !ei_end_p (ei);
           ei_next (&ei))
        {
+         if (ei_edge (ei)->flags & EDGE_COMPLEX)
+           log_return (false, "aborting due to complex edge\n");
+
          basic_block pred_bb = ei_edge (ei)->src;
          pred_bb_count += 1;
-         find_last_ccreg_values (BB_END (pred_bb), pred_bb, values_out,
-                                 prev_visited_bb);
+         if (!find_last_ccreg_values (BB_END (pred_bb), pred_bb, values_out,
+                                      prev_visited_bb))
+           return false;
        }
 
       prev_visited_bb.pop_back ();
@@ -419,6 +423,8 @@ sh_optimize_sett_clrt
 
     values_out.push_back (v);
   }
+
+  return true;
 }
 
 bool
index e736040..38e2803 100644 (file)
@@ -78,14 +78,17 @@ Example 1)
 
 In [bb 4] elimination of the comparison would require inversion of the branch
 condition and compensation of other BBs.
-Instead an inverting reg-move can be used:
+Instead the comparison in [bb 3] can be replaced with the comparison in [bb 5]
+by using a reg-reg move.  In [bb 4] a logical not is used to compensate the
+inverted condition.
 
 [bb 3]
 (set (reg:SI 167) (reg:SI 173))
 -> bb 5
 
 [BB 4]
-(set (reg:SI 167) (not:SI (reg:SI 177)))
+(set (reg:SI 147 t) (eq:SI (reg:SI 177) (const_int 0)))
+(set (reg:SI 167) (reg:SI 147 t))
 -> bb 5
 
 [bb 5]
@@ -214,9 +217,9 @@ In order to handle cases such as above the RTL pass does the following:
       and replace the comparisons in the BBs with reg-reg copies to get the
       operands in place (create new pseudo regs).
 
-    - If the cstores differ, try to apply the special case
-        (eq (reg) (const_int 0)) -> inverted = (not (reg)).
-      for the subordinate cstore types and eliminate the dominating ones.
+    - If the cstores differ and the comparison is a test against zero,
+      use reg-reg copies for the dominating cstores and logical not cstores
+      for the subordinate cstores.
 
 - If the comparison types in the BBs are not the same, or the first approach
   doesn't work out for some reason, try to eliminate the comparison before the
@@ -558,7 +561,8 @@ private:
   bool can_extend_ccreg_usage (const bb_entry& e,
                               const cbranch_trace& trace) const;
 
-  // Create an insn rtx that is a negating reg move (not operation).
+  // Create an insn rtx that performs a logical not (test != 0) on the src_reg
+  // and stores the result in dst_reg.
   rtx make_not_reg_insn (rtx dst_reg, rtx src_reg) const;
 
   // Create an insn rtx that inverts the ccreg.
@@ -892,12 +896,32 @@ sh_treg_combine::can_remove_comparison (const bb_entry& e,
 rtx
 sh_treg_combine::make_not_reg_insn (rtx dst_reg, rtx src_reg) const
 {
-  // This will to go through expanders and may output multiple insns
-  // for multi-word regs.
+  // On SH we can do only SImode and DImode comparisons.
+  if (! (GET_MODE (src_reg) == SImode || GET_MODE (src_reg) == DImode))
+    return NULL;
+
+  // On SH we can store the ccreg into an SImode or DImode reg only.
+  if (! (GET_MODE (dst_reg) == SImode || GET_MODE (dst_reg) == DImode))
+    return NULL;
+
   start_sequence ();
-  expand_simple_unop (GET_MODE (dst_reg), NOT, src_reg, dst_reg, 0);
+
+  emit_insn (gen_rtx_SET (VOIDmode, m_ccreg,
+                         gen_rtx_fmt_ee (EQ, SImode, src_reg, const0_rtx)));
+
+  if (GET_MODE (dst_reg) == SImode)
+    emit_move_insn (dst_reg, m_ccreg);
+  else if (GET_MODE (dst_reg) == DImode)
+    {
+      emit_move_insn (gen_lowpart (SImode, dst_reg), m_ccreg);
+      emit_move_insn (gen_highpart (SImode, dst_reg), const0_rtx);
+    }
+  else
+    gcc_unreachable ();
+
   rtx i = get_insns ();
   end_sequence ();
+
   return i;
 }
 
@@ -1080,7 +1104,12 @@ sh_treg_combine::try_combine_comparisons (cbranch_trace& trace,
   // There is one special case though, where an integer comparison
   //     (eq (reg) (const_int 0))
   // can be inverted with a sequence
-  //     (eq (not (reg)) (const_int 0))
+  //     (set (t) (eq (reg) (const_int 0))
+  //     (set (reg) (t))
+  //     (eq (reg) (const_int 0))
+  //
+  // FIXME: On SH2A it might be better to use the nott insn in this case,
+  // i.e. do the try_eliminate_cstores approach instead.
   if (inv_cstore_count != 0 && cstore_count != 0)
     {
       if (make_not_reg_insn (comp_op0, comp_op0) == NULL_RTX)
index d9f2b3d..7f44631 100644 (file)
@@ -63,8 +63,12 @@ MULTILIB_MATCHES = $(shell \
     done \
   done)
 
-# SH1 only supports big endian.
+# SH1 and SH2A support big endian only.
+ifeq ($(DEFAULT_ENDIAN),ml)
+MULTILIB_EXCEPTIONS = m1 ml/m1 m2a* ml/m2a* $(TM_MULTILIB_EXCEPTIONS_CONFIG)
+else
 MULTILIB_EXCEPTIONS = ml/m1 ml/m2a* $(TM_MULTILIB_EXCEPTIONS_CONFIG)
+endif
 
 MULTILIB_OSDIRNAMES = \
        $(OTHER_ENDIAN)=!$(OTHER_ENDIAN) \
index 82b6a0d..ad22e3b 100644 (file)
 
 ;; Use a double reservation to work around the load pipeline hazard on UT699.
 (define_insn_reservation "leon3_load" 1
-  (and (eq_attr "cpu" "leon3") (eq_attr "type" "load,sload"))
+  (and (eq_attr "cpu" "leon3,leon3v7") (eq_attr "type" "load,sload"))
   "leon_memory*2")
 
 (define_insn_reservation "leon_store" 2
-  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "store"))
+  (and (eq_attr "cpu" "leon,leon3,leon3v7") (eq_attr "type" "store"))
   "leon_memory*2")
 
 ;; This describes Gaisler Research's FPU
 (define_cpu_unit "grfpu_ds" "grfpu")
 
 (define_insn_reservation "leon_fp_alu" 4
-  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fp,fpcmp,fpmul"))
+  (and (eq_attr "cpu" "leon,leon3,leon3v7") (eq_attr "type" "fp,fpcmp,fpmul"))
   "grfpu_alu, nothing*3")
 
 (define_insn_reservation "leon_fp_divs" 16
-  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivs"))
+  (and (eq_attr "cpu" "leon,leon3,leon3v7") (eq_attr "type" "fpdivs"))
   "grfpu_ds*14, nothing*2")
 
 (define_insn_reservation "leon_fp_divd" 17
-  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivd"))
+  (and (eq_attr "cpu" "leon,leon3,leon3v7") (eq_attr "type" "fpdivd"))
   "grfpu_ds*15, nothing*2")
 
 (define_insn_reservation "leon_fp_sqrts" 24
-  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrts"))
+  (and (eq_attr "cpu" "leon,leon3,leon3v7") (eq_attr "type" "fpsqrts"))
   "grfpu_ds*22, nothing*2")
 
 (define_insn_reservation "leon_fp_sqrtd" 25
-  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrtd"))
+  (and (eq_attr "cpu" "leon,leon3,leon3v7") (eq_attr "type" "fpsqrtd"))
   "grfpu_ds*23, nothing*2")
index 13b375a..26017ed 100644 (file)
@@ -31,6 +31,7 @@ enum processor_type {
   PROCESSOR_HYPERSPARC,
   PROCESSOR_LEON,
   PROCESSOR_LEON3,
+  PROCESSOR_LEON3V7,
   PROCESSOR_SPARCLITE,
   PROCESSOR_F930,
   PROCESSOR_F934,
index 5b00cca..e020c5b 100644 (file)
@@ -1246,6 +1246,7 @@ sparc_option_override (void)
     { TARGET_CPU_hypersparc, PROCESSOR_HYPERSPARC },
     { TARGET_CPU_leon, PROCESSOR_LEON },
     { TARGET_CPU_leon3, PROCESSOR_LEON3 },
+    { TARGET_CPU_leon3v7, PROCESSOR_LEON3V7 },
     { TARGET_CPU_sparclite, PROCESSOR_F930 },
     { TARGET_CPU_sparclite86x, PROCESSOR_SPARCLITE86X },
     { TARGET_CPU_sparclet, PROCESSOR_TSC701 },
@@ -1274,6 +1275,7 @@ sparc_option_override (void)
     { "hypersparc",    MASK_ISA, MASK_V8|MASK_FPU },
     { "leon",          MASK_ISA, MASK_V8|MASK_LEON|MASK_FPU },
     { "leon3",         MASK_ISA, MASK_V8|MASK_LEON3|MASK_FPU },
+    { "leon3v7",       MASK_ISA, MASK_LEON3|MASK_FPU },
     { "sparclite",     MASK_ISA, MASK_SPARCLITE },
     /* The Fujitsu MB86930 is the original sparclite chip, with no FPU.  */
     { "f930",          MASK_ISA|MASK_FPU, MASK_SPARCLITE },
@@ -1526,6 +1528,7 @@ sparc_option_override (void)
       sparc_costs = &leon_costs;
       break;
     case PROCESSOR_LEON3:
+    case PROCESSOR_LEON3V7:
       sparc_costs = &leon3_costs;
       break;
     case PROCESSOR_SPARCLET:
@@ -4752,10 +4755,14 @@ enum sparc_mode_class {
 #define CCFP_MODES (1 << (int) CCFP_MODE)
 
 /* Value is 1 if register/mode pair is acceptable on sparc.
+
    The funny mixture of D and T modes is because integer operations
    do not specially operate on tetra quantities, so non-quad-aligned
    registers can hold quadword quantities (except %o4 and %i4 because
-   they cross fixed registers).  */
+   they cross fixed registers).
+
+   ??? Note that, despite the settings, non-double-aligned parameter
+   registers can hold double-word quantities in 32-bit mode.  */
 
 /* This points to either the 32 bit or the 64 bit version.  */
 const int *hard_regno_mode_classes;
@@ -6801,28 +6808,30 @@ function_arg_union_value (int size, enum machine_mode mode, int slotno,
 }
 
 /* Used by function_arg and sparc_function_value_1 to implement the conventions
-   for passing and returning large (BLKmode) vectors.
+   for passing and returning BLKmode vectors.
    Return an expression valid as a return value for the FUNCTION_ARG
    and TARGET_FUNCTION_VALUE.
 
-   SIZE is the size in bytes of the vector (at least 8 bytes).
+   SIZE is the size in bytes of the vector.
    REGNO is the FP hard register the vector will be passed in.  */
 
 static rtx
 function_arg_vector_value (int size, int regno)
 {
-  int i, nregs = size / 8;
-  rtx regs;
+  const int nregs = MAX (1, size / 8);
+  rtx regs = gen_rtx_PARALLEL (BLKmode, rtvec_alloc (nregs));
 
-  regs = gen_rtx_PARALLEL (BLKmode, rtvec_alloc (nregs));
-
-  for (i = 0; i < nregs; i++)
-    {
+  if (size < 8)
+    XVECEXP (regs, 0, 0)
+      = gen_rtx_EXPR_LIST (VOIDmode,
+                          gen_rtx_REG (SImode, regno),
+                          const0_rtx);
+  else
+    for (int i = 0; i < nregs; i++)
       XVECEXP (regs, 0, i)
        = gen_rtx_EXPR_LIST (VOIDmode,
                             gen_rtx_REG (DImode, regno + 2*i),
                             GEN_INT (i*8));
-    }
 
   return regs;
 }
@@ -6868,10 +6877,9 @@ sparc_function_arg_1 (cumulative_args_t cum_v, enum machine_mode mode,
                  || (TARGET_ARCH64 && size <= 16));
 
       if (mode == BLKmode)
-       return function_arg_vector_value (size,
-                                         SPARC_FP_ARG_FIRST + 2*slotno);
-      else
-       mclass = MODE_FLOAT;
+       return function_arg_vector_value (size, SPARC_FP_ARG_FIRST + 2*slotno);
+
+      mclass = MODE_FLOAT;
     }
 
   if (TARGET_ARCH32)
@@ -7315,10 +7323,9 @@ sparc_function_value_1 (const_tree type, enum machine_mode mode,
                  || (TARGET_ARCH64 && size <= 32));
 
       if (mode == BLKmode)
-       return function_arg_vector_value (size,
-                                         SPARC_FP_ARG_FIRST);
-      else
-       mclass = MODE_FLOAT;
+       return function_arg_vector_value (size, SPARC_FP_ARG_FIRST);
+
+      mclass = MODE_FLOAT;
     }
 
   if (TARGET_ARCH64 && type)
index dd2b5ad..79dbba2 100644 (file)
@@ -137,21 +137,22 @@ extern enum cmodel sparc_cmodel;
 #define TARGET_CPU_hypersparc  3
 #define TARGET_CPU_leon                4
 #define TARGET_CPU_leon3       5
-#define TARGET_CPU_sparclite   6
-#define TARGET_CPU_f930                6       /* alias */
-#define TARGET_CPU_f934                6       /* alias */
-#define TARGET_CPU_sparclite86x        7
-#define TARGET_CPU_sparclet    8
-#define TARGET_CPU_tsc701      8       /* alias */
-#define TARGET_CPU_v9          9       /* generic v9 implementation */
-#define TARGET_CPU_sparcv9     9       /* alias */
-#define TARGET_CPU_sparc64     9       /* alias */
-#define TARGET_CPU_ultrasparc  10
-#define TARGET_CPU_ultrasparc3 11
-#define TARGET_CPU_niagara     12
-#define TARGET_CPU_niagara2    13
-#define TARGET_CPU_niagara3    14
-#define TARGET_CPU_niagara4    15
+#define TARGET_CPU_leon3v7     6
+#define TARGET_CPU_sparclite   7
+#define TARGET_CPU_f930                7       /* alias */
+#define TARGET_CPU_f934                7       /* alias */
+#define TARGET_CPU_sparclite86x        8
+#define TARGET_CPU_sparclet    9
+#define TARGET_CPU_tsc701      9       /* alias */
+#define TARGET_CPU_v9          10      /* generic v9 implementation */
+#define TARGET_CPU_sparcv9     10      /* alias */
+#define TARGET_CPU_sparc64     10      /* alias */
+#define TARGET_CPU_ultrasparc  11
+#define TARGET_CPU_ultrasparc3 12
+#define TARGET_CPU_niagara     13
+#define TARGET_CPU_niagara2    14
+#define TARGET_CPU_niagara3    15
+#define TARGET_CPU_niagara4    16
 
 #if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
  || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
@@ -239,6 +240,11 @@ extern enum cmodel sparc_cmodel;
 #define ASM_CPU32_DEFAULT_SPEC AS_LEON_FLAG
 #endif
 
+#if TARGET_CPU_DEFAULT == TARGET_CPU_leon3v7
+#define CPP_CPU32_DEFAULT_SPEC "-D__leon__"
+#define ASM_CPU32_DEFAULT_SPEC AS_LEONV7_FLAG
+#endif
+
 #endif
 
 #if !defined(CPP_CPU32_DEFAULT_SPEC) || !defined(CPP_CPU64_DEFAULT_SPEC)
@@ -285,6 +291,7 @@ extern enum cmodel sparc_cmodel;
 %{mcpu=hypersparc:-D__hypersparc__ -D__sparc_v8__} \
 %{mcpu=leon:-D__leon__ -D__sparc_v8__} \
 %{mcpu=leon3:-D__leon__ -D__sparc_v8__} \
+%{mcpu=leon3v7:-D__leon__} \
 %{mcpu=v9:-D__sparc_v9__} \
 %{mcpu=ultrasparc:-D__sparc_v9__} \
 %{mcpu=ultrasparc3:-D__sparc_v9__} \
@@ -334,6 +341,7 @@ extern enum cmodel sparc_cmodel;
 %{mcpu=hypersparc:-Av8} \
 %{mcpu=leon:" AS_LEON_FLAG "} \
 %{mcpu=leon3:" AS_LEON_FLAG "} \
+%{mcpu=leon3v7:" AS_LEONV7_FLAG "} \
 %{mv8plus:-Av8plus} \
 %{mcpu=v9:-Av9} \
 %{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
@@ -1760,8 +1768,10 @@ extern int sparc_indent_opcode;
 
 #ifdef HAVE_AS_LEON
 #define AS_LEON_FLAG "-Aleon"
+#define AS_LEONV7_FLAG "-Aleon"
 #else
 #define AS_LEON_FLAG "-Av8"
+#define AS_LEONV7_FLAG "-Av7"
 #endif
 
 /* We use gcc _mcount for profiling.  */
index 76c3315..0715d83 100644 (file)
    hypersparc,
    leon,
    leon3,
+   leon3v7,
    sparclite,
    f930,
    f934,
   "! TARGET_ARCH64"
   "#"
   "&& reload_completed"
-  [(set (match_dup 2) (match_dup 3))
-   (set (match_dup 4) (match_dup 5))]
-{
-  rtx dest1, dest2;
-
-  dest1 = gen_highpart (SImode, operands[0]);
-  dest2 = gen_lowpart (SImode, operands[0]);
-
-  /* Swap the order in case of overlap.  */
-  if (REGNO (dest1) == REGNO (operands[1]))
-    {
-      operands[2] = dest2;
-      operands[3] = operands[1];
-      operands[4] = dest1;
-      operands[5] = const0_rtx;
-    }
-  else
-    {
-      operands[2] = dest1;
-      operands[3] = const0_rtx;
-      operands[4] = dest2;
-      operands[5] = operands[1];
-    }
-}
+  [(set (match_dup 2) (match_dup 1))
+   (set (match_dup 3) (const_int 0))]
+  "operands[2] = gen_lowpart (SImode, operands[0]);
+   operands[3] = gen_highpart (SImode, operands[0]);"
   [(set_attr "length" "2")])
 
 ;; Simplify comparisons of extended values.
                                (ltu:SI (reg:CC_NOOV CC_REG) (const_int 0))))
    (set (match_dup 4) (const_int 0))]
   "operands[3] = gen_lowpart (SImode, operands[0]);
-   operands[4] = gen_highpart_mode (SImode, DImode, operands[1]);"
+   operands[4] = gen_highpart (SImode, operands[0]);"
   [(set_attr "length" "2")])
 
 (define_insn "*addx_extend_sp64"
   [(set_attr "type" "ialuX")])
 
 (define_insn_and_split "*adddi3_extend_sp32"
-  [(set (match_operand:DI 0 "register_operand" "=r")
+  [(set (match_operand:DI 0 "register_operand" "=&r")
         (plus:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
                  (match_operand:DI 2 "register_operand" "r")))
    (clobber (reg:CC CC_REG))]
 })
 
 (define_insn_and_split "*subdi3_insn_sp32"
-  [(set (match_operand:DI 0 "register_operand" "=r")
+  [(set (match_operand:DI 0 "register_operand" "=&r")
        (minus:DI (match_operand:DI 1 "register_operand" "r")
                  (match_operand:DI 2 "arith_double_operand" "rHI")))
    (clobber (reg:CC CC_REG))]
   "subx\t%r1, %2, %0"
   [(set_attr "type" "ialuX")])
 
-(define_insn_and_split "*subx_extend"
+(define_insn_and_split "*subx_extend_sp32"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (zero_extend:DI (minus:SI (minus:SI (match_operand:SI 1 "register_or_zero_operand" "rJ")
                                             (match_operand:SI 2 "arith_operand" "rI"))
   [(set_attr "length" "2")])
 
 (define_insn_and_split "*subdi3_extend_sp32"
-  [(set (match_operand:DI 0 "register_operand" "=r")
+  [(set (match_operand:DI 0 "register_operand" "=&r")
       (minus:DI (match_operand:DI 1 "register_operand" "r")
                 (zero_extend:DI (match_operand:SI 2 "register_operand" "r"))))
    (clobber (reg:CC CC_REG))]
 })
 
 (define_insn_and_split "*and_not_di_sp32"
-  [(set (match_operand:DI 0 "register_operand" "=r")
+  [(set (match_operand:DI 0 "register_operand" "=&r")
        (and:DI (not:DI (match_operand:DI 1 "register_operand" "%r"))
                (match_operand:DI 2 "register_operand" "r")))]
   "! TARGET_ARCH64"
 })
 
 (define_insn_and_split "*or_not_di_sp32"
-  [(set (match_operand:DI 0 "register_operand" "=r")
+  [(set (match_operand:DI 0 "register_operand" "=&r")
        (ior:DI (not:DI (match_operand:DI 1 "register_operand" "r"))
                (match_operand:DI 2 "register_operand" "r")))]
   "! TARGET_ARCH64"
 ;; xnor patterns.  Note that (a ^ ~b) == (~a ^ b) == ~(a ^ b).
 ;; Combine now canonicalizes to the rightmost expression.
 (define_insn_and_split "*xor_not_di_sp32"
-  [(set (match_operand:DI 0 "register_operand" "=r")
+  [(set (match_operand:DI 0 "register_operand" "=&r")
        (not:DI (xor:DI (match_operand:DI 1 "register_operand" "r")
                        (match_operand:DI 2 "register_operand" "r"))))]
   "! TARGET_ARCH64"
 })
 
 (define_insn_and_split "*negdi2_sp32"
-  [(set (match_operand:DI 0 "register_operand" "=r")
+  [(set (match_operand:DI 0 "register_operand" "=&r")
        (neg:DI (match_operand:DI 1 "register_operand" "r")))
    (clobber (reg:CC CC_REG))]
   "! TARGET_ARCH64"
   "")
 
 (define_insn_and_split "*one_cmpldi2_sp32"
-  [(set (match_operand:DI 0 "register_operand" "=r")
+  [(set (match_operand:DI 0 "register_operand" "=&r")
        (not:DI (match_operand:DI 1 "register_operand" "r")))]
   "! TARGET_ARCH64"
   "#"
index 64e4095..3cd2b60 100644 (file)
@@ -153,6 +153,9 @@ EnumValue
 Enum(sparc_processor_type) String(leon3) Value(PROCESSOR_LEON3)
 
 EnumValue
+Enum(sparc_processor_type) String(leon3v7) Value(PROCESSOR_LEON3V7)
+
+EnumValue
 Enum(sparc_processor_type) String(sparclite) Value(PROCESSOR_SPARCLITE)
 
 EnumValue
index 86a2302..ae7a33a 100644 (file)
 # <http://www.gnu.org/licenses/>.
 #
 
-MULTILIB_OPTIONS = msoft-float mcpu=v8/mcpu=leon3
-MULTILIB_DIRNAMES = soft v8 leon3
+MULTILIB_OPTIONS = msoft-float mcpu=v8/mcpu=leon3/mcpu=leon3v7 muser-mode
+MULTILIB_DIRNAMES = soft v8 leon3 leon3v7 user-mode
 MULTILIB_MATCHES = msoft-float=mno-fpu
+
+MULTILIB_EXCEPTIONS = muser-mode
+MULTILIB_EXCEPTIONS += mcpu=leon3
+MULTILIB_EXCEPTIONS += mcpu=leon3v7
+MULTILIB_EXCEPTIONS += msoft-float/mcpu=leon3
+MULTILIB_EXCEPTIONS += msoft-float/mcpu=leon3v7
+MULTILIB_EXCEPTIONS += msoft-float/muser-mode
+MULTILIB_EXCEPTIONS += msoft-float/mcpu=v8/muser-mode
+MULTILIB_EXCEPTIONS += mcpu=v8/muser-mode
index 291e463..ab5b2ec 100755 (executable)
@@ -920,6 +920,7 @@ enable_gnu_indirect_function
 enable_initfini_array
 enable_comdat
 enable_fix_cortex_a53_835769
+enable_fix_cortex_a53_843419
 with_glibc_version
 enable_gnu_unique_object
 enable_linker_build_id
@@ -1644,6 +1645,14 @@ Optional Features:
                           disable workaround for AArch64 Cortex-A53 erratum
                           835769 by default
 
+
+  --enable-fix-cortex-a53-843419
+                          enable workaround for AArch64 Cortex-A53 erratum
+                          843419 by default
+  --disable-fix-cortex-a53-843419
+                          disable workaround for AArch64 Cortex-A53 erratum
+                          843419 by default
+
   --enable-gnu-unique-object
                           enable the use of the @gnu_unique_object ELF
                           extension on glibc systems
@@ -17936,7 +17945,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 17939 "configure"
+#line 17948 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -18042,7 +18051,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 18045 "configure"
+#line 18054 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -24032,6 +24041,25 @@ if test "${enable_fix_cortex_a53_835769+set}" = set; then :
 
 fi
 
+    # Enable default workaround for AArch64 Cortex-A53 erratum 843419.
+    # Check whether --enable-fix-cortex-a53-843419 was given.
+if test "${enable_fix_cortex_a53_843419+set}" = set; then :
+  enableval=$enable_fix_cortex_a53_843419;
+        case $enableval in
+          yes)
+            tm_defines="${tm_defines} TARGET_FIX_ERR_A53_843419_DEFAULT=1"
+            ;;
+          no)
+            ;;
+          *)
+            as_fn_error "'$enableval' is an invalid value for --enable-fix-cortex-a53-843419.\
+  Valid choices are 'yes' and 'no'." "$LINENO" 5
+            ;;
+
+        esac
+
+fi
+
     ;;
 
   # All TARGET_ABI_OSF targets.
@@ -24158,6 +24186,39 @@ $as_echo "#define HAVE_AS_NO_MUL_BUG_ABORT_OPTION 1" >>confdefs.h
 fi
     ;;
 
+  avr-*-*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -mrmw option" >&5
+$as_echo_n "checking assembler for -mrmw option... " >&6; }
+if test "${gcc_cv_as_avr_mrmw+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gcc_cv_as_avr_mrmw=no
+  if test x$gcc_cv_as != x; then
+    $as_echo '.text' > conftest.s
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -mrmw -o conftest.o conftest.s >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+    then
+       gcc_cv_as_avr_mrmw=yes
+    else
+      echo "configure: failed program was" >&5
+      cat conftest.s >&5
+    fi
+    rm -f conftest.o conftest.s
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_avr_mrmw" >&5
+$as_echo "$gcc_cv_as_avr_mrmw" >&6; }
+if test $gcc_cv_as_avr_mrmw = yes; then
+
+$as_echo "#define HAVE_AS_AVR_MRMW_OPTION 1" >>confdefs.h
+
+fi
+    ;;
+
   sparc*-*-*)
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .register" >&5
 $as_echo_n "checking assembler for .register... " >&6; }
@@ -26140,6 +26201,38 @@ $as_echo "#define HAVE_AS_GNU_ATTRIBUTE 1" >>confdefs.h
 
 fi
 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .module support" >&5
+$as_echo_n "checking assembler for .module support... " >&6; }
+if test "${gcc_cv_as_mips_dot_module+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gcc_cv_as_mips_dot_module=no
+  if test x$gcc_cv_as != x; then
+    $as_echo '.module mips2
+       .module fp=xx' > conftest.s
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -32 -o conftest.o conftest.s >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+    then
+       gcc_cv_as_mips_dot_module=yes
+    else
+      echo "configure: failed program was" >&5
+      cat conftest.s >&5
+    fi
+    rm -f conftest.o conftest.s
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_mips_dot_module" >&5
+$as_echo "$gcc_cv_as_mips_dot_module" >&6; }
+if test $gcc_cv_as_mips_dot_module = yes; then
+
+$as_echo "#define HAVE_AS_DOT_MODULE 1" >>confdefs.h
+
+fi
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .micromips support" >&5
 $as_echo_n "checking assembler for .micromips support... " >&6; }
 if test "${gcc_cv_as_micromips_support+set}" = set; then :
@@ -27851,8 +27944,48 @@ if test "x${CLOOGLIBS}" != "x" ; then
 
 $as_echo "#define HAVE_cloog 1" >>confdefs.h
 
+
+  # Check whether isl_schedule_constraints_compute_schedule is available;
+  # it's new in ISL-0.13.
+  saved_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $ISLINC"
+  saved_LIBS="$LIBS"
+  LIBS="$LIBS $CLOOGLIBS $ISLLIBS $GMPLIBS"
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking Checking for isl_schedule_constraints_compute_schedule" >&5
+$as_echo_n "checking Checking for isl_schedule_constraints_compute_schedule... " >&6; }
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <isl/schedule.h>
+int
+main ()
+{
+isl_schedule_constraints_compute_schedule (NULL);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_has_isl_schedule_constraints_compute_schedule=yes
+else
+  ac_has_isl_schedule_constraints_compute_schedule=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_has_isl_schedule_constraints_compute_schedule" >&5
+$as_echo "$ac_has_isl_schedule_constraints_compute_schedule" >&6; }
+
+  LIBS="$saved_LIBS"
+  CFLAGS="$saved_CFLAGS"
+
+  if test x"$ac_has_isl_schedule_constraints_compute_schedule" = x"yes"; then
+
+$as_echo "#define HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE 1" >>confdefs.h
+
+  fi
 fi
 
+
 # Check for plugin support
 # Check whether --enable-plugin was given.
 if test "${enable_plugin+set}" = set; then :
index b9a3799..7bf1250 100644 (file)
@@ -3564,6 +3564,29 @@ AS_HELP_STRING([--disable-fix-cortex-a53-835769],
         esac
       ],
     [])
+    # Enable default workaround for AArch64 Cortex-A53 erratum 843419.
+    AC_ARG_ENABLE(fix-cortex-a53-843419,
+    [
+AS_HELP_STRING([--enable-fix-cortex-a53-843419],
+        [enable workaround for AArch64 Cortex-A53 erratum 843419 by default])
+AS_HELP_STRING([--disable-fix-cortex-a53-843419],
+        [disable workaround for AArch64 Cortex-A53 erratum 843419 by default])
+    ],
+      [
+        case $enableval in
+          yes)
+            tm_defines="${tm_defines} TARGET_FIX_ERR_A53_843419_DEFAULT=1"
+            ;;
+          no)
+            ;;
+          *)
+            AC_MSG_ERROR(['$enableval' is an invalid value for --enable-fix-cortex-a53-843419.\
+  Valid choices are 'yes' and 'no'.])
+            ;;
+
+        esac
+      ],
+    [])
     ;;
 
   # All TARGET_ABI_OSF targets.
@@ -3603,6 +3626,13 @@ AS_HELP_STRING([--disable-fix-cortex-a53-835769],
                [Define if your assembler supports the -no-mul-bug-abort option.])])
     ;;
 
+  avr-*-*)
+    gcc_GAS_CHECK_FEATURE([-mrmw option], gcc_cv_as_avr_mrmw,,
+      [-mrmw], [.text],,
+      [AC_DEFINE(HAVE_AS_AVR_MRMW_OPTION, 1,
+               [Define if your assembler supports -mrmw option.])])
+    ;;
+
   sparc*-*-*)
     gcc_GAS_CHECK_FEATURE([.register], gcc_cv_as_sparc_register_op,,,
       [.register %g2, #scratch],,
@@ -4251,6 +4281,13 @@ LCF0:
       [AC_DEFINE(HAVE_AS_GNU_ATTRIBUTE, 1,
          [Define if your assembler supports .gnu_attribute.])])
 
+    gcc_GAS_CHECK_FEATURE([.module support],
+      gcc_cv_as_mips_dot_module,,[-32],
+      [.module mips2
+       .module fp=xx],,
+      [AC_DEFINE(HAVE_AS_DOT_MODULE, 1,
+         [Define if your assembler supports .module.])])
+
     gcc_GAS_CHECK_FEATURE([.micromips support],
       gcc_cv_as_micromips_support,,[--fatal-warnings],
       [.set micromips],,
@@ -5495,8 +5532,31 @@ AC_ARG_VAR(CLOOGLIBS,[How to link CLOOG])
 AC_ARG_VAR(CLOOGINC,[How to find CLOOG include files])
 if test "x${CLOOGLIBS}" != "x" ; then 
    AC_DEFINE(HAVE_cloog, 1, [Define if cloog is in use.])
+
+  # Check whether isl_schedule_constraints_compute_schedule is available;
+  # it's new in ISL-0.13.
+  saved_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $ISLINC"
+  saved_LIBS="$LIBS"
+  LIBS="$LIBS $CLOOGLIBS $ISLLIBS $GMPLIBS"
+
+  AC_MSG_CHECKING([Checking for isl_schedule_constraints_compute_schedule])
+  AC_TRY_LINK([#include <isl/schedule.h>],
+              [isl_schedule_constraints_compute_schedule (NULL);],
+              [ac_has_isl_schedule_constraints_compute_schedule=yes],
+              [ac_has_isl_schedule_constraints_compute_schedule=no])
+  AC_MSG_RESULT($ac_has_isl_schedule_constraints_compute_schedule)
+
+  LIBS="$saved_LIBS"
+  CFLAGS="$saved_CFLAGS"
+
+  if test x"$ac_has_isl_schedule_constraints_compute_schedule" = x"yes"; then
+     AC_DEFINE(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE, 1,
+               [Define if isl_schedule_constraints_compute_schedule exists.])
+  fi
 fi
 
+
 # Check for plugin support
 AC_ARG_ENABLE(plugin,
 [AS_HELP_STRING([--enable-plugin], [enable plugin support])],
index 91c1da2..cb57b29 100644 (file)
@@ -97,6 +97,15 @@ convert_to_real (tree type, tree expr)
   enum built_in_function fcode = builtin_mathfn_code (expr);
   tree itype = TREE_TYPE (expr);
 
+  if (TREE_CODE (expr) == COMPOUND_EXPR)
+    {
+      tree t = convert_to_real (type, TREE_OPERAND (expr, 1));
+      if (t == TREE_OPERAND (expr, 1))
+       return expr;
+      return build2_loc (EXPR_LOCATION (expr), COMPOUND_EXPR, TREE_TYPE (t),
+                        TREE_OPERAND (expr, 0), t);
+    }    
+
   /* Disable until we figure out how to decide whether the functions are
      present in runtime.  */
   /* Convert (float)sqrt((double)x) where x is float into sqrtf(x) */
@@ -403,6 +412,15 @@ convert_to_integer (tree type, tree expr)
       return error_mark_node;
     }
 
+  if (ex_form == COMPOUND_EXPR)
+    {
+      tree t = convert_to_integer (type, TREE_OPERAND (expr, 1));
+      if (t == TREE_OPERAND (expr, 1))
+       return expr;
+      return build2_loc (EXPR_LOCATION (expr), COMPOUND_EXPR, TREE_TYPE (t),
+                        TREE_OPERAND (expr, 0), t);
+    }    
+
   /* Convert e.g. (long)round(d) -> lround(d).  */
   /* If we're converting to char, we may encounter differing behavior
      between converting from double->char vs double->long->char.
@@ -891,6 +909,14 @@ convert_to_complex (tree type, tree expr)
 
        if (TYPE_MAIN_VARIANT (elt_type) == TYPE_MAIN_VARIANT (subtype))
          return expr;
+       else if (TREE_CODE (expr) == COMPOUND_EXPR)
+         {
+           tree t = convert_to_complex (type, TREE_OPERAND (expr, 1));
+           if (t == TREE_OPERAND (expr, 1))
+             return expr;
+           return build2_loc (EXPR_LOCATION (expr), COMPOUND_EXPR,
+                              TREE_TYPE (t), TREE_OPERAND (expr, 0), t);
+         }    
        else if (TREE_CODE (expr) == COMPLEX_EXPR)
          return fold_build2 (COMPLEX_EXPR, type,
                              convert (subtype, TREE_OPERAND (expr, 0)),
index d79d629..0f1499d 100644 (file)
@@ -1,3 +1,157 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-06-24  Jason Merrill  <jason@redhat.com>
+
+       PR c++/66501
+       * init.c (vec_copy_assign_is_trivial): New.
+       (build_vec_init): Use it.
+
+2015-06-23  Jason Merrill  <jason@redhat.com>
+
+       PR c++/65879
+       * tree.c (no_linkage_check): Skip the 'this' pointer.
+
+2015-06-03  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-03-19  Jakub Jelinek  <jakub@redhat.com>
+
+       * decl2.c (cplus_decl_attributes): Also add "omp declare target"
+       attribute for DECL_EXTERNAL VAR_DECLs.
+
+2015-04-29  Thomas Schwinge  <thomas@codesourcery.com>
+
+       Backport from trunk r222564:
+
+       2015-04-29  Thomas Schwinge  <thomas@codesourcery.com>
+
+       * pt.c (tsubst_expr) <OMP_TARGET_UPDATE>: Use
+       OMP_TARGET_UPDATE_CLAUSES instead of OMP_CLAUSES.
+
+2015-04-23  Marek Polacek  <polacek@redhat.com>
+
+       PR c++/65727
+       * lambda.c (maybe_resolve_dummy): Handle null return.
+
+2015-04-23  Jason Merrill  <jason@redhat.com>
+
+       PR c++/65695
+       * cvt.c (cp_fold_convert): Avoid wrapping PTRMEM_CST in NOP_EXPR.
+
+       PR c++/65721
+       * name-lookup.c (do_class_using_decl): Complain about specifying
+       the current class even if there are dependent bases.
+
+2015-04-23  David Krauss  <david_work@me.com>
+
+       PR c++/59766
+       * decl.c (grokdeclarator): Do not flag friends with deduced return.
+
+2015-03-26  Mikhail Maltsev  <maltsevm@gmail.com>
+
+       PR c++/65154
+       * init.c (build_vec_init): Fix initializing aggregates
+       with empty init list.
+
+2015-03-04  Jason Merrill  <jason@redhat.com>
+
+       PR c++/65209
+       PR c++/65309
+       * decl2.c (constrain_visibility_for_template): Handle reference
+       arguments.
+
+2015-02-25  Jason Merrill  <jason@redhat.com>
+
+       PR c++/62255
+       * pt.c (instantiate_decl): Handle recursive instantiation of
+       static data member.
+
+       * decl.c (begin_destructor_body): Condition clobber on
+       -flifetime-dse.
+
+2015-02-13  Jason Merrill  <jason@redhat.com>
+
+       PR c++/62017
+       * decl.c (begin_destructor_body): Only clobber the as-base part of
+       *this.
+
+2015-02-11  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-02-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/64824
+       PR c/64868
+       * parser.c (cp_parser_omp_atomic): Handle RDIV_EXPR.
+
+2015-02-04  Ville Voutilainen  <ville.voutilainen@gmail.com>
+
+       PR c++/64901
+       * decl.c (duplicate_decls): Also duplicate DECL_FINAL_P and
+       DECL_OVERRIDE_P.
+
+2015-01-29  Jason Merrill  <jason@redhat.com>
+
+       PR c++/64521
+       * repo.c (repo_emit_p): It's OK for a clone to be extern at this
+       point.
+
+2015-01-13  Jason Merrill  <jason@redhat.com>
+
+       PR c++/64514
+       * pt.c (coerce_template_parameter_pack): Return NULL for a
+       zero-length fixed parameter pack with a pack expansion arg.
+
+2015-01-07  Jason Merrill  <jason@redhat.com>
+
+       PR c++/64487
+       * semantics.c (finish_offsetof): Handle templates here.
+       * parser.c (cp_parser_builtin_offsetof): Not here.
+
+       PR c++/64352
+       * pt.c (tsubst_copy_and_build): Pass complain to mark_used.
+
+       PR c++/64251
+       * decl2.c (mark_used): Don't mark if in_template_function.
+
+       PR c++/64297
+       * typeck.c (apply_memfn_quals): Correct wrong TYPE_CANONICAL.
+
+       PR c++/64029
+       * decl.c (grok_reference_init): Complete array type.
+
+       PR c++/63657
+       PR c++/38958
+       * call.c (set_up_extended_ref_temp): Set TREE_USED on the reference
+       if the temporary has a non-trivial destructor.
+       * decl.c (poplevel): Don't look through references.
+
+       PR c++/63658
+       * pt.c (convert_nontype_argument): Call convert_from_reference.
+       (check_instantiated_arg): Don't be confused by reference refs.
+       (unify): Look through reference refs on the arg, too.
+       * mangle.c (write_template_arg): Look through reference refs.
+
+2014-12-19  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/60955
+       * pt.c (struct warning_sentinel): Move it...
+       * cp-tree.h: ... here.
+       * semantics.c (force_paren_expr): Use it.
+
+2014-11-21  Jason Merrill  <jason@redhat.com>
+
+       PR c++/63849
+       * mangle.c (decl_mangling_context): Use template_type_parameter_p.
+
+2014-11-11  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/63265
+       * pt.c (tsubst_copy_and_build, case COND_EXPR): Maybe fold to
+       constant the condition.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 709b6be..46bb880 100644 (file)
@@ -9393,6 +9393,10 @@ set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
        /* Check whether the dtor is callable.  */
        cxx_maybe_build_cleanup (var, tf_warning_or_error);
     }
+  /* Avoid -Wunused-variable warning (c++/38958).  */
+  if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
+      && TREE_CODE (decl) == VAR_DECL)
+    TREE_USED (decl) = DECL_READ_P (decl) = true;
 
   *initp = init;
   return var;
index d149810..163ee87 100644 (file)
@@ -1098,6 +1098,18 @@ struct GTY(()) saved_scope {
 #define processing_specialization scope_chain->x_processing_specialization
 #define processing_explicit_instantiation scope_chain->x_processing_explicit_instantiation
 
+/* RAII sentinel to disable certain warnings during template substitution
+   and elsewhere.  */
+
+struct warning_sentinel
+{
+  int &flag;
+  int val;
+  warning_sentinel(int& flag, bool suppress=true)
+    : flag(flag), val(flag) { if (suppress) flag = 0; }
+  ~warning_sentinel() { flag = val; }
+};
+
 /* The cached class binding level, from the most recently exited
    class, or NULL if none.  */
 
index e8ece0e..adfe7c6 100644 (file)
@@ -595,8 +595,20 @@ ignore_overflows (tree expr, tree orig)
 tree
 cp_fold_convert (tree type, tree expr)
 {
-  tree conv = fold_convert (type, expr);
-  conv = ignore_overflows (conv, expr);
+  tree conv;
+  if (TREE_TYPE (expr) == type)
+    conv = expr;
+  else if (TREE_CODE (expr) == PTRMEM_CST)
+    {
+      /* Avoid wrapping a PTRMEM_CST in NOP_EXPR.  */
+      conv = copy_node (expr);
+      TREE_TYPE (conv) = type;
+    }
+  else
+    {
+      conv = fold_convert (type, expr);
+      conv = ignore_overflows (conv, expr);
+    }
   return conv;
 }
 
index 1f3a552..46cd58f 100644 (file)
@@ -630,8 +630,7 @@ poplevel (int keep, int reverse, int functionbody)
           push_local_binding where the list of decls returned by
           getdecls is built.  */
        decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
-       // See through references for improved -Wunused-variable (PR 38958).
-       tree type = non_reference (TREE_TYPE (decl));
+       tree type = TREE_TYPE (decl);
        if (VAR_P (decl)
            && (! TREE_USED (decl) || !DECL_READ_P (decl))
            && ! DECL_IN_SYSTEM_HEADER (decl)
@@ -1789,6 +1788,8 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
+      DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
+      DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
        SET_OVERLOADED_OPERATOR_CODE
@@ -4792,11 +4793,26 @@ grok_reference_init (tree decl, tree type, tree init, int flags)
     init = build_x_compound_expr_from_list (init, ELK_INIT,
                                            tf_warning_or_error);
 
-  if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
+  tree ttype = TREE_TYPE (type);
+  if (TREE_CODE (ttype) != ARRAY_TYPE
       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
     /* Note: default conversion is only called in very special cases.  */
     init = decay_conversion (init, tf_warning_or_error);
 
+  /* check_initializer handles this for non-reference variables, but for
+     references we need to do it here or the initializer will get the
+     incomplete array type and confuse later calls to
+     cp_complete_array_type.  */
+  if (TREE_CODE (ttype) == ARRAY_TYPE
+      && TYPE_DOMAIN (ttype) == NULL_TREE
+      && (BRACE_ENCLOSED_INITIALIZER_P (init)
+         || TREE_CODE (init) == STRING_CST))
+    {
+      cp_complete_array_type (&ttype, init, false);
+      if (ttype != TREE_TYPE (type))
+       type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
+    }
+
   /* Convert INIT to the reference type TYPE.  This may involve the
      creation of a temporary, whose lifetime must be the same as that
      of the reference.  If so, a DECL_EXPR for the temporary will be
@@ -10432,7 +10448,7 @@ grokdeclarator (const cp_declarator *declarator,
       }
     else if (decl_context == FIELD)
       {
-       if (!staticp && TREE_CODE (type) != METHOD_TYPE
+       if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE
            && type_uses_auto (type))
          {
            error ("non-static data member declared %<auto%>");
@@ -13651,13 +13667,19 @@ begin_destructor_body (void)
       initialize_vtbl_ptrs (current_class_ptr);
       finish_compound_stmt (compound_stmt);
 
-      /* Insert a cleanup to let the back end know that the object is dead
-        when we exit the destructor, either normally or via exception.  */
-      tree clobber = build_constructor (current_class_type, NULL);
-      TREE_THIS_VOLATILE (clobber) = true;
-      tree exprstmt = build2 (MODIFY_EXPR, current_class_type,
-                             current_class_ref, clobber);
-      finish_decl_cleanup (NULL_TREE, exprstmt);
+      if (flag_lifetime_dse)
+       {
+         /* Insert a cleanup to let the back end know that the object is dead
+            when we exit the destructor, either normally or via exception.  */
+         tree btype = CLASSTYPE_AS_BASE (current_class_type);
+         tree clobber = build_constructor (btype, NULL);
+         TREE_THIS_VOLATILE (clobber) = true;
+         tree bref = build_nop (build_reference_type (btype),
+                                current_class_ptr);
+         bref = convert_from_reference (bref);
+         tree exprstmt = build2 (MODIFY_EXPR, btype, bref, clobber);
+         finish_decl_cleanup (NULL_TREE, exprstmt);
+       }
 
       /* And insert cleanups for our bases and members so that they
         will be properly destroyed if we throw.  */
index a2626d4..f37fea3 100644 (file)
@@ -1396,7 +1396,8 @@ cplus_decl_attributes (tree *decl, tree attributes, int flags)
 
   /* Add implicit "omp declare target" attribute if requested.  */
   if (scope_chain->omp_declare_target_attribute
-      && ((TREE_CODE (*decl) == VAR_DECL && TREE_STATIC (*decl))
+      && ((TREE_CODE (*decl) == VAR_DECL
+          && (TREE_STATIC (*decl) || DECL_EXTERNAL (*decl)))
          || TREE_CODE (*decl) == FUNCTION_DECL))
     {
       if (TREE_CODE (*decl) == VAR_DECL
@@ -2122,9 +2123,12 @@ constrain_visibility_for_template (tree decl, tree targs)
       tree arg = TREE_VEC_ELT (args, i-1);
       if (TYPE_P (arg))
        vis = type_visibility (arg);
-      else if (TREE_TYPE (arg) && POINTER_TYPE_P (TREE_TYPE (arg)))
+      else
        {
-         STRIP_NOPS (arg);
+         if (REFERENCE_REF_P (arg))
+           arg = TREE_OPERAND (arg, 0);
+         if (TREE_TYPE (arg))
+           STRIP_NOPS (arg);
          if (TREE_CODE (arg) == ADDR_EXPR)
            arg = TREE_OPERAND (arg, 0);
          if (VAR_OR_FUNCTION_DECL_P (arg))
@@ -4914,7 +4918,7 @@ mark_used (tree decl, tsubst_flags_t complain)
       --function_depth;
     }
 
-  if (processing_template_decl)
+  if (processing_template_decl || in_template_function ())
     return true;
 
   /* Check this too in case we're within fold_non_dependent_expr.  */
index bf9c538..09a897f 100644 (file)
@@ -3379,6 +3379,21 @@ get_temp_regvar (tree type, tree init)
   return decl;
 }
 
+/* Subroutine of build_vec_init.  Returns true if assigning to an array of
+   INNER_ELT_TYPE from INIT is trivial.  */
+
+static bool
+vec_copy_assign_is_trivial (tree inner_elt_type, tree init)
+{
+  if (!CLASS_TYPE_P (inner_elt_type))
+    return true;
+  if (cxx_dialect >= cxx11
+      && !real_lvalue_p (init)
+      && type_has_move_assign (inner_elt_type))
+    return !TYPE_HAS_COMPLEX_MOVE_ASSIGN (inner_elt_type);
+  return TYPE_HAS_TRIVIAL_COPY_ASSIGN (inner_elt_type);
+}
+
 /* `build_vec_init' returns tree structure that performs
    initialization of a vector of aggregate types.
 
@@ -3460,8 +3475,7 @@ build_vec_init (tree base, tree maxindex, tree init,
       && TREE_CODE (atype) == ARRAY_TYPE
       && TREE_CONSTANT (maxindex)
       && (from_array == 2
-         ? (!CLASS_TYPE_P (inner_elt_type)
-            || !TYPE_HAS_COMPLEX_COPY_ASSIGN (inner_elt_type))
+         ? vec_copy_assign_is_trivial (inner_elt_type, init)
          : !TYPE_NEEDS_CONSTRUCTING (type))
       && ((TREE_CODE (init) == CONSTRUCTOR
           /* Don't do this if the CONSTRUCTOR might contain something
@@ -3734,11 +3748,7 @@ build_vec_init (tree base, tree maxindex, tree init,
        {
          if (cxx_dialect >= cxx11 && AGGREGATE_TYPE_P (type))
            {
-             if (BRACE_ENCLOSED_INITIALIZER_P (init)
-                 && CONSTRUCTOR_NELTS (init) == 0)
-               /* Reuse it.  */;
-             else
-               init = build_constructor (init_list_type_node, NULL);
+             init = build_constructor (init_list_type_node, NULL);
              CONSTRUCTOR_IS_DIRECT_INIT (init) = true;
            }
          else
index 6acbdd9..7391dd9 100644 (file)
@@ -764,8 +764,9 @@ maybe_resolve_dummy (tree object)
       /* In a lambda, need to go through 'this' capture.  */
       tree lam = CLASSTYPE_LAMBDA_EXPR (current_class_type);
       tree cap = lambda_expr_this_capture (lam);
-      object = build_x_indirect_ref (EXPR_LOCATION (object), cap,
-                                    RO_NULL, tf_warning_or_error);
+      if (cap && cap != error_mark_node)
+       object = build_x_indirect_ref (EXPR_LOCATION (object), cap,
+                                      RO_NULL, tf_warning_or_error);
     }
 
   return object;
index c8f57d3..c9b1c5f 100644 (file)
@@ -763,8 +763,7 @@ decl_mangling_context (tree decl)
       if (extra)
        return extra;
     }
-    else if (TREE_CODE (decl) == TYPE_DECL
-            && TREE_CODE (TREE_TYPE (decl)) == TEMPLATE_TYPE_PARM)
+  else if (template_type_parameter_p (decl))
      /* template type parms have no mangling context.  */
       return NULL_TREE;
   return CP_DECL_CONTEXT (decl);
@@ -3112,6 +3111,8 @@ write_template_arg (tree node)
        }
     }
 
+  if (REFERENCE_REF_P (node))
+    node = TREE_OPERAND (node, 0);
   if (TREE_CODE (node) == NOP_EXPR
       && TREE_CODE (TREE_TYPE (node)) == REFERENCE_TYPE)
     {
index 0137c3f..b76cf08 100644 (file)
@@ -3381,7 +3381,7 @@ do_class_using_decl (tree scope, tree name)
                           tf_warning_or_error);
       if (b_kind < bk_proper_base)
        {
-         if (!bases_dependent_p)
+         if (!bases_dependent_p || b_kind == bk_same_type)
            {
              error_not_base_type (scope, current_class_type);
              return NULL_TREE;
index 7893235..18c7068 100644 (file)
@@ -8479,12 +8479,7 @@ cp_parser_builtin_offsetof (cp_parser *parser)
     }
 
  success:
-  /* If we're processing a template, we can't finish the semantics yet.
-     Otherwise we can fold the entire expression now.  */
-  if (processing_template_decl)
-    expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
-  else
-    expr = finish_offsetof (expr);
+  expr = finish_offsetof (expr);
 
  failure:
   parser->integral_constant_expression_p = save_ice_p;
@@ -28753,6 +28748,7 @@ restart:
                {
                case MULT_EXPR:
                case TRUNC_DIV_EXPR:
+               case RDIV_EXPR:
                case PLUS_EXPR:
                case MINUS_EXPR:
                case LSHIFT_EXPR:
index 0f98909..60e9671 100644 (file)
@@ -6084,7 +6084,7 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
      right type?  */
   gcc_assert (same_type_ignoring_top_level_qualifiers_p
              (type, TREE_TYPE (expr)));
-  return expr;
+  return convert_from_reference (expr);
 }
 
 /* Subroutine of coerce_template_template_parms, which returns 1 if
@@ -6671,6 +6671,9 @@ coerce_template_parameter_pack (tree parms,
               if (invalid_nontype_parm_type_p (t, complain))
                 return error_mark_node;
             }
+         /* We don't know how many args we have yet, just
+            use the unconverted ones for now.  */
+         return NULL_TREE;
         }
 
       packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
@@ -13909,7 +13912,7 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
       tmp = tsubst_omp_clauses (OMP_TARGET_UPDATE_CLAUSES (t), false,
                                args, complain, in_decl);
       t = copy_node (t);
-      OMP_CLAUSES (t) = tmp;
+      OMP_TARGET_UPDATE_CLAUSES (t) = tmp;
       add_stmt (t);
       break;
 
@@ -14151,16 +14154,6 @@ tsubst_non_call_postfix_expression (tree t, tree args,
   return t;
 }
 
-/* Sentinel to disable certain warnings during template substitution.  */
-
-struct warning_sentinel {
-  int &flag;
-  int val;
-  warning_sentinel(int& flag, bool suppress=true)
-    : flag(flag), val(flag) { if (suppress) flag = 0; }
-  ~warning_sentinel() { flag = val; }
-};
-
 /* Like tsubst but deals with expressions and performs semantic
    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
 
@@ -14828,7 +14821,7 @@ tsubst_copy_and_build (tree t,
 
        /* Remember that there was a reference to this entity.  */
        if (DECL_P (function))
-         mark_used (function);
+         mark_used (function, complain);
 
        /* Put back tf_decltype for the actual call.  */
        complain |= decltype_flag;
@@ -14875,11 +14868,13 @@ tsubst_copy_and_build (tree t,
     case COND_EXPR:
       {
        tree cond = RECUR (TREE_OPERAND (t, 0));
+       tree folded_cond = (maybe_constant_value
+                           (fold_non_dependent_expr_sfinae (cond, tf_none)));
        tree exp1, exp2;
 
-       if (TREE_CODE (cond) == INTEGER_CST)
+       if (TREE_CODE (folded_cond) == INTEGER_CST)
          {
-           if (integer_zerop (cond))
+           if (integer_zerop (folded_cond))
              {
                ++c_inhibit_evaluation_warnings;
                exp1 = RECUR (TREE_OPERAND (t, 1));
@@ -14893,6 +14888,7 @@ tsubst_copy_and_build (tree t,
                exp2 = RECUR (TREE_OPERAND (t, 2));
                --c_inhibit_evaluation_warnings;
              }
+           cond = folded_cond;
          }
        else
          {
@@ -15443,6 +15439,7 @@ check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
      constant.  */
   else if (TREE_TYPE (t)
           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
+          && !REFERENCE_REF_P (t)
           && !TREE_CONSTANT (t))
     {
       if (complain & tf_error)
@@ -18166,8 +18163,12 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict,
 
     case INDIRECT_REF:
       if (REFERENCE_REF_P (parm))
-       return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
-                     strict, explain_p);
+       {
+         if (REFERENCE_REF_P (arg))
+           arg = TREE_OPERAND (arg, 0);
+         return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
+                       strict, explain_p);
+       }
       /* FALLTHRU */
 
     default:
@@ -19793,13 +19794,18 @@ instantiate_decl (tree d, int defer_ok,
                              args,
                              tf_warning_or_error, NULL_TREE,
                              /*integral_constant_expression_p=*/false);
-         /* Make sure the initializer is still constant, in case of
-            circular dependency (template/instantiate6.C). */
-         const_init
-           = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
-         cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
-                         /*asmspec_tree=*/NULL_TREE,
-                         LOOKUP_ONLYCONVERTING);
+         /* If instantiating the initializer involved instantiating this
+            again, don't call cp_finish_decl twice.  */
+         if (!DECL_INITIAL (d))
+           {
+             /* Make sure the initializer is still constant, in case of
+                circular dependency (template/instantiate6.C). */
+             const_init
+               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
+             cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
+                             /*asmspec_tree=*/NULL_TREE,
+                             LOOKUP_ONLYCONVERTING);
+           }
          pop_nested_class ();
          pop_nested_namespace (ns);
        }
index f076f23..2b571c5 100644 (file)
@@ -293,7 +293,11 @@ repo_emit_p (tree decl)
   int ret = 0;
   gcc_assert (TREE_PUBLIC (decl));
   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
-  gcc_assert (!DECL_REALLY_EXTERN (decl));
+  gcc_assert (!DECL_REALLY_EXTERN (decl)
+             /* A clone might not have its linkage flags updated yet
+                because we call import_export_decl before
+                maybe_clone_body.  */
+             || DECL_ABSTRACT_ORIGIN (decl));
 
   /* When not using the repository, emit everything.  */
   if (!flag_use_repository)
index 5c6a9d3..bbed56f 100644 (file)
@@ -1629,6 +1629,9 @@ force_paren_expr (tree expr)
          tree type = unlowered_expr_type (expr);
          bool rval = !!(kind & clk_rvalueref);
          type = cp_build_reference_type (type, rval);
+         /* This inhibits warnings in, eg, cxx_mark_addressable
+            (c++/60955).  */
+         warning_sentinel s (extra_warnings);
          expr = build_static_cast (type, expr, tf_error);
          if (expr != error_mark_node)
            REF_PARENTHESIZED_P (expr) = true;
@@ -3800,6 +3803,14 @@ finish_bases (tree type, bool direct)
 tree
 finish_offsetof (tree expr)
 {
+  /* If we're processing a template, we can't finish the semantics yet.
+     Otherwise we can fold the entire expression now.  */
+  if (processing_template_decl)
+    {
+      expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
+      return expr;
+    }
+
   if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
     {
       error ("cannot apply %<offsetof%> to destructor %<~%T%>",
index 2820ba0..11c3521 100644 (file)
@@ -2193,14 +2193,14 @@ no_linkage_check (tree t, bool relaxed_p)
       return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
 
     case METHOD_TYPE:
-      r = no_linkage_check (TYPE_METHOD_BASETYPE (t), relaxed_p);
-      if (r)
-       return r;
-      /* Fall through.  */
     case FUNCTION_TYPE:
       {
-       tree parm;
-       for (parm = TYPE_ARG_TYPES (t);
+       tree parm = TYPE_ARG_TYPES (t);
+       if (TREE_CODE (t) == METHOD_TYPE)
+         /* The 'this' pointer isn't interesting; a method has the same
+            linkage (or lack thereof) as its enclosing class.  */
+         parm = TREE_CHAIN (parm);
+       for (;
             parm && parm != void_list_node;
             parm = TREE_CHAIN (parm))
          {
index 03d7ab8..cd8318d 100644 (file)
@@ -8881,6 +8881,12 @@ apply_memfn_quals (tree type, cp_cv_quals memfn_quals, cp_ref_qualifier rqual)
   /* This should really have a different TYPE_MAIN_VARIANT, but that gets
      complex.  */
   tree result = build_qualified_type (type, memfn_quals);
+  if (tree canon = TYPE_CANONICAL (result))
+    if (canon != result)
+      /* check_qualified_type doesn't check the ref-qualifier, so make sure
+        TYPE_CANONICAL is correct.  */
+      TYPE_CANONICAL (result)
+       = build_ref_qualified_type (canon, type_memfn_rqual (result));
   result = build_exception_variant (result, TYPE_RAISES_EXCEPTIONS (type));
   return build_ref_qualified_type (result, rqual);
 }
index ec9aff4..9b8b816 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -1805,6 +1805,8 @@ merge_equiv_classes (struct table_elt *class1, struct table_elt *class2)
            }
          new_elt = insert (exp, class1, hash, mode);
          new_elt->in_memory = hash_arg_in_memory;
+         if (GET_CODE (exp) == ASM_OPERANDS && elt->cost == MAX_COST)
+           new_elt->cost = MAX_COST;
        }
     }
 }
@@ -4266,7 +4268,7 @@ find_sets_in_insn (rtx insn, struct set **psets)
     {
       int i, lim = XVECLEN (x, 0);
 
-      /* Go over the epressions of the PARALLEL in forward order, to
+      /* Go over the expressions of the PARALLEL in forward order, to
         put them in the same order in the SETS array.  */
       for (i = 0; i < lim; i++)
        {
@@ -4642,12 +4644,27 @@ cse_insn (rtx insn)
          && REGNO (dest) >= FIRST_PSEUDO_REGISTER)
        sets[i].src_volatile = 1;
 
-      /* Also do not record result of a non-volatile inline asm with
-        more than one result or with clobbers, we do not want CSE to
-        break the inline asm apart.  */
       else if (GET_CODE (src) == ASM_OPERANDS
               && GET_CODE (x) == PARALLEL)
-       sets[i].src_volatile = 1;
+       {
+         /* Do not record result of a non-volatile inline asm with
+            more than one result.  */
+         if (n_sets > 1)
+           sets[i].src_volatile = 1;
+
+         int j, lim = XVECLEN (x, 0);
+         for (j = 0; j < lim; j++)
+           {
+             rtx y = XVECEXP (x, 0, j);
+             /* And do not record result of a non-volatile inline asm
+                with "memory" clobber.  */
+             if (GET_CODE (y) == CLOBBER && MEM_P (XEXP (y, 0)))
+               {
+                 sets[i].src_volatile = 1;
+                 break;
+               }
+           }
+       }
 
 #if 0
       /* It is no longer clear why we used to do this, but it doesn't
@@ -5238,8 +5255,8 @@ cse_insn (rtx insn)
            ;
 
          /* Look for a substitution that makes a valid insn.  */
-         else if (validate_unshare_change
-                    (insn, &SET_SRC (sets[i].rtl), trial, 0))
+         else if (validate_unshare_change (insn, &SET_SRC (sets[i].rtl),
+                                           trial, 0))
            {
              rtx new_rtx = canon_reg (SET_SRC (sets[i].rtl), insn);
 
@@ -5600,6 +5617,12 @@ cse_insn (rtx insn)
                  }
                elt = insert (src, classp, sets[i].src_hash, mode);
                elt->in_memory = sets[i].src_in_memory;
+               /* If inline asm has any clobbers, ensure we only reuse
+                  existing inline asms and never try to put the ASM_OPERANDS
+                  into an insn that isn't inline asm.  */
+               if (GET_CODE (src) == ASM_OPERANDS
+                   && GET_CODE (x) == PARALLEL)
+                 elt->cost = MAX_COST;
                sets[i].src_elt = classp = elt;
              }
            if (sets[i].src_const && sets[i].src_const_elt == 0
@@ -5913,6 +5936,9 @@ cse_insn (rtx insn)
                      }
                    src_elt = insert (new_src, classp, src_hash, new_mode);
                    src_elt->in_memory = elt->in_memory;
+                   if (GET_CODE (new_src) == ASM_OPERANDS
+                       && elt->cost == MAX_COST)
+                     src_elt->cost = MAX_COST;
                  }
                else if (classp && classp != src_elt->first_same_value)
                  /* Show that two things that we've seen before are
index 878f507..e78b34b 100644 (file)
--- a/gcc/df.h
+++ b/gcc/df.h
@@ -1134,20 +1134,22 @@ df_get_artificial_uses (unsigned int bb_index)
 
 /* web */
 
-/* This entry is allocated for each reference in the insn stream.  */
-struct web_entry
+class web_entry_base
 {
-  /* Pointer to the parent in the union/find tree.  */
-  struct web_entry *pred;
-  /* Newly assigned register to the entry.  Set only for roots.  */
-  rtx reg;
-  void* extra_info;
-};
+ private:
+  /* Reference to the parent in the union/find tree.  */
+  web_entry_base *pred_pvt;
+
+ public:
+  /* Accessors.  */
+  web_entry_base *pred () { return pred_pvt; }
+  void set_pred (web_entry_base *p) { pred_pvt = p; }
 
-extern struct web_entry *unionfind_root (struct web_entry *);
-extern bool unionfind_union (struct web_entry *, struct web_entry *);
-extern void union_defs (df_ref, struct web_entry *,
-                       unsigned int *used, struct web_entry *,
-                       bool (*fun) (struct web_entry *, struct web_entry *));
+  /* Find representative in union-find tree.  */
+  web_entry_base *unionfind_root ();
+
+  /* Union with another set, returning TRUE if they are already unioned.  */
+  friend bool unionfind_union (web_entry_base *first, web_entry_base *second);
+};
 
 #endif /* GCC_DF_H */
index 7789811..7a3aecf 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "AOT-COMPILE 1"
-.TH AOT-COMPILE 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH AOT-COMPILE 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index ae5d635..261f518 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "CPP 1"
-.TH CPP 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH CPP 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -1021,7 +1021,7 @@ main input file is omitted.
 \&\fIbinutils\fR.
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (c) 1987\-2014 Free Software Foundation, Inc.
+Copyright (c) 1987\-2015 Free Software Foundation, Inc.
 .PP
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
index 1c7849b..c21a378 100644 (file)
@@ -1,6 +1,6 @@
 This is cpp.info, produced by makeinfo version 5.2 from cpp.texi.
 
-Copyright (C) 1987-2014 Free Software Foundation, Inc.
+Copyright (C) 1987-2015 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -131,7 +131,7 @@ Obsolete Features
 * Obsolete Features::
 
 
-   Copyright (C) 1987-2014 Free Software Foundation, Inc.
+   Copyright (C) 1987-2015 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index 0a6e50c..e4af7ff 100644 (file)
@@ -10,7 +10,7 @@
 
 @copying
 @c man begin COPYRIGHT
-Copyright @copyright{} 1987-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1987-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index cee42f6..a597a1b 100644 (file)
@@ -8,7 +8,7 @@ END-INFO-DIR-ENTRY
 
 This file documents the internals of the GNU C Preprocessor.
 
-   Copyright (C) 2000-2014 Free Software Foundation, Inc.
+   Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
    Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
index 8b329d6..29efa80 100644 (file)
@@ -18,7 +18,7 @@
 @ifinfo
 This file documents the internals of the GNU C Preprocessor.
 
-Copyright (C) 2000-2014 Free Software Foundation, Inc.
+Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -47,7 +47,7 @@ into another language, under the above conditions for modified versions.
 @page
 @vskip 0pt plus 1filll
 @c man begin COPYRIGHT
-Copyright @copyright{} 2000-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2000-2015 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
index 10ad6e4..07a7721 100644 (file)
@@ -3323,16 +3323,19 @@ this function attribute to make GCC generate the ``hot-patching'' function
 prologue used in Win32 API functions in Microsoft Windows XP Service Pack 2
 and newer.
 
-@item hotpatch [(@var{prologue-halfwords})]
+@item hotpatch (@var{halfwords-before-function-label},@var{halfwords-after-function-label})
 @cindex @code{hotpatch} attribute
 
 On S/390 System z targets, you can use this function attribute to
-make GCC generate a ``hot-patching'' function prologue.  The
-@code{hotpatch} has no effect on funtions that are explicitly
-inline.  If the @option{-mhotpatch} or @option{-mno-hotpatch}
-command-line option is used at the same time, the @code{hotpatch}
-attribute takes precedence.  If an argument is given, the maximum
-allowed value is 1000000.
+make GCC generate a ``hot-patching'' function prologue.  If the
+@option{-mhotpatch=} command-line option is used at the same time,
+the @code{hotpatch} attribute takes precedence.  The first of the
+two arguments specifies the number of halfwords to be added before
+the function label.  A second argument can be used to specify the
+number of halfwords to be added after the function label.  For
+both arguments the maximum allowed value is 1000000.
+
+If both ar guments are zero, hotpatching is disabled.
 
 @item naked
 @cindex function without a prologue/epilogue code
@@ -13233,16 +13236,22 @@ vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
 vector bool int vec_cmplt (vector signed int, vector signed int);
 vector bool int vec_cmplt (vector float, vector float);
 
+vector float vec_cpsgn (vector float, vector float);
+
 vector float vec_ctf (vector unsigned int, const int);
 vector float vec_ctf (vector signed int, const int);
+vector double vec_ctf (vector unsigned long, const int);
+vector double vec_ctf (vector signed long, const int);
 
 vector float vec_vcfsx (vector signed int, const int);
 
 vector float vec_vcfux (vector unsigned int, const int);
 
 vector signed int vec_cts (vector float, const int);
+vector signed long vec_cts (vector double, const int);
 
 vector unsigned int vec_ctu (vector float, const int);
+vector unsigned long vec_ctu (vector double, const int);
 
 void vec_dss (const int);
 
@@ -14078,6 +14087,16 @@ vector float vec_splat (vector float, const int);
 vector signed int vec_splat (vector signed int, const int);
 vector unsigned int vec_splat (vector unsigned int, const int);
 vector bool int vec_splat (vector bool int, const int);
+vector signed long vec_splat (vector signed long, const int);
+vector unsigned long vec_splat (vector unsigned long, const int);
+
+vector signed char vec_splats (signed char);
+vector unsigned char vec_splats (unsigned char);
+vector signed short vec_splats (signed short);
+vector unsigned short vec_splats (unsigned short);
+vector signed int vec_splats (signed int);
+vector unsigned int vec_splats (unsigned int);
+vector float vec_splats (float);
 
 vector float vec_vspltw (vector float, const int);
 vector signed int vec_vspltw (vector signed int, const int);
@@ -14782,17 +14801,32 @@ vector double vec_add (vector double, vector double);
 vector double vec_and (vector double, vector double);
 vector double vec_and (vector double, vector bool long);
 vector double vec_and (vector bool long, vector double);
+vector long vec_and (vector long, vector long);
+vector long vec_and (vector long, vector bool long);
+vector long vec_and (vector bool long, vector long);
+vector unsigned long vec_and (vector unsigned long, vector unsigned long);
+vector unsigned long vec_and (vector unsigned long, vector bool long);
+vector unsigned long vec_and (vector bool long, vector unsigned long);
 vector double vec_andc (vector double, vector double);
 vector double vec_andc (vector double, vector bool long);
 vector double vec_andc (vector bool long, vector double);
+vector long vec_andc (vector long, vector long);
+vector long vec_andc (vector long, vector bool long);
+vector long vec_andc (vector bool long, vector long);
+vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
+vector unsigned long vec_andc (vector unsigned long, vector bool long);
+vector unsigned long vec_andc (vector bool long, vector unsigned long);
 vector double vec_ceil (vector double);
 vector bool long vec_cmpeq (vector double, vector double);
 vector bool long vec_cmpge (vector double, vector double);
 vector bool long vec_cmpgt (vector double, vector double);
 vector bool long vec_cmple (vector double, vector double);
 vector bool long vec_cmplt (vector double, vector double);
+vector double vec_cpsgn (vector double, vector double);
 vector float vec_div (vector float, vector float);
 vector double vec_div (vector double, vector double);
+vector long vec_div (vector long, vector long);
+vector unsigned long vec_div (vector unsigned long, vector unsigned long);
 vector double vec_floor (vector double);
 vector double vec_ld (int, const vector double *);
 vector double vec_ld (int, const double *);
@@ -14802,38 +14836,83 @@ vector unsigned char vec_lvsl (int, const volatile double *);
 vector unsigned char vec_lvsr (int, const volatile double *);
 vector double vec_madd (vector double, vector double, vector double);
 vector double vec_max (vector double, vector double);
+vector signed long vec_mergeh (vector signed long, vector signed long);
+vector signed long vec_mergeh (vector signed long, vector bool long);
+vector signed long vec_mergeh (vector bool long, vector signed long);
+vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
+vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
+vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
+vector signed long vec_mergel (vector signed long, vector signed long);
+vector signed long vec_mergel (vector signed long, vector bool long);
+vector signed long vec_mergel (vector bool long, vector signed long);
+vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
+vector unsigned long vec_mergel (vector unsigned long, vector bool long);
+vector unsigned long vec_mergel (vector bool long, vector unsigned long);
 vector double vec_min (vector double, vector double);
 vector float vec_msub (vector float, vector float, vector float);
 vector double vec_msub (vector double, vector double, vector double);
 vector float vec_mul (vector float, vector float);
 vector double vec_mul (vector double, vector double);
+vector long vec_mul (vector long, vector long);
+vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
 vector float vec_nearbyint (vector float);
 vector double vec_nearbyint (vector double);
 vector float vec_nmadd (vector float, vector float, vector float);
 vector double vec_nmadd (vector double, vector double, vector double);
 vector double vec_nmsub (vector double, vector double, vector double);
 vector double vec_nor (vector double, vector double);
+vector long vec_nor (vector long, vector long);
+vector long vec_nor (vector long, vector bool long);
+vector long vec_nor (vector bool long, vector long);
+vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
+vector unsigned long vec_nor (vector unsigned long, vector bool long);
+vector unsigned long vec_nor (vector bool long, vector unsigned long);
 vector double vec_or (vector double, vector double);
 vector double vec_or (vector double, vector bool long);
 vector double vec_or (vector bool long, vector double);
-vector double vec_perm (vector double,
-                        vector double,
-                        vector unsigned char);
+vector long vec_or (vector long, vector long);
+vector long vec_or (vector long, vector bool long);
+vector long vec_or (vector bool long, vector long);
+vector unsigned long vec_or (vector unsigned long, vector unsigned long);
+vector unsigned long vec_or (vector unsigned long, vector bool long);
+vector unsigned long vec_or (vector bool long, vector unsigned long);
+vector double vec_perm (vector double, vector double, vector unsigned char);
+vector long vec_perm (vector long, vector long, vector unsigned char);
+vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
+                               vector unsigned char);
 vector double vec_rint (vector double);
 vector double vec_recip (vector double, vector double);
 vector double vec_rsqrt (vector double);
 vector double vec_rsqrte (vector double);
 vector double vec_sel (vector double, vector double, vector bool long);
 vector double vec_sel (vector double, vector double, vector unsigned long);
-vector double vec_sub (vector double, vector double);
+vector long vec_sel (vector long, vector long, vector long);
+vector long vec_sel (vector long, vector long, vector unsigned long);
+vector long vec_sel (vector long, vector long, vector bool long);
+vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
+                              vector long);
+vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
+                              vector unsigned long);
+vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
+                              vector bool long);
+vector double vec_splats (double);
+vector signed long vec_splats (signed long);
+vector unsigned long vec_splats (unsigned long);
 vector float vec_sqrt (vector float);
 vector double vec_sqrt (vector double);
 void vec_st (vector double, int, vector double *);
 void vec_st (vector double, int, double *);
+vector double vec_sub (vector double, vector double);
 vector double vec_trunc (vector double);
 vector double vec_xor (vector double, vector double);
 vector double vec_xor (vector double, vector bool long);
 vector double vec_xor (vector bool long, vector double);
+vector long vec_xor (vector long, vector long);
+vector long vec_xor (vector long, vector bool long);
+vector long vec_xor (vector bool long, vector long);
+vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
+vector unsigned long vec_xor (vector unsigned long, vector bool long);
+vector unsigned long vec_xor (vector bool long, vector unsigned long);
 int vec_all_eq (vector double, vector double);
 int vec_all_ge (vector double, vector double);
 int vec_all_gt (vector double, vector double);
@@ -14962,17 +15041,30 @@ vector unsigned long long vec_add (vector unsigned long long,
                                    vector unsigned long long);
 
 int vec_all_eq (vector long long, vector long long);
+int vec_all_eq (vector unsigned long long, vector unsigned long long);
 int vec_all_ge (vector long long, vector long long);
+int vec_all_ge (vector unsigned long long, vector unsigned long long);
 int vec_all_gt (vector long long, vector long long);
+int vec_all_gt (vector unsigned long long, vector unsigned long long);
 int vec_all_le (vector long long, vector long long);
+int vec_all_le (vector unsigned long long, vector unsigned long long);
 int vec_all_lt (vector long long, vector long long);
+int vec_all_lt (vector unsigned long long, vector unsigned long long);
 int vec_all_ne (vector long long, vector long long);
+int vec_all_ne (vector unsigned long long, vector unsigned long long);
+
 int vec_any_eq (vector long long, vector long long);
+int vec_any_eq (vector unsigned long long, vector unsigned long long);
 int vec_any_ge (vector long long, vector long long);
+int vec_any_ge (vector unsigned long long, vector unsigned long long);
 int vec_any_gt (vector long long, vector long long);
+int vec_any_gt (vector unsigned long long, vector unsigned long long);
 int vec_any_le (vector long long, vector long long);
+int vec_any_le (vector unsigned long long, vector unsigned long long);
 int vec_any_lt (vector long long, vector long long);
+int vec_any_lt (vector unsigned long long, vector unsigned long long);
 int vec_any_ne (vector long long, vector long long);
+int vec_any_ne (vector unsigned long long, vector unsigned long long);
 
 vector long long vec_eqv (vector long long, vector long long);
 vector long long vec_eqv (vector bool long long, vector long long);
@@ -15010,6 +15102,14 @@ vector long long vec_max (vector long long, vector long long);
 vector unsigned long long vec_max (vector unsigned long long,
                                    vector unsigned long long);
 
+vector signed int vec_mergee (vector signed int, vector signed int);
+vector unsigned int vec_mergee (vector unsigned int, vector unsigned int);
+vector bool int vec_mergee (vector bool int, vector bool int);
+
+vector signed int vec_mergeo (vector signed int, vector signed int);
+vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int);
+vector bool int vec_mergeo (vector bool int, vector bool int);
+
 vector long long vec_min (vector long long, vector long long);
 vector unsigned long long vec_min (vector unsigned long long,
                                    vector unsigned long long);
@@ -15088,6 +15188,8 @@ vector unsigned int vec_packs (vector unsigned long long,
                                vector unsigned long long);
 
 vector unsigned int vec_packsu (vector long long, vector long long);
+vector unsigned int vec_packsu (vector unsigned long long,
+                                vector unsigned long long);
 
 vector long long vec_rl (vector long long,
                          vector unsigned long long);
@@ -15129,6 +15231,15 @@ vector unsigned long long vec_vaddudm (vector unsigned long long,
 vector long long vec_vbpermq (vector signed char, vector signed char);
 vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
 
+vector long long vec_cntlz (vector long long);
+vector unsigned long long vec_cntlz (vector unsigned long long);
+vector int vec_cntlz (vector int);
+vector unsigned int vec_cntlz (vector int);
+vector short vec_cntlz (vector short);
+vector unsigned short vec_cntlz (vector unsigned short);
+vector signed char vec_cntlz (vector signed char);
+vector unsigned char vec_cntlz (vector unsigned char);
+
 vector long long vec_vclz (vector long long);
 vector unsigned long long vec_vclz (vector unsigned long long);
 vector int vec_vclz (vector int);
@@ -15359,10 +15470,15 @@ The following low level built-in functions are available with
 @option{-mhtm} or @option{-mcpu=CPU} where CPU is `power8' or later.
 They all generate the machine instruction that is part of the name.
 
-The HTM built-ins return true or false depending on their success and
-their arguments match exactly the type and order of the associated
-hardware instruction's operands.  Refer to the ISA manual for a
-description of each instruction's operands.
+The HTM builtins (with the exception of @code{__builtin_tbegin}) return
+the full 4-bit condition register value set by their associated hardware
+instruction.  The header file @code{htmintrin.h} defines some macros that can
+be used to decipher the return value.  The @code{__builtin_tbegin} builtin
+returns a simple true or false value depending on whether a transaction was
+successfully started or not.  The arguments of the builtins match exactly the
+type and order of the associated hardware instruction's operands, except for
+the @code{__builtin_tcheck} builtin, which does not take any input arguments.
+Refer to the ISA manual for a description of each instruction's operands.
 
 @smallexample
 unsigned int __builtin_tbegin (unsigned int)
@@ -15374,7 +15490,7 @@ unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
 unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
 unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
 
-unsigned int __builtin_tcheck (unsigned int)
+unsigned int __builtin_tcheck (void)
 unsigned int __builtin_treclaim (unsigned int)
 unsigned int __builtin_trechkpt (void)
 unsigned int __builtin_tsr (unsigned int)
@@ -15509,7 +15625,7 @@ TM_buff_type TM_buff;
 
 while (1)
   @{
-    if (__TM_begin (TM_buff))
+    if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
       @{
         /* Transaction State Initiated.  */
         if (is_locked (lock))
index a59b25b..c3d3729 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "FSF-FUNDING 7"
-.TH FSF-FUNDING 7 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH FSF-FUNDING 7 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 44e4e42..4706c41 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GCC 1"
-.TH GCC 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH GCC 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -501,6 +501,7 @@ in the following sections.
 \&\-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
 \&\-mtls\-dialect=desc  \-mtls\-dialect=traditional 
 \&\-mfix\-cortex\-a53\-835769  \-mno\-fix\-cortex\-a53\-835769 
+\&\-mfix\-cortex\-a53\-843419  \-mno\-fix\-cortex\-a53\-843419 
 \&\-march=\fR\fIname\fR  \fB\-mcpu=\fR\fIname\fR  \fB\-mtune=\fR\fIname\fR
 .Sp
 \&\fIAdapteva Epiphany Options\fR
@@ -969,7 +970,7 @@ See \s-1RS/6000\s0 and PowerPC Options.
 \&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
 \&\-mtpf\-trace \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
 \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size \-mstack\-guard 
-\&\-mhotpatch[=\fR\fIhalfwords\fR\fB] \-mno\-hotpatch\fR
+\&\-mhotpatch=\fR\fIhalfwords\fR\fB,\fR\fIhalfwords\fR
 .Sp
 \&\fIScore Options\fR
 \&\fB\-meb \-mel 
@@ -6752,6 +6753,15 @@ registers after writing to their lower 32\-bit half.
 .Sp
 Enabled for Alpha, AArch64 and x86 at levels \fB\-O2\fR,
 \&\fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fno\-lifetime\-dse\fR" 4
+.IX Item "-fno-lifetime-dse"
+In \*(C+ the value of an object is only affected by changes within its
+lifetime: when the constructor begins, the object has an indeterminate
+value, and any changes during the lifetime of the object are dead when
+the object is destroyed.  Normally dead store elimination will take
+advantage of this; if your code relies on the value of the object
+storage persisting beyond the lifetime of the object, you can use this
+flag to disable this optimization.
 .IP "\fB\-flive\-range\-shrinkage\fR" 4
 .IX Item "-flive-range-shrinkage"
 Attempt to decrease register pressure through register live range
@@ -10698,6 +10708,15 @@ of \s-1TLS\s0 variables.
 Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 835769.
 This will involve inserting a \s-1NOP\s0 instruction between memory instructions and
 64\-bit integer multiply-accumulate instructions.
+.IP "\fB\-mfix\-cortex\-a53\-843419\fR" 4
+.IX Item "-mfix-cortex-a53-843419"
+.PD 0
+.IP "\fB\-mno\-fix\-cortex\-a53\-843419\fR" 4
+.IX Item "-mno-fix-cortex-a53-843419"
+.PD
+Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 843419.
+This erratum workaround is made at link time and this will only pass the
+corresponding flag to the linker.
 .IP "\fB\-march=\fR\fIname\fR" 4
 .IX Item "-march=name"
 Specify the name of the target architecture, optionally suffixed by one or
@@ -17842,12 +17861,13 @@ Supported values for \fIcpu_type\fR are \fB401\fR, \fB403\fR,
 \&\fBe6500\fR, \fBec603e\fR, \fBG3\fR, \fBG4\fR, \fBG5\fR,
 \&\fBtitan\fR, \fBpower3\fR, \fBpower4\fR, \fBpower5\fR, \fBpower5+\fR,
 \&\fBpower6\fR, \fBpower6x\fR, \fBpower7\fR, \fBpower8\fR, \fBpowerpc\fR,
-\&\fBpowerpc64\fR, and \fBrs64\fR.
+\&\fBpowerpc64\fR, \fBpowerpc64le\fR, and \fBrs64\fR.
 .Sp
-\&\fB\-mcpu=powerpc\fR, and \fB\-mcpu=powerpc64\fR specify pure 32\-bit
-PowerPC and 64\-bit PowerPC architecture machine
-types, with an appropriate, generic processor model assumed for
-scheduling purposes.
+\&\fB\-mcpu=powerpc\fR, \fB\-mcpu=powerpc64\fR, and
+\&\fB\-mcpu=powerpc64le\fR specify pure 32\-bit PowerPC (either
+endian), 64\-bit big endian PowerPC and 64\-bit little endian PowerPC
+architecture machine types, with an appropriate, generic processor
+model assumed for scheduling purposes.
 .Sp
 The other options specify a specific processor.  Code generated under
 those options runs best on that processor, and may not run at all on
@@ -19146,13 +19166,13 @@ Print (or do not print) additional debug information when compiling.
 The default is to not print debug information.
 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
 .IX Item "-march=cpu-type"
-Generate code that runs on \fIcpu-type\fR, which is the name of a system
-representing a certain processor type.  Possible values for
+Generate code that runs on \fIcpu-type\fR, which is the name of a
+system representing a certain processor type.  Possible values for
 \&\fIcpu-type\fR are \fBg5\fR, \fBg6\fR, \fBz900\fR, \fBz990\fR,
-\&\fBz9\-109\fR, \fBz9\-ec\fR and \fBz10\fR.
-When generating code using the instructions available on z/Architecture,
-the default is \fB\-march=z900\fR.  Otherwise, the default is
-\&\fB\-march=g5\fR.
+\&\fBz9\-109\fR, \fBz9\-ec\fR, \fBz10\fR, \fBz196\fR, and
+\&\fBzEC12\fR.  When generating code using the instructions available
+on z/Architecture, the default is \fB\-march=z900\fR.  Otherwise,
+the default is \fB\-march=g5\fR.
 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
 .IX Item "-mtune=cpu-type"
 Tune to \fIcpu-type\fR everything applicable about the generated code,
@@ -19207,20 +19227,17 @@ values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
 In order to be efficient the extra code makes the assumption that the stack starts
 at an address aligned to the value given by \fIstack-size\fR.
 The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
-.IP "\fB\-mhotpatch[=\fR\fIhalfwords\fR\fB]\fR" 4
-.IX Item "-mhotpatch[=halfwords]"
-.PD 0
-.IP "\fB\-mno\-hotpatch\fR" 4
-.IX Item "-mno-hotpatch"
-.PD
+.IP "\fB\-mhotpatch=\fR\fIpre-halfwords\fR\fB,\fR\fIpost-halfwords\fR" 4
+.IX Item "-mhotpatch=pre-halfwords,post-halfwords"
 If the hotpatch option is enabled, a \*(L"hot-patching\*(R" function
 prologue is generated for all functions in the compilation unit.
 The funtion label is prepended with the given number of two-byte
-Nop instructions (\fIhalfwords\fR, maximum 1000000) or 12 Nop
-instructions if no argument is present.  Functions with a
-hot-patching prologue are never inlined automatically, and a
-hot-patching prologue is never generated for functions functions
-that are explicitly inline.
+\&\s-1NOP\s0 instructions (\fIpre-halfwords\fR, maximum 1000000).  After
+the label, 2 * \fIpost-halfwords\fR bytes are appended, using the
+largest \s-1NOP\s0 like instructions the architecture allows (maximum
+1000000).
+.Sp
+If both arguments are zero, hotpatching is disabled.
 .Sp
 This option can be overridden for individual functions with the
 \&\f(CW\*(C`hotpatch\*(C'\fR attribute.
@@ -19926,8 +19943,8 @@ the rules of the \s-1ABI.\s0
 Set the instruction set, register set, and instruction scheduling parameters
 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
 \&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBhypersparc\fR,
-\&\fBleon\fR, \fBleon3\fR, \fBsparclite\fR, \fBf930\fR, \fBf934\fR,
-\&\fBsparclite86x\fR, \fBsparclet\fR, \fBtsc701\fR, \fBv9\fR,
+\&\fBleon\fR, \fBleon3\fR, \fBleon3v7\fR, \fBsparclite\fR, \fBf930\fR,
+\&\fBf934\fR, \fBsparclite86x\fR, \fBsparclet\fR, \fBtsc701\fR, \fBv9\fR,
 \&\fBultrasparc\fR, \fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR,
 \&\fBniagara3\fR and \fBniagara4\fR.
 .Sp
@@ -19945,7 +19962,7 @@ implementations.
 .RS 4
 .IP "v7" 4
 .IX Item "v7"
-cypress
+cypress, leon3v7
 .IP "v8" 4
 .IX Item "v8"
 supersparc, hypersparc, leon, leon3
@@ -20011,11 +20028,11 @@ option \fB\-mcpu=\fR\fIcpu_type\fR does.
 The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
 \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
 that select a particular \s-1CPU\s0 implementation.  Those are \fBcypress\fR,
-\&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBleon3\fR, \fBf930\fR,
-\&\fBf934\fR, \fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
-\&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR and
-\&\fBniagara4\fR.  With native Solaris and GNU/Linux toolchains, \fBnative\fR
-can also be used.
+\&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBleon3\fR,
+\&\fBleon3v7\fR, \fBf930\fR, \fBf934\fR, \fBsparclite86x\fR, \fBtsc701\fR,
+\&\fBultrasparc\fR, \fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR,
+\&\fBniagara3\fR and \fBniagara4\fR.  With native Solaris and GNU/Linux
+toolchains, \fBnative\fR can also be used.
 .IP "\fB\-mv8plus\fR" 4
 .IX Item "-mv8plus"
 .PD 0
@@ -21635,7 +21652,7 @@ See the Info entry for \fBgcc\fR, or
 for contributors to \s-1GCC.\s0
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (c) 1988\-2014 Free Software Foundation, Inc.
+Copyright (c) 1988\-2015 Free Software Foundation, Inc.
 .PP
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
index 513b919..7296698 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GC-ANALYZE 1"
-.TH GC-ANALYZE 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH GC-ANALYZE 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 44e4e42..4706c41 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GCC 1"
-.TH GCC 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH GCC 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -501,6 +501,7 @@ in the following sections.
 \&\-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
 \&\-mtls\-dialect=desc  \-mtls\-dialect=traditional 
 \&\-mfix\-cortex\-a53\-835769  \-mno\-fix\-cortex\-a53\-835769 
+\&\-mfix\-cortex\-a53\-843419  \-mno\-fix\-cortex\-a53\-843419 
 \&\-march=\fR\fIname\fR  \fB\-mcpu=\fR\fIname\fR  \fB\-mtune=\fR\fIname\fR
 .Sp
 \&\fIAdapteva Epiphany Options\fR
@@ -969,7 +970,7 @@ See \s-1RS/6000\s0 and PowerPC Options.
 \&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
 \&\-mtpf\-trace \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
 \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size \-mstack\-guard 
-\&\-mhotpatch[=\fR\fIhalfwords\fR\fB] \-mno\-hotpatch\fR
+\&\-mhotpatch=\fR\fIhalfwords\fR\fB,\fR\fIhalfwords\fR
 .Sp
 \&\fIScore Options\fR
 \&\fB\-meb \-mel 
@@ -6752,6 +6753,15 @@ registers after writing to their lower 32\-bit half.
 .Sp
 Enabled for Alpha, AArch64 and x86 at levels \fB\-O2\fR,
 \&\fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fno\-lifetime\-dse\fR" 4
+.IX Item "-fno-lifetime-dse"
+In \*(C+ the value of an object is only affected by changes within its
+lifetime: when the constructor begins, the object has an indeterminate
+value, and any changes during the lifetime of the object are dead when
+the object is destroyed.  Normally dead store elimination will take
+advantage of this; if your code relies on the value of the object
+storage persisting beyond the lifetime of the object, you can use this
+flag to disable this optimization.
 .IP "\fB\-flive\-range\-shrinkage\fR" 4
 .IX Item "-flive-range-shrinkage"
 Attempt to decrease register pressure through register live range
@@ -10698,6 +10708,15 @@ of \s-1TLS\s0 variables.
 Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 835769.
 This will involve inserting a \s-1NOP\s0 instruction between memory instructions and
 64\-bit integer multiply-accumulate instructions.
+.IP "\fB\-mfix\-cortex\-a53\-843419\fR" 4
+.IX Item "-mfix-cortex-a53-843419"
+.PD 0
+.IP "\fB\-mno\-fix\-cortex\-a53\-843419\fR" 4
+.IX Item "-mno-fix-cortex-a53-843419"
+.PD
+Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 843419.
+This erratum workaround is made at link time and this will only pass the
+corresponding flag to the linker.
 .IP "\fB\-march=\fR\fIname\fR" 4
 .IX Item "-march=name"
 Specify the name of the target architecture, optionally suffixed by one or
@@ -17842,12 +17861,13 @@ Supported values for \fIcpu_type\fR are \fB401\fR, \fB403\fR,
 \&\fBe6500\fR, \fBec603e\fR, \fBG3\fR, \fBG4\fR, \fBG5\fR,
 \&\fBtitan\fR, \fBpower3\fR, \fBpower4\fR, \fBpower5\fR, \fBpower5+\fR,
 \&\fBpower6\fR, \fBpower6x\fR, \fBpower7\fR, \fBpower8\fR, \fBpowerpc\fR,
-\&\fBpowerpc64\fR, and \fBrs64\fR.
+\&\fBpowerpc64\fR, \fBpowerpc64le\fR, and \fBrs64\fR.
 .Sp
-\&\fB\-mcpu=powerpc\fR, and \fB\-mcpu=powerpc64\fR specify pure 32\-bit
-PowerPC and 64\-bit PowerPC architecture machine
-types, with an appropriate, generic processor model assumed for
-scheduling purposes.
+\&\fB\-mcpu=powerpc\fR, \fB\-mcpu=powerpc64\fR, and
+\&\fB\-mcpu=powerpc64le\fR specify pure 32\-bit PowerPC (either
+endian), 64\-bit big endian PowerPC and 64\-bit little endian PowerPC
+architecture machine types, with an appropriate, generic processor
+model assumed for scheduling purposes.
 .Sp
 The other options specify a specific processor.  Code generated under
 those options runs best on that processor, and may not run at all on
@@ -19146,13 +19166,13 @@ Print (or do not print) additional debug information when compiling.
 The default is to not print debug information.
 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
 .IX Item "-march=cpu-type"
-Generate code that runs on \fIcpu-type\fR, which is the name of a system
-representing a certain processor type.  Possible values for
+Generate code that runs on \fIcpu-type\fR, which is the name of a
+system representing a certain processor type.  Possible values for
 \&\fIcpu-type\fR are \fBg5\fR, \fBg6\fR, \fBz900\fR, \fBz990\fR,
-\&\fBz9\-109\fR, \fBz9\-ec\fR and \fBz10\fR.
-When generating code using the instructions available on z/Architecture,
-the default is \fB\-march=z900\fR.  Otherwise, the default is
-\&\fB\-march=g5\fR.
+\&\fBz9\-109\fR, \fBz9\-ec\fR, \fBz10\fR, \fBz196\fR, and
+\&\fBzEC12\fR.  When generating code using the instructions available
+on z/Architecture, the default is \fB\-march=z900\fR.  Otherwise,
+the default is \fB\-march=g5\fR.
 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
 .IX Item "-mtune=cpu-type"
 Tune to \fIcpu-type\fR everything applicable about the generated code,
@@ -19207,20 +19227,17 @@ values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
 In order to be efficient the extra code makes the assumption that the stack starts
 at an address aligned to the value given by \fIstack-size\fR.
 The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
-.IP "\fB\-mhotpatch[=\fR\fIhalfwords\fR\fB]\fR" 4
-.IX Item "-mhotpatch[=halfwords]"
-.PD 0
-.IP "\fB\-mno\-hotpatch\fR" 4
-.IX Item "-mno-hotpatch"
-.PD
+.IP "\fB\-mhotpatch=\fR\fIpre-halfwords\fR\fB,\fR\fIpost-halfwords\fR" 4
+.IX Item "-mhotpatch=pre-halfwords,post-halfwords"
 If the hotpatch option is enabled, a \*(L"hot-patching\*(R" function
 prologue is generated for all functions in the compilation unit.
 The funtion label is prepended with the given number of two-byte
-Nop instructions (\fIhalfwords\fR, maximum 1000000) or 12 Nop
-instructions if no argument is present.  Functions with a
-hot-patching prologue are never inlined automatically, and a
-hot-patching prologue is never generated for functions functions
-that are explicitly inline.
+\&\s-1NOP\s0 instructions (\fIpre-halfwords\fR, maximum 1000000).  After
+the label, 2 * \fIpost-halfwords\fR bytes are appended, using the
+largest \s-1NOP\s0 like instructions the architecture allows (maximum
+1000000).
+.Sp
+If both arguments are zero, hotpatching is disabled.
 .Sp
 This option can be overridden for individual functions with the
 \&\f(CW\*(C`hotpatch\*(C'\fR attribute.
@@ -19926,8 +19943,8 @@ the rules of the \s-1ABI.\s0
 Set the instruction set, register set, and instruction scheduling parameters
 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
 \&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBhypersparc\fR,
-\&\fBleon\fR, \fBleon3\fR, \fBsparclite\fR, \fBf930\fR, \fBf934\fR,
-\&\fBsparclite86x\fR, \fBsparclet\fR, \fBtsc701\fR, \fBv9\fR,
+\&\fBleon\fR, \fBleon3\fR, \fBleon3v7\fR, \fBsparclite\fR, \fBf930\fR,
+\&\fBf934\fR, \fBsparclite86x\fR, \fBsparclet\fR, \fBtsc701\fR, \fBv9\fR,
 \&\fBultrasparc\fR, \fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR,
 \&\fBniagara3\fR and \fBniagara4\fR.
 .Sp
@@ -19945,7 +19962,7 @@ implementations.
 .RS 4
 .IP "v7" 4
 .IX Item "v7"
-cypress
+cypress, leon3v7
 .IP "v8" 4
 .IX Item "v8"
 supersparc, hypersparc, leon, leon3
@@ -20011,11 +20028,11 @@ option \fB\-mcpu=\fR\fIcpu_type\fR does.
 The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
 \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
 that select a particular \s-1CPU\s0 implementation.  Those are \fBcypress\fR,
-\&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBleon3\fR, \fBf930\fR,
-\&\fBf934\fR, \fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
-\&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR and
-\&\fBniagara4\fR.  With native Solaris and GNU/Linux toolchains, \fBnative\fR
-can also be used.
+\&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBleon3\fR,
+\&\fBleon3v7\fR, \fBf930\fR, \fBf934\fR, \fBsparclite86x\fR, \fBtsc701\fR,
+\&\fBultrasparc\fR, \fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR,
+\&\fBniagara3\fR and \fBniagara4\fR.  With native Solaris and GNU/Linux
+toolchains, \fBnative\fR can also be used.
 .IP "\fB\-mv8plus\fR" 4
 .IX Item "-mv8plus"
 .PD 0
@@ -21635,7 +21652,7 @@ See the Info entry for \fBgcc\fR, or
 for contributors to \s-1GCC.\s0
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (c) 1988\-2014 Free Software Foundation, Inc.
+Copyright (c) 1988\-2015 Free Software Foundation, Inc.
 .PP
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
index 054024c..b780c5e 100644 (file)
@@ -1,6 +1,6 @@
 This is gcc.info, produced by makeinfo version 5.2 from gcc.texi.
 
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
  Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -28,7 +28,7 @@ END-INFO-DIR-ENTRY
 
  This file documents the use of the GNU compilers.
 
- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+ Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
  Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -56,7 +56,7 @@ Introduction
 
 This manual documents how to use the GNU compilers, as well as their
 features and incompatibilities, and how to report bugs.  It corresponds
-to the compilers (GCC) version 4.9.2.  The internals of the GNU
+to the compilers (GCC) version 4.9.3.  The internals of the GNU
 compilers, including how to port them to new targets and some
 information about how to write front ends for new languages, are
 documented in a separate manual.  *Note Introduction: (gccint)Top.
@@ -775,6 +775,7 @@ _Machine Dependent Options_
           -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
           -mtls-dialect=desc  -mtls-dialect=traditional
           -mfix-cortex-a53-835769  -mno-fix-cortex-a53-835769
+          -mfix-cortex-a53-843419  -mno-fix-cortex-a53-843419
           -march=NAME  -mcpu=NAME  -mtune=NAME
 
      _Adapteva Epiphany Options_
@@ -1242,7 +1243,7 @@ _Machine Dependent Options_
           -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
           -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
           -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
-          -mhotpatch[=HALFWORDS] -mno-hotpatch
+          -mhotpatch=HALFWORDS,HALFWORDS
 
      _Score Options_
           -meb -mel
@@ -6735,6 +6736,15 @@ optimizations to be performed is desired.
 
      Enabled for Alpha, AArch64 and x86 at levels '-O2', '-O3', '-Os'.
 
+'-fno-lifetime-dse'
+     In C++ the value of an object is only affected by changes within
+     its lifetime: when the constructor begins, the object has an
+     indeterminate value, and any changes during the lifetime of the
+     object are dead when the object is destroyed.  Normally dead store
+     elimination will take advantage of this; if your code relies on the
+     value of the object storage persisting beyond the lifetime of the
+     object, you can use this flag to disable this optimization.
+
 '-flive-range-shrinkage'
      Attempt to decrease register pressure through register live range
      shrinkage.  This is helpful for fast processors with small or
@@ -11192,6 +11202,12 @@ These options are defined for AArch64 implementations:
      between memory instructions and 64-bit integer multiply-accumulate
      instructions.
 
+'-mfix-cortex-a53-843419'
+'-mno-fix-cortex-a53-843419'
+     Enable or disable the workaround for the ARM Cortex-A53 erratum
+     number 843419.  This erratum workaround is made at link time and
+     this will only pass the corresponding flag to the linker.
+
 '-march=NAME'
      Specify the name of the target architecture, optionally suffixed by
      one or more feature modifiers.  This option has the form
@@ -17653,11 +17669,14 @@ These '-m' options are defined for the IBM RS/6000 and PowerPC:
      '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc',
      'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan',
      'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x',
-     'power7', 'power8', 'powerpc', 'powerpc64', and 'rs64'.
+     'power7', 'power8', 'powerpc', 'powerpc64', 'powerpc64le', and
+     'rs64'.
 
-     '-mcpu=powerpc', and '-mcpu=powerpc64' specify pure 32-bit PowerPC
-     and 64-bit PowerPC architecture machine types, with an appropriate,
-     generic processor model assumed for scheduling purposes.
+     '-mcpu=powerpc', '-mcpu=powerpc64', and '-mcpu=powerpc64le' specify
+     pure 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
+     64-bit little endian PowerPC architecture machine types, with an
+     appropriate, generic processor model assumed for scheduling
+     purposes.
 
      The other options specify a specific processor.  Code generated
      under those options runs best on that processor, and may not run at
@@ -18751,10 +18770,10 @@ architecture.
 '-march=CPU-TYPE'
      Generate code that runs on CPU-TYPE, which is the name of a system
      representing a certain processor type.  Possible values for
-     CPU-TYPE are 'g5', 'g6', 'z900', 'z990', 'z9-109', 'z9-ec' and
-     'z10'.  When generating code using the instructions available on
-     z/Architecture, the default is '-march=z900'.  Otherwise, the
-     default is '-march=g5'.
+     CPU-TYPE are 'g5', 'g6', 'z900', 'z990', 'z9-109', 'z9-ec', 'z10',
+     'z196', and 'zEC12'.  When generating code using the instructions
+     available on z/Architecture, the default is '-march=z900'.
+     Otherwise, the default is '-march=g5'.
 
 '-mtune=CPU-TYPE'
      Tune to CPU-TYPE everything applicable about the generated code,
@@ -18804,16 +18823,15 @@ architecture.
      at an address aligned to the value given by STACK-SIZE.  The
      STACK-GUARD option can only be used in conjunction with STACK-SIZE.
 
-'-mhotpatch[=HALFWORDS]'
-'-mno-hotpatch'
+'-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS'
      If the hotpatch option is enabled, a "hot-patching" function
      prologue is generated for all functions in the compilation unit.
      The funtion label is prepended with the given number of two-byte
-     Nop instructions (HALFWORDS, maximum 1000000) or 12 Nop
-     instructions if no argument is present.  Functions with a
-     hot-patching prologue are never inlined automatically, and a
-     hot-patching prologue is never generated for functions functions
-     that are explicitly inline.
+     NOP instructions (PRE-HALFWORDS, maximum 1000000).  After the
+     label, 2 * POST-HALFWORDS bytes are appended, using the largest NOP
+     like instructions the architecture allows (maximum 1000000).
+
+     If both arguments are zero, hotpatching is disabled.
 
      This option can be overridden for individual functions with the
      'hotpatch' attribute.
@@ -19503,9 +19521,9 @@ These '-m' options are supported on the SPARC:
      Set the instruction set, register set, and instruction scheduling
      parameters for machine type CPU_TYPE.  Supported values for
      CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc',
-     'leon', 'leon3', 'sparclite', 'f930', 'f934', 'sparclite86x',
-     'sparclet', 'tsc701', 'v9', 'ultrasparc', 'ultrasparc3', 'niagara',
-     'niagara2', 'niagara3' and 'niagara4'.
+     'leon', 'leon3', 'leon3v7', 'sparclite', 'f930', 'f934',
+     'sparclite86x', 'sparclet', 'tsc701', 'v9', 'ultrasparc',
+     'ultrasparc3', 'niagara', 'niagara2', 'niagara3' and 'niagara4'.
 
      Native Solaris and GNU/Linux toolchains also support the value
      'native', which selects the best architecture option for the host
@@ -19520,7 +19538,7 @@ These '-m' options are supported on the SPARC:
      implementations.
 
      v7
-          cypress
+          cypress, leon3v7
 
      v8
           supersparc, hypersparc, leon, leon3
@@ -19586,10 +19604,10 @@ These '-m' options are supported on the SPARC:
      The same values for '-mcpu=CPU_TYPE' can be used for
      '-mtune=CPU_TYPE', but the only useful values are those that select
      a particular CPU implementation.  Those are 'cypress',
-     'supersparc', 'hypersparc', 'leon', 'leon3', 'f930', 'f934',
-     'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3', 'niagara',
-     'niagara2', 'niagara3' and 'niagara4'.  With native Solaris and
-     GNU/Linux toolchains, 'native' can also be used.
+     'supersparc', 'hypersparc', 'leon', 'leon3', 'leon3v7', 'f930',
+     'f934', 'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3',
+     'niagara', 'niagara2', 'niagara3' and 'niagara4'.  With native
+     Solaris and GNU/Linux toolchains, 'native' can also be used.
 
 '-mv8plus'
 '-mno-v8plus'
@@ -24716,14 +24734,18 @@ attributes.
      "hot-patching" function prologue used in Win32 API functions in
      Microsoft Windows XP Service Pack 2 and newer.
 
-'hotpatch [(PROLOGUE-HALFWORDS)]'
+'hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)'
 
      On S/390 System z targets, you can use this function attribute to
-     make GCC generate a "hot-patching" function prologue.  The
-     'hotpatch' has no effect on funtions that are explicitly inline.
-     If the '-mhotpatch' or '-mno-hotpatch' command-line option is used
-     at the same time, the 'hotpatch' attribute takes precedence.  If an
-     argument is given, the maximum allowed value is 1000000.
+     make GCC generate a "hot-patching" function prologue.  If the
+     '-mhotpatch=' command-line option is used at the same time, the
+     'hotpatch' attribute takes precedence.  The first of the two
+     arguments specifies the number of halfwords to be added before the
+     function label.  A second argument can be used to specify the
+     number of halfwords to be added after the function label.  For both
+     arguments the maximum allowed value is 1000000.
+
+     If both ar guments are zero, hotpatching is disabled.
 
 'naked'
      Use this attribute on the ARM, AVR, MCORE, MSP430, NDS32, RL78, RX
@@ -28456,6 +28478,22 @@ _PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
      'wa'
           Any VSX register if the -mvsx option was used or NO_REGS.
 
+          When using any of the register constraints ('wa', 'wd', 'wf',
+          'wg', 'wh', 'wi', 'wj', 'wk', 'wl', 'wm', 'ws', 'wt', 'wu',
+          'wv', 'ww', or 'wy') that take VSX registers, you must use
+          '%x<n>' in the template so that the correct register is used.
+          Otherwise the register number output in the assembly file will
+          be incorrect if an Altivec register is an operand of a VSX
+          instruction that expects VSX register numbering.
+
+               asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
+
+          is correct, but:
+
+               asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
+
+          is not correct.
+
      'wd'
           VSX vector register to hold vector double data or NO_REGS.
 
@@ -41948,16 +41986,22 @@ values within the range required for that operation.
      vector bool int vec_cmplt (vector signed int, vector signed int);
      vector bool int vec_cmplt (vector float, vector float);
 
+     vector float vec_cpsgn (vector float, vector float);
+
      vector float vec_ctf (vector unsigned int, const int);
      vector float vec_ctf (vector signed int, const int);
+     vector double vec_ctf (vector unsigned long, const int);
+     vector double vec_ctf (vector signed long, const int);
 
      vector float vec_vcfsx (vector signed int, const int);
 
      vector float vec_vcfux (vector unsigned int, const int);
 
      vector signed int vec_cts (vector float, const int);
+     vector signed long vec_cts (vector double, const int);
 
      vector unsigned int vec_ctu (vector float, const int);
+     vector unsigned long vec_ctu (vector double, const int);
 
      void vec_dss (const int);
 
@@ -42793,6 +42837,16 @@ values within the range required for that operation.
      vector signed int vec_splat (vector signed int, const int);
      vector unsigned int vec_splat (vector unsigned int, const int);
      vector bool int vec_splat (vector bool int, const int);
+     vector signed long vec_splat (vector signed long, const int);
+     vector unsigned long vec_splat (vector unsigned long, const int);
+
+     vector signed char vec_splats (signed char);
+     vector unsigned char vec_splats (unsigned char);
+     vector signed short vec_splats (signed short);
+     vector unsigned short vec_splats (unsigned short);
+     vector signed int vec_splats (signed int);
+     vector unsigned int vec_splats (unsigned int);
+     vector float vec_splats (float);
 
      vector float vec_vspltw (vector float, const int);
      vector signed int vec_vspltw (vector signed int, const int);
@@ -43495,17 +43549,32 @@ additional functions are available:
      vector double vec_and (vector double, vector double);
      vector double vec_and (vector double, vector bool long);
      vector double vec_and (vector bool long, vector double);
+     vector long vec_and (vector long, vector long);
+     vector long vec_and (vector long, vector bool long);
+     vector long vec_and (vector bool long, vector long);
+     vector unsigned long vec_and (vector unsigned long, vector unsigned long);
+     vector unsigned long vec_and (vector unsigned long, vector bool long);
+     vector unsigned long vec_and (vector bool long, vector unsigned long);
      vector double vec_andc (vector double, vector double);
      vector double vec_andc (vector double, vector bool long);
      vector double vec_andc (vector bool long, vector double);
+     vector long vec_andc (vector long, vector long);
+     vector long vec_andc (vector long, vector bool long);
+     vector long vec_andc (vector bool long, vector long);
+     vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
+     vector unsigned long vec_andc (vector unsigned long, vector bool long);
+     vector unsigned long vec_andc (vector bool long, vector unsigned long);
      vector double vec_ceil (vector double);
      vector bool long vec_cmpeq (vector double, vector double);
      vector bool long vec_cmpge (vector double, vector double);
      vector bool long vec_cmpgt (vector double, vector double);
      vector bool long vec_cmple (vector double, vector double);
      vector bool long vec_cmplt (vector double, vector double);
+     vector double vec_cpsgn (vector double, vector double);
      vector float vec_div (vector float, vector float);
      vector double vec_div (vector double, vector double);
+     vector long vec_div (vector long, vector long);
+     vector unsigned long vec_div (vector unsigned long, vector unsigned long);
      vector double vec_floor (vector double);
      vector double vec_ld (int, const vector double *);
      vector double vec_ld (int, const double *);
@@ -43515,38 +43584,83 @@ additional functions are available:
      vector unsigned char vec_lvsr (int, const volatile double *);
      vector double vec_madd (vector double, vector double, vector double);
      vector double vec_max (vector double, vector double);
+     vector signed long vec_mergeh (vector signed long, vector signed long);
+     vector signed long vec_mergeh (vector signed long, vector bool long);
+     vector signed long vec_mergeh (vector bool long, vector signed long);
+     vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
+     vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
+     vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
+     vector signed long vec_mergel (vector signed long, vector signed long);
+     vector signed long vec_mergel (vector signed long, vector bool long);
+     vector signed long vec_mergel (vector bool long, vector signed long);
+     vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
+     vector unsigned long vec_mergel (vector unsigned long, vector bool long);
+     vector unsigned long vec_mergel (vector bool long, vector unsigned long);
      vector double vec_min (vector double, vector double);
      vector float vec_msub (vector float, vector float, vector float);
      vector double vec_msub (vector double, vector double, vector double);
      vector float vec_mul (vector float, vector float);
      vector double vec_mul (vector double, vector double);
+     vector long vec_mul (vector long, vector long);
+     vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
      vector float vec_nearbyint (vector float);
      vector double vec_nearbyint (vector double);
      vector float vec_nmadd (vector float, vector float, vector float);
      vector double vec_nmadd (vector double, vector double, vector double);
      vector double vec_nmsub (vector double, vector double, vector double);
      vector double vec_nor (vector double, vector double);
+     vector long vec_nor (vector long, vector long);
+     vector long vec_nor (vector long, vector bool long);
+     vector long vec_nor (vector bool long, vector long);
+     vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
+     vector unsigned long vec_nor (vector unsigned long, vector bool long);
+     vector unsigned long vec_nor (vector bool long, vector unsigned long);
      vector double vec_or (vector double, vector double);
      vector double vec_or (vector double, vector bool long);
      vector double vec_or (vector bool long, vector double);
-     vector double vec_perm (vector double,
-                             vector double,
-                             vector unsigned char);
+     vector long vec_or (vector long, vector long);
+     vector long vec_or (vector long, vector bool long);
+     vector long vec_or (vector bool long, vector long);
+     vector unsigned long vec_or (vector unsigned long, vector unsigned long);
+     vector unsigned long vec_or (vector unsigned long, vector bool long);
+     vector unsigned long vec_or (vector bool long, vector unsigned long);
+     vector double vec_perm (vector double, vector double, vector unsigned char);
+     vector long vec_perm (vector long, vector long, vector unsigned char);
+     vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
+                                    vector unsigned char);
      vector double vec_rint (vector double);
      vector double vec_recip (vector double, vector double);
      vector double vec_rsqrt (vector double);
      vector double vec_rsqrte (vector double);
      vector double vec_sel (vector double, vector double, vector bool long);
      vector double vec_sel (vector double, vector double, vector unsigned long);
-     vector double vec_sub (vector double, vector double);
+     vector long vec_sel (vector long, vector long, vector long);
+     vector long vec_sel (vector long, vector long, vector unsigned long);
+     vector long vec_sel (vector long, vector long, vector bool long);
+     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
+                                   vector long);
+     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
+                                   vector unsigned long);
+     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
+                                   vector bool long);
+     vector double vec_splats (double);
+     vector signed long vec_splats (signed long);
+     vector unsigned long vec_splats (unsigned long);
      vector float vec_sqrt (vector float);
      vector double vec_sqrt (vector double);
      void vec_st (vector double, int, vector double *);
      void vec_st (vector double, int, double *);
+     vector double vec_sub (vector double, vector double);
      vector double vec_trunc (vector double);
      vector double vec_xor (vector double, vector double);
      vector double vec_xor (vector double, vector bool long);
      vector double vec_xor (vector bool long, vector double);
+     vector long vec_xor (vector long, vector long);
+     vector long vec_xor (vector long, vector bool long);
+     vector long vec_xor (vector bool long, vector long);
+     vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
+     vector unsigned long vec_xor (vector unsigned long, vector bool long);
+     vector unsigned long vec_xor (vector bool long, vector unsigned long);
      int vec_all_eq (vector double, vector double);
      int vec_all_ge (vector double, vector double);
      int vec_all_gt (vector double, vector double);
@@ -43673,17 +43787,30 @@ VECTOR UNSIGNED LONG LONG.
                                         vector unsigned long long);
 
      int vec_all_eq (vector long long, vector long long);
+     int vec_all_eq (vector unsigned long long, vector unsigned long long);
      int vec_all_ge (vector long long, vector long long);
+     int vec_all_ge (vector unsigned long long, vector unsigned long long);
      int vec_all_gt (vector long long, vector long long);
+     int vec_all_gt (vector unsigned long long, vector unsigned long long);
      int vec_all_le (vector long long, vector long long);
+     int vec_all_le (vector unsigned long long, vector unsigned long long);
      int vec_all_lt (vector long long, vector long long);
+     int vec_all_lt (vector unsigned long long, vector unsigned long long);
      int vec_all_ne (vector long long, vector long long);
+     int vec_all_ne (vector unsigned long long, vector unsigned long long);
+
      int vec_any_eq (vector long long, vector long long);
+     int vec_any_eq (vector unsigned long long, vector unsigned long long);
      int vec_any_ge (vector long long, vector long long);
+     int vec_any_ge (vector unsigned long long, vector unsigned long long);
      int vec_any_gt (vector long long, vector long long);
+     int vec_any_gt (vector unsigned long long, vector unsigned long long);
      int vec_any_le (vector long long, vector long long);
+     int vec_any_le (vector unsigned long long, vector unsigned long long);
      int vec_any_lt (vector long long, vector long long);
+     int vec_any_lt (vector unsigned long long, vector unsigned long long);
      int vec_any_ne (vector long long, vector long long);
+     int vec_any_ne (vector unsigned long long, vector unsigned long long);
 
      vector long long vec_eqv (vector long long, vector long long);
      vector long long vec_eqv (vector bool long long, vector long long);
@@ -43721,6 +43848,14 @@ VECTOR UNSIGNED LONG LONG.
      vector unsigned long long vec_max (vector unsigned long long,
                                         vector unsigned long long);
 
+     vector signed int vec_mergee (vector signed int, vector signed int);
+     vector unsigned int vec_mergee (vector unsigned int, vector unsigned int);
+     vector bool int vec_mergee (vector bool int, vector bool int);
+
+     vector signed int vec_mergeo (vector signed int, vector signed int);
+     vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int);
+     vector bool int vec_mergeo (vector bool int, vector bool int);
+
      vector long long vec_min (vector long long, vector long long);
      vector unsigned long long vec_min (vector unsigned long long,
                                         vector unsigned long long);
@@ -43799,6 +43934,8 @@ VECTOR UNSIGNED LONG LONG.
                                     vector unsigned long long);
 
      vector unsigned int vec_packsu (vector long long, vector long long);
+     vector unsigned int vec_packsu (vector unsigned long long,
+                                     vector unsigned long long);
 
      vector long long vec_rl (vector long long,
                               vector unsigned long long);
@@ -43840,6 +43977,15 @@ VECTOR UNSIGNED LONG LONG.
      vector long long vec_vbpermq (vector signed char, vector signed char);
      vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
 
+     vector long long vec_cntlz (vector long long);
+     vector unsigned long long vec_cntlz (vector unsigned long long);
+     vector int vec_cntlz (vector int);
+     vector unsigned int vec_cntlz (vector int);
+     vector short vec_cntlz (vector short);
+     vector unsigned short vec_cntlz (vector unsigned short);
+     vector signed char vec_cntlz (vector signed char);
+     vector unsigned char vec_cntlz (vector unsigned char);
+
      vector long long vec_vclz (vector long long);
      vector unsigned long long vec_vclz (vector unsigned long long);
      vector int vec_vclz (vector int);
@@ -44068,10 +44214,16 @@ The following low level built-in functions are available with '-mhtm' or
 '-mcpu=CPU' where CPU is 'power8' or later.  They all generate the
 machine instruction that is part of the name.
 
- The HTM built-ins return true or false depending on their success and
-their arguments match exactly the type and order of the associated
-hardware instruction's operands.  Refer to the ISA manual for a
-description of each instruction's operands.
+ The HTM builtins (with the exception of '__builtin_tbegin') return the
+full 4-bit condition register value set by their associated hardware
+instruction.  The header file 'htmintrin.h' defines some macros that can
+be used to decipher the return value.  The '__builtin_tbegin' builtin
+returns a simple true or false value depending on whether a transaction
+was successfully started or not.  The arguments of the builtins match
+exactly the type and order of the associated hardware instruction's
+operands, except for the '__builtin_tcheck' builtin, which does not take
+any input arguments.  Refer to the ISA manual for a description of each
+instruction's operands.
 
      unsigned int __builtin_tbegin (unsigned int)
      unsigned int __builtin_tend (unsigned int)
@@ -44082,7 +44234,7 @@ description of each instruction's operands.
      unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
      unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
 
-     unsigned int __builtin_tcheck (unsigned int)
+     unsigned int __builtin_tcheck (void)
      unsigned int __builtin_treclaim (unsigned int)
      unsigned int __builtin_trechkpt (void)
      unsigned int __builtin_tsr (unsigned int)
@@ -44204,7 +44356,7 @@ work on either PowerPC or S/390:
 
      while (1)
        {
-         if (__TM_begin (TM_buff))
+         if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
            {
              /* Transaction State Initiated.  */
              if (is_locked (lock))
@@ -52076,46 +52228,46 @@ look up both forms.
                                                              (line   19)
 * fada-spec-parent:                      Overall Options.    (line  367)
 * faggressive-loop-optimizations:        Optimize Options.   (line  478)
-* falign-functions:                      Optimize Options.   (line 1472)
-* falign-jumps:                          Optimize Options.   (line 1521)
-* falign-labels:                         Optimize Options.   (line 1490)
-* falign-loops:                          Optimize Options.   (line 1508)
+* falign-functions:                      Optimize Options.   (line 1481)
+* falign-jumps:                          Optimize Options.   (line 1530)
+* falign-labels:                         Optimize Options.   (line 1499)
+* falign-loops:                          Optimize Options.   (line 1517)
 * fallow-parameterless-variadic-functions: C Dialect Options.
                                                              (line  189)
-* fassociative-math:                     Optimize Options.   (line 2000)
+* fassociative-math:                     Optimize Options.   (line 2009)
 * fasynchronous-unwind-tables:           Code Gen Options.   (line  146)
 * fauto-inc-dec:                         Optimize Options.   (line  502)
 * fbounds-check:                         Code Gen Options.   (line   15)
-* fbranch-probabilities:                 Optimize Options.   (line 2128)
-* fbranch-target-load-optimize:          Optimize Options.   (line 2243)
-* fbranch-target-load-optimize2:         Optimize Options.   (line 2249)
-* fbtr-bb-exclusive:                     Optimize Options.   (line 2253)
+* fbranch-probabilities:                 Optimize Options.   (line 2137)
+* fbranch-target-load-optimize:          Optimize Options.   (line 2252)
+* fbranch-target-load-optimize2:         Optimize Options.   (line 2258)
+* fbtr-bb-exclusive:                     Optimize Options.   (line 2262)
 * fcall-saved:                           Code Gen Options.   (line  356)
 * fcall-used:                            Code Gen Options.   (line  342)
-* fcaller-saves:                         Optimize Options.   (line  810)
-* fcheck-data-deps:                      Optimize Options.   (line 1089)
+* fcaller-saves:                         Optimize Options.   (line  819)
+* fcheck-data-deps:                      Optimize Options.   (line 1098)
 * fcheck-new:                            C++ Dialect Options.
                                                              (line   54)
 * fcilkplus:                             C Dialect Options.  (line  276)
-* fcombine-stack-adjustments:            Optimize Options.   (line  822)
+* fcombine-stack-adjustments:            Optimize Options.   (line  831)
 * fcommon:                               Variable Attributes.
                                                              (line  104)
 * fcompare-debug:                        Debugging Options.  (line  287)
 * fcompare-debug-second:                 Debugging Options.  (line  313)
-* fcompare-elim:                         Optimize Options.   (line 1836)
+* fcompare-elim:                         Optimize Options.   (line 1845)
 * fcond-mismatch:                        C Dialect Options.  (line  339)
-* fconserve-stack:                       Optimize Options.   (line  828)
+* fconserve-stack:                       Optimize Options.   (line  837)
 * fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
                                                              (line   30)
 * fconstexpr-depth:                      C++ Dialect Options.
                                                              (line   64)
-* fcprop-registers:                      Optimize Options.   (line 1854)
+* fcprop-registers:                      Optimize Options.   (line 1863)
 * fcrossjumping:                         Optimize Options.   (line  495)
 * fcse-follow-jumps:                     Optimize Options.   (line  414)
 * fcse-skip-blocks:                      Optimize Options.   (line  423)
-* fcx-fortran-rules:                     Optimize Options.   (line 2115)
-* fcx-limited-range:                     Optimize Options.   (line 2103)
-* fdata-sections:                        Optimize Options.   (line 2224)
+* fcx-fortran-rules:                     Optimize Options.   (line 2124)
+* fcx-limited-range:                     Optimize Options.   (line 2112)
+* fdata-sections:                        Optimize Options.   (line 2233)
 * fdbg-cnt:                              Debugging Options.  (line  548)
 * fdbg-cnt-list:                         Debugging Options.  (line  545)
 * fdce:                                  Optimize Options.   (line  508)
@@ -52126,7 +52278,7 @@ look up both forms.
 * fdeclone-ctor-dtor:                    Optimize Options.   (line  531)
 * fdeduce-init-list:                     C++ Dialect Options.
                                                              (line   70)
-* fdelayed-branch:                       Optimize Options.   (line  657)
+* fdelayed-branch:                       Optimize Options.   (line  666)
 * fdelete-dead-exceptions:               Code Gen Options.   (line  131)
 * fdelete-null-pointer-checks:           Optimize Options.   (line  542)
 * fdevirtualize:                         Optimize Options.   (line  560)
@@ -52261,7 +52413,7 @@ look up both forms.
 * femit-struct-debug-reduced:            Debugging Options.  (line  344)
 * fenable-:                              Debugging Options.  (line  558)
 * fexceptions:                           Code Gen Options.   (line  109)
-* fexcess-precision:                     Optimize Options.   (line 1927)
+* fexcess-precision:                     Optimize Options.   (line 1936)
 * fexec-charset:                         Preprocessor Options.
                                                              (line  554)
 * fexpensive-optimizations:              Optimize Options.   (line  576)
@@ -52271,12 +52423,12 @@ look up both forms.
                                                              (line  499)
 * fextern-tls-init:                      C++ Dialect Options.
                                                              (line  120)
-* ffast-math:                            Optimize Options.   (line 1950)
-* ffat-lto-objects:                      Optimize Options.   (line 1818)
-* ffinite-math-only:                     Optimize Options.   (line 2027)
+* ffast-math:                            Optimize Options.   (line 1959)
+* ffat-lto-objects:                      Optimize Options.   (line 1827)
+* ffinite-math-only:                     Optimize Options.   (line 2036)
 * ffix-and-continue:                     Darwin Options.     (line  104)
 * ffixed:                                Code Gen Options.   (line  330)
-* ffloat-store:                          Optimize Options.   (line 1913)
+* ffloat-store:                          Optimize Options.   (line 1922)
 * ffloat-store <1>:                      Disappointments.    (line   77)
 * ffor-scope:                            C++ Dialect Options.
                                                              (line  141)
@@ -52289,7 +52441,7 @@ look up both forms.
                                                              (line  493)
 * ffriend-injection:                     C++ Dialect Options.
                                                              (line   91)
-* ffunction-sections:                    Optimize Options.   (line 2224)
+* ffunction-sections:                    Optimize Options.   (line 2233)
 * fgcse:                                 Optimize Options.   (line  437)
 * fgcse-after-reload:                    Optimize Options.   (line  473)
 * fgcse-las:                             Optimize Options.   (line  466)
@@ -52299,7 +52451,7 @@ look up both forms.
                                                              (line   39)
 * fgnu-tm:                               C Dialect Options.  (line  286)
 * fgnu89-inline:                         C Dialect Options.  (line  152)
-* fgraphite-identity:                    Optimize Options.   (line 1069)
+* fgraphite-identity:                    Optimize Options.   (line 1078)
 * fhosted:                               C Dialect Options.  (line  244)
 * fif-conversion:                        Optimize Options.   (line  516)
 * fif-conversion2:                       Optimize Options.   (line  525)
@@ -52315,35 +52467,35 @@ look up both forms.
                                                              (line  567)
 * finstrument-functions:                 Code Gen Options.   (line  386)
 * finstrument-functions <1>:             Function Attributes.
-                                                             (line 1085)
+                                                             (line 1089)
 * finstrument-functions-exclude-file-list: Code Gen Options. (line  421)
 * finstrument-functions-exclude-function-list: Code Gen Options.
                                                              (line  442)
-* fipa-cp:                               Optimize Options.   (line  894)
-* fipa-cp-clone:                         Optimize Options.   (line  902)
-* fipa-profile:                          Optimize Options.   (line  886)
-* fipa-pta:                              Optimize Options.   (line  880)
-* fipa-pure-const:                       Optimize Options.   (line  872)
-* fipa-reference:                        Optimize Options.   (line  876)
+* fipa-cp:                               Optimize Options.   (line  903)
+* fipa-cp-clone:                         Optimize Options.   (line  911)
+* fipa-profile:                          Optimize Options.   (line  895)
+* fipa-pta:                              Optimize Options.   (line  889)
+* fipa-pure-const:                       Optimize Options.   (line  881)
+* fipa-reference:                        Optimize Options.   (line  885)
 * fipa-sra:                              Optimize Options.   (line  277)
-* fira-hoist-pressure:                   Optimize Options.   (line  624)
-* fira-loop-pressure:                    Optimize Options.   (line  631)
-* fira-verbose:                          Optimize Options.   (line  651)
-* fivopts:                               Optimize Options.   (line 1165)
+* fira-hoist-pressure:                   Optimize Options.   (line  633)
+* fira-loop-pressure:                    Optimize Options.   (line  640)
+* fira-verbose:                          Optimize Options.   (line  660)
+* fivopts:                               Optimize Options.   (line 1174)
 * fkeep-inline-functions:                Optimize Options.   (line  315)
 * fkeep-inline-functions <1>:            Inline.             (line   51)
 * fkeep-static-consts:                   Optimize Options.   (line  322)
 * flat_namespace:                        Darwin Options.     (line  196)
 * flax-vector-conversions:               C Dialect Options.  (line  344)
 * fleading-underscore:                   Code Gen Options.   (line  524)
-* flive-range-shrinkage:                 Optimize Options.   (line  590)
-* floop-block:                           Optimize Options.   (line 1040)
-* floop-interchange:                     Optimize Options.   (line  995)
-* floop-nest-optimize:                   Optimize Options.   (line 1077)
-* floop-parallelize-all:                 Optimize Options.   (line 1083)
-* floop-strip-mine:                      Optimize Options.   (line 1019)
-* flto:                                  Optimize Options.   (line 1575)
-* flto-partition:                        Optimize Options.   (line 1769)
+* flive-range-shrinkage:                 Optimize Options.   (line  599)
+* floop-block:                           Optimize Options.   (line 1049)
+* floop-interchange:                     Optimize Options.   (line 1004)
+* floop-nest-optimize:                   Optimize Options.   (line 1086)
+* floop-parallelize-all:                 Optimize Options.   (line 1092)
+* floop-strip-mine:                      Optimize Options.   (line 1028)
+* flto:                                  Optimize Options.   (line 1584)
+* flto-partition:                        Optimize Options.   (line 1778)
 * fmax-errors:                           Warning Options.    (line   18)
 * fmem-report:                           Debugging Options.  (line  435)
 * fmem-report-wpa:                       Debugging Options.  (line  439)
@@ -52354,7 +52506,7 @@ look up both forms.
                                                              (line   14)
 * fmodulo-sched:                         Optimize Options.   (line  352)
 * fmodulo-sched-allow-regmoves:          Optimize Options.   (line  357)
-* fmove-loop-invariants:                 Optimize Options.   (line 2214)
+* fmove-loop-invariants:                 Optimize Options.   (line 2223)
 * fms-extensions:                        C Dialect Options.  (line  301)
 * fms-extensions <1>:                    C++ Dialect Options.
                                                              (line  175)
@@ -52399,7 +52551,7 @@ look up both forms.
 * fno-gnu-keywords:                      C++ Dialect Options.
                                                              (line  153)
 * fno-gnu-unique:                        Code Gen Options.   (line  152)
-* fno-guess-branch-probability:          Optimize Options.   (line 1342)
+* fno-guess-branch-probability:          Optimize Options.   (line 1351)
 * fno-ident:                             Code Gen Options.   (line  248)
 * fno-implement-inlines:                 C++ Dialect Options.
                                                              (line  170)
@@ -52411,10 +52563,11 @@ look up both forms.
 * fno-implicit-templates <1>:            Template Instantiation.
                                                              (line   78)
 * fno-inline:                            Optimize Options.   (line  224)
-* fno-ira-share-save-slots:              Optimize Options.   (line  639)
-* fno-ira-share-spill-slots:             Optimize Options.   (line  645)
+* fno-ira-share-save-slots:              Optimize Options.   (line  648)
+* fno-ira-share-spill-slots:             Optimize Options.   (line  654)
 * fno-jump-tables:                       Code Gen Options.   (line  322)
-* fno-math-errno:                        Optimize Options.   (line 1964)
+* fno-lifetime-dse:                      Optimize Options.   (line  590)
+* fno-math-errno:                        Optimize Options.   (line 1973)
 * fno-merge-debug-strings:               Debugging Options.  (line  400)
 * fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
                                                              (line   49)
@@ -52424,25 +52577,25 @@ look up both forms.
                                                              (line  196)
 * fno-optional-diags:                    C++ Dialect Options.
                                                              (line  200)
-* fno-peephole:                          Optimize Options.   (line 1333)
-* fno-peephole2:                         Optimize Options.   (line 1333)
+* fno-peephole:                          Optimize Options.   (line 1342)
+* fno-peephole2:                         Optimize Options.   (line 1342)
 * fno-pretty-templates:                  C++ Dialect Options.
                                                              (line  210)
 * fno-rtti:                              C++ Dialect Options.
                                                              (line  227)
-* fno-sched-interblock:                  Optimize Options.   (line  683)
-* fno-sched-spec:                        Optimize Options.   (line  688)
+* fno-sched-interblock:                  Optimize Options.   (line  692)
+* fno-sched-spec:                        Optimize Options.   (line  697)
 * fno-set-stack-executable:              i386 and x86-64 Windows Options.
                                                              (line   46)
 * fno-show-column:                       Preprocessor Options.
                                                              (line  591)
 * fno-signed-bitfields:                  C Dialect Options.  (line  377)
-* fno-signed-zeros:                      Optimize Options.   (line 2039)
+* fno-signed-zeros:                      Optimize Options.   (line 2048)
 * fno-stack-limit:                       Code Gen Options.   (line  492)
 * fno-threadsafe-statics:                C++ Dialect Options.
                                                              (line  264)
-* fno-toplevel-reorder:                  Optimize Options.   (line 1541)
-* fno-trapping-math:                     Optimize Options.   (line 2049)
+* fno-toplevel-reorder:                  Optimize Options.   (line 1550)
+* fno-trapping-math:                     Optimize Options.   (line 2058)
 * fno-unsigned-bitfields:                C Dialect Options.  (line  377)
 * fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
                                                              (line  277)
@@ -52480,14 +52633,14 @@ look up both forms.
 * force_cpusubtype_ALL:                  Darwin Options.     (line  135)
 * force_flat_namespace:                  Darwin Options.     (line  196)
 * fpack-struct:                          Code Gen Options.   (line  373)
-* fpartial-inlining:                     Optimize Options.   (line 1308)
+* fpartial-inlining:                     Optimize Options.   (line 1317)
 * fpcc-struct-return:                    Code Gen Options.   (line  165)
 * fpcc-struct-return <1>:                Incompatibilities.  (line  170)
 * fpch-deps:                             Preprocessor Options.
                                                              (line  296)
 * fpch-preprocess:                       Preprocessor Options.
                                                              (line  304)
-* fpeel-loops:                           Optimize Options.   (line 2206)
+* fpeel-loops:                           Optimize Options.   (line 2215)
 * fpermissive:                           C++ Dialect Options.
                                                              (line  205)
 * fpic:                                  Code Gen Options.   (line  279)
@@ -52499,29 +52652,29 @@ look up both forms.
 * fplugin-arg:                           Overall Options.    (line  358)
 * fpost-ipa-mem-report:                  Debugging Options.  (line  444)
 * fpre-ipa-mem-report:                   Debugging Options.  (line  443)
-* fpredictive-commoning:                 Optimize Options.   (line 1315)
-* fprefetch-loop-arrays:                 Optimize Options.   (line 1322)
+* fpredictive-commoning:                 Optimize Options.   (line 1324)
+* fprefetch-loop-arrays:                 Optimize Options.   (line 1331)
 * fpreprocessed:                         Preprocessor Options.
                                                              (line  508)
 * fprofile-arcs:                         Debugging Options.  (line  481)
 * fprofile-arcs <1>:                     Other Builtins.     (line  253)
-* fprofile-correction:                   Optimize Options.   (line 1861)
-* fprofile-dir:                          Optimize Options.   (line 1868)
-* fprofile-generate:                     Optimize Options.   (line 1879)
-* fprofile-reorder-functions:            Optimize Options.   (line 2156)
+* fprofile-correction:                   Optimize Options.   (line 1870)
+* fprofile-dir:                          Optimize Options.   (line 1877)
+* fprofile-generate:                     Optimize Options.   (line 1888)
+* fprofile-reorder-functions:            Optimize Options.   (line 2165)
 * fprofile-report:                       Debugging Options.  (line  448)
-* fprofile-use:                          Optimize Options.   (line 1893)
-* fprofile-values:                       Optimize Options.   (line 2147)
+* fprofile-use:                          Optimize Options.   (line 1902)
+* fprofile-values:                       Optimize Options.   (line 2156)
 * fpu:                                   RX Options.         (line   17)
 * frandom-seed:                          Debugging Options.  (line 1230)
-* freciprocal-math:                      Optimize Options.   (line 2017)
+* freciprocal-math:                      Optimize Options.   (line 2026)
 * frecord-gcc-switches:                  Code Gen Options.   (line  267)
 * free:                                  Optimize Options.   (line  582)
 * freg-struct-return:                    Code Gen Options.   (line  183)
-* frename-registers:                     Optimize Options.   (line 2173)
-* freorder-blocks:                       Optimize Options.   (line 1359)
-* freorder-blocks-and-partition:         Optimize Options.   (line 1365)
-* freorder-functions:                    Optimize Options.   (line 1378)
+* frename-registers:                     Optimize Options.   (line 2182)
+* freorder-blocks:                       Optimize Options.   (line 1368)
+* freorder-blocks-and-partition:         Optimize Options.   (line 1374)
+* freorder-functions:                    Optimize Options.   (line 1387)
 * freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
                                                              (line  131)
 * frepo:                                 C++ Dialect Options.
@@ -52529,8 +52682,8 @@ look up both forms.
 * frepo <1>:                             Template Instantiation.
                                                              (line   54)
 * frerun-cse-after-loop:                 Optimize Options.   (line  431)
-* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  782)
-* frounding-math:                        Optimize Options.   (line 2064)
+* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  791)
+* frounding-math:                        Optimize Options.   (line 2073)
 * fsanitize=address:                     Debugging Options.  (line  187)
 * fsanitize=integer-divide-by-zero:      Debugging Options.  (line  233)
 * fsanitize=kernel-address:              Debugging Options.  (line  197)
@@ -52543,26 +52696,26 @@ look up both forms.
 * fsanitize=undefined:                   Debugging Options.  (line  221)
 * fsanitize=unreachable:                 Debugging Options.  (line  238)
 * fsanitize=vla-bound:                   Debugging Options.  (line  245)
-* fsched-critical-path-heuristic:        Optimize Options.   (line  748)
-* fsched-dep-count-heuristic:            Optimize Options.   (line  775)
-* fsched-group-heuristic:                Optimize Options.   (line  742)
-* fsched-last-insn-heuristic:            Optimize Options.   (line  768)
-* fsched-pressure:                       Optimize Options.   (line  693)
-* fsched-rank-heuristic:                 Optimize Options.   (line  761)
-* fsched-spec-insn-heuristic:            Optimize Options.   (line  754)
-* fsched-spec-load:                      Optimize Options.   (line  702)
-* fsched-spec-load-dangerous:            Optimize Options.   (line  707)
-* fsched-stalled-insns:                  Optimize Options.   (line  713)
-* fsched-stalled-insns-dep:              Optimize Options.   (line  723)
+* fsched-critical-path-heuristic:        Optimize Options.   (line  757)
+* fsched-dep-count-heuristic:            Optimize Options.   (line  784)
+* fsched-group-heuristic:                Optimize Options.   (line  751)
+* fsched-last-insn-heuristic:            Optimize Options.   (line  777)
+* fsched-pressure:                       Optimize Options.   (line  702)
+* fsched-rank-heuristic:                 Optimize Options.   (line  770)
+* fsched-spec-insn-heuristic:            Optimize Options.   (line  763)
+* fsched-spec-load:                      Optimize Options.   (line  711)
+* fsched-spec-load-dangerous:            Optimize Options.   (line  716)
+* fsched-stalled-insns:                  Optimize Options.   (line  722)
+* fsched-stalled-insns-dep:              Optimize Options.   (line  732)
 * fsched-verbose:                        Debugging Options.  (line 1240)
-* fsched2-use-superblocks:               Optimize Options.   (line  732)
-* fschedule-insns:                       Optimize Options.   (line  664)
-* fschedule-insns2:                      Optimize Options.   (line  674)
-* fsection-anchors:                      Optimize Options.   (line 2274)
-* fsel-sched-pipelining:                 Optimize Options.   (line  795)
-* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  800)
-* fselective-scheduling:                 Optimize Options.   (line  787)
-* fselective-scheduling2:                Optimize Options.   (line  791)
+* fsched2-use-superblocks:               Optimize Options.   (line  741)
+* fschedule-insns:                       Optimize Options.   (line  673)
+* fschedule-insns2:                      Optimize Options.   (line  683)
+* fsection-anchors:                      Optimize Options.   (line 2283)
+* fsel-sched-pipelining:                 Optimize Options.   (line  804)
+* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  809)
+* fselective-scheduling:                 Optimize Options.   (line  796)
+* fselective-scheduling2:                Optimize Options.   (line  800)
 * fshort-double:                         Code Gen Options.   (line  211)
 * fshort-enums:                          Code Gen Options.   (line  201)
 * fshort-enums <1>:                      Structures unions enumerations and bit-fields implementation.
@@ -52570,34 +52723,34 @@ look up both forms.
 * fshort-enums <2>:                      Type Attributes.    (line  113)
 * fshort-enums <3>:                      Non-bugs.           (line   42)
 * fshort-wchar:                          Code Gen Options.   (line  219)
-* fshrink-wrap:                          Optimize Options.   (line  805)
-* fsignaling-nans:                       Optimize Options.   (line 2084)
+* fshrink-wrap:                          Optimize Options.   (line  814)
+* fsignaling-nans:                       Optimize Options.   (line 2093)
 * fsigned-bitfields:                     C Dialect Options.  (line  377)
 * fsigned-bitfields <1>:                 Non-bugs.           (line   57)
 * fsigned-char:                          C Dialect Options.  (line  367)
 * fsigned-char <1>:                      Characters implementation.
                                                              (line   31)
-* fsimd-cost-model:                      Optimize Options.   (line 1256)
-* fsingle-precision-constant:            Optimize Options.   (line 2099)
-* fsplit-ivs-in-unroller:                Optimize Options.   (line 1289)
+* fsimd-cost-model:                      Optimize Options.   (line 1265)
+* fsingle-precision-constant:            Optimize Options.   (line 2108)
+* fsplit-ivs-in-unroller:                Optimize Options.   (line 1298)
 * fsplit-stack:                          Code Gen Options.   (line  506)
 * fsplit-stack <1>:                      Function Attributes.
-                                                             (line 1090)
+                                                             (line 1094)
 * fsplit-wide-types:                     Optimize Options.   (line  406)
 * fstack-check:                          Code Gen Options.   (line  454)
 * fstack-limit-register:                 Code Gen Options.   (line  492)
 * fstack-limit-symbol:                   Code Gen Options.   (line  492)
-* fstack-protector:                      Optimize Options.   (line 2257)
-* fstack-protector-all:                  Optimize Options.   (line 2266)
-* fstack-protector-strong:               Optimize Options.   (line 2269)
+* fstack-protector:                      Optimize Options.   (line 2266)
+* fstack-protector-all:                  Optimize Options.   (line 2275)
+* fstack-protector-strong:               Optimize Options.   (line 2278)
 * fstack-usage:                          Debugging Options.  (line  452)
 * fstack_reuse:                          Code Gen Options.   (line   21)
 * fstats:                                C++ Dialect Options.
                                                              (line  237)
-* fstrict-aliasing:                      Optimize Options.   (line 1391)
+* fstrict-aliasing:                      Optimize Options.   (line 1400)
 * fstrict-enums:                         C++ Dialect Options.
                                                              (line  242)
-* fstrict-overflow:                      Optimize Options.   (line 1437)
+* fstrict-overflow:                      Optimize Options.   (line 1446)
 * fstrict-volatile-bitfields:            Code Gen Options.   (line  612)
 * fsync-libcalls:                        Code Gen Options.   (line  644)
 * fsyntax-only:                          Warning Options.    (line   14)
@@ -52611,49 +52764,49 @@ look up both forms.
 * fthread-jumps:                         Optimize Options.   (line  397)
 * ftime-report:                          Debugging Options.  (line  431)
 * ftls-model:                            Code Gen Options.   (line  535)
-* ftracer:                               Optimize Options.   (line 1272)
-* ftracer <1>:                           Optimize Options.   (line 2183)
+* ftracer:                               Optimize Options.   (line 1281)
+* ftracer <1>:                           Optimize Options.   (line 2192)
 * ftrack-macro-expansion:                Preprocessor Options.
                                                              (line  536)
 * ftrapv:                                Code Gen Options.   (line   97)
-* ftree-bit-ccp:                         Optimize Options.   (line  930)
-* ftree-builtin-call-dce:                Optimize Options.   (line  958)
-* ftree-ccp:                             Optimize Options.   (line  936)
-* ftree-ch:                              Optimize Options.   (line  978)
-* ftree-coalesce-inlined-vars:           Optimize Options.   (line 1196)
-* ftree-coalesce-vars:                   Optimize Options.   (line 1206)
-* ftree-copy-prop:                       Optimize Options.   (line  867)
-* ftree-copyrename:                      Optimize Options.   (line 1189)
-* ftree-dce:                             Optimize Options.   (line  954)
-* ftree-dominator-opts:                  Optimize Options.   (line  964)
-* ftree-dse:                             Optimize Options.   (line  971)
-* ftree-forwprop:                        Optimize Options.   (line  846)
-* ftree-fre:                             Optimize Options.   (line  850)
-* ftree-loop-im:                         Optimize Options.   (line 1150)
-* ftree-loop-ivcanon:                    Optimize Options.   (line 1159)
-* ftree-loop-linear:                     Optimize Options.   (line  989)
-* ftree-loop-optimize:                   Optimize Options.   (line  985)
-* ftree-loop-vectorize:                  Optimize Options.   (line 1234)
-* ftree-parallelize-loops:               Optimize Options.   (line 1170)
-* ftree-partial-pre:                     Optimize Options.   (line  842)
-* ftree-phiprop:                         Optimize Options.   (line  857)
-* ftree-pre:                             Optimize Options.   (line  838)
-* ftree-pta:                             Optimize Options.   (line 1179)
-* ftree-reassoc:                         Optimize Options.   (line  834)
-* ftree-sink:                            Optimize Options.   (line  926)
-* ftree-slp-vectorize:                   Optimize Options.   (line 1238)
-* ftree-slsr:                            Optimize Options.   (line 1223)
-* ftree-sra:                             Optimize Options.   (line 1183)
-* ftree-ter:                             Optimize Options.   (line 1215)
-* ftree-vectorize:                       Optimize Options.   (line 1229)
-* ftree-vrp:                             Optimize Options.   (line 1263)
-* funit-at-a-time:                       Optimize Options.   (line 1534)
-* funroll-all-loops:                     Optimize Options.   (line 1283)
-* funroll-all-loops <1>:                 Optimize Options.   (line 2200)
-* funroll-loops:                         Optimize Options.   (line 1277)
-* funroll-loops <1>:                     Optimize Options.   (line 2190)
+* ftree-bit-ccp:                         Optimize Options.   (line  939)
+* ftree-builtin-call-dce:                Optimize Options.   (line  967)
+* ftree-ccp:                             Optimize Options.   (line  945)
+* ftree-ch:                              Optimize Options.   (line  987)
+* ftree-coalesce-inlined-vars:           Optimize Options.   (line 1205)
+* ftree-coalesce-vars:                   Optimize Options.   (line 1215)
+* ftree-copy-prop:                       Optimize Options.   (line  876)
+* ftree-copyrename:                      Optimize Options.   (line 1198)
+* ftree-dce:                             Optimize Options.   (line  963)
+* ftree-dominator-opts:                  Optimize Options.   (line  973)
+* ftree-dse:                             Optimize Options.   (line  980)
+* ftree-forwprop:                        Optimize Options.   (line  855)
+* ftree-fre:                             Optimize Options.   (line  859)
+* ftree-loop-im:                         Optimize Options.   (line 1159)
+* ftree-loop-ivcanon:                    Optimize Options.   (line 1168)
+* ftree-loop-linear:                     Optimize Options.   (line  998)
+* ftree-loop-optimize:                   Optimize Options.   (line  994)
+* ftree-loop-vectorize:                  Optimize Options.   (line 1243)
+* ftree-parallelize-loops:               Optimize Options.   (line 1179)
+* ftree-partial-pre:                     Optimize Options.   (line  851)
+* ftree-phiprop:                         Optimize Options.   (line  866)
+* ftree-pre:                             Optimize Options.   (line  847)
+* ftree-pta:                             Optimize Options.   (line 1188)
+* ftree-reassoc:                         Optimize Options.   (line  843)
+* ftree-sink:                            Optimize Options.   (line  935)
+* ftree-slp-vectorize:                   Optimize Options.   (line 1247)
+* ftree-slsr:                            Optimize Options.   (line 1232)
+* ftree-sra:                             Optimize Options.   (line 1192)
+* ftree-ter:                             Optimize Options.   (line 1224)
+* ftree-vectorize:                       Optimize Options.   (line 1238)
+* ftree-vrp:                             Optimize Options.   (line 1272)
+* funit-at-a-time:                       Optimize Options.   (line 1543)
+* funroll-all-loops:                     Optimize Options.   (line 1292)
+* funroll-all-loops <1>:                 Optimize Options.   (line 2209)
+* funroll-loops:                         Optimize Options.   (line 1286)
+* funroll-loops <1>:                     Optimize Options.   (line 2199)
 * funsafe-loop-optimizations:            Optimize Options.   (line  487)
-* funsafe-math-optimizations:            Optimize Options.   (line 1982)
+* funsafe-math-optimizations:            Optimize Options.   (line 1991)
 * funsigned-bitfields:                   C Dialect Options.  (line  377)
 * funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
                                                              (line   17)
@@ -52661,30 +52814,30 @@ look up both forms.
 * funsigned-char:                        C Dialect Options.  (line  349)
 * funsigned-char <1>:                    Characters implementation.
                                                              (line   31)
-* funswitch-loops:                       Optimize Options.   (line 2218)
+* funswitch-loops:                       Optimize Options.   (line 2227)
 * funwind-tables:                        Code Gen Options.   (line  139)
 * fuse-cxa-atexit:                       C++ Dialect Options.
                                                              (line  270)
-* fuse-ld=bfd:                           Optimize Options.   (line 1848)
-* fuse-ld=gold:                          Optimize Options.   (line 1851)
+* fuse-ld=bfd:                           Optimize Options.   (line 1857)
+* fuse-ld=gold:                          Optimize Options.   (line 1860)
 * fvar-tracking:                         Debugging Options.  (line 1326)
 * fvar-tracking-assignments:             Debugging Options.  (line 1336)
 * fvar-tracking-assignments-toggle:      Debugging Options.  (line 1345)
-* fvariable-expansion-in-unroller:       Optimize Options.   (line 1303)
-* fvect-cost-model:                      Optimize Options.   (line 1242)
+* fvariable-expansion-in-unroller:       Optimize Options.   (line 1312)
+* fvect-cost-model:                      Optimize Options.   (line 1251)
 * fverbose-asm:                          Code Gen Options.   (line  258)
 * fvisibility:                           Code Gen Options.   (line  546)
 * fvisibility-inlines-hidden:            C++ Dialect Options.
                                                              (line  282)
 * fvisibility-ms-compat:                 C++ Dialect Options.
                                                              (line  310)
-* fvpt:                                  Optimize Options.   (line 2163)
+* fvpt:                                  Optimize Options.   (line 2172)
 * fvtable-verify:                        C++ Dialect Options.
                                                              (line  339)
 * fvtv-counts:                           C++ Dialect Options.
                                                              (line  374)
-* fweb:                                  Optimize Options.   (line 1553)
-* fwhole-program:                        Optimize Options.   (line 1564)
+* fweb:                                  Optimize Options.   (line 1562)
+* fwhole-program:                        Optimize Options.   (line 1573)
 * fwide-exec-charset:                    Preprocessor Options.
                                                              (line  559)
 * fworking-directory:                    Preprocessor Options.
@@ -52697,7 +52850,7 @@ look up both forms.
 * G <1>:                                 MIPS Options.       (line  393)
 * G <2>:                                 Nios II Options.    (line    9)
 * G <3>:                                 RS/6000 and PowerPC Options.
-                                                             (line  739)
+                                                             (line  742)
 * G <4>:                                 System V Options.   (line   10)
 * gcoff:                                 Debugging Options.  (line   94)
 * gdwarf-VERSION:                        Debugging Options.  (line  112)
@@ -52725,7 +52878,7 @@ look up both forms.
 * help:                                  Overall Options.    (line  221)
 * help <1>:                              Preprocessor Options.
                                                              (line  699)
-* hoist-adjacent-loads:                  Optimize Options.   (line  861)
+* hoist-adjacent-loads:                  Optimize Options.   (line  870)
 * I:                                     Preprocessor Options.
                                                              (line   77)
 * I <1>:                                 Directory Options.  (line   10)
@@ -52765,7 +52918,7 @@ look up both forms.
 * M:                                     Preprocessor Options.
                                                              (line  185)
 * m:                                     RS/6000 and PowerPC Options.
-                                                             (line  581)
+                                                             (line  584)
 * m1:                                    SH Options.         (line    9)
 * m10:                                   PDP-11 Options.     (line   29)
 * m128bit-long-double:                   i386 and x86-64 Options.
@@ -52788,7 +52941,7 @@ look up both forms.
 * m32:                                   i386 and x86-64 Options.
                                                              (line  940)
 * m32 <1>:                               RS/6000 and PowerPC Options.
-                                                             (line  274)
+                                                             (line  277)
 * m32 <2>:                               SPARC Options.      (line  256)
 * m32 <3>:                               TILE-Gx Options.    (line   23)
 * m32 <4>:                               TILEPro Options.    (line   13)
@@ -52841,7 +52994,7 @@ look up both forms.
 * m64:                                   i386 and x86-64 Options.
                                                              (line  940)
 * m64 <1>:                               RS/6000 and PowerPC Options.
-                                                             (line  274)
+                                                             (line  277)
 * m64 <2>:                               S/390 and zSeries Options.
                                                              (line   86)
 * m64 <3>:                               SPARC Options.      (line  256)
@@ -52867,26 +53020,26 @@ look up both forms.
 * mabi <2>:                              i386 and x86-64 Options.
                                                              (line  799)
 * mabi <3>:                              RS/6000 and PowerPC Options.
-                                                             (line  608)
+                                                             (line  611)
 * mabi=32:                               MIPS Options.       (line  138)
 * mabi=64:                               MIPS Options.       (line  138)
 * mabi=eabi:                             MIPS Options.       (line  138)
 * mabi=elfv1:                            RS/6000 and PowerPC Options.
-                                                             (line  629)
+                                                             (line  632)
 * mabi=elfv2:                            RS/6000 and PowerPC Options.
-                                                             (line  635)
+                                                             (line  638)
 * mabi=gnu:                              MMIX Options.       (line   20)
 * mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
-                                                             (line  621)
+                                                             (line  624)
 * mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
-                                                             (line  625)
+                                                             (line  628)
 * mabi=mmixware:                         MMIX Options.       (line   20)
 * mabi=n32:                              MIPS Options.       (line  138)
 * mabi=no-spe:                           RS/6000 and PowerPC Options.
-                                                             (line  618)
+                                                             (line  621)
 * mabi=o64:                              MIPS Options.       (line  138)
 * mabi=spe:                              RS/6000 and PowerPC Options.
-                                                             (line  613)
+                                                             (line  616)
 * mabicalls:                             MIPS Options.       (line  162)
 * mabort-on-noreturn:                    ARM Options.        (line  196)
 * mabs=2008:                             MIPS Options.       (line  260)
@@ -52906,13 +53059,13 @@ look up both forms.
                                                              (line  992)
 * maddress-space-conversion:             SPU Options.        (line   68)
 * mads:                                  RS/6000 and PowerPC Options.
-                                                             (line  663)
+                                                             (line  666)
 * maix-struct-return:                    RS/6000 and PowerPC Options.
-                                                             (line  601)
+                                                             (line  604)
 * maix32:                                RS/6000 and PowerPC Options.
-                                                             (line  312)
+                                                             (line  315)
 * maix64:                                RS/6000 and PowerPC Options.
-                                                             (line  312)
+                                                             (line  315)
 * malign-300:                            H8/300 Options.     (line   41)
 * malign-call:                           ARC Options.        (line  192)
 * malign-double:                         i386 and x86-64 Options.
@@ -52921,17 +53074,17 @@ look up both forms.
 * malign-labels:                         FRV Options.        (line  128)
 * malign-loops:                          M32R/D Options.     (line   73)
 * malign-natural:                        RS/6000 and PowerPC Options.
-                                                             (line  350)
+                                                             (line  353)
 * malign-power:                          RS/6000 and PowerPC Options.
-                                                             (line  350)
+                                                             (line  353)
 * mall-opts:                             MeP Options.        (line   11)
 * malloc-cc:                             FRV Options.        (line   31)
 * maltivec:                              RS/6000 and PowerPC Options.
-                                                             (line  132)
+                                                             (line  135)
 * maltivec=be:                           RS/6000 and PowerPC Options.
-                                                             (line  148)
+                                                             (line  151)
 * maltivec=le:                           RS/6000 and PowerPC Options.
-                                                             (line  158)
+                                                             (line  161)
 * mam33:                                 MN10300 Options.    (line   17)
 * mam33-2:                               MN10300 Options.    (line   24)
 * mam34:                                 MN10300 Options.    (line   27)
@@ -52944,7 +53097,7 @@ look up both forms.
 * mARC600:                               ARC Options.        (line   19)
 * mARC601:                               ARC Options.        (line   23)
 * mARC700:                               ARC Options.        (line   26)
-* march:                                 AArch64 Options.    (line   73)
+* march:                                 AArch64 Options.    (line   79)
 * march <1>:                             ARM Options.        (line   75)
 * march <2>:                             C6X Options.        (line    7)
 * march <3>:                             CRIS Options.       (line   10)
@@ -52971,7 +53124,7 @@ look up both forms.
 * mauto-pic:                             IA-64 Options.      (line   50)
 * maverage:                              MeP Options.        (line   16)
 * mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
-                                                             (line  420)
+                                                             (line  423)
 * max-vect-align:                        Adapteva Epiphany Options.
                                                              (line  119)
 * mb:                                    SH Options.         (line  147)
@@ -52986,7 +53139,7 @@ look up both forms.
 * mbcopy:                                PDP-11 Options.     (line   36)
 * mbcopy-builtin:                        PDP-11 Options.     (line   32)
 * mbig:                                  RS/6000 and PowerPC Options.
-                                                             (line  500)
+                                                             (line  503)
 * mbig-endian:                           AArch64 Options.    (line   20)
 * mbig-endian <1>:                       ARC Options.        (line  344)
 * mbig-endian <2>:                       ARM Options.        (line   62)
@@ -52996,20 +53149,20 @@ look up both forms.
 * mbig-endian <6>:                       MicroBlaze Options. (line   57)
 * mbig-endian <7>:                       NDS32 Options.      (line    9)
 * mbig-endian <8>:                       RS/6000 and PowerPC Options.
-                                                             (line  500)
+                                                             (line  503)
 * mbig-endian <9>:                       TILE-Gx Options.    (line   29)
 * mbig-endian-data:                      RX Options.         (line   42)
 * mbig-switch:                           V850 Options.       (line  176)
 * mbigtable:                             SH Options.         (line  162)
 * mbionic:                               GNU/Linux Options.  (line   17)
 * mbit-align:                            RS/6000 and PowerPC Options.
-                                                             (line  452)
+                                                             (line  455)
 * mbit-ops:                              CR16 Options.       (line   25)
 * mbitfield:                             M680x0 Options.     (line  231)
 * mbitops:                               MeP Options.        (line   26)
 * mbitops <1>:                           SH Options.         (line  166)
 * mblock-move-inline-limit:              RS/6000 and PowerPC Options.
-                                                             (line  733)
+                                                             (line  736)
 * mbranch-cheap:                         PDP-11 Options.     (line   65)
 * mbranch-cost:                          Adapteva Epiphany Options.
                                                              (line   18)
@@ -53022,7 +53175,7 @@ look up both forms.
 * mbranch-likely:                        MIPS Options.       (line  708)
 * mbranch-predict:                       MMIX Options.       (line   48)
 * mbss-plt:                              RS/6000 and PowerPC Options.
-                                                             (line  185)
+                                                             (line  188)
 * mbuild-constants:                      DEC Alpha Options.  (line  141)
 * mbwx:                                  DEC Alpha Options.  (line  163)
 * mbypass-cache:                         Nios II Options.    (line   34)
@@ -53033,22 +53186,22 @@ look up both forms.
 * mcache-size:                           SPU Options.        (line   75)
 * mcache-volatile:                       Nios II Options.    (line   40)
 * mcall-eabi:                            RS/6000 and PowerPC Options.
-                                                             (line  575)
+                                                             (line  578)
 * mcall-freebsd:                         RS/6000 and PowerPC Options.
-                                                             (line  589)
+                                                             (line  592)
 * mcall-linux:                           RS/6000 and PowerPC Options.
-                                                             (line  585)
+                                                             (line  588)
 * mcall-netbsd:                          RS/6000 and PowerPC Options.
-                                                             (line  593)
+                                                             (line  596)
 * mcall-netbsd <1>:                      RS/6000 and PowerPC Options.
-                                                             (line  597)
+                                                             (line  600)
 * mcall-prologues:                       AVR Options.        (line  157)
 * mcall-sysv:                            RS/6000 and PowerPC Options.
-                                                             (line  567)
+                                                             (line  570)
 * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
-                                                             (line  575)
-* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
                                                              (line  578)
+* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
+                                                             (line  581)
 * mcallee-super-interworking:            ARM Options.        (line  285)
 * mcaller-super-interworking:            ARM Options.        (line  292)
 * mcallgraph-data:                       MCore Options.      (line   31)
@@ -53069,17 +53222,17 @@ look up both forms.
 * mcmodel=large <1>:                     i386 and x86-64 Options.
                                                              (line  983)
 * mcmodel=large <2>:                     RS/6000 and PowerPC Options.
-                                                             (line  126)
+                                                             (line  129)
 * mcmodel=large <3>:                     TILE-Gx Options.    (line   14)
 * mcmodel=medium:                        i386 and x86-64 Options.
                                                              (line  976)
 * mcmodel=medium <1>:                    RS/6000 and PowerPC Options.
-                                                             (line  122)
+                                                             (line  125)
 * mcmodel=small:                         AArch64 Options.    (line   38)
 * mcmodel=small <1>:                     i386 and x86-64 Options.
                                                              (line  965)
 * mcmodel=small <2>:                     RS/6000 and PowerPC Options.
-                                                             (line  118)
+                                                             (line  121)
 * mcmodel=small <3>:                     TILE-Gx Options.    (line    9)
 * mcmodel=tiny:                          AArch64 Options.    (line   31)
 * mcmov:                                 NDS32 Options.      (line   21)
@@ -53090,7 +53243,7 @@ look up both forms.
 * mcode-readable:                        MIPS Options.       (line  463)
 * mcompact-casesi:                       ARC Options.        (line  210)
 * mcompat-align-parm:                    RS/6000 and PowerPC Options.
-                                                             (line  889)
+                                                             (line  892)
 * mcond-exec:                            FRV Options.        (line  187)
 * mcond-move:                            FRV Options.        (line  159)
 * mconfig=:                              MeP Options.        (line   39)
@@ -53104,7 +53257,7 @@ look up both forms.
 * mcop64:                                MeP Options.        (line   56)
 * mcorea:                                Blackfin Options.   (line  156)
 * mcoreb:                                Blackfin Options.   (line  163)
-* mcpu:                                  AArch64 Options.    (line  105)
+* mcpu:                                  AArch64 Options.    (line  111)
 * mcpu <1>:                              ARC Options.        (line   14)
 * mcpu <2>:                              ARM Options.        (line  136)
 * mcpu <3>:                              CRIS Options.       (line   10)
@@ -53128,7 +53281,7 @@ look up both forms.
 * mcrc32:                                i386 and x86-64 Options.
                                                              (line  719)
 * mcrypto:                               RS/6000 and PowerPC Options.
-                                                             (line  220)
+                                                             (line  223)
 * mcsync-anomaly:                        Blackfin Options.   (line   59)
 * mctor-dtor:                            NDS32 Options.      (line   73)
 * mcustom-fpu-cfg:                       Nios II Options.    (line  175)
@@ -53147,7 +53300,7 @@ look up both forms.
 * mdebug-main=PREFIX:                    VMS Options.        (line   13)
 * mdec-asm:                              PDP-11 Options.     (line   72)
 * mdirect-move:                          RS/6000 and PowerPC Options.
-                                                             (line  226)
+                                                             (line  229)
 * mdisable-callt:                        V850 Options.       (line   92)
 * mdisable-fpregs:                       HPPA Options.       (line   28)
 * mdisable-indexing:                     HPPA Options.       (line   34)
@@ -53162,12 +53315,12 @@ look up both forms.
 * mdll:                                  i386 and x86-64 Windows Options.
                                                              (line   16)
 * mdlmzb:                                RS/6000 and PowerPC Options.
-                                                             (line  445)
+                                                             (line  448)
 * mdmx:                                  MIPS Options.       (line  336)
 * mdouble:                               FRV Options.        (line   48)
 * mdouble-float:                         MIPS Options.       (line  255)
 * mdouble-float <1>:                     RS/6000 and PowerPC Options.
-                                                             (line  368)
+                                                             (line  371)
 * mdpfp:                                 ARC Options.        (line   30)
 * mdpfp-compact:                         ARC Options.        (line   31)
 * mdpfp-fast:                            ARC Options.        (line   35)
@@ -53184,13 +53337,13 @@ look up both forms.
 * mdwarf2-asm:                           IA-64 Options.      (line   94)
 * mdword:                                FRV Options.        (line   40)
 * mdynamic-no-pic:                       RS/6000 and PowerPC Options.
-                                                             (line  505)
+                                                             (line  508)
 * mea:                                   ARC Options.        (line   43)
 * mEA:                                   ARC Options.        (line  373)
 * mea32:                                 SPU Options.        (line   60)
 * mea64:                                 SPU Options.        (line   60)
 * meabi:                                 RS/6000 and PowerPC Options.
-                                                             (line  682)
+                                                             (line  685)
 * mearly-cbranchsi:                      ARC Options.        (line  229)
 * mearly-stop-bits:                      IA-64 Options.      (line  100)
 * meb:                                   MeP Options.        (line   68)
@@ -53204,7 +53357,7 @@ look up both forms.
 * melf:                                  CRIS Options.       (line   87)
 * melf <1>:                              MMIX Options.       (line   43)
 * memb:                                  RS/6000 and PowerPC Options.
-                                                             (line  677)
+                                                             (line  680)
 * membedded-data:                        MIPS Options.       (line  450)
 * memregs=:                              M32C Options.       (line   21)
 * mep:                                   V850 Options.       (line   16)
@@ -53235,6 +53388,7 @@ look up both forms.
 * mfix-24k:                              MIPS Options.       (line  567)
 * mfix-and-continue:                     Darwin Options.     (line  104)
 * mfix-at697f:                           SPARC Options.      (line  243)
+* mfix-cortex-a53-843419:                AArch64 Options.    (line   74)
 * mfix-cortex-m3-ldrd:                   ARM Options.        (line  325)
 * mfix-r10000:                           MIPS Options.       (line  589)
 * mfix-r4000:                            MIPS Options.       (line  573)
@@ -53253,7 +53407,7 @@ look up both forms.
 * mflip-mips16:                          MIPS Options.       (line  110)
 * mfloat-abi:                            ARM Options.        (line   42)
 * mfloat-gprs:                           RS/6000 and PowerPC Options.
-                                                             (line  257)
+                                                             (line  260)
 * mfloat-ieee:                           DEC Alpha Options.  (line  171)
 * mfloat-vax:                            DEC Alpha Options.  (line  171)
 * mfloat32:                              PDP-11 Options.     (line   52)
@@ -53275,7 +53429,7 @@ look up both forms.
 * mfp16-format:                          ARM Options.        (line  176)
 * mfp32:                                 MIPS Options.       (line  228)
 * mfp64:                                 MIPS Options.       (line  231)
-* mfpmath:                               Optimize Options.   (line 1942)
+* mfpmath:                               Optimize Options.   (line 1951)
 * mfpmath <1>:                           i386 and x86-64 Options.
                                                              (line  273)
 * mfpr-32:                               FRV Options.        (line   15)
@@ -53285,19 +53439,19 @@ look up both forms.
 * mfpu:                                  ARM Options.        (line  156)
 * mfpu <1>:                              PDP-11 Options.     (line    9)
 * mfpu <2>:                              RS/6000 and PowerPC Options.
-                                                             (line  376)
+                                                             (line  379)
 * mfpu <3>:                              SPARC Options.      (line   34)
 * mfriz:                                 RS/6000 and PowerPC Options.
-                                                             (line  860)
+                                                             (line  863)
 * mfsca:                                 SH Options.         (line  484)
 * mfsrra:                                SH Options.         (line  493)
 * mfull-regs:                            NDS32 Options.      (line   18)
 * mfull-toc:                             RS/6000 and PowerPC Options.
-                                                             (line  285)
+                                                             (line  288)
 * mfused-madd:                           IA-64 Options.      (line   88)
 * mfused-madd <1>:                       MIPS Options.       (line  550)
 * mfused-madd <2>:                       RS/6000 and PowerPC Options.
-                                                             (line  429)
+                                                             (line  432)
 * mfused-madd <3>:                       S/390 and zSeries Options.
                                                              (line  135)
 * mfused-madd <4>:                       SH Options.         (line  475)
@@ -53308,7 +53462,7 @@ look up both forms.
 * mgas:                                  HPPA Options.       (line   69)
 * mgcc-abi:                              V850 Options.       (line  148)
 * mgen-cell-microcode:                   RS/6000 and PowerPC Options.
-                                                             (line  173)
+                                                             (line  176)
 * mgeneral-regs-only:                    AArch64 Options.    (line   24)
 * mgettrcost=NUMBER:                     SH Options.         (line  425)
 * mghs:                                  V850 Options.       (line  127)
@@ -53339,7 +53493,7 @@ look up both forms.
 * mhard-float <2>:                       MicroBlaze Options. (line   10)
 * mhard-float <3>:                       MIPS Options.       (line  234)
 * mhard-float <4>:                       RS/6000 and PowerPC Options.
-                                                             (line  362)
+                                                             (line  365)
 * mhard-float <5>:                       S/390 and zSeries Options.
                                                              (line   11)
 * mhard-float <6>:                       SPARC Options.      (line   34)
@@ -53349,7 +53503,7 @@ look up both forms.
 * mhint-max-distance:                    SPU Options.        (line  107)
 * mhint-max-nops:                        SPU Options.        (line  101)
 * mhotpatch:                             S/390 and zSeries Options.
-                                                             (line  171)
+                                                             (line  170)
 * mhp-ld:                                HPPA Options.       (line  117)
 * mhw-div:                               Nios II Options.    (line   55)
 * mhw-mul:                               Nios II Options.    (line   55)
@@ -53385,7 +53539,7 @@ look up both forms.
                                                              (line  849)
 * minrt:                                 MSP430 Options.     (line   77)
 * minsert-sched-nops:                    RS/6000 and PowerPC Options.
-                                                             (line  545)
+                                                             (line  548)
 * mint-register:                         RX Options.         (line  100)
 * mint16:                                PDP-11 Options.     (line   40)
 * mint32:                                CR16 Options.       (line   22)
@@ -53407,7 +53561,7 @@ look up both forms.
 * mips64:                                MIPS Options.       (line   95)
 * mips64r2:                              MIPS Options.       (line   98)
 * misel:                                 RS/6000 and PowerPC Options.
-                                                             (line  191)
+                                                             (line  194)
 * misize:                                ARC Options.        (line  130)
 * misize <1>:                            SH Options.         (line  207)
 * misr-vector-size:                      NDS32 Options.      (line   51)
@@ -53432,7 +53586,7 @@ look up both forms.
 * mlinker-opt:                           HPPA Options.       (line   79)
 * mlinux:                                CRIS Options.       (line   91)
 * mlittle:                               RS/6000 and PowerPC Options.
-                                                             (line  494)
+                                                             (line  497)
 * mlittle-endian:                        AArch64 Options.    (line   27)
 * mlittle-endian <1>:                    ARC Options.        (line  353)
 * mlittle-endian <2>:                    ARM Options.        (line   58)
@@ -53442,7 +53596,7 @@ look up both forms.
 * mlittle-endian <6>:                    MicroBlaze Options. (line   60)
 * mlittle-endian <7>:                    NDS32 Options.      (line   12)
 * mlittle-endian <8>:                    RS/6000 and PowerPC Options.
-                                                             (line  494)
+                                                             (line  497)
 * mlittle-endian <9>:                    TILE-Gx Options.    (line   29)
 * mlittle-endian-data:                   RX Options.         (line   42)
 * mliw:                                  MN10300 Options.    (line   54)
@@ -53472,7 +53626,7 @@ look up both forms.
 * mlong32:                               MIPS Options.       (line  376)
 * mlong64:                               MIPS Options.       (line  371)
 * mlongcall:                             RS/6000 and PowerPC Options.
-                                                             (line  753)
+                                                             (line  756)
 * mlongcalls:                            Xtensa Options.     (line   72)
 * mloop:                                 V850 Options.       (line  121)
 * mlow-64k:                              Blackfin Options.   (line   69)
@@ -53517,7 +53671,7 @@ look up both forms.
                                                              (line   27)
 * mmicromips:                            MIPS Options.       (line  347)
 * mminimal-toc:                          RS/6000 and PowerPC Options.
-                                                             (line  285)
+                                                             (line  288)
 * mminmax:                               MeP Options.        (line   87)
 * mmixed-code:                           ARC Options.        (line  264)
 * mmmx:                                  i386 and x86-64 Options.
@@ -53534,18 +53688,18 @@ look up both forms.
 * mmul64:                                ARC Options.        (line   54)
 * mmuladd:                               FRV Options.        (line   64)
 * mmulhw:                                RS/6000 and PowerPC Options.
-                                                             (line  438)
+                                                             (line  441)
 * mmult:                                 MeP Options.        (line   90)
 * mmult-bug:                             MN10300 Options.    (line    9)
 * mmultcost:                             ARC Options.        (line  326)
 * mmulti-cond-exec:                      FRV Options.        (line  215)
 * mmulticore:                            Blackfin Options.   (line  141)
 * mmultiple:                             RS/6000 and PowerPC Options.
-                                                             (line  388)
+                                                             (line  391)
 * mmvcle:                                S/390 and zSeries Options.
                                                              (line  104)
 * mmvme:                                 RS/6000 and PowerPC Options.
-                                                             (line  658)
+                                                             (line  661)
 * mn:                                    H8/300 Options.     (line   20)
 * mnan=2008:                             MIPS Options.       (line  280)
 * mnan=legacy:                           MIPS Options.       (line  280)
@@ -53568,19 +53722,19 @@ look up both forms.
 * mno-align-stringops:                   i386 and x86-64 Options.
                                                              (line  837)
 * mno-altivec:                           RS/6000 and PowerPC Options.
-                                                             (line  132)
+                                                             (line  135)
 * mno-am33:                              MN10300 Options.    (line   20)
 * mno-app-regs:                          SPARC Options.      (line   10)
 * mno-app-regs <1>:                      V850 Options.       (line  185)
 * mno-as100-syntax:                      RX Options.         (line   76)
 * mno-atomic-updates:                    SPU Options.        (line   83)
 * mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
-                                                             (line  420)
+                                                             (line  423)
 * mno-backchain:                         S/390 and zSeries Options.
                                                              (line   35)
 * mno-base-addresses:                    MMIX Options.       (line   53)
 * mno-bit-align:                         RS/6000 and PowerPC Options.
-                                                             (line  452)
+                                                             (line  455)
 * mno-bitfield:                          M680x0 Options.     (line  227)
 * mno-branch-likely:                     MIPS Options.       (line  708)
 * mno-branch-predict:                    MMIX Options.       (line   48)
@@ -53604,7 +53758,7 @@ look up both forms.
 * mno-crt0:                              MN10300 Options.    (line   43)
 * mno-crt0 <1>:                          Moxie Options.      (line   14)
 * mno-crypto:                            RS/6000 and PowerPC Options.
-                                                             (line  220)
+                                                             (line  223)
 * mno-csync-anomaly:                     Blackfin Options.   (line   65)
 * mno-custom-INSN:                       Nios II Options.    (line   61)
 * mno-data-align:                        CRIS Options.       (line   55)
@@ -53613,12 +53767,12 @@ look up both forms.
 * mno-default:                           i386 and x86-64 Options.
                                                              (line  668)
 * mno-direct-move:                       RS/6000 and PowerPC Options.
-                                                             (line  226)
+                                                             (line  229)
 * mno-disable-callt:                     V850 Options.       (line   92)
 * mno-div:                               M680x0 Options.     (line  206)
 * mno-div <1>:                           MCore Options.      (line   15)
 * mno-dlmzb:                             RS/6000 and PowerPC Options.
-                                                             (line  445)
+                                                             (line  448)
 * mno-double:                            FRV Options.        (line   52)
 * mno-dpfp-lrsr:                         ARC Options.        (line   39)
 * mno-dsp:                               MIPS Options.       (line  313)
@@ -53626,7 +53780,7 @@ look up both forms.
 * mno-dwarf2-asm:                        IA-64 Options.      (line   94)
 * mno-dword:                             FRV Options.        (line   44)
 * mno-eabi:                              RS/6000 and PowerPC Options.
-                                                             (line  682)
+                                                             (line  685)
 * mno-early-stop-bits:                   IA-64 Options.      (line  100)
 * mno-eflags:                            FRV Options.        (line  155)
 * mno-embedded-data:                     MIPS Options.       (line  450)
@@ -53644,6 +53798,7 @@ look up both forms.
 * mno-faster-structs:                    SPARC Options.      (line   91)
 * mno-fix:                               DEC Alpha Options.  (line  163)
 * mno-fix-24k:                           MIPS Options.       (line  567)
+* mno-fix-cortex-a53-843419:             AArch64 Options.    (line   74)
 * mno-fix-r10000:                        MIPS Options.       (line  589)
 * mno-fix-r4000:                         MIPS Options.       (line  573)
 * mno-fix-r4400:                         MIPS Options.       (line  583)
@@ -53655,7 +53810,7 @@ look up both forms.
 * mno-flush-trap:                        M32R/D Options.     (line   90)
 * mno-fmaf:                              SPARC Options.      (line  237)
 * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
-                                                             (line  285)
+                                                             (line  288)
 * mno-fp-regs:                           DEC Alpha Options.  (line   25)
 * mno-fp-ret-in-387:                     i386 and x86-64 Options.
                                                              (line  346)
@@ -53667,7 +53822,7 @@ look up both forms.
 * mno-fused-madd:                        IA-64 Options.      (line   88)
 * mno-fused-madd <1>:                    MIPS Options.       (line  550)
 * mno-fused-madd <2>:                    RS/6000 and PowerPC Options.
-                                                             (line  429)
+                                                             (line  432)
 * mno-fused-madd <3>:                    S/390 and zSeries Options.
                                                              (line  135)
 * mno-fused-madd <4>:                    SH Options.         (line  475)
@@ -53700,7 +53855,7 @@ look up both forms.
 * mno-interlink-mips16:                  MIPS Options.       (line  129)
 * mno-interrupts:                        AVR Options.        (line  167)
 * mno-isel:                              RS/6000 and PowerPC Options.
-                                                             (line  191)
+                                                             (line  194)
 * mno-knuthdiv:                          MMIX Options.       (line   32)
 * mno-leaf-id-shared-library:            Blackfin Options.   (line   97)
 * mno-libfuncs:                          MMIX Options.       (line   10)
@@ -53713,7 +53868,7 @@ look up both forms.
 * mno-long-calls <4>:                    V850 Options.       (line   10)
 * mno-long-jumps:                        V850 Options.       (line  108)
 * mno-longcall:                          RS/6000 and PowerPC Options.
-                                                             (line  753)
+                                                             (line  756)
 * mno-longcalls:                         Xtensa Options.     (line   72)
 * mno-low-64k:                           Blackfin Options.   (line   73)
 * mno-lsim:                              FR30 Options.       (line   14)
@@ -53740,11 +53895,11 @@ look up both forms.
 * mno-mul-bug-workaround:                CRIS Options.       (line   32)
 * mno-muladd:                            FRV Options.        (line   68)
 * mno-mulhw:                             RS/6000 and PowerPC Options.
-                                                             (line  438)
+                                                             (line  441)
 * mno-mult-bug:                          MN10300 Options.    (line   13)
 * mno-multi-cond-exec:                   FRV Options.        (line  223)
 * mno-multiple:                          RS/6000 and PowerPC Options.
-                                                             (line  388)
+                                                             (line  391)
 * mno-mvcle:                             S/390 and zSeries Options.
                                                              (line  104)
 * mno-nested-cond-exec:                  FRV Options.        (line  237)
@@ -53755,7 +53910,7 @@ look up both forms.
 * mno-packed-stack:                      S/390 and zSeries Options.
                                                              (line   54)
 * mno-paired:                            RS/6000 and PowerPC Options.
-                                                             (line  205)
+                                                             (line  208)
 * mno-paired-single:                     MIPS Options.       (line  330)
 * mno-perf-ext:                          NDS32 Options.      (line   30)
 * mno-pic:                               IA-64 Options.      (line   26)
@@ -53771,9 +53926,9 @@ look up both forms.
 * mno-postmodify:                        Adapteva Epiphany Options.
                                                              (line  109)
 * mno-power8-fusion:                     RS/6000 and PowerPC Options.
-                                                             (line  232)
+                                                             (line  235)
 * mno-power8-vector:                     RS/6000 and PowerPC Options.
-                                                             (line  238)
+                                                             (line  241)
 * mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
                                                              (line   27)
 * mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
@@ -53783,24 +53938,24 @@ look up both forms.
 * mno-prolog-function:                   V850 Options.       (line   23)
 * mno-prologue-epilogue:                 CRIS Options.       (line   71)
 * mno-prototype:                         RS/6000 and PowerPC Options.
-                                                             (line  642)
+                                                             (line  645)
 * mno-push-args:                         i386 and x86-64 Options.
                                                              (line  815)
 * mno-quad-memory:                       RS/6000 and PowerPC Options.
-                                                             (line  245)
+                                                             (line  248)
 * mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
-                                                             (line  251)
+                                                             (line  254)
 * mno-red-zone:                          i386 and x86-64 Options.
                                                              (line  957)
 * mno-register-names:                    IA-64 Options.      (line   37)
 * mno-regnames:                          RS/6000 and PowerPC Options.
-                                                             (line  747)
+                                                             (line  750)
 * mno-relax:                             V850 Options.       (line  103)
 * mno-relax-immediate:                   MCore Options.      (line   19)
 * mno-relocatable:                       RS/6000 and PowerPC Options.
-                                                             (line  468)
+                                                             (line  471)
 * mno-relocatable-lib:                   RS/6000 and PowerPC Options.
-                                                             (line  479)
+                                                             (line  482)
 * mno-renesas:                           SH Options.         (line  176)
 * mno-round-nearest:                     Adapteva Epiphany Options.
                                                              (line   51)
@@ -53819,7 +53974,7 @@ look up both forms.
 * mno-sdata:                             ARC Options.        (line  174)
 * mno-sdata <1>:                         IA-64 Options.      (line   42)
 * mno-sdata <2>:                         RS/6000 and PowerPC Options.
-                                                             (line  728)
+                                                             (line  731)
 * mno-sep-data:                          Blackfin Options.   (line  115)
 * mno-serialize-volatile:                Xtensa Options.     (line   35)
 * mno-short:                             M680x0 Options.     (line  222)
@@ -53835,7 +53990,7 @@ look up both forms.
 * mno-soft-float:                        DEC Alpha Options.  (line   10)
 * mno-space-regs:                        HPPA Options.       (line   39)
 * mno-spe:                               RS/6000 and PowerPC Options.
-                                                             (line  200)
+                                                             (line  203)
 * mno-specld-anomaly:                    Blackfin Options.   (line   55)
 * mno-split-addresses:                   MIPS Options.       (line  488)
 * mno-sse:                               i386 and x86-64 Options.
@@ -53844,18 +53999,18 @@ look up both forms.
 * mno-stack-bias:                        SPARC Options.      (line  313)
 * mno-strict-align:                      M680x0 Options.     (line  283)
 * mno-strict-align <1>:                  RS/6000 and PowerPC Options.
-                                                             (line  463)
+                                                             (line  466)
 * mno-string:                            RS/6000 and PowerPC Options.
-                                                             (line  399)
+                                                             (line  402)
 * mno-sum-in-toc:                        RS/6000 and PowerPC Options.
-                                                             (line  285)
+                                                             (line  288)
 * mno-sym32:                             MIPS Options.       (line  386)
 * mno-target-align:                      Xtensa Options.     (line   59)
 * mno-text-section-literals:             Xtensa Options.     (line   47)
 * mno-tls-markers:                       RS/6000 and PowerPC Options.
-                                                             (line  785)
+                                                             (line  788)
 * mno-toc:                               RS/6000 and PowerPC Options.
-                                                             (line  488)
+                                                             (line  491)
 * mno-toplevel-symbols:                  MMIX Options.       (line   39)
 * mno-tpf-trace:                         S/390 and zSeries Options.
                                                              (line  129)
@@ -53863,7 +54018,7 @@ look up both forms.
 * mno-unaligned-doubles:                 SPARC Options.      (line   73)
 * mno-uninit-const-in-rodata:            MIPS Options.       (line  458)
 * mno-update:                            RS/6000 and PowerPC Options.
-                                                             (line  410)
+                                                             (line  413)
 * mno-user-mode:                         SPARC Options.      (line   85)
 * mno-usermode:                          SH Options.         (line  296)
 * mno-v3push:                            NDS32 Options.      (line   36)
@@ -53878,15 +54033,15 @@ look up both forms.
 * mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
 * mno-volatile-cache:                    ARC Options.        (line  188)
 * mno-vrsave:                            RS/6000 and PowerPC Options.
-                                                             (line  170)
+                                                             (line  173)
 * mno-vsx:                               RS/6000 and PowerPC Options.
-                                                             (line  214)
+                                                             (line  217)
 * mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
 * mno-wide-bitfields:                    MCore Options.      (line   23)
 * mno-xgot:                              M680x0 Options.     (line  315)
 * mno-xgot <1>:                          MIPS Options.       (line  199)
 * mno-xl-compat:                         RS/6000 and PowerPC Options.
-                                                             (line  320)
+                                                             (line  323)
 * mno-zdcbranch:                         SH Options.         (line  466)
 * mno-zero-extend:                       MMIX Options.       (line   26)
 * mnobitfield:                           M680x0 Options.     (line  227)
@@ -53916,7 +54071,7 @@ look up both forms.
                                                              (line   54)
 * mpadstruct:                            SH Options.         (line  210)
 * mpaired:                               RS/6000 and PowerPC Options.
-                                                             (line  205)
+                                                             (line  208)
 * mpaired-single:                        MIPS Options.       (line  330)
 * mpc32:                                 i386 and x86-64 Options.
                                                              (line  484)
@@ -53927,7 +54082,7 @@ look up both forms.
 * mpcrel:                                M680x0 Options.     (line  275)
 * mpdebug:                               CRIS Options.       (line   36)
 * mpe:                                   RS/6000 and PowerPC Options.
-                                                             (line  339)
+                                                             (line  342)
 * mpe-aligned-commons:                   i386 and x86-64 Windows Options.
                                                              (line   59)
 * mperf-ext:                             NDS32 Options.      (line   27)
@@ -53936,7 +54091,7 @@ look up both forms.
 * mpid:                                  RX Options.         (line  117)
 * mplt:                                  MIPS Options.       (line  189)
 * mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
-                                                             (line  868)
+                                                             (line  871)
 * mpoke-function-name:                   ARM Options.        (line  244)
 * mpopc:                                 SPARC Options.      (line  230)
 * mpopcntb:                              RS/6000 and PowerPC Options.
@@ -53945,9 +54100,9 @@ look up both forms.
                                                              (line   27)
 * mportable-runtime:                     HPPA Options.       (line   65)
 * mpower8-fusion:                        RS/6000 and PowerPC Options.
-                                                             (line  232)
+                                                             (line  235)
 * mpower8-vector:                        RS/6000 and PowerPC Options.
-                                                             (line  238)
+                                                             (line  241)
 * mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
                                                              (line   27)
 * mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
@@ -53963,11 +54118,11 @@ look up both forms.
                                                              (line  514)
 * mpretend-cmove:                        SH Options.         (line  502)
 * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
-                                                             (line  517)
+                                                             (line  520)
 * mprolog-function:                      V850 Options.       (line   23)
 * mprologue-epilogue:                    CRIS Options.       (line   71)
 * mprototype:                            RS/6000 and PowerPC Options.
-                                                             (line  642)
+                                                             (line  645)
 * mpt-fixed:                             SH Options.         (line  429)
 * mpush-args:                            i386 and x86-64 Options.
                                                              (line  815)
@@ -53975,26 +54130,26 @@ look up both forms.
                                                              (line  266)
 * mq-class:                              ARC Options.        (line  269)
 * mquad-memory:                          RS/6000 and PowerPC Options.
-                                                             (line  245)
+                                                             (line  248)
 * mquad-memory-atomic:                   RS/6000 and PowerPC Options.
-                                                             (line  251)
+                                                             (line  254)
 * mr10k-cache-barrier:                   MIPS Options.       (line  630)
 * mRcq:                                  ARC Options.        (line  273)
 * mRcw:                                  ARC Options.        (line  277)
 * mrecip:                                i386 and x86-64 Options.
                                                              (line  725)
 * mrecip <1>:                            RS/6000 and PowerPC Options.
-                                                             (line  797)
+                                                             (line  800)
 * mrecip-precision:                      RS/6000 and PowerPC Options.
-                                                             (line  832)
+                                                             (line  835)
 * mrecip=opt:                            i386 and x86-64 Options.
                                                              (line  747)
 * mrecip=opt <1>:                        RS/6000 and PowerPC Options.
-                                                             (line  810)
+                                                             (line  813)
 * mreduced-regs:                         NDS32 Options.      (line   15)
 * mregister-names:                       IA-64 Options.      (line   37)
 * mregnames:                             RS/6000 and PowerPC Options.
-                                                             (line  747)
+                                                             (line  750)
 * mregparm:                              i386 and x86-64 Options.
                                                              (line  451)
 * mrelax:                                AVR Options.        (line  171)
@@ -54008,9 +54163,9 @@ look up both forms.
 * mrelax-immediate:                      MCore Options.      (line   19)
 * mrelax-pic-calls:                      MIPS Options.       (line  755)
 * mrelocatable:                          RS/6000 and PowerPC Options.
-                                                             (line  468)
+                                                             (line  471)
 * mrelocatable-lib:                      RS/6000 and PowerPC Options.
-                                                             (line  479)
+                                                             (line  482)
 * mrenesas:                              SH Options.         (line  173)
 * mrepeat:                               MeP Options.        (line   96)
 * mrestrict-it:                          ARM Options.        (line  356)
@@ -54033,7 +54188,7 @@ look up both forms.
 * msatur:                                MeP Options.        (line  105)
 * msave-acc-in-interrupts:               RX Options.         (line  109)
 * msave-toc-indirect:                    RS/6000 and PowerPC Options.
-                                                             (line  880)
+                                                             (line  883)
 * mscc:                                  FRV Options.        (line  173)
 * msched-ar-data-spec:                   IA-64 Options.      (line  134)
 * msched-ar-in-data-spec:                IA-64 Options.      (line  155)
@@ -54041,7 +54196,7 @@ look up both forms.
 * msched-br-in-data-spec:                IA-64 Options.      (line  148)
 * msched-control-spec:                   IA-64 Options.      (line  140)
 * msched-costly-dep:                     RS/6000 and PowerPC Options.
-                                                             (line  524)
+                                                             (line  527)
 * msched-count-spec-in-critical-path:    IA-64 Options.      (line  182)
 * msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  198)
 * msched-in-control-spec:                IA-64 Options.      (line  162)
@@ -54060,27 +54215,27 @@ look up both forms.
 * msda:                                  V850 Options.       (line   40)
 * msdata:                                IA-64 Options.      (line   42)
 * msdata <1>:                            RS/6000 and PowerPC Options.
-                                                             (line  715)
+                                                             (line  718)
 * msdata=all:                            C6X Options.        (line   30)
 * msdata=data:                           RS/6000 and PowerPC Options.
-                                                             (line  720)
+                                                             (line  723)
 * msdata=default:                        C6X Options.        (line   22)
 * msdata=default <1>:                    RS/6000 and PowerPC Options.
-                                                             (line  715)
+                                                             (line  718)
 * msdata=eabi:                           RS/6000 and PowerPC Options.
-                                                             (line  696)
+                                                             (line  699)
 * msdata=none:                           C6X Options.        (line   35)
 * msdata=none <1>:                       M32R/D Options.     (line   40)
 * msdata=none <2>:                       RS/6000 and PowerPC Options.
-                                                             (line  728)
+                                                             (line  731)
 * msdata=sdata:                          M32R/D Options.     (line   49)
 * msdata=sysv:                           RS/6000 and PowerPC Options.
-                                                             (line  706)
+                                                             (line  709)
 * msdata=use:                            M32R/D Options.     (line   53)
 * msdram:                                Blackfin Options.   (line  171)
 * msdram <1>:                            MeP Options.        (line  110)
 * msecure-plt:                           RS/6000 and PowerPC Options.
-                                                             (line  180)
+                                                             (line  183)
 * msel-sched-dont-check-control-spec:    IA-64 Options.      (line  203)
 * msep-data:                             Blackfin Options.   (line  109)
 * mserialize-volatile:                   Xtensa Options.     (line   35)
@@ -54096,20 +54251,20 @@ look up both forms.
 * msim <5>:                              MSP430 Options.     (line   40)
 * msim <6>:                              RL78 Options.       (line    7)
 * msim <7>:                              RS/6000 and PowerPC Options.
-                                                             (line  652)
+                                                             (line  655)
 * msim <8>:                              RX Options.         (line   71)
 * msim <9>:                              Xstormy16 Options.  (line    9)
 * msimd:                                 ARC Options.        (line   71)
 * msimnovec:                             MeP Options.        (line  117)
 * msimple-fpu:                           RS/6000 and PowerPC Options.
-                                                             (line  372)
+                                                             (line  375)
 * msingle-exit:                          MMIX Options.       (line   65)
 * msingle-float:                         MIPS Options.       (line  251)
 * msingle-float <1>:                     RS/6000 and PowerPC Options.
-                                                             (line  368)
+                                                             (line  371)
 * msingle-pic-base:                      ARM Options.        (line  225)
 * msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
-                                                             (line  511)
+                                                             (line  514)
 * msio:                                  HPPA Options.       (line   99)
 * msize-level:                           ARC Options.        (line  281)
 * mslow-bytes:                           MCore Options.      (line   35)
@@ -54138,7 +54293,7 @@ look up both forms.
 * msoft-float <7>:                       MIPS Options.       (line  237)
 * msoft-float <8>:                       PDP-11 Options.     (line   13)
 * msoft-float <9>:                       RS/6000 and PowerPC Options.
-                                                             (line  362)
+                                                             (line  365)
 * msoft-float <10>:                      S/390 and zSeries Options.
                                                              (line   11)
 * msoft-float <11>:                      SPARC Options.      (line   39)
@@ -54147,7 +54302,7 @@ look up both forms.
 * msp8:                                  AVR Options.        (line  185)
 * mspace:                                V850 Options.       (line   30)
 * mspe:                                  RS/6000 and PowerPC Options.
-                                                             (line  200)
+                                                             (line  203)
 * mspecld-anomaly:                       Blackfin Options.   (line   50)
 * mspfp:                                 ARC Options.        (line   62)
 * mspfp-compact:                         ARC Options.        (line   63)
@@ -54181,15 +54336,15 @@ look up both forms.
 * mstrict-align:                         AArch64 Options.    (line   49)
 * mstrict-align <1>:                     M680x0 Options.     (line  283)
 * mstrict-align <2>:                     RS/6000 and PowerPC Options.
-                                                             (line  463)
+                                                             (line  466)
 * mstrict-X:                             AVR Options.        (line  198)
 * mstring:                               RS/6000 and PowerPC Options.
-                                                             (line  399)
+                                                             (line  402)
 * mstringop-strategy=ALG:                i386 and x86-64 Options.
                                                              (line  853)
 * mstructure-size-boundary:              ARM Options.        (line  182)
 * msvr4-struct-return:                   RS/6000 and PowerPC Options.
-                                                             (line  604)
+                                                             (line  607)
 * mswap:                                 ARC Options.        (line   82)
 * mswape:                                ARC Options.        (line  114)
 * msym32:                                MIPS Options.       (line  386)
@@ -54222,10 +54377,10 @@ look up both forms.
 * mtls-direct-seg-refs:                  i386 and x86-64 Options.
                                                              (line  895)
 * mtls-markers:                          RS/6000 and PowerPC Options.
-                                                             (line  785)
+                                                             (line  788)
 * mtls-size:                             IA-64 Options.      (line  112)
 * mtoc:                                  RS/6000 and PowerPC Options.
-                                                             (line  488)
+                                                             (line  491)
 * mtomcat-stats:                         FRV Options.        (line  254)
 * mtoplevel-symbols:                     MMIX Options.       (line   39)
 * mtp:                                   ARM Options.        (line  300)
@@ -54234,7 +54389,7 @@ look up both forms.
 * mtpf-trace:                            S/390 and zSeries Options.
                                                              (line  129)
 * mtrap-precision:                       DEC Alpha Options.  (line  109)
-* mtune:                                 AArch64 Options.    (line   90)
+* mtune:                                 AArch64 Options.    (line   96)
 * mtune <1>:                             ARC Options.        (line  302)
 * mtune <2>:                             ARC Options.        (line  388)
 * mtune <3>:                             ARM Options.        (line   97)
@@ -54247,7 +54402,7 @@ look up both forms.
 * mtune <9>:                             MIPS Options.       (line   63)
 * mtune <10>:                            MN10300 Options.    (line   30)
 * mtune <11>:                            RS/6000 and PowerPC Options.
-                                                             (line  110)
+                                                             (line  113)
 * mtune <12>:                            S/390 and zSeries Options.
                                                              (line  122)
 * mtune <13>:                            SPARC Options.      (line  180)
@@ -54273,7 +54428,7 @@ look up both forms.
 * munix-asm:                             PDP-11 Options.     (line   68)
 * munsafe-dma:                           SPU Options.        (line   18)
 * mupdate:                               RS/6000 and PowerPC Options.
-                                                             (line  410)
+                                                             (line  413)
 * muser-enabled:                         LM32 Options.       (line   21)
 * muser-mode:                            SPARC Options.      (line   85)
 * musermode:                             SH Options.         (line  296)
@@ -54290,7 +54445,7 @@ look up both forms.
 * mveclibabi:                            i386 and x86-64 Options.
                                                              (line  776)
 * mveclibabi <1>:                        RS/6000 and PowerPC Options.
-                                                             (line  841)
+                                                             (line  844)
 * mvect8-ret-in-mem:                     i386 and x86-64 Options.
                                                              (line  472)
 * mvirt:                                 MIPS Options.       (line  367)
@@ -54303,15 +54458,15 @@ look up both forms.
 * mvolatile-cache:                       ARC Options.        (line  184)
 * mvr4130-align:                         MIPS Options.       (line  729)
 * mvrsave:                               RS/6000 and PowerPC Options.
-                                                             (line  170)
+                                                             (line  173)
 * mvsx:                                  RS/6000 and PowerPC Options.
-                                                             (line  214)
+                                                             (line  217)
 * mvxworks:                              RS/6000 and PowerPC Options.
-                                                             (line  673)
+                                                             (line  676)
 * mvzeroupper:                           i386 and x86-64 Options.
                                                              (line  686)
 * mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
-                                                             (line  176)
+                                                             (line  179)
 * mwarn-dynamicstack:                    S/390 and zSeries Options.
                                                              (line  148)
 * mwarn-framesize:                       S/390 and zSeries Options.
@@ -54330,10 +54485,10 @@ look up both forms.
 * mxgot:                                 M680x0 Options.     (line  315)
 * mxgot <1>:                             MIPS Options.       (line  199)
 * mxilinx-fpu:                           RS/6000 and PowerPC Options.
-                                                             (line  383)
+                                                             (line  386)
 * mxl-barrel-shift:                      MicroBlaze Options. (line   33)
 * mxl-compat:                            RS/6000 and PowerPC Options.
-                                                             (line  320)
+                                                             (line  323)
 * mxl-float-convert:                     MicroBlaze Options. (line   51)
 * mxl-float-sqrt:                        MicroBlaze Options. (line   54)
 * mxl-gp-opt:                            MicroBlaze Options. (line   45)
@@ -54345,7 +54500,7 @@ look up both forms.
 * mxl-stack-check:                       MicroBlaze Options. (line   42)
 * mxy:                                   ARC Options.        (line  124)
 * myellowknife:                          RS/6000 and PowerPC Options.
-                                                             (line  668)
+                                                             (line  671)
 * mzarch:                                S/390 and zSeries Options.
                                                              (line   94)
 * mzda:                                  V850 Options.       (line   45)
@@ -54389,7 +54544,7 @@ look up both forms.
 * P:                                     Preprocessor Options.
                                                              (line  647)
 * pagezero_size:                         Darwin Options.     (line  196)
-* param:                                 Optimize Options.   (line 2298)
+* param:                                 Optimize Options.   (line 2307)
 * pass-exit-codes:                       Overall Options.    (line  150)
 * pedantic:                              Standards.          (line   16)
 * pedantic <1>:                          Warning Options.    (line   71)
@@ -54425,7 +54580,7 @@ look up both forms.
 * print-sysroot-headers-suffix:          Debugging Options.  (line 1411)
 * private_bundle:                        Darwin Options.     (line  196)
 * pthread:                               RS/6000 and PowerPC Options.
-                                                             (line  792)
+                                                             (line  795)
 * pthread <1>:                           Solaris 2 Options.  (line   36)
 * pthreads:                              Solaris 2 Options.  (line   30)
 * Q:                                     Debugging Options.  (line  427)
@@ -54945,7 +55100,7 @@ Keyword Index
 * '#pragma implementation', implied:     C++ Interface.      (line   46)
 * #pragma interface:                     C++ Interface.      (line   20)
 * '#pragma', reason for not using:       Function Attributes.
-                                                             (line 2055)
+                                                             (line 2059)
 * $:                                     Dollar Signs.       (line    6)
 * '%' in constraint:                     Modifiers.          (line   45)
 * '%include':                            Spec Files.         (line   26)
@@ -54958,12 +55113,12 @@ Keyword Index
 * '+' in constraint:                     Modifiers.          (line   12)
 * '-lgcc', use with '-nodefaultlibs':    Link Options.       (line   85)
 * '-lgcc', use with '-nostdlib':         Link Options.       (line   85)
-* '-march' feature modifiers:            AArch64 Options.    (line  126)
-* '-mcpu' feature modifiers:             AArch64 Options.    (line  126)
+* '-march' feature modifiers:            AArch64 Options.    (line  132)
+* '-mcpu' feature modifiers:             AArch64 Options.    (line  132)
 * '-nodefaultlibs' and unresolved references: Link Options.  (line   85)
 * '-nostdlib' and unresolved references: Link Options.       (line   85)
 * .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
-                                                             (line  739)
+                                                             (line  742)
 * '//':                                  C++ Comments.       (line    6)
 * '0' in constraint:                     Simple Constraints. (line  125)
 * '<' in constraint:                     Simple Constraints. (line   47)
@@ -55355,7 +55510,7 @@ Keyword Index
 * 'alloc_size' attribute:                Function Attributes.
                                                              (line   72)
 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
-                                                             (line 1068)
+                                                             (line 1072)
 * Altera Nios II options:                Nios II Options.    (line    6)
 * alternate keywords:                    Alternate Keywords. (line    6)
 * 'always_inline' function attribute:    Function Attributes.
@@ -55523,9 +55678,9 @@ Keyword Index
 * code generation conventions:           Code Gen Options.   (line    6)
 * code, mixed with declarations:         Mixed Declarations. (line    6)
 * 'cold' function attribute:             Function Attributes.
-                                                             (line 1307)
+                                                             (line 1311)
 * 'cold' label attribute:                Function Attributes.
-                                                             (line 1325)
+                                                             (line 1329)
 * command options:                       Invoking GCC.       (line    6)
 * comments, C++ style:                   C++ Comments.       (line    6)
 * 'common' attribute:                    Variable Attributes.
@@ -55730,7 +55885,7 @@ Keyword Index
 * flexible array members:                Zero Length.        (line    6)
 * 'float' as function value type:        Incompatibilities.  (line  141)
 * floating point precision:              Disappointments.    (line   68)
-* floating-point precision:              Optimize Options.   (line 1917)
+* floating-point precision:              Optimize Options.   (line 1926)
 * floor:                                 Other Builtins.     (line    6)
 * floorf:                                Other Builtins.     (line    6)
 * floorl:                                Other Builtins.     (line    6)
@@ -55747,7 +55902,7 @@ Keyword Index
 * fmodf:                                 Other Builtins.     (line    6)
 * fmodl:                                 Other Builtins.     (line    6)
 * 'force_align_arg_pointer' attribute:   Function Attributes.
-                                                             (line 1384)
+                                                             (line 1388)
 * 'format' function attribute:           Function Attributes.
                                                              (line  453)
 * 'format_arg' function attribute:       Function Attributes.
@@ -55779,7 +55934,7 @@ Keyword Index
 * function versions:                     Function Multiversioning.
                                                              (line    6)
 * function without a prologue/epilogue code: Function Attributes.
-                                                             (line 1046)
+                                                             (line 1050)
 * function, size of pointer to:          Pointer Arith.      (line    6)
 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
                                                              (line  911)
@@ -55790,11 +55945,11 @@ Keyword Index
 * functions that are passed arguments in registers on the 386: Function Attributes.
                                                              (line    6)
 * functions that are passed arguments in registers on the 386 <1>: Function Attributes.
-                                                             (line 1349)
+                                                             (line 1353)
 * functions that behave like malloc:     Function Attributes.
                                                              (line    6)
 * functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
-                                                             (line 1058)
+                                                             (line 1062)
 * functions that do not pop the argument stack on the 386: Function Attributes.
                                                              (line    6)
 * functions that do pop the argument stack on the 386: Function Attributes.
@@ -55816,7 +55971,7 @@ Keyword Index
 * functions that pop the argument stack on the 386 <2>: Function Attributes.
                                                              (line  443)
 * functions that pop the argument stack on the 386 <3>: Function Attributes.
-                                                             (line 1507)
+                                                             (line 1511)
 * functions that return more than once:  Function Attributes.
                                                              (line    6)
 * functions with non-null pointer arguments: Function Attributes.
@@ -55872,9 +56027,9 @@ Keyword Index
 * hosted environment <2>:                C Dialect Options.  (line  252)
 * hosted implementation:                 Standards.          (line   13)
 * 'hot' function attribute:              Function Attributes.
-                                                             (line 1285)
+                                                             (line 1289)
 * 'hot' label attribute:                 Function Attributes.
-                                                             (line 1297)
+                                                             (line 1301)
 * 'hotpatch' attribute:                  Function Attributes.
                                                              (line 1037)
 * HPPA Options:                          HPPA Options.       (line    6)
@@ -55937,7 +56092,7 @@ Keyword Index
 * interrupt handler functions <2>:       Function Attributes.
                                                              (line  665)
 * interrupt handler functions on the AVR processors: Function Attributes.
-                                                             (line 1479)
+                                                             (line 1483)
 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
                                                              (line  826)
 * interrupt service routines on ARM:     Function Attributes.
@@ -56187,17 +56342,17 @@ Keyword Index
 * NFKC:                                  Warning Options.    (line 1291)
 * Nios II options:                       Nios II Options.    (line    6)
 * 'nmi' attribute:                       Function Attributes.
-                                                             (line 1371)
+                                                             (line 1375)
 * NMI handler functions on the Blackfin processor: Function Attributes.
-                                                             (line 1073)
+                                                             (line 1077)
 * 'noclone' function attribute:          Function Attributes.
-                                                             (line 1107)
+                                                             (line 1111)
 * 'nocommon' attribute:                  Variable Attributes.
                                                              (line  104)
 * 'nocompression' attribute:             Function Attributes.
-                                                             (line 1079)
+                                                             (line 1083)
 * 'noinline' function attribute:         Function Attributes.
-                                                             (line 1096)
+                                                             (line 1100)
 * 'nomicromips' attribute:               Function Attributes.
                                                              (line  957)
 * 'nomips16' attribute:                  Function Attributes.
@@ -56205,25 +56360,25 @@ Keyword Index
 * non-constant initializers:             Initializers.       (line    6)
 * non-static inline function:            Inline.             (line   85)
 * 'nonnull' function attribute:          Function Attributes.
-                                                             (line 1113)
+                                                             (line 1117)
 * 'noreturn' function attribute:         Function Attributes.
-                                                             (line 1147)
+                                                             (line 1151)
 * 'nosave_low_regs' attribute:           Function Attributes.
-                                                             (line 1197)
+                                                             (line 1201)
 * note GCC_COLORS capability:            Language Independent Options.
                                                              (line   73)
 * 'nothrow' function attribute:          Function Attributes.
-                                                             (line 1189)
+                                                             (line 1193)
 * 'not_nested' attribute:                Function Attributes.
                                                              (line  808)
 * 'no_instrument_function' function attribute: Function Attributes.
-                                                             (line 1085)
+                                                             (line 1089)
 * 'no_sanitize_address' function attribute: Function Attributes.
-                                                             (line 1335)
+                                                             (line 1339)
 * 'no_sanitize_undefined' function attribute: Function Attributes.
-                                                             (line 1343)
+                                                             (line 1347)
 * 'no_split_stack' function attribute:   Function Attributes.
-                                                             (line 1090)
+                                                             (line 1094)
 * 'o' in constraint:                     Simple Constraints. (line   23)
 * OBJC_INCLUDE_PATH:                     Environment Variables.
                                                              (line  130)
@@ -56242,7 +56397,7 @@ Keyword Index
 * OpenMP SIMD:                           C Dialect Options.  (line  272)
 * operand constraints, 'asm':            Constraints.        (line    6)
 * 'optimize' function attribute:         Function Attributes.
-                                                             (line 1203)
+                                                             (line 1207)
 * optimize options:                      Optimize Options.   (line    6)
 * options to control diagnostics formatting: Language Independent Options.
                                                              (line    6)
@@ -56265,9 +56420,9 @@ Keyword Index
 * order of evaluation, side effects:     Non-bugs.           (line  196)
 * order of options:                      Invoking GCC.       (line   30)
 * 'OS_main' AVR function attribute:      Function Attributes.
-                                                             (line 1220)
+                                                             (line 1224)
 * 'OS_task' AVR function attribute:      Function Attributes.
-                                                             (line 1220)
+                                                             (line 1224)
 * other register constraints:            Simple Constraints. (line  161)
 * output file option:                    Overall Options.    (line  191)
 * overloaded virtual function, warning:  C++ Dialect Options.
@@ -56280,7 +56435,7 @@ Keyword Index
                                                              (line  818)
 * Pascal:                                G++ and GCC.        (line   23)
 * 'pcs' function attribute:              Function Attributes.
-                                                             (line 1244)
+                                                             (line 1248)
 * PDP-11 Options:                        PDP-11 Options.     (line    6)
 * PIC:                                   Code Gen Options.   (line  279)
 * picoChip options:                      picoChip Options.   (line    6)
@@ -56335,7 +56490,7 @@ Keyword Index
 * pragma, push_macro:                    Push/Pop Macro Pragmas.
                                                              (line   11)
 * pragma, reason for not using:          Function Attributes.
-                                                             (line 2055)
+                                                             (line 2059)
 * pragma, redefine_extname:              Symbol-Renaming Pragmas.
                                                              (line   12)
 * pragma, segment:                       Darwin Pragmas.     (line   21)
@@ -56360,7 +56515,7 @@ Keyword Index
 * promotion of formal parameters:        Function Prototypes.
                                                              (line    6)
 * 'pure' function attribute:             Function Attributes.
-                                                             (line 1263)
+                                                             (line 1267)
 * push address instruction:              Simple Constraints. (line  152)
 * putchar:                               Other Builtins.     (line    6)
 * puts:                                  Other Builtins.     (line    6)
@@ -56388,7 +56543,7 @@ Keyword Index
 * registers, global allocation:          Explicit Reg Vars.  (line    6)
 * registers, global variables in:        Global Reg Vars.    (line    6)
 * 'regparm' attribute:                   Function Attributes.
-                                                             (line 1349)
+                                                             (line 1353)
 * relocation truncated to fit (ColdFire): M680x0 Options.    (line  325)
 * relocation truncated to fit (MIPS):    MIPS Options.       (line  207)
 * remainder:                             Other Builtins.     (line    6)
@@ -56398,14 +56553,14 @@ Keyword Index
 * remquof:                               Other Builtins.     (line    6)
 * remquol:                               Other Builtins.     (line    6)
 * 'renesas' attribute:                   Function Attributes.
-                                                             (line 1392)
+                                                             (line 1396)
 * reordering, warning:                   C++ Dialect Options.
                                                              (line  573)
 * reporting bugs:                        Bugs.               (line    6)
 * 'resbank' attribute:                   Function Attributes.
-                                                             (line 1396)
+                                                             (line 1400)
 * reset handler functions:               Function Attributes.
-                                                             (line 1366)
+                                                             (line 1370)
 * rest argument (in macro):              Variadic Macros.    (line    6)
 * restricted pointers:                   Restricted Pointers.
                                                              (line    6)
@@ -56414,9 +56569,9 @@ Keyword Index
 * restricted this pointer:               Restricted Pointers.
                                                              (line    6)
 * 'returns_nonnull' function attribute:  Function Attributes.
-                                                             (line 1137)
+                                                             (line 1141)
 * 'returns_twice' attribute:             Function Attributes.
-                                                             (line 1410)
+                                                             (line 1414)
 * rindex:                                Other Builtins.     (line    6)
 * rint:                                  Other Builtins.     (line    6)
 * rintf:                                 Other Builtins.     (line    6)
@@ -56434,9 +56589,9 @@ Keyword Index
 * S/390 and zSeries Options:             S/390 and zSeries Options.
                                                              (line    6)
 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
-                                                             (line 1419)
+                                                             (line 1423)
 * save volatile registers on the MicroBlaze: Function Attributes.
-                                                             (line 1424)
+                                                             (line 1428)
 * 'save_all' attribute:                  Function Attributes.
                                                              (line  815)
 * scalb:                                 Other Builtins.     (line    6)
@@ -56455,11 +56610,11 @@ Keyword Index
 * Score Options:                         Score Options.      (line    6)
 * search path:                           Directory Options.  (line    6)
 * 'section' function attribute:          Function Attributes.
-                                                             (line 1432)
+                                                             (line 1436)
 * 'section' variable attribute:          Variable Attributes.
                                                              (line  165)
 * 'sentinel' function attribute:         Function Attributes.
-                                                             (line 1448)
+                                                             (line 1452)
 * setjmp:                                Global Reg Vars.    (line   65)
 * 'setjmp' incompatibilities:            Incompatibilities.  (line   39)
 * shared strings:                        Incompatibilities.  (line    9)
@@ -56494,7 +56649,7 @@ Keyword Index
 * smaller data references:               M32R/D Options.     (line   57)
 * smaller data references <1>:           Nios II Options.    (line    9)
 * smaller data references (PowerPC):     RS/6000 and PowerPC Options.
-                                                             (line  739)
+                                                             (line  742)
 * snprintf:                              Other Builtins.     (line    6)
 * Solaris 2 options:                     Solaris 2 Options.  (line    6)
 * SPARC options:                         SPARC Options.      (line    6)
@@ -56510,14 +56665,14 @@ Keyword Index
 * sprintf:                               Other Builtins.     (line    6)
 * SPU options:                           SPU Options.        (line    6)
 * 'sp_switch' attribute:                 Function Attributes.
-                                                             (line 1497)
+                                                             (line 1501)
 * sqrt:                                  Other Builtins.     (line    6)
 * sqrtf:                                 Other Builtins.     (line    6)
 * sqrtl:                                 Other Builtins.     (line    6)
 * sscanf:                                Other Builtins.     (line    6)
 * 'sscanf', and constant strings:        Incompatibilities.  (line   17)
 * 'sseregparm' attribute:                Function Attributes.
-                                                             (line 1377)
+                                                             (line 1381)
 * statements inside expressions:         Statement Exprs.    (line    6)
 * static data in C++, declaring and defining: Static Definitions.
                                                              (line    6)
@@ -56559,7 +56714,7 @@ Keyword Index
                                                              (line    6)
 * syntax checking:                       Warning Options.    (line   13)
 * 'syscall_linkage' attribute:           Function Attributes.
-                                                             (line 1512)
+                                                             (line 1516)
 * system headers, warnings from:         Warning Options.    (line  836)
 * 'sysv_abi' attribute:                  Function Attributes.
                                                              (line 1003)
@@ -56570,119 +56725,119 @@ Keyword Index
 * tanhl:                                 Other Builtins.     (line    6)
 * tanl:                                  Other Builtins.     (line    6)
 * 'target' function attribute:           Function Attributes.
-                                                             (line 1519)
+                                                             (line 1523)
 * target machine, specifying:            Target Options.     (line    6)
 * target options:                        Target Options.     (line    6)
 * 'target("abm")' attribute:             Function Attributes.
-                                                             (line 1552)
+                                                             (line 1556)
 * 'target("aes")' attribute:             Function Attributes.
-                                                             (line 1557)
+                                                             (line 1561)
 * 'target("align-stringops")' attribute: Function Attributes.
-                                                             (line 1651)
+                                                             (line 1655)
 * 'target("altivec")' attribute:         Function Attributes.
-                                                             (line 1677)
+                                                             (line 1681)
 * 'target("arch=ARCH")' attribute:       Function Attributes.
-                                                             (line 1660)
+                                                             (line 1664)
 * 'target("avoid-indexed-addresses")' attribute: Function Attributes.
-                                                             (line 1798)
+                                                             (line 1802)
 * 'target("cld")' attribute:             Function Attributes.
-                                                             (line 1622)
+                                                             (line 1626)
 * 'target("cmpb")' attribute:            Function Attributes.
-                                                             (line 1683)
+                                                             (line 1687)
 * 'target("cpu=CPU")' attribute:         Function Attributes.
-                                                             (line 1813)
+                                                             (line 1817)
 * 'target("custom-fpu-cfg=NAME")' attribute: Function Attributes.
-                                                             (line 1839)
+                                                             (line 1843)
 * 'target("custom-INSN=N")' attribute:   Function Attributes.
-                                                             (line 1830)
+                                                             (line 1834)
 * 'target("default")' attribute:         Function Attributes.
-                                                             (line 1560)
+                                                             (line 1564)
 * 'target("dlmzb")' attribute:           Function Attributes.
-                                                             (line 1689)
+                                                             (line 1693)
 * 'target("fancy-math-387")' attribute:  Function Attributes.
-                                                             (line 1626)
+                                                             (line 1630)
 * 'target("fma4")' attribute:            Function Attributes.
-                                                             (line 1606)
+                                                             (line 1610)
 * 'target("fpmath=FPMATH")' attribute:   Function Attributes.
-                                                             (line 1668)
+                                                             (line 1672)
 * 'target("fprnd")' attribute:           Function Attributes.
-                                                             (line 1696)
+                                                             (line 1700)
 * 'target("friz")' attribute:            Function Attributes.
-                                                             (line 1789)
+                                                             (line 1793)
 * 'target("fused-madd")' attribute:      Function Attributes.
-                                                             (line 1631)
+                                                             (line 1635)
 * 'target("hard-dfp")' attribute:        Function Attributes.
-                                                             (line 1702)
+                                                             (line 1706)
 * 'target("ieee-fp")' attribute:         Function Attributes.
-                                                             (line 1636)
+                                                             (line 1640)
 * 'target("inline-all-stringops")' attribute: Function Attributes.
-                                                             (line 1641)
-* 'target("inline-stringops-dynamically")' attribute: Function Attributes.
                                                              (line 1645)
+* 'target("inline-stringops-dynamically")' attribute: Function Attributes.
+                                                             (line 1649)
 * 'target("isel")' attribute:            Function Attributes.
-                                                             (line 1708)
+                                                             (line 1712)
 * 'target("longcall")' attribute:        Function Attributes.
-                                                             (line 1808)
+                                                             (line 1812)
 * 'target("lwp")' attribute:             Function Attributes.
-                                                             (line 1614)
+                                                             (line 1618)
 * 'target("mfcrf")' attribute:           Function Attributes.
-                                                             (line 1712)
+                                                             (line 1716)
 * 'target("mfpgpr")' attribute:          Function Attributes.
-                                                             (line 1719)
+                                                             (line 1723)
 * 'target("mmx")' attribute:             Function Attributes.
-                                                             (line 1565)
+                                                             (line 1569)
 * 'target("mulhw")' attribute:           Function Attributes.
-                                                             (line 1726)
+                                                             (line 1730)
 * 'target("multiple")' attribute:        Function Attributes.
-                                                             (line 1733)
+                                                             (line 1737)
 * 'target("no-custom-INSN")' attribute:  Function Attributes.
-                                                             (line 1830)
+                                                             (line 1834)
 * 'target("paired")' attribute:          Function Attributes.
-                                                             (line 1803)
+                                                             (line 1807)
 * 'target("pclmul")' attribute:          Function Attributes.
-                                                             (line 1569)
-* 'target("popcnt")' attribute:          Function Attributes.
                                                              (line 1573)
+* 'target("popcnt")' attribute:          Function Attributes.
+                                                             (line 1577)
 * 'target("popcntb")' attribute:         Function Attributes.
-                                                             (line 1744)
+                                                             (line 1748)
 * 'target("popcntd")' attribute:         Function Attributes.
-                                                             (line 1751)
+                                                             (line 1755)
 * 'target("powerpc-gfxopt")' attribute:  Function Attributes.
-                                                             (line 1757)
+                                                             (line 1761)
 * 'target("powerpc-gpopt")' attribute:   Function Attributes.
-                                                             (line 1763)
+                                                             (line 1767)
 * 'target("recip")' attribute:           Function Attributes.
-                                                             (line 1655)
+                                                             (line 1659)
 * 'target("recip-precision")' attribute: Function Attributes.
-                                                             (line 1769)
+                                                             (line 1773)
 * 'target("sse")' attribute:             Function Attributes.
-                                                             (line 1577)
-* 'target("sse2")' attribute:            Function Attributes.
                                                              (line 1581)
-* 'target("sse3")' attribute:            Function Attributes.
+* 'target("sse2")' attribute:            Function Attributes.
                                                              (line 1585)
-* 'target("sse4")' attribute:            Function Attributes.
+* 'target("sse3")' attribute:            Function Attributes.
                                                              (line 1589)
+* 'target("sse4")' attribute:            Function Attributes.
+                                                             (line 1593)
 * 'target("sse4.1")' attribute:          Function Attributes.
-                                                             (line 1594)
-* 'target("sse4.2")' attribute:          Function Attributes.
                                                              (line 1598)
-* 'target("sse4a")' attribute:           Function Attributes.
+* 'target("sse4.2")' attribute:          Function Attributes.
                                                              (line 1602)
+* 'target("sse4a")' attribute:           Function Attributes.
+                                                             (line 1606)
 * 'target("ssse3")' attribute:           Function Attributes.
-                                                             (line 1618)
+                                                             (line 1622)
 * 'target("string")' attribute:          Function Attributes.
-                                                             (line 1775)
+                                                             (line 1779)
 * 'target("tune=TUNE")' attribute:       Function Attributes.
-                                                             (line 1664)
+                                                             (line 1668)
 * 'target("tune=TUNE")' attribute <1>:   Function Attributes.
-                                                             (line 1820)
+                                                             (line 1824)
 * 'target("update")' attribute:          Function Attributes.
-                                                             (line 1738)
+                                                             (line 1742)
 * 'target("vsx")' attribute:             Function Attributes.
-                                                             (line 1781)
+                                                             (line 1785)
 * 'target("xop")' attribute:             Function Attributes.
-                                                             (line 1610)
+                                                             (line 1614)
 * TC1:                                   Standards.          (line   13)
 * TC2:                                   Standards.          (line   13)
 * TC3:                                   Standards.          (line   13)
@@ -56701,7 +56856,7 @@ Keyword Index
 * TILE-Gx options:                       TILE-Gx Options.    (line    6)
 * TILEPro options:                       TILEPro Options.    (line    6)
 * tiny data section on the H8/300H and H8S: Function Attributes.
-                                                             (line 1852)
+                                                             (line 1856)
 * TLS:                                   Thread-Local.       (line    6)
 * 'tls_model' attribute:                 Variable Attributes.
                                                              (line  233)
@@ -56714,9 +56869,9 @@ Keyword Index
 * towupper:                              Other Builtins.     (line    6)
 * traditional C language:                C Dialect Options.  (line  331)
 * 'trapa_handler' attribute:             Function Attributes.
-                                                             (line 1864)
+                                                             (line 1868)
 * 'trap_exit' attribute:                 Function Attributes.
-                                                             (line 1859)
+                                                             (line 1863)
 * trunc:                                 Other Builtins.     (line    6)
 * truncf:                                Other Builtins.     (line    6)
 * truncl:                                Other Builtins.     (line    6)
@@ -56751,11 +56906,11 @@ Keyword Index
 * unresolved references and '-nodefaultlibs': Link Options.  (line   85)
 * unresolved references and '-nostdlib': Link Options.       (line   85)
 * 'unused' attribute.:                   Function Attributes.
-                                                             (line 1868)
+                                                             (line 1872)
 * 'ur' fixed-suffix:                     Fixed-Point.        (line    6)
 * 'UR' fixed-suffix:                     Fixed-Point.        (line    6)
 * 'used' attribute.:                     Function Attributes.
-                                                             (line 1873)
+                                                             (line 1877)
 * User stack pointer in interrupts on the Blackfin: Function Attributes.
                                                              (line  844)
 * 'use_debug_exception_return' attribute: Function Attributes.
@@ -56782,14 +56937,14 @@ Keyword Index
 * variadic macros:                       Variadic Macros.    (line    6)
 * VAX options:                           VAX Options.        (line    6)
 * 'version_id' attribute:                Function Attributes.
-                                                             (line 1883)
+                                                             (line 1887)
 * vfprintf:                              Other Builtins.     (line    6)
 * vfscanf:                               Other Builtins.     (line    6)
 * 'visibility' attribute:                Function Attributes.
-                                                             (line 1893)
+                                                             (line 1897)
 * VLAs:                                  Variable Length.    (line    6)
 * 'vliw' attribute:                      Function Attributes.
-                                                             (line 1989)
+                                                             (line 1993)
 * void pointers, arithmetic:             Pointer Arith.      (line    6)
 * void, size of pointer to:              Pointer Arith.      (line    6)
 * volatile access:                       Volatiles.          (line    6)
@@ -56812,7 +56967,7 @@ Keyword Index
 * 'wakeup' attribute:                    Function Attributes.
                                                              (line  729)
 * 'warm' attribute:                      Function Attributes.
-                                                             (line 1373)
+                                                             (line 1377)
 * warning for comparison of signed and unsigned values: Warning Options.
                                                              (line 1157)
 * warning for overloaded virtual function: C++ Dialect Options.
@@ -56830,11 +56985,11 @@ Keyword Index
                                                              (line    6)
 * 'warn_unused' attribute:               C++ Attributes.     (line   64)
 * 'warn_unused_result' attribute:        Function Attributes.
-                                                             (line 1995)
+                                                             (line 1999)
 * 'weak' attribute:                      Function Attributes.
-                                                             (line 2012)
+                                                             (line 2016)
 * 'weakref' attribute:                   Function Attributes.
-                                                             (line 2021)
+                                                             (line 2025)
 * whitespace:                            Incompatibilities.  (line  112)
 * 'X' in constraint:                     Simple Constraints. (line  122)
 * X3.159-1989:                           Standards.          (line   13)
@@ -56864,314 +57019,314 @@ Node: G++ and GCC\7f3629
 Node: Standards\7f5686
 Node: Invoking GCC\7f17845
 Node: Option Summary\7f21590
-Node: Overall Options\7f63434
-Node: Invoking G++\7f77621
-Node: C Dialect Options\7f79144
-Node: C++ Dialect Options\7f96142
-Node: Objective-C and Objective-C++ Dialect Options\7f126687
-Node: Language Independent Options\7f137194
-Node: Warning Options\7f141694
-Node: Debugging Options\7f211735
-Node: Optimize Options\7f271982
-Ref: Type-punning\7f331542
-Node: Preprocessor Options\7f415592
-Ref: Wtrigraphs\7f420375
-Ref: dashMF\7f425125
-Ref: fdollars-in-identifiers\7f436006
-Node: Assembler Options\7f446231
-Node: Link Options\7f446922
-Ref: Link Options-Footnote-1\7f459062
-Node: Directory Options\7f459398
-Node: Spec Files\7f465942
-Node: Target Options\7f487771
-Node: Submodel Options\7f488170
-Node: AArch64 Options\7f489936
-Node: Adapteva Epiphany Options\7f495344
-Node: ARC Options\7f501292
-Node: ARM Options\7f513736
-Node: AVR Options\7f531046
-Node: Blackfin Options\7f551271
-Node: C6X Options\7f559289
-Node: CRIS Options\7f560832
-Node: CR16 Options\7f564571
-Node: Darwin Options\7f565482
-Node: DEC Alpha Options\7f572920
-Node: FR30 Options\7f584536
-Node: FRV Options\7f585100
-Node: GNU/Linux Options\7f591864
-Node: H8/300 Options\7f593124
-Node: HPPA Options\7f594576
-Node: i386 and x86-64 Options\7f603878
-Node: i386 and x86-64 Windows Options\7f645949
-Node: IA-64 Options\7f648802
-Node: LM32 Options\7f656868
-Node: M32C Options\7f657391
-Node: M32R/D Options\7f658664
-Node: M680x0 Options\7f662209
-Node: MCore Options\7f676244
-Node: MeP Options\7f677746
-Node: MicroBlaze Options\7f681706
-Node: MIPS Options\7f684508
-Node: MMIX Options\7f716393
-Node: MN10300 Options\7f718870
-Node: Moxie Options\7f721411
-Node: MSP430 Options\7f721781
-Node: NDS32 Options\7f725306
-Node: Nios II Options\7f727186
-Node: PDP-11 Options\7f735651
-Node: picoChip Options\7f737345
-Node: PowerPC Options\7f739483
-Node: RL78 Options\7f739704
-Node: RS/6000 and PowerPC Options\7f740365
-Node: RX Options\7f779295
-Node: S/390 and zSeries Options\7f786627
-Node: Score Options\7f795174
-Node: SH Options\7f796023
-Node: Solaris 2 Options\7f816642
-Node: SPARC Options\7f818164
-Node: SPU Options\7f831422
-Node: System V Options\7f836361
-Node: TILE-Gx Options\7f837187
-Node: TILEPro Options\7f838205
-Node: V850 Options\7f838709
-Node: VAX Options\7f845417
-Node: VMS Options\7f845952
-Node: VxWorks Options\7f846765
-Node: x86-64 Options\7f847920
-Node: Xstormy16 Options\7f848138
-Node: Xtensa Options\7f848427
-Node: zSeries Options\7f852738
-Node: Code Gen Options\7f852934
-Node: Environment Variables\7f883803
-Node: Precompiled Headers\7f891806
-Node: C Implementation\7f897809
-Node: Translation implementation\7f899499
-Node: Environment implementation\7f900090
-Node: Identifiers implementation\7f900644
-Node: Characters implementation\7f901730
-Node: Integers implementation\7f905380
-Node: Floating point implementation\7f907265
-Node: Arrays and pointers implementation\7f910328
-Ref: Arrays and pointers implementation-Footnote-1\7f911788
-Node: Hints implementation\7f911914
-Node: Structures unions enumerations and bit-fields implementation\7f913399
-Node: Qualifiers implementation\7f915623
-Node: Declarators implementation\7f917403
-Node: Statements implementation\7f917744
-Node: Preprocessing directives implementation\7f918070
-Node: Library functions implementation\7f920391
-Node: Architecture implementation\7f921040
-Node: Locale-specific behavior implementation\7f922685
-Node: C++ Implementation\7f922990
-Node: Conditionally-supported behavior\7f924273
-Node: Exception handling\7f924782
-Node: C Extensions\7f925190
-Node: Statement Exprs\7f930260
-Node: Local Labels\7f934737
-Node: Labels as Values\7f937710
-Ref: Labels as Values-Footnote-1\7f940237
-Node: Nested Functions\7f940422
-Node: Constructing Calls\7f944380
-Node: Typeof\7f949097
-Node: Conditionals\7f953479
-Node: __int128\7f954368
-Node: Long Long\7f954893
-Node: Complex\7f956369
-Node: Floating Types\7f958957
-Node: Half-Precision\7f960085
-Node: Decimal Float\7f962270
-Node: Hex Floats\7f964126
-Node: Fixed-Point\7f965163
-Node: Named Address Spaces\7f968423
-Ref: AVR Named Address Spaces\7f969104
-Node: Zero Length\7f974312
-Node: Empty Structures\7f977599
-Node: Variable Length\7f978005
-Node: Variadic Macros\7f980861
-Node: Escaped Newlines\7f983239
-Node: Subscripting\7f984078
-Node: Pointer Arith\7f984803
-Node: Initializers\7f985371
-Node: Compound Literals\7f985867
-Node: Designated Inits\7f989228
-Node: Case Ranges\7f992966
-Node: Cast to Union\7f993647
-Node: Mixed Declarations\7f994737
-Node: Function Attributes\7f995247
-Node: Attribute Syntax\7f1089830
-Node: Function Prototypes\7f1100220
-Node: C++ Comments\7f1102000
-Node: Dollar Signs\7f1102519
-Node: Character Escapes\7f1102984
-Node: Variable Attributes\7f1103278
-Ref: AVR Variable Attributes\7f1116953
-Ref: MeP Variable Attributes\7f1119615
-Ref: i386 Variable Attributes\7f1121551
-Node: Type Attributes\7f1127212
-Ref: MeP Type Attributes\7f1141100
-Ref: i386 Type Attributes\7f1141374
-Ref: PowerPC Type Attributes\7f1142066
-Ref: SPU Type Attributes\7f1142928
-Node: Alignment\7f1143219
-Node: Inline\7f1144589
-Node: Volatiles\7f1149565
-Node: Extended Asm\7f1152446
-Ref: Example of asm with clobbered asm reg\7f1158350
-Ref: Extended asm with goto\7f1168063
-Node: Constraints\7f1175913
-Node: Simple Constraints\7f1176997
-Node: Multi-Alternative\7f1184307
-Node: Modifiers\7f1186024
-Node: Machine Constraints\7f1189037
-Node: Asm Labels\7f1246395
-Node: Explicit Reg Vars\7f1248071
-Node: Global Reg Vars\7f1249669
-Node: Local Reg Vars\7f1254165
-Node: Alternate Keywords\7f1256581
-Node: Incomplete Enums\7f1258067
-Node: Function Names\7f1258823
-Node: Return Address\7f1260984
-Node: Vector Extensions\7f1264491
-Node: Offsetof\7f1271420
-Node: __sync Builtins\7f1272225
-Node: __atomic Builtins\7f1277694
-Node: x86 specific memory model extensions for transactional memory\7f1289328
-Node: Object Size Checking\7f1290590
-Node: Cilk Plus Builtins\7f1296083
-Node: Other Builtins\7f1296952
-Node: Target Builtins\7f1326259
-Node: Alpha Built-in Functions\7f1327678
-Node: Altera Nios II Built-in Functions\7f1330691
-Node: ARC Built-in Functions\7f1334678
-Node: ARC SIMD Built-in Functions\7f1339890
-Node: ARM iWMMXt Built-in Functions\7f1348786
-Node: ARM NEON Intrinsics\7f1355769
-Node: ARM ACLE Intrinsics\7f1573263
-Node: AVR Built-in Functions\7f1574591
-Node: Blackfin Built-in Functions\7f1577669
-Node: FR-V Built-in Functions\7f1578286
-Node: Argument Types\7f1579149
-Node: Directly-mapped Integer Functions\7f1580903
-Node: Directly-mapped Media Functions\7f1581987
-Node: Raw read/write Functions\7f1590193
-Node: Other Built-in Functions\7f1591101
-Node: X86 Built-in Functions\7f1592287
-Node: X86 transactional memory intrinsics\7f1651480
-Node: MIPS DSP Built-in Functions\7f1654156
-Node: MIPS Paired-Single Support\7f1666665
-Node: MIPS Loongson Built-in Functions\7f1668164
-Node: Paired-Single Arithmetic\7f1674679
-Node: Paired-Single Built-in Functions\7f1675627
-Node: MIPS-3D Built-in Functions\7f1678294
-Node: Other MIPS Built-in Functions\7f1683672
-Node: MSP430 Built-in Functions\7f1684677
-Node: NDS32 Built-in Functions\7f1685581
-Node: picoChip Built-in Functions\7f1686874
-Node: PowerPC Built-in Functions\7f1688217
-Node: PowerPC AltiVec/VSX Built-in Functions\7f1691926
-Node: PowerPC Hardware Transactional Memory Built-in Functions\7f1824824
-Node: RX Built-in Functions\7f1831365
-Node: S/390 System z Built-in Functions\7f1835398
-Node: SH Built-in Functions\7f1840627
-Node: SPARC VIS Built-in Functions\7f1842020
-Node: SPU Built-in Functions\7f1847623
-Node: TI C6X Built-in Functions\7f1849440
-Node: TILE-Gx Built-in Functions\7f1850465
-Node: TILEPro Built-in Functions\7f1851584
-Node: Target Format Checks\7f1852653
-Node: Solaris Format Checks\7f1853085
-Node: Darwin Format Checks\7f1853511
-Node: Pragmas\7f1854329
-Node: ARM Pragmas\7f1855065
-Node: M32C Pragmas\7f1855668
-Node: MeP Pragmas\7f1856740
-Node: RS/6000 and PowerPC Pragmas\7f1858808
-Node: Darwin Pragmas\7f1859549
-Node: Solaris Pragmas\7f1860616
-Node: Symbol-Renaming Pragmas\7f1861780
-Node: Structure-Packing Pragmas\7f1863336
-Node: Weak Pragmas\7f1864981
-Node: Diagnostic Pragmas\7f1865715
-Node: Visibility Pragmas\7f1868824
-Node: Push/Pop Macro Pragmas\7f1869576
-Node: Function Specific Option Pragmas\7f1870549
-Node: Loop-Specific Pragmas\7f1872740
-Node: Unnamed Fields\7f1873839
-Node: Thread-Local\7f1876066
-Node: C99 Thread-Local Edits\7f1878171
-Node: C++98 Thread-Local Edits\7f1880169
-Node: Binary constants\7f1883614
-Node: C++ Extensions\7f1884285
-Node: C++ Volatiles\7f1885996
-Node: Restricted Pointers\7f1888344
-Node: Vague Linkage\7f1889935
-Node: C++ Interface\7f1893558
-Ref: C++ Interface-Footnote-1\7f1897846
-Node: Template Instantiation\7f1897984
-Node: Bound member functions\7f1904570
-Node: C++ Attributes\7f1906102
-Node: Function Multiversioning\7f1909681
-Node: Namespace Association\7f1911498
-Node: Type Traits\7f1912878
-Node: Java Exceptions\7f1919361
-Node: Deprecated Features\7f1920751
-Node: Backwards Compatibility\7f1923718
-Node: Objective-C\7f1925065
-Node: GNU Objective-C runtime API\7f1925672
-Node: Modern GNU Objective-C runtime API\7f1926679
-Node: Traditional GNU Objective-C runtime API\7f1929115
-Node: Executing code before main\7f1929842
-Node: What you can and what you cannot do in +load\7f1932582
-Node: Type encoding\7f1934970
-Node: Legacy type encoding\7f1939997
-Node: @encode\7f1941087
-Node: Method signatures\7f1941628
-Node: Garbage Collection\7f1943620
-Node: Constant string objects\7f1946310
-Node: compatibility_alias\7f1948819
-Node: Exceptions\7f1949540
-Node: Synchronization\7f1952250
-Node: Fast enumeration\7f1953434
-Node: Using fast enumeration\7f1953746
-Node: c99-like fast enumeration syntax\7f1954957
-Node: Fast enumeration details\7f1955660
-Node: Fast enumeration protocol\7f1958000
-Node: Messaging with the GNU Objective-C runtime\7f1961152
-Node: Dynamically registering methods\7f1962524
-Node: Forwarding hook\7f1964215
-Node: Compatibility\7f1967255
-Node: Gcov\7f1973811
-Node: Gcov Intro\7f1974344
-Node: Invoking Gcov\7f1977062
-Node: Gcov and Optimization\7f1991302
-Node: Gcov Data Files\7f1994304
-Node: Cross-profiling\7f1995699
-Node: Trouble\7f1997553
-Node: Actual Bugs\7f1998965
-Node: Interoperation\7f1999412
-Node: Incompatibilities\7f2006303
-Node: Fixed Headers\7f2014455
-Node: Standard Libraries\7f2016113
-Node: Disappointments\7f2017485
-Node: C++ Misunderstandings\7f2021844
-Node: Static Definitions\7f2022655
-Node: Name lookup\7f2023708
-Ref: Name lookup-Footnote-1\7f2028488
-Node: Temporaries\7f2028677
-Node: Copy Assignment\7f2030653
-Node: Non-bugs\7f2032460
-Node: Warnings and Errors\7f2042966
-Node: Bugs\7f2044728
-Node: Bug Criteria\7f2045195
-Node: Bug Reporting\7f2047405
-Node: Service\7f2047626
-Node: Contributing\7f2048445
-Node: Funding\7f2049185
-Node: GNU Project\7f2051675
-Node: Copying\7f2052321
-Node: GNU Free Documentation License\7f2089830
-Node: Contributors\7f2114948
-Node: Option Index\7f2152817
-Node: Keyword Index\7f2364855
+Node: Overall Options\7f63490
+Node: Invoking G++\7f77677
+Node: C Dialect Options\7f79200
+Node: C++ Dialect Options\7f96198
+Node: Objective-C and Objective-C++ Dialect Options\7f126743
+Node: Language Independent Options\7f137250
+Node: Warning Options\7f141750
+Node: Debugging Options\7f211791
+Node: Optimize Options\7f272038
+Ref: Type-punning\7f332105
+Node: Preprocessor Options\7f416155
+Ref: Wtrigraphs\7f420938
+Ref: dashMF\7f425688
+Ref: fdollars-in-identifiers\7f436569
+Node: Assembler Options\7f446794
+Node: Link Options\7f447485
+Ref: Link Options-Footnote-1\7f459625
+Node: Directory Options\7f459961
+Node: Spec Files\7f466505
+Node: Target Options\7f488334
+Node: Submodel Options\7f488733
+Node: AArch64 Options\7f490499
+Node: Adapteva Epiphany Options\7f496165
+Node: ARC Options\7f502113
+Node: ARM Options\7f514557
+Node: AVR Options\7f531867
+Node: Blackfin Options\7f552092
+Node: C6X Options\7f560110
+Node: CRIS Options\7f561653
+Node: CR16 Options\7f565392
+Node: Darwin Options\7f566303
+Node: DEC Alpha Options\7f573741
+Node: FR30 Options\7f585357
+Node: FRV Options\7f585921
+Node: GNU/Linux Options\7f592685
+Node: H8/300 Options\7f593945
+Node: HPPA Options\7f595397
+Node: i386 and x86-64 Options\7f604699
+Node: i386 and x86-64 Windows Options\7f646770
+Node: IA-64 Options\7f649623
+Node: LM32 Options\7f657689
+Node: M32C Options\7f658212
+Node: M32R/D Options\7f659485
+Node: M680x0 Options\7f663030
+Node: MCore Options\7f677065
+Node: MeP Options\7f678567
+Node: MicroBlaze Options\7f682527
+Node: MIPS Options\7f685329
+Node: MMIX Options\7f717214
+Node: MN10300 Options\7f719691
+Node: Moxie Options\7f722232
+Node: MSP430 Options\7f722602
+Node: NDS32 Options\7f726127
+Node: Nios II Options\7f728007
+Node: PDP-11 Options\7f736472
+Node: picoChip Options\7f738166
+Node: PowerPC Options\7f740304
+Node: RL78 Options\7f740525
+Node: RS/6000 and PowerPC Options\7f741186
+Node: RX Options\7f780224
+Node: S/390 and zSeries Options\7f787556
+Node: Score Options\7f796093
+Node: SH Options\7f796942
+Node: Solaris 2 Options\7f817561
+Node: SPARC Options\7f819083
+Node: SPU Options\7f832372
+Node: System V Options\7f837311
+Node: TILE-Gx Options\7f838137
+Node: TILEPro Options\7f839155
+Node: V850 Options\7f839659
+Node: VAX Options\7f846367
+Node: VMS Options\7f846902
+Node: VxWorks Options\7f847715
+Node: x86-64 Options\7f848870
+Node: Xstormy16 Options\7f849088
+Node: Xtensa Options\7f849377
+Node: zSeries Options\7f853688
+Node: Code Gen Options\7f853884
+Node: Environment Variables\7f884753
+Node: Precompiled Headers\7f892756
+Node: C Implementation\7f898759
+Node: Translation implementation\7f900449
+Node: Environment implementation\7f901040
+Node: Identifiers implementation\7f901594
+Node: Characters implementation\7f902680
+Node: Integers implementation\7f906330
+Node: Floating point implementation\7f908215
+Node: Arrays and pointers implementation\7f911278
+Ref: Arrays and pointers implementation-Footnote-1\7f912738
+Node: Hints implementation\7f912864
+Node: Structures unions enumerations and bit-fields implementation\7f914349
+Node: Qualifiers implementation\7f916573
+Node: Declarators implementation\7f918353
+Node: Statements implementation\7f918694
+Node: Preprocessing directives implementation\7f919020
+Node: Library functions implementation\7f921341
+Node: Architecture implementation\7f921990
+Node: Locale-specific behavior implementation\7f923635
+Node: C++ Implementation\7f923940
+Node: Conditionally-supported behavior\7f925223
+Node: Exception handling\7f925732
+Node: C Extensions\7f926140
+Node: Statement Exprs\7f931210
+Node: Local Labels\7f935687
+Node: Labels as Values\7f938660
+Ref: Labels as Values-Footnote-1\7f941187
+Node: Nested Functions\7f941372
+Node: Constructing Calls\7f945330
+Node: Typeof\7f950047
+Node: Conditionals\7f954429
+Node: __int128\7f955318
+Node: Long Long\7f955843
+Node: Complex\7f957319
+Node: Floating Types\7f959907
+Node: Half-Precision\7f961035
+Node: Decimal Float\7f963220
+Node: Hex Floats\7f965076
+Node: Fixed-Point\7f966113
+Node: Named Address Spaces\7f969373
+Ref: AVR Named Address Spaces\7f970054
+Node: Zero Length\7f975262
+Node: Empty Structures\7f978549
+Node: Variable Length\7f978955
+Node: Variadic Macros\7f981811
+Node: Escaped Newlines\7f984189
+Node: Subscripting\7f985028
+Node: Pointer Arith\7f985753
+Node: Initializers\7f986321
+Node: Compound Literals\7f986817
+Node: Designated Inits\7f990178
+Node: Case Ranges\7f993916
+Node: Cast to Union\7f994597
+Node: Mixed Declarations\7f995687
+Node: Function Attributes\7f996197
+Node: Attribute Syntax\7f1091008
+Node: Function Prototypes\7f1101398
+Node: C++ Comments\7f1103178
+Node: Dollar Signs\7f1103697
+Node: Character Escapes\7f1104162
+Node: Variable Attributes\7f1104456
+Ref: AVR Variable Attributes\7f1118131
+Ref: MeP Variable Attributes\7f1120793
+Ref: i386 Variable Attributes\7f1122729
+Node: Type Attributes\7f1128390
+Ref: MeP Type Attributes\7f1142278
+Ref: i386 Type Attributes\7f1142552
+Ref: PowerPC Type Attributes\7f1143244
+Ref: SPU Type Attributes\7f1144106
+Node: Alignment\7f1144397
+Node: Inline\7f1145767
+Node: Volatiles\7f1150743
+Node: Extended Asm\7f1153624
+Ref: Example of asm with clobbered asm reg\7f1159528
+Ref: Extended asm with goto\7f1169241
+Node: Constraints\7f1177091
+Node: Simple Constraints\7f1178175
+Node: Multi-Alternative\7f1185485
+Node: Modifiers\7f1187202
+Node: Machine Constraints\7f1190215
+Node: Asm Labels\7f1248272
+Node: Explicit Reg Vars\7f1249948
+Node: Global Reg Vars\7f1251546
+Node: Local Reg Vars\7f1256042
+Node: Alternate Keywords\7f1258458
+Node: Incomplete Enums\7f1259944
+Node: Function Names\7f1260700
+Node: Return Address\7f1262861
+Node: Vector Extensions\7f1266368
+Node: Offsetof\7f1273297
+Node: __sync Builtins\7f1274102
+Node: __atomic Builtins\7f1279571
+Node: x86 specific memory model extensions for transactional memory\7f1291205
+Node: Object Size Checking\7f1292467
+Node: Cilk Plus Builtins\7f1297960
+Node: Other Builtins\7f1298829
+Node: Target Builtins\7f1328136
+Node: Alpha Built-in Functions\7f1329555
+Node: Altera Nios II Built-in Functions\7f1332568
+Node: ARC Built-in Functions\7f1336555
+Node: ARC SIMD Built-in Functions\7f1341767
+Node: ARM iWMMXt Built-in Functions\7f1350663
+Node: ARM NEON Intrinsics\7f1357646
+Node: ARM ACLE Intrinsics\7f1575140
+Node: AVR Built-in Functions\7f1576468
+Node: Blackfin Built-in Functions\7f1579546
+Node: FR-V Built-in Functions\7f1580163
+Node: Argument Types\7f1581026
+Node: Directly-mapped Integer Functions\7f1582780
+Node: Directly-mapped Media Functions\7f1583864
+Node: Raw read/write Functions\7f1592070
+Node: Other Built-in Functions\7f1592978
+Node: X86 Built-in Functions\7f1594164
+Node: X86 transactional memory intrinsics\7f1653357
+Node: MIPS DSP Built-in Functions\7f1656033
+Node: MIPS Paired-Single Support\7f1668542
+Node: MIPS Loongson Built-in Functions\7f1670041
+Node: Paired-Single Arithmetic\7f1676556
+Node: Paired-Single Built-in Functions\7f1677504
+Node: MIPS-3D Built-in Functions\7f1680171
+Node: Other MIPS Built-in Functions\7f1685549
+Node: MSP430 Built-in Functions\7f1686554
+Node: NDS32 Built-in Functions\7f1687458
+Node: picoChip Built-in Functions\7f1688751
+Node: PowerPC Built-in Functions\7f1690094
+Node: PowerPC AltiVec/VSX Built-in Functions\7f1693803
+Node: PowerPC Hardware Transactional Memory Built-in Functions\7f1833594
+Node: RX Built-in Functions\7f1840567
+Node: S/390 System z Built-in Functions\7f1844600
+Node: SH Built-in Functions\7f1849829
+Node: SPARC VIS Built-in Functions\7f1851222
+Node: SPU Built-in Functions\7f1856825
+Node: TI C6X Built-in Functions\7f1858642
+Node: TILE-Gx Built-in Functions\7f1859667
+Node: TILEPro Built-in Functions\7f1860786
+Node: Target Format Checks\7f1861855
+Node: Solaris Format Checks\7f1862287
+Node: Darwin Format Checks\7f1862713
+Node: Pragmas\7f1863531
+Node: ARM Pragmas\7f1864267
+Node: M32C Pragmas\7f1864870
+Node: MeP Pragmas\7f1865942
+Node: RS/6000 and PowerPC Pragmas\7f1868010
+Node: Darwin Pragmas\7f1868751
+Node: Solaris Pragmas\7f1869818
+Node: Symbol-Renaming Pragmas\7f1870982
+Node: Structure-Packing Pragmas\7f1872538
+Node: Weak Pragmas\7f1874183
+Node: Diagnostic Pragmas\7f1874917
+Node: Visibility Pragmas\7f1878026
+Node: Push/Pop Macro Pragmas\7f1878778
+Node: Function Specific Option Pragmas\7f1879751
+Node: Loop-Specific Pragmas\7f1881942
+Node: Unnamed Fields\7f1883041
+Node: Thread-Local\7f1885268
+Node: C99 Thread-Local Edits\7f1887373
+Node: C++98 Thread-Local Edits\7f1889371
+Node: Binary constants\7f1892816
+Node: C++ Extensions\7f1893487
+Node: C++ Volatiles\7f1895198
+Node: Restricted Pointers\7f1897546
+Node: Vague Linkage\7f1899137
+Node: C++ Interface\7f1902760
+Ref: C++ Interface-Footnote-1\7f1907048
+Node: Template Instantiation\7f1907186
+Node: Bound member functions\7f1913772
+Node: C++ Attributes\7f1915304
+Node: Function Multiversioning\7f1918883
+Node: Namespace Association\7f1920700
+Node: Type Traits\7f1922080
+Node: Java Exceptions\7f1928563
+Node: Deprecated Features\7f1929953
+Node: Backwards Compatibility\7f1932920
+Node: Objective-C\7f1934267
+Node: GNU Objective-C runtime API\7f1934874
+Node: Modern GNU Objective-C runtime API\7f1935881
+Node: Traditional GNU Objective-C runtime API\7f1938317
+Node: Executing code before main\7f1939044
+Node: What you can and what you cannot do in +load\7f1941784
+Node: Type encoding\7f1944172
+Node: Legacy type encoding\7f1949199
+Node: @encode\7f1950289
+Node: Method signatures\7f1950830
+Node: Garbage Collection\7f1952822
+Node: Constant string objects\7f1955512
+Node: compatibility_alias\7f1958021
+Node: Exceptions\7f1958742
+Node: Synchronization\7f1961452
+Node: Fast enumeration\7f1962636
+Node: Using fast enumeration\7f1962948
+Node: c99-like fast enumeration syntax\7f1964159
+Node: Fast enumeration details\7f1964862
+Node: Fast enumeration protocol\7f1967202
+Node: Messaging with the GNU Objective-C runtime\7f1970354
+Node: Dynamically registering methods\7f1971726
+Node: Forwarding hook\7f1973417
+Node: Compatibility\7f1976457
+Node: Gcov\7f1983013
+Node: Gcov Intro\7f1983546
+Node: Invoking Gcov\7f1986264
+Node: Gcov and Optimization\7f2000504
+Node: Gcov Data Files\7f2003506
+Node: Cross-profiling\7f2004901
+Node: Trouble\7f2006755
+Node: Actual Bugs\7f2008167
+Node: Interoperation\7f2008614
+Node: Incompatibilities\7f2015505
+Node: Fixed Headers\7f2023657
+Node: Standard Libraries\7f2025315
+Node: Disappointments\7f2026687
+Node: C++ Misunderstandings\7f2031046
+Node: Static Definitions\7f2031857
+Node: Name lookup\7f2032910
+Ref: Name lookup-Footnote-1\7f2037690
+Node: Temporaries\7f2037879
+Node: Copy Assignment\7f2039855
+Node: Non-bugs\7f2041662
+Node: Warnings and Errors\7f2052168
+Node: Bugs\7f2053930
+Node: Bug Criteria\7f2054397
+Node: Bug Reporting\7f2056607
+Node: Service\7f2056828
+Node: Contributing\7f2057647
+Node: Funding\7f2058387
+Node: GNU Project\7f2060877
+Node: Copying\7f2061523
+Node: GNU Free Documentation License\7f2099032
+Node: Contributors\7f2124150
+Node: Option Index\7f2162019
+Node: Keyword Index\7f2374276
 \1f
 End Tag Table
index c1f3857..c62b3f6 100644 (file)
@@ -40,7 +40,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1988-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index 3e8aa06..ced504d 100644 (file)
@@ -1,7 +1,7 @@
 This is gccinstall.info, produced by makeinfo version 5.2 from
 install.texi.
 
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -24,7 +24,7 @@ START-INFO-DIR-ENTRY
 * gccinstall: (gccinstall).    Installing the GNU Compiler Collection.
 END-INFO-DIR-ENTRY
 
-   Copyright (C) 1988-2014 Free Software Foundation, Inc.
+   Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -3090,11 +3090,22 @@ not support option '-mabi=ilp32'.
    To enable a workaround for the Cortex-A53 erratum number 835769 by
 default (for all CPUs regardless of -mcpu option given) at configure
 time use the '--enable-fix-cortex-a53-835769' option.  This will enable
-the fix by default and can be explicitly disabled during during
-compilation by passing the '-mno-fix-cortex-a53-835769' option.
-Conversely, '--disable-fix-cortex-a53-835769' will disable the
+the fix by default and can be explicitly disabled during compilation by
+passing the '-mno-fix-cortex-a53-835769' option.  Conversely,
+'--disable-fix-cortex-a53-835769' will disable the workaround by
+default.  The workaround is disabled by default if neither of
+'--enable-fix-cortex-a53-835769' or '--disable-fix-cortex-a53-835769' is
+given at configure time.
+
+   To enable a workaround for the Cortex-A53 erratum number 843419 by
+default (for all CPUs regardless of -mcpu option given) at configure
+time use the '--enable-fix-cortex-a53-843419' option.  This workaround
+is applied at link time.  Enabling the workaround will cause GCC to pass
+the relevant option to the linker.  It can be explicitly disabled during
+compilation by passing the '-mno-fix-cortex-a53-843419' option.
+Conversely, '--disable-fix-cortex-a53-843419' will disable the
 workaround by default.  The workaround is disabled by default if neither
-of '--enable-fix-cortex-a53-835769' or '--disable-fix-cortex-a53-835769'
+of '--enable-fix-cortex-a53-843419' or '--disable-fix-cortex-a53-843419'
 is given at configure time.
 
 *-ibm-aix*
@@ -4625,63 +4636,63 @@ Ref: ix86-x-solaris210\7f131320
 Ref: ia64-x-linux\7f132511
 Ref: ia64-x-hpux\7f133281
 Ref: aarch64-x-x\7f133836
-Ref: x-ibm-aix\7f134616
-Ref: iq2000-x-elf\7f141479
-Ref: lm32-x-elf\7f141619
-Ref: lm32-x-uclinux\7f141723
-Ref: m32c-x-elf\7f141851
-Ref: m32r-x-elf\7f141953
-Ref: m68k-x-x\7f142055
-Ref: m68k-x-uclinux\7f143093
-Ref: mep-x-elf\7f143338
-Ref: microblaze-x-elf\7f143448
-Ref: mips-x-x\7f143567
-Ref: mips-sgi-irix5\7f145961
-Ref: mips-sgi-irix6\7f146041
-Ref: moxie-x-elf\7f146228
-Ref: msp430-x-elf\7f146275
-Ref: nds32le-x-elf\7f146378
-Ref: nds32be-x-elf\7f146450
-Ref: powerpc-x-x\7f146519
-Ref: powerpc-x-darwin\7f146724
-Ref: powerpc-x-elf\7f147218
-Ref: powerpc-x-linux-gnu\7f147303
-Ref: powerpc-x-netbsd\7f147398
-Ref: powerpc-x-eabisim\7f147486
-Ref: powerpc-x-eabi\7f147612
-Ref: powerpcle-x-elf\7f147688
-Ref: powerpcle-x-eabisim\7f147780
-Ref: powerpcle-x-eabi\7f147913
-Ref: rl78-x-elf\7f147996
-Ref: rx-x-elf\7f148102
-Ref: s390-x-linux\7f148301
-Ref: s390x-x-linux\7f148373
-Ref: s390x-ibm-tpf\7f148460
-Ref: x-x-solaris2\7f148591
-Ref: sparc-x-x\7f153512
-Ref: sparc-sun-solaris2\7f154014
-Ref: sparc-sun-solaris210\7f156767
-Ref: sparc-x-linux\7f157142
-Ref: sparc64-x-solaris2\7f157367
-Ref: sparcv9-x-solaris2\7f158020
-Ref: c6x-x-x\7f158107
-Ref: tilegx-*-linux\7f158199
-Ref: tilegxbe-*-linux\7f158341
-Ref: tilepro-*-linux\7f158484
-Ref: x-x-vxworks\7f158605
-Ref: x86-64-x-x\7f160128
-Ref: x86-64-x-solaris210\7f160456
-Ref: xtensa-x-elf\7f161118
-Ref: xtensa-x-linux\7f161789
-Ref: windows\7f162130
-Ref: x-x-cygwin\7f164063
-Ref: x-x-interix\7f164616
-Ref: x-x-mingw32\7f164924
-Ref: older\7f165150
-Ref: elf\7f167267
-Node: Old\7f167525
-Node: Configurations\7f170658
-Node: GNU Free Documentation License\7f174196
-Node: Concept Index\7f199324
+Ref: x-ibm-aix\7f135268
+Ref: iq2000-x-elf\7f142131
+Ref: lm32-x-elf\7f142271
+Ref: lm32-x-uclinux\7f142375
+Ref: m32c-x-elf\7f142503
+Ref: m32r-x-elf\7f142605
+Ref: m68k-x-x\7f142707
+Ref: m68k-x-uclinux\7f143745
+Ref: mep-x-elf\7f143990
+Ref: microblaze-x-elf\7f144100
+Ref: mips-x-x\7f144219
+Ref: mips-sgi-irix5\7f146613
+Ref: mips-sgi-irix6\7f146693
+Ref: moxie-x-elf\7f146880
+Ref: msp430-x-elf\7f146927
+Ref: nds32le-x-elf\7f147030
+Ref: nds32be-x-elf\7f147102
+Ref: powerpc-x-x\7f147171
+Ref: powerpc-x-darwin\7f147376
+Ref: powerpc-x-elf\7f147870
+Ref: powerpc-x-linux-gnu\7f147955
+Ref: powerpc-x-netbsd\7f148050
+Ref: powerpc-x-eabisim\7f148138
+Ref: powerpc-x-eabi\7f148264
+Ref: powerpcle-x-elf\7f148340
+Ref: powerpcle-x-eabisim\7f148432
+Ref: powerpcle-x-eabi\7f148565
+Ref: rl78-x-elf\7f148648
+Ref: rx-x-elf\7f148754
+Ref: s390-x-linux\7f148953
+Ref: s390x-x-linux\7f149025
+Ref: s390x-ibm-tpf\7f149112
+Ref: x-x-solaris2\7f149243
+Ref: sparc-x-x\7f154164
+Ref: sparc-sun-solaris2\7f154666
+Ref: sparc-sun-solaris210\7f157419
+Ref: sparc-x-linux\7f157794
+Ref: sparc64-x-solaris2\7f158019
+Ref: sparcv9-x-solaris2\7f158672
+Ref: c6x-x-x\7f158759
+Ref: tilegx-*-linux\7f158851
+Ref: tilegxbe-*-linux\7f158993
+Ref: tilepro-*-linux\7f159136
+Ref: x-x-vxworks\7f159257
+Ref: x86-64-x-x\7f160780
+Ref: x86-64-x-solaris210\7f161108
+Ref: xtensa-x-elf\7f161770
+Ref: xtensa-x-linux\7f162441
+Ref: windows\7f162782
+Ref: x-x-cygwin\7f164715
+Ref: x-x-interix\7f165268
+Ref: x-x-mingw32\7f165576
+Ref: older\7f165802
+Ref: elf\7f167919
+Node: Old\7f168177
+Node: Configurations\7f171310
+Node: GNU Free Documentation License\7f174848
+Node: Concept Index\7f199976
 \1f
 End Tag Table
index b04c8c0..2b9329b 100644 (file)
@@ -1,6 +1,6 @@
 This is gccint.info, produced by makeinfo version 5.2 from gccint.texi.
 
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
  Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -26,7 +26,7 @@ END-INFO-DIR-ENTRY
 
  This file documents the internals of the GNU compilers.
 
- Copyright (C) 1988-2014 Free Software Foundation, Inc.
+ Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
  Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -55,7 +55,7 @@ Introduction
 This manual documents the internals of the GNU compilers, including how
 to port them to new targets and some information about how to write
 front ends for new languages.  It corresponds to the compilers (GCC)
-version 4.9.2.  The use of the GNU compilers is documented in a separate
+version 4.9.3.  The use of the GNU compilers is documented in a separate
 manual.  *Note Introduction: (gcc)Top.
 
  This manual is mainly a reference manual rather than a tutorial.  It
@@ -20026,6 +20026,22 @@ _PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
      'wa'
           Any VSX register if the -mvsx option was used or NO_REGS.
 
+          When using any of the register constraints ('wa', 'wd', 'wf',
+          'wg', 'wh', 'wi', 'wj', 'wk', 'wl', 'wm', 'ws', 'wt', 'wu',
+          'wv', 'ww', or 'wy') that take VSX registers, you must use
+          '%x<n>' in the template so that the correct register is used.
+          Otherwise the register number output in the assembly file will
+          be incorrect if an Altivec register is an operand of a VSX
+          instruction that expects VSX register numbering.
+
+               asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
+
+          is correct, but:
+
+               asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
+
+          is not correct.
+
      'wd'
           VSX vector register to hold vector double data or NO_REGS.
 
@@ -25685,10 +25701,10 @@ arithmetic terms are allowed in test expressions:
      must be a 'label_ref'.
 
 '(pc)'
-     This refers to the address of the _current_ insn.  It might have
-     been more consistent with other usage to make this the address of
-     the _next_ insn but this would be confusing because the length of
-     the current insn is to be computed.
+     For non-branch instructions and backward branch instructions, this
+     refers to the address of the current insn.  But for forward branch
+     instructions, this refers to the address of the next insn, because
+     the length of the current insn is to be computed.
 
  For normal insns, the length will be determined by value of the
 'length' attribute.  In the case of 'addr_vec' and 'addr_diff_vec' insn
@@ -31216,11 +31232,6 @@ the stack.
      compiler will run out of spill registers and print a fatal error
      message.
 
- -- Target Hook: unsigned int TARGET_FLAGS_REGNUM
-     If the target has a dedicated flags register, and it needs to use
-     the post-reload comparison elimination pass, then this value should
-     be set appropriately.
-
 \1f
 File: gccint.info,  Node: Scalar Return,  Next: Aggregate Return,  Prev: Register Arguments,  Up: Stack and Calling
 
@@ -32780,10 +32791,11 @@ File: gccint.info,  Node: MODE_CC Condition Codes,  Prev: CC0 Condition Codes,
      comparisons whose argument is a 'plus':
 
           #define SELECT_CC_MODE(OP,X,Y) \
-            (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT          \
-             ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode)    \
-             : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS    \
-                 || GET_CODE (X) == NEG) \
+            (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT           \
+             ? ((OP == LT || OP == LE || OP == GT || OP == GE)     \
+                ? CCFPEmode : CCFPmode)                            \
+             : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS     \
+                 || GET_CODE (X) == NEG || GET_CODE (x) == ASHIFT) \
                 ? CC_NOOVmode : CCmode))
 
      Another reason to use modes is to retain information on which
@@ -32824,10 +32836,11 @@ File: gccint.info,  Node: MODE_CC Condition Codes,  Prev: CC0 Condition Codes,
      You need not define this macro if it would always returns zero or
      if the floating-point format is anything other than
      'IEEE_FLOAT_FORMAT'.  For example, here is the definition used on
-     the SPARC, where floating-point inequality comparisons are always
-     given 'CCFPEmode':
+     the SPARC, where floating-point inequality comparisons are given
+     either 'CCFPEmode' or 'CCFPmode':
 
-          #define REVERSIBLE_CC_MODE(MODE)  ((MODE) != CCFPEmode)
+          #define REVERSIBLE_CC_MODE(MODE) \
+             ((MODE) != CCFPEmode && (MODE) != CCFPmode)
 
  -- Macro: REVERSE_CONDITION (CODE, MODE)
      A C expression whose value is reversed condition code of the CODE
@@ -32836,7 +32849,7 @@ File: gccint.info,  Node: MODE_CC Condition Codes,  Prev: CC0 Condition Codes,
      case machine has some non-standard way how to reverse certain
      conditionals.  For instance in case all floating point conditions
      are non-trapping, compiler may freely convert unordered compares to
-     ordered one.  Then definition may look like:
+     ordered ones.  Then definition may look like:
 
           #define REVERSE_CONDITION(CODE, MODE) \
              ((MODE) != CCFPmode ? reverse_condition (CODE) \
@@ -32870,6 +32883,11 @@ File: gccint.info,  Node: MODE_CC Condition Codes,  Prev: CC0 Condition Codes,
      same.  If they are, it returns that mode.  If they are different,
      it returns 'VOIDmode'.
 
+ -- Target Hook: unsigned int TARGET_FLAGS_REGNUM
+     If the target has a dedicated flags register, and it needs to use
+     the post-reload comparison elimination pass, then this value should
+     be set appropriately.
+
 \1f
 File: gccint.info,  Node: Costs,  Next: Scheduling,  Prev: Condition Code,  Up: Target Macros
 
@@ -48692,9 +48710,9 @@ Concept Index
 * reverse probability:                   Profile information.
                                                              (line   66)
 * REVERSE_CONDITION:                     MODE_CC Condition Codes.
-                                                             (line   90)
+                                                             (line   92)
 * REVERSIBLE_CC_MODE:                    MODE_CC Condition Codes.
-                                                             (line   76)
+                                                             (line   77)
 * right rotate:                          Arithmetic.         (line  196)
 * right shift:                           Arithmetic.         (line  191)
 * 'rintM2' instruction pattern:          Standard Names.     (line  674)
@@ -49173,7 +49191,7 @@ Concept Index
 * TARGET_CANNOT_FORCE_CONST_MEM:         Addressing Modes.   (line  234)
 * TARGET_CANNOT_MODIFY_JUMPS_P:          Misc.               (line  811)
 * TARGET_CANONICALIZE_COMPARISON:        MODE_CC Condition Codes.
-                                                             (line   54)
+                                                             (line   55)
 * TARGET_CANONICAL_VA_LIST_TYPE:         Register Arguments. (line  292)
 * TARGET_CAN_ELIMINATE:                  Elimination.        (line   73)
 * TARGET_CAN_FOLLOW_JUMP:                Misc.               (line  720)
@@ -49181,7 +49199,7 @@ Concept Index
 * TARGET_CAN_USE_DOLOOP_P:               Misc.               (line  675)
 * TARGET_CASE_VALUES_THRESHOLD:          Misc.               (line   46)
 * TARGET_CC_MODES_COMPATIBLE:            MODE_CC Condition Codes.
-                                                             (line  118)
+                                                             (line  120)
 * TARGET_CHECK_PCH_TARGET_FLAGS:         PCH Target.         (line   26)
 * TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target.    (line  119)
 * TARGET_CLASS_LIKELY_SPILLED_P:         Register Classes.   (line  489)
@@ -49255,10 +49273,11 @@ Concept Index
 * TARGET_EXTRA_LIVE_ON_ENTRY:            Tail Calls.         (line   20)
 * TARGET_EXTRA_PRE_INCLUDES:             Misc.               (line  877)
 * TARGET_FIXED_CONDITION_CODE_REGS:      MODE_CC Condition Codes.
-                                                             (line  103)
+                                                             (line  105)
 * TARGET_FIXED_POINT_SUPPORTED_P:        Storage Layout.     (line  524)
 * target_flags:                          Run-time Target.    (line   51)
-* TARGET_FLAGS_REGNUM:                   Register Arguments. (line  391)
+* TARGET_FLAGS_REGNUM:                   MODE_CC Condition Codes.
+                                                             (line  133)
 * TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P: Run-time Target.
                                                              (line  183)
 * TARGET_FLT_EVAL_METHOD:                Type Layout.        (line  147)
@@ -50204,165 +50223,165 @@ Node: Multi-Alternative\7f856027
 Node: Class Preferences\7f858868
 Node: Modifiers\7f859760
 Node: Machine Constraints\7f864006
-Node: Disable Insn Alternatives\7f922578
-Node: Define Constraints\7f925482
-Node: C Constraint Interface\7f932267
-Node: Standard Names\7f935919
-Ref: shift patterns\7f959067
-Ref: prologue instruction pattern\7f1003824
-Ref: window_save instruction pattern\7f1004317
-Ref: epilogue instruction pattern\7f1004594
-Node: Pattern Ordering\7f1022180
-Node: Dependent Patterns\7f1023416
-Node: Jump Patterns\7f1025036
-Ref: Jump Patterns-Footnote-1\7f1027183
-Node: Looping Patterns\7f1027231
-Node: Insn Canonicalizations\7f1031960
-Node: Expander Definitions\7f1036545
-Node: Insn Splitting\7f1044759
-Node: Including Patterns\7f1054362
-Node: Peephole Definitions\7f1056146
-Node: define_peephole\7f1057399
-Node: define_peephole2\7f1063729
-Node: Insn Attributes\7f1066795
-Node: Defining Attributes\7f1067977
-Ref: define_enum_attr\7f1071470
-Node: Expressions\7f1072506
-Node: Tagging Insns\7f1079256
-Node: Attr Example\7f1083609
-Node: Insn Lengths\7f1085982
-Node: Constant Attributes\7f1089041
-Node: Mnemonic Attribute\7f1090217
-Node: Delay Slots\7f1091736
-Node: Processor pipeline description\7f1094959
-Ref: Processor pipeline description-Footnote-1\7f1113777
-Node: Conditional Execution\7f1114101
-Node: Define Subst\7f1117584
-Node: Define Subst Example\7f1119620
-Node: Define Subst Pattern Matching\7f1122614
-Node: Define Subst Output Template\7f1123840
-Node: Constant Definitions\7f1125910
-Ref: define_enum\7f1129692
-Node: Iterators\7f1130180
-Node: Mode Iterators\7f1130758
-Node: Defining Mode Iterators\7f1131736
-Node: Substitutions\7f1133230
-Node: Examples\7f1135472
-Node: Code Iterators\7f1136920
-Node: Int Iterators\7f1139199
-Node: Subst Iterators\7f1141645
-Node: Target Macros\7f1143337
-Node: Target Structure\7f1146425
-Node: Driver\7f1148541
-Node: Run-time Target\7f1167353
-Node: Per-Function Data\7f1177064
-Node: Storage Layout\7f1179828
-Node: Type Layout\7f1206080
-Node: Registers\7f1221403
-Node: Register Basics\7f1222377
-Node: Allocation Order\7f1227885
-Node: Values in Registers\7f1230331
-Node: Leaf Functions\7f1237809
-Node: Stack Registers\7f1240668
-Node: Register Classes\7f1241940
-Node: Old Constraints\7f1272884
-Node: Stack and Calling\7f1280024
-Node: Frame Layout\7f1280558
-Node: Exception Handling\7f1291434
-Node: Stack Checking\7f1297646
-Node: Frame Registers\7f1302460
-Node: Elimination\7f1310719
-Node: Stack Arguments\7f1314949
-Node: Register Arguments\7f1322133
-Node: Scalar Return\7f1342434
-Node: Aggregate Return\7f1348521
-Node: Caller Saves\7f1352732
-Node: Function Entry\7f1353909
-Node: Profiling\7f1365003
-Node: Tail Calls\7f1366702
-Node: Stack Smashing Protection\7f1368605
-Node: Varargs\7f1370233
-Node: Trampolines\7f1376920
-Node: Library Calls\7f1382963
-Node: Addressing Modes\7f1387647
-Node: Anchored Addresses\7f1408615
-Node: Condition Code\7f1411258
-Node: CC0 Condition Codes\7f1413585
-Node: MODE_CC Condition Codes\7f1416831
-Node: Costs\7f1423283
-Node: Scheduling\7f1439745
-Node: Sections\7f1459703
-Node: PIC\7f1475401
-Node: Assembler Format\7f1477460
-Node: File Framework\7f1478598
-Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS\7f1485530
-Node: Data Output\7f1488800
-Node: Uninitialized Data\7f1496569
-Node: Label Output\7f1501580
-Node: Initialization\7f1524536
-Node: Macros for Initialization\7f1530497
-Node: Instruction Output\7f1537216
-Node: Dispatch Tables\7f1547839
-Node: Exception Region Output\7f1552223
-Node: Alignment Output\7f1558901
-Node: Debugging Info\7f1563480
-Node: All Debuggers\7f1564150
-Node: DBX Options\7f1567005
-Node: DBX Hooks\7f1572443
-Node: File Names and DBX\7f1573752
-Node: SDB and DWARF\7f1575864
-Node: VMS Debug\7f1581936
-Node: Floating Point\7f1582523
-Node: Mode Switching\7f1586999
-Node: Target Attributes\7f1590995
-Node: Emulated TLS\7f1599453
-Node: MIPS Coprocessors\7f1602843
-Node: PCH Target\7f1604140
-Node: C++ ABI\7f1605982
-Node: Named Address Spaces\7f1610776
-Node: Misc\7f1615710
-Ref: TARGET_SHIFT_TRUNCATION_MASK\7f1622452
-Node: Host Config\7f1670954
-Node: Host Common\7f1672022
-Node: Filesystem\7f1674396
-Node: Host Misc\7f1678511
-Node: Fragments\7f1680960
-Node: Target Fragment\7f1682155
-Node: Host Fragment\7f1692783
-Node: Collect2\7f1693023
-Node: Header Dirs\7f1695659
-Node: Type Information\7f1697082
-Node: GTY Options\7f1700358
-Node: Inheritance and GTY\7f1714878
-Ref: Inheritance and GTY-Footnote-1\7f1716441
-Node: User GC\7f1716711
-Node: GGC Roots\7f1720450
-Node: Files\7f1721163
-Node: Invoking the garbage collector\7f1723870
-Node: Troubleshooting\7f1725375
-Node: Plugins\7f1726450
-Node: Plugins loading\7f1727568
-Node: Plugin API\7f1728438
-Node: Plugins pass\7f1736101
-Node: Plugins GC\7f1738072
-Node: Plugins description\7f1739737
-Node: Plugins attr\7f1740273
-Node: Plugins recording\7f1742547
-Node: Plugins gate\7f1743397
-Node: Plugins tracking\7f1743988
-Node: Plugins building\7f1744576
-Node: LTO\7f1746366
-Node: LTO Overview\7f1747227
-Node: LTO object file layout\7f1753059
-Node: IPA\7f1757689
-Node: WHOPR\7f1766654
-Node: Internal flags\7f1771343
-Node: Funding\7f1772754
-Node: GNU Project\7f1775238
-Node: Copying\7f1775887
-Node: GNU Free Documentation License\7f1813399
-Node: Contributors\7f1838520
-Node: Option Index\7f1876392
-Node: Concept Index\7f1877269
+Node: Disable Insn Alternatives\7f923277
+Node: Define Constraints\7f926181
+Node: C Constraint Interface\7f932966
+Node: Standard Names\7f936618
+Ref: shift patterns\7f959766
+Ref: prologue instruction pattern\7f1004523
+Ref: window_save instruction pattern\7f1005016
+Ref: epilogue instruction pattern\7f1005293
+Node: Pattern Ordering\7f1022879
+Node: Dependent Patterns\7f1024115
+Node: Jump Patterns\7f1025735
+Ref: Jump Patterns-Footnote-1\7f1027882
+Node: Looping Patterns\7f1027930
+Node: Insn Canonicalizations\7f1032659
+Node: Expander Definitions\7f1037244
+Node: Insn Splitting\7f1045458
+Node: Including Patterns\7f1055061
+Node: Peephole Definitions\7f1056845
+Node: define_peephole\7f1058098
+Node: define_peephole2\7f1064428
+Node: Insn Attributes\7f1067494
+Node: Defining Attributes\7f1068676
+Ref: define_enum_attr\7f1072169
+Node: Expressions\7f1073205
+Node: Tagging Insns\7f1079955
+Node: Attr Example\7f1084308
+Node: Insn Lengths\7f1086681
+Node: Constant Attributes\7f1089758
+Node: Mnemonic Attribute\7f1090934
+Node: Delay Slots\7f1092453
+Node: Processor pipeline description\7f1095676
+Ref: Processor pipeline description-Footnote-1\7f1114494
+Node: Conditional Execution\7f1114818
+Node: Define Subst\7f1118301
+Node: Define Subst Example\7f1120337
+Node: Define Subst Pattern Matching\7f1123331
+Node: Define Subst Output Template\7f1124557
+Node: Constant Definitions\7f1126627
+Ref: define_enum\7f1130409
+Node: Iterators\7f1130897
+Node: Mode Iterators\7f1131475
+Node: Defining Mode Iterators\7f1132453
+Node: Substitutions\7f1133947
+Node: Examples\7f1136189
+Node: Code Iterators\7f1137637
+Node: Int Iterators\7f1139916
+Node: Subst Iterators\7f1142362
+Node: Target Macros\7f1144054
+Node: Target Structure\7f1147142
+Node: Driver\7f1149258
+Node: Run-time Target\7f1168070
+Node: Per-Function Data\7f1177781
+Node: Storage Layout\7f1180545
+Node: Type Layout\7f1206797
+Node: Registers\7f1222120
+Node: Register Basics\7f1223094
+Node: Allocation Order\7f1228602
+Node: Values in Registers\7f1231048
+Node: Leaf Functions\7f1238526
+Node: Stack Registers\7f1241385
+Node: Register Classes\7f1242657
+Node: Old Constraints\7f1273601
+Node: Stack and Calling\7f1280741
+Node: Frame Layout\7f1281275
+Node: Exception Handling\7f1292151
+Node: Stack Checking\7f1298363
+Node: Frame Registers\7f1303177
+Node: Elimination\7f1311436
+Node: Stack Arguments\7f1315666
+Node: Register Arguments\7f1322850
+Node: Scalar Return\7f1342929
+Node: Aggregate Return\7f1349016
+Node: Caller Saves\7f1353227
+Node: Function Entry\7f1354404
+Node: Profiling\7f1365498
+Node: Tail Calls\7f1367197
+Node: Stack Smashing Protection\7f1369100
+Node: Varargs\7f1370728
+Node: Trampolines\7f1377415
+Node: Library Calls\7f1383458
+Node: Addressing Modes\7f1388142
+Node: Anchored Addresses\7f1409110
+Node: Condition Code\7f1411753
+Node: CC0 Condition Codes\7f1414080
+Node: MODE_CC Condition Codes\7f1417326
+Node: Costs\7f1424149
+Node: Scheduling\7f1440611
+Node: Sections\7f1460569
+Node: PIC\7f1476267
+Node: Assembler Format\7f1478326
+Node: File Framework\7f1479464
+Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS\7f1486396
+Node: Data Output\7f1489666
+Node: Uninitialized Data\7f1497435
+Node: Label Output\7f1502446
+Node: Initialization\7f1525402
+Node: Macros for Initialization\7f1531363
+Node: Instruction Output\7f1538082
+Node: Dispatch Tables\7f1548705
+Node: Exception Region Output\7f1553089
+Node: Alignment Output\7f1559767
+Node: Debugging Info\7f1564346
+Node: All Debuggers\7f1565016
+Node: DBX Options\7f1567871
+Node: DBX Hooks\7f1573309
+Node: File Names and DBX\7f1574618
+Node: SDB and DWARF\7f1576730
+Node: VMS Debug\7f1582802
+Node: Floating Point\7f1583389
+Node: Mode Switching\7f1587865
+Node: Target Attributes\7f1591861
+Node: Emulated TLS\7f1600319
+Node: MIPS Coprocessors\7f1603709
+Node: PCH Target\7f1605006
+Node: C++ ABI\7f1606848
+Node: Named Address Spaces\7f1611642
+Node: Misc\7f1616576
+Ref: TARGET_SHIFT_TRUNCATION_MASK\7f1623318
+Node: Host Config\7f1671820
+Node: Host Common\7f1672888
+Node: Filesystem\7f1675262
+Node: Host Misc\7f1679377
+Node: Fragments\7f1681826
+Node: Target Fragment\7f1683021
+Node: Host Fragment\7f1693649
+Node: Collect2\7f1693889
+Node: Header Dirs\7f1696525
+Node: Type Information\7f1697948
+Node: GTY Options\7f1701224
+Node: Inheritance and GTY\7f1715744
+Ref: Inheritance and GTY-Footnote-1\7f1717307
+Node: User GC\7f1717577
+Node: GGC Roots\7f1721316
+Node: Files\7f1722029
+Node: Invoking the garbage collector\7f1724736
+Node: Troubleshooting\7f1726241
+Node: Plugins\7f1727316
+Node: Plugins loading\7f1728434
+Node: Plugin API\7f1729304
+Node: Plugins pass\7f1736967
+Node: Plugins GC\7f1738938
+Node: Plugins description\7f1740603
+Node: Plugins attr\7f1741139
+Node: Plugins recording\7f1743413
+Node: Plugins gate\7f1744263
+Node: Plugins tracking\7f1744854
+Node: Plugins building\7f1745442
+Node: LTO\7f1747232
+Node: LTO Overview\7f1748093
+Node: LTO object file layout\7f1753925
+Node: IPA\7f1758555
+Node: WHOPR\7f1767520
+Node: Internal flags\7f1772209
+Node: Funding\7f1773620
+Node: GNU Project\7f1776104
+Node: Copying\7f1776753
+Node: GNU Free Documentation License\7f1814265
+Node: Contributors\7f1839386
+Node: Option Index\7f1877258
+Node: Concept Index\7f1878135
 \1f
 End Tag Table
index 889f410..09785e3 100644 (file)
@@ -26,7 +26,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1988-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index de6de17..6d8caaf 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GCJ-DBTOOL 1"
-.TH GCJ-DBTOOL 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH GCJ-DBTOOL 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 8bca95a..1dd23c9 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GCJ 1"
-.TH GCJ 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH GCJ 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 3c58ac0..af13558 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GCOV 1"
-.TH GCOV 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH GCOV 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -708,7 +708,7 @@ collected at that point to be dumped to \fI.gcda\fR output files.
 \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1) and the Info entry for \fIgcc\fR.
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (c) 1996\-2014 Free Software Foundation, Inc.
+Copyright (c) 1996\-2015 Free Software Foundation, Inc.
 .PP
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
index a108e52..95ad07a 100644 (file)
@@ -4,7 +4,7 @@
 
 @ignore
 @c man begin COPYRIGHT
-Copyright @copyright{} 1996-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1996-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
index 818d354..54546c4 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GFORTRAN 1"
-.TH GFORTRAN 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH GFORTRAN 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index bd4845c..32bfb06 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GIJ 1"
-.TH GIJ 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH GIJ 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 62a7676..0f83f51 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GPL 7"
-.TH GPL 7 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH GPL 7 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 83f9208..7bf5927 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GRMIC 1"
-.TH GRMIC 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH GRMIC 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 1daedff..1bc7a3e 100644 (file)
@@ -69,7 +69,7 @@
 
 @c Part 2 Summary Description and Copyright
 @copying
-Copyright @copyright{} 1988-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1988-2015 Free Software Foundation, Inc.
 @sp 1
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -3769,13 +3769,24 @@ not support option @option{-mabi=ilp32}.
 To enable a workaround for the Cortex-A53 erratum number 835769 by default
 (for all CPUs regardless of -mcpu option given) at configure time use the
 @option{--enable-fix-cortex-a53-835769} option.  This will enable the fix by
-default and can be explicitly disabled during during compilation by passing the
+default and can be explicitly disabled during compilation by passing the
 @option{-mno-fix-cortex-a53-835769} option.  Conversely,
 @option{--disable-fix-cortex-a53-835769} will disable the workaround by
 default.  The workaround is disabled by default if neither of
 @option{--enable-fix-cortex-a53-835769} or
 @option{--disable-fix-cortex-a53-835769} is given at configure time.
 
+To enable a workaround for the Cortex-A53 erratum number 843419 by default
+(for all CPUs regardless of -mcpu option given) at configure time use the
+@option{--enable-fix-cortex-a53-843419} option.  This workaround is applied at
+link time.  Enabling the workaround will cause GCC to pass the relevant option
+to the linker.  It can be explicitly disabled during compilation by passing the
+@option{-mno-fix-cortex-a53-843419} option.  Conversely,
+@option{--disable-fix-cortex-a53-843419} will disable the workaround by default.
+The workaround is disabled by default if neither of
+@option{--enable-fix-cortex-a53-843419} or
+@option{--disable-fix-cortex-a53-843419} is given at configure time.
+
 @html
 <hr />
 <!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
index bea8be2..c9b86ab 100644 (file)
@@ -1,4 +1,4 @@
-@c Copyright (C) 1988-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1988-2015 Free Software Foundation, Inc.
 @c This is part of the GCC manual.
 @c For copying conditions, see the file gcc.texi.
 
@@ -8,7 +8,7 @@
 @c man end
 
 @c man begin COPYRIGHT
-Copyright @copyright{} 1988-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1988-2015 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -480,6 +480,7 @@ Objective-C and Objective-C++ Dialects}.
 -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
 -mtls-dialect=desc  -mtls-dialect=traditional @gol
 -mfix-cortex-a53-835769  -mno-fix-cortex-a53-835769 @gol
+-mfix-cortex-a53-843419  -mno-fix-cortex-a53-843419 @gol
 -march=@var{name}  -mcpu=@var{name}  -mtune=@var{name}}
 
 @emph{Adapteva Epiphany Options}
@@ -948,7 +949,7 @@ See RS/6000 and PowerPC Options.
 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
 -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
 -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard @gol
--mhotpatch[=@var{halfwords}] -mno-hotpatch}
+-mhotpatch=@var{halfwords},@var{halfwords}}
 
 @emph{Score Options}
 @gccoptlist{-meb -mel @gol
@@ -7401,6 +7402,16 @@ registers after writing to their lower 32-bit half.
 Enabled for Alpha, AArch64 and x86 at levels @option{-O2},
 @option{-O3}, @option{-Os}.
 
+@item -fno-lifetime-dse
+@opindex fno-lifetime-dse
+In C++ the value of an object is only affected by changes within its
+lifetime: when the constructor begins, the object has an indeterminate
+value, and any changes during the lifetime of the object are dead when
+the object is destroyed.  Normally dead store elimination will take
+advantage of this; if your code relies on the value of the object
+storage persisting beyond the lifetime of the object, you can use this
+flag to disable this optimization.
+
 @item -flive-range-shrinkage
 @opindex flive-range-shrinkage
 Attempt to decrease register pressure through register live range
@@ -11427,6 +11438,14 @@ Enable or disable the workaround for the ARM Cortex-A53 erratum number 835769.
 This will involve inserting a NOP instruction between memory instructions and
 64-bit integer multiply-accumulate instructions.
 
+@item -mfix-cortex-a53-843419
+@itemx -mno-fix-cortex-a53-843419
+@opindex mfix-cortex-a53-843419
+@opindex mno-fix-cortex-a53-843419
+Enable or disable the workaround for the ARM Cortex-A53 erratum number 843419.
+This erratum workaround is made at link time and this will only pass the
+corresponding flag to the linker.
+
 @item -march=@var{name}
 @opindex march
 Specify the name of the target architecture, optionally suffixed by one or
@@ -18951,12 +18970,13 @@ Supported values for @var{cpu_type} are @samp{401}, @samp{403},
 @samp{e6500}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5},
 @samp{titan}, @samp{power3}, @samp{power4}, @samp{power5}, @samp{power5+},
 @samp{power6}, @samp{power6x}, @samp{power7}, @samp{power8}, @samp{powerpc},
-@samp{powerpc64}, and @samp{rs64}.
+@samp{powerpc64}, @samp{powerpc64le}, and @samp{rs64}.
 
-@option{-mcpu=powerpc}, and @option{-mcpu=powerpc64} specify pure 32-bit
-PowerPC and 64-bit PowerPC architecture machine
-types, with an appropriate, generic processor model assumed for
-scheduling purposes.
+@option{-mcpu=powerpc}, @option{-mcpu=powerpc64}, and
+@option{-mcpu=powerpc64le} specify pure 32-bit PowerPC (either
+endian), 64-bit big endian PowerPC and 64-bit little endian PowerPC
+architecture machine types, with an appropriate, generic processor
+model assumed for scheduling purposes.
 
 The other options specify a specific processor.  Code generated under
 those options runs best on that processor, and may not run at all on
@@ -20244,13 +20264,13 @@ The default is to not print debug information.
 
 @item -march=@var{cpu-type}
 @opindex march
-Generate code that runs on @var{cpu-type}, which is the name of a system
-representing a certain processor type.  Possible values for
+Generate code that runs on @var{cpu-type}, which is the name of a
+system representing a certain processor type.  Possible values for
 @var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, @samp{z990},
-@samp{z9-109}, @samp{z9-ec} and @samp{z10}.
-When generating code using the instructions available on z/Architecture,
-the default is @option{-march=z900}.  Otherwise, the default is
-@option{-march=g5}.
+@samp{z9-109}, @samp{z9-ec}, @samp{z10}, @samp{z196}, and
+@samp{zEC12}.  When generating code using the instructions available
+on z/Architecture, the default is @option{-march=z900}.  Otherwise,
+the default is @option{-march=g5}.
 
 @item -mtune=@var{cpu-type}
 @opindex mtune
@@ -20306,17 +20326,17 @@ In order to be efficient the extra code makes the assumption that the stack star
 at an address aligned to the value given by @var{stack-size}.
 The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
 
-@item -mhotpatch[=@var{halfwords}]
-@itemx -mno-hotpatch
+@item -mhotpatch=@var{pre-halfwords},@var{post-halfwords}
 @opindex mhotpatch
 If the hotpatch option is enabled, a ``hot-patching'' function
 prologue is generated for all functions in the compilation unit.
 The funtion label is prepended with the given number of two-byte
-Nop instructions (@var{halfwords}, maximum 1000000) or 12 Nop
-instructions if no argument is present.  Functions with a
-hot-patching prologue are never inlined automatically, and a
-hot-patching prologue is never generated for functions functions
-that are explicitly inline.
+NOP instructions (@var{pre-halfwords}, maximum 1000000).  After
+the label, 2 * @var{post-halfwords} bytes are appended, using the
+largest NOP like instructions the architecture allows (maximum
+1000000).
+
+If both arguments are zero, hotpatching is disabled.
 
 This option can be overridden for individual functions with the
 @code{hotpatch} attribute.
@@ -21099,8 +21119,8 @@ the rules of the ABI@.
 Set the instruction set, register set, and instruction scheduling parameters
 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{hypersparc},
-@samp{leon}, @samp{leon3}, @samp{sparclite}, @samp{f930}, @samp{f934},
-@samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9},
+@samp{leon}, @samp{leon3}, @samp{leon3v7}, @samp{sparclite}, @samp{f930},
+@samp{f934}, @samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9},
 @samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2},
 @samp{niagara3} and @samp{niagara4}.
 
@@ -21118,7 +21138,7 @@ implementations.
 
 @table @asis
 @item v7
-cypress
+cypress, leon3v7
 
 @item v8
 supersparc, hypersparc, leon, leon3
@@ -21183,11 +21203,11 @@ option @option{-mcpu=@var{cpu_type}} does.
 The same values for @option{-mcpu=@var{cpu_type}} can be used for
 @option{-mtune=@var{cpu_type}}, but the only useful values are those
 that select a particular CPU implementation.  Those are @samp{cypress},
-@samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{leon3}, @samp{f930},
-@samp{f934}, @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
-@samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3} and
-@samp{niagara4}.  With native Solaris and GNU/Linux toolchains, @samp{native}
-can also be used.
+@samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{leon3},
+@samp{leon3v7}, @samp{f930}, @samp{f934}, @samp{sparclite86x}, @samp{tsc701},
+@samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2},
+@samp{niagara3} and @samp{niagara4}.  With native Solaris and GNU/Linux
+toolchains, @samp{native} can also be used.
 
 @item -mv8plus
 @itemx -mno-v8plus
index 54956be..48c79bc 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "JCF-DUMP 1"
-.TH JCF-DUMP 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH JCF-DUMP 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 06edc44..39767fa 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "JV-CONVERT 1"
-.TH JV-CONVERT 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH JV-CONVERT 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index baa13a3..7b3e362 100644 (file)
@@ -2117,6 +2117,27 @@ Altivec vector register
 @item wa
 Any VSX register if the -mvsx option was used or NO_REGS.
 
+When using any of the register constraints (@code{wa}, @code{wd},
+@code{wf}, @code{wg}, @code{wh}, @code{wi}, @code{wj}, @code{wk},
+@code{wl}, @code{wm}, @code{ws}, @code{wt}, @code{wu}, @code{wv},
+@code{ww}, or @code{wy}) that take VSX registers, you must use
+@code{%x<n>} in the template so that the correct register is used.
+Otherwise the register number output in the assembly file will be
+incorrect if an Altivec register is an operand of a VSX instruction
+that expects VSX register numbering.
+
+@smallexample
+asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
+@end smallexample
+
+is correct, but:
+
+@smallexample
+asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
+@end smallexample
+
+is not correct.
+
 @item wd
 VSX vector register to hold vector double data or NO_REGS.
 
@@ -8410,9 +8431,9 @@ must be a @code{label_ref}.
 
 @cindex @code{pc} and attributes
 @item (pc)
-This refers to the address of the @emph{current} insn.  It might have
-been more consistent with other usage to make this the address of the
-@emph{next} insn but this would be confusing because the length of the
+For non-branch instructions and backward branch instructions, this refers
+to the address of the current insn.  But for forward branch instructions,
+this refers to the address of the next insn, because the length of the
 current insn is to be computed.
 @end table
 
index 2c4822f..e29260c 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "REBUILD-GCJ-DB 1"
-.TH REBUILD-GCJ-DB 1 "2014-10-30" "gcc-4.9.2" "GNU"
+.TH REBUILD-GCJ-DB 1 "2015-06-26" "gcc-4.9.3" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 0221870..3ad6646 100644 (file)
@@ -4441,10 +4441,6 @@ to return a nonzero value when it is required, the compiler will run out
 of spill registers and print a fatal error message.
 @end deftypefn
 
-@deftypevr {Target Hook} {unsigned int} TARGET_FLAGS_REGNUM
-If the target has a dedicated flags register, and it needs to use the post-reload comparison elimination pass, then this value should be set appropriately.
-@end deftypevr
-
 @node Scalar Return
 @subsection How Scalar Function Values Are Returned
 @cindex return values in registers
@@ -6047,10 +6043,11 @@ for comparisons whose argument is a @code{plus}:
 
 @smallexample
 #define SELECT_CC_MODE(OP,X,Y) \
-  (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT          \
-   ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode)    \
-   : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS    \
-       || GET_CODE (X) == NEG) \
+  (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT           \
+   ? ((OP == LT || OP == LE || OP == GT || OP == GE)     \
+      ? CCFPEmode : CCFPmode)                            \
+   : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS     \
+       || GET_CODE (X) == NEG || GET_CODE (x) == ASHIFT) \
       ? CC_NOOVmode : CCmode))
 @end smallexample
 
@@ -6093,10 +6090,11 @@ then @code{REVERSIBLE_CC_MODE (@var{mode})} must be zero.
 You need not define this macro if it would always returns zero or if the
 floating-point format is anything other than @code{IEEE_FLOAT_FORMAT}.
 For example, here is the definition used on the SPARC, where floating-point
-inequality comparisons are always given @code{CCFPEmode}:
+inequality comparisons are given either @code{CCFPEmode} or @code{CCFPmode}:
 
 @smallexample
-#define REVERSIBLE_CC_MODE(MODE)  ((MODE) != CCFPEmode)
+#define REVERSIBLE_CC_MODE(MODE) \
+   ((MODE) != CCFPEmode && (MODE) != CCFPmode)
 @end smallexample
 @end defmac
 
@@ -6106,7 +6104,7 @@ comparison done in CC_MODE @var{mode}.  The macro is used only in case
 @code{REVERSIBLE_CC_MODE (@var{mode})} is nonzero.  Define this macro in case
 machine has some non-standard way how to reverse certain conditionals.  For
 instance in case all floating point conditions are non-trapping, compiler may
-freely convert unordered compares to ordered one.  Then definition may look
+freely convert unordered compares to ordered ones.  Then definition may look
 like:
 
 @smallexample
@@ -6144,6 +6142,10 @@ same.  If they are, it returns that mode.  If they are different, it
 returns @code{VOIDmode}.
 @end deftypefn
 
+@deftypevr {Target Hook} {unsigned int} TARGET_FLAGS_REGNUM
+If the target has a dedicated flags register, and it needs to use the post-reload comparison elimination pass, then this value should be set appropriately.
+@end deftypevr
+
 @node Costs
 @section Describing Relative Costs of Operations
 @cindex costs of instructions
index 0c7c9aa..0c8335d 100644 (file)
@@ -3714,8 +3714,6 @@ stack.
 
 @hook TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P
 
-@hook TARGET_FLAGS_REGNUM
-
 @node Scalar Return
 @subsection How Scalar Function Values Are Returned
 @cindex return values in registers
@@ -4631,10 +4629,11 @@ for comparisons whose argument is a @code{plus}:
 
 @smallexample
 #define SELECT_CC_MODE(OP,X,Y) \
-  (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT          \
-   ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode)    \
-   : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS    \
-       || GET_CODE (X) == NEG) \
+  (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT           \
+   ? ((OP == LT || OP == LE || OP == GT || OP == GE)     \
+      ? CCFPEmode : CCFPmode)                            \
+   : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS     \
+       || GET_CODE (X) == NEG || GET_CODE (x) == ASHIFT) \
       ? CC_NOOVmode : CCmode))
 @end smallexample
 
@@ -4657,10 +4656,11 @@ then @code{REVERSIBLE_CC_MODE (@var{mode})} must be zero.
 You need not define this macro if it would always returns zero or if the
 floating-point format is anything other than @code{IEEE_FLOAT_FORMAT}.
 For example, here is the definition used on the SPARC, where floating-point
-inequality comparisons are always given @code{CCFPEmode}:
+inequality comparisons are given either @code{CCFPEmode} or @code{CCFPmode}:
 
 @smallexample
-#define REVERSIBLE_CC_MODE(MODE)  ((MODE) != CCFPEmode)
+#define REVERSIBLE_CC_MODE(MODE) \
+   ((MODE) != CCFPEmode && (MODE) != CCFPmode)
 @end smallexample
 @end defmac
 
@@ -4670,7 +4670,7 @@ comparison done in CC_MODE @var{mode}.  The macro is used only in case
 @code{REVERSIBLE_CC_MODE (@var{mode})} is nonzero.  Define this macro in case
 machine has some non-standard way how to reverse certain conditionals.  For
 instance in case all floating point conditions are non-trapping, compiler may
-freely convert unordered compares to ordered one.  Then definition may look
+freely convert unordered compares to ordered ones.  Then definition may look
 like:
 
 @smallexample
@@ -4684,6 +4684,8 @@ like:
 
 @hook TARGET_CC_MODES_COMPATIBLE
 
+@hook TARGET_FLAGS_REGNUM
+
 @node Costs
 @section Describing Relative Costs of Operations
 @cindex costs of instructions
index 09dc5df..878fedc 100644 (file)
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -1549,6 +1549,10 @@ record_store (rtx body, bb_info_t bb_info)
            = rtx_group_vec[group_id];
          mem_addr = group->canon_base_addr;
        }
+      /* get_addr can only handle VALUE but cannot handle expr like:
+        VALUE + OFFSET, so call get_addr to get original addr for
+        mem_addr before plus_constant.  */
+      mem_addr = get_addr (mem_addr);
       if (offset)
        mem_addr = plus_constant (get_address_mode (mem), mem_addr, offset);
     }
@@ -2166,6 +2170,10 @@ check_mem_read_rtx (rtx *loc, void *data)
            = rtx_group_vec[group_id];
          mem_addr = group->canon_base_addr;
        }
+      /* get_addr can only handle VALUE but cannot handle expr like:
+        VALUE + OFFSET, so call get_addr to get original addr for
+        mem_addr before plus_constant.  */
+      mem_addr = get_addr (mem_addr);
       if (offset)
        mem_addr = plus_constant (get_address_mode (mem), mem_addr, offset);
     }
index d48895c..6b4e83a 100644 (file)
@@ -4930,7 +4930,7 @@ equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
 
 /* Return how many bits covers PIECE EXPR_LIST.  */
 
-static int
+static HOST_WIDE_INT
 decl_piece_bitsize (rtx piece)
 {
   int ret = (int) GET_MODE (piece);
@@ -4958,7 +4958,7 @@ decl_piece_varloc_ptr (rtx piece)
 static rtx
 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
 {
-  if (bitsize <= (int) MAX_MACHINE_MODE)
+  if (bitsize > 0 && bitsize <= (int) MAX_MACHINE_MODE)
     return alloc_EXPR_LIST (bitsize, loc_note, next);
   else
     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
@@ -4997,7 +4997,7 @@ adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
                   HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
                   HOST_WIDE_INT bitsize, rtx loc_note)
 {
-  int diff;
+  HOST_WIDE_INT diff;
   bool copy = inner != NULL;
 
   if (copy)
@@ -5137,7 +5137,7 @@ add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
     {
       struct var_loc_node *last = temp->last, *unused = NULL;
       rtx *piece_loc = NULL, last_loc_note;
-      int piece_bitpos = 0;
+      HOST_WIDE_INT piece_bitpos = 0;
       if (last->next)
        {
          last = last->next;
@@ -5148,7 +5148,7 @@ add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
          piece_loc = &last->loc;
          do
            {
-             int cur_bitsize = decl_piece_bitsize (*piece_loc);
+             HOST_WIDE_INT cur_bitsize = decl_piece_bitsize (*piece_loc);
              if (piece_bitpos + cur_bitsize > bitpos)
                break;
              piece_bitpos += cur_bitsize;
@@ -13573,7 +13573,7 @@ static dw_loc_descr_ref
 dw_sra_loc_expr (tree decl, rtx loc)
 {
   rtx p;
-  unsigned int padsize = 0;
+  unsigned HOST_WIDE_INT padsize = 0;
   dw_loc_descr_ref descr, *descr_tail;
   unsigned HOST_WIDE_INT decl_size;
   rtx varloc;
@@ -13589,11 +13589,11 @@ dw_sra_loc_expr (tree decl, rtx loc)
 
   for (p = loc; p; p = XEXP (p, 1))
     {
-      unsigned int bitsize = decl_piece_bitsize (p);
+      unsigned HOST_WIDE_INT bitsize = decl_piece_bitsize (p);
       rtx loc_note = *decl_piece_varloc_ptr (p);
       dw_loc_descr_ref cur_descr;
       dw_loc_descr_ref *tail, last = NULL;
-      unsigned int opsize = 0;
+      unsigned HOST_WIDE_INT opsize = 0;
 
       if (loc_note == NULL_RTX
          || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
@@ -19196,6 +19196,9 @@ gen_producer_string (void)
       case OPT__sysroot_:
       case OPT_nostdinc:
       case OPT_nostdinc__:
+      case OPT_fpreprocessed:
+      case OPT_fltrans_output_list_:
+      case OPT_fresolution_:
        /* Ignore these.  */
        continue;
       default:
@@ -20096,6 +20099,28 @@ is_naming_typedef_decl (const_tree decl)
              != TYPE_NAME (TREE_TYPE (decl))));
 }
 
+/* Looks up the DIE for a context.  */
+
+static inline dw_die_ref
+lookup_context_die (tree context)
+{
+  if (context)
+    {
+      /* Find die that represents this context.  */
+      if (TYPE_P (context))
+       {
+         context = TYPE_MAIN_VARIANT (context);
+         dw_die_ref ctx = lookup_type_die (context);
+         if (!ctx)
+           return NULL;
+         return strip_naming_typedef (context, ctx);
+       }
+      else
+       return lookup_decl_die (context);
+    }
+  return comp_unit_die ();
+}
+
 /* Returns the DIE for a context.  */
 
 static inline dw_die_ref
@@ -23405,8 +23430,25 @@ resolve_addr (dw_die_ref die)
                && DECL_EXTERNAL (tdecl)
                && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE)
              {
-               force_decl_die (tdecl);
-               tdie = lookup_decl_die (tdecl);
+               dw_die_ref cdie;
+               if (!in_lto_p)
+                 {
+                   force_decl_die (tdecl);
+                   tdie = lookup_decl_die (tdecl);
+                 }
+               else if ((cdie = lookup_context_die (DECL_CONTEXT (tdecl))))
+                 {
+                   /* Creating a full DIE for tdecl is overly expensive and
+                      at this point even wrong when in the LTO phase
+                      as it can end up generating new type DIEs we didn't
+                      output and thus optimize_external_refs will crash.  */
+                   tdie = new_die (DW_TAG_subprogram, cdie, NULL_TREE);
+                   add_AT_flag (tdie, DW_AT_external, 1);
+                   add_AT_flag (tdie, DW_AT_declaration, 1);
+                   add_linkage_attr (tdie, tdecl);
+                   add_name_and_src_coords_attributes (tdie, tdecl);
+                   equate_decl_number_to_die (tdecl, tdie);
+                 }
              }
            if (tdie)
              {
@@ -23984,8 +24026,13 @@ dwarf2out_finish (const char *filename)
   gen_remaining_tmpl_value_param_die_attribute ();
 
   /* Add the name for the main input file now.  We delayed this from
-     dwarf2out_init to avoid complications with PCH.  */
-  add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
+     dwarf2out_init to avoid complications with PCH.
+     For LTO produced units use a fixed artificial name to avoid
+     leaking tempfile names into the dwarf.  */
+  if (!in_lto_p)
+    add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
+  else
+    add_name_attribute (comp_unit_die (), "<artificial>");
   if (!IS_ABSOLUTE_PATH (filename) || targetm.force_at_comp_dir)
     add_comp_dir_attribute (comp_unit_die ());
   else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
index 696fef9..a8e6452 100644 (file)
@@ -201,7 +201,7 @@ struct GTY(()) dw_val_node {
 /* Locations in memory are described using a sequence of stack machine
    operations.  */
 
-struct GTY(()) dw_loc_descr_node {
+struct GTY((chain_next ("%h.dw_loc_next"))) dw_loc_descr_node {
   dw_loc_descr_ref dw_loc_next;
   ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
   /* Used to distinguish DW_OP_addr with a direct symbol relocation
index 6e9975d..57d476e 100644 (file)
@@ -463,7 +463,7 @@ strict_volatile_bitfield_p (rtx op0, unsigned HOST_WIDE_INT bitsize,
   /* Check for cases where the C++ memory model applies.  */
   if (bitregion_end != 0
       && (bitnum - bitnum % modesize < bitregion_start
-         || bitnum - bitnum % modesize + modesize > bitregion_end))
+         || bitnum - bitnum % modesize + modesize - 1 > bitregion_end))
     return false;
 
   return true;
@@ -3321,6 +3321,9 @@ expand_widening_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target,
       enum mult_variant variant;
       struct algorithm algorithm;
 
+      if (coeff == 0)
+       return CONST0_RTX (mode);
+
       /* Special case powers of two.  */
       if (EXACT_POWER_OF_2_OR_ZERO_P (coeff))
        {
index bf14114..de2bc72 100644 (file)
@@ -6576,11 +6576,12 @@ store_field (rtx target, HOST_WIDE_INT bitsize, HOST_WIDE_INT bitpos,
          && mode != TYPE_MODE (TREE_TYPE (exp)))
        temp = convert_modes (mode, TYPE_MODE (TREE_TYPE (exp)), temp, 1);
 
-      /* If the modes of TEMP and TARGET are both BLKmode, both
-        must be in memory and BITPOS must be aligned on a byte
-        boundary.  If so, we simply do a block copy.  Likewise
-        for a BLKmode-like TARGET.  */
-      if (GET_MODE (temp) == BLKmode
+      /* If TEMP is not a PARALLEL (see below) and its mode and that of TARGET
+        are both BLKmode, both must be in memory and BITPOS must be aligned
+        on a byte boundary.  If so, we simply do a block copy.  Likewise for
+        a BLKmode-like TARGET.  */
+      if (GET_CODE (temp) != PARALLEL
+         && GET_MODE (temp) == BLKmode
          && (GET_MODE (target) == BLKmode
              || (MEM_P (target)
                  && GET_MODE_CLASS (GET_MODE (target)) == MODE_INT
@@ -6872,7 +6873,7 @@ get_inner_reference (tree exp, HOST_WIDE_INT *pbitsize,
   if (offset)
     {
       /* Avoid returning a negative bitpos as this may wreak havoc later.  */
-      if (bit_offset.is_negative ())
+      if (bit_offset.is_negative () || !bit_offset.fits_shwi ())
         {
          double_int mask
            = double_int::mask (BITS_PER_UNIT == 8
@@ -7630,11 +7631,13 @@ expand_expr_addr_expr_1 (tree exp, rtx target, enum machine_mode tmode,
       break;
 
     case COMPOUND_LITERAL_EXPR:
-      /* Allow COMPOUND_LITERAL_EXPR in initializers, if e.g.
-        rtl_for_decl_init is called on DECL_INITIAL with
-        COMPOUNT_LITERAL_EXPRs in it, they aren't gimplified.  */
-      if (modifier == EXPAND_INITIALIZER
-         && COMPOUND_LITERAL_EXPR_DECL (exp))
+      /* Allow COMPOUND_LITERAL_EXPR in initializers or coming from
+        initializers, if e.g. rtl_for_decl_init is called on DECL_INITIAL
+        with COMPOUND_LITERAL_EXPRs in it, or ARRAY_REF on a const static
+        array with address of COMPOUND_LITERAL_EXPR in DECL_INITIAL;
+        the initializers aren't gimplified.  */
+      if (COMPOUND_LITERAL_EXPR_DECL (exp)
+         && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp)))
        return expand_expr_addr_expr_1 (COMPOUND_LITERAL_EXPR_DECL (exp),
                                        target, tmode, modifier, as);
       /* FALLTHRU */
@@ -9990,7 +9993,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
        tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
                                        &mode1, &unsignedp, &volatilep, true);
        rtx orig_op0, memloc;
-       bool mem_attrs_from_type = false;
+       bool clear_mem_expr = false;
 
        /* If we got back the original object, something is wrong.  Perhaps
           we are evaluating an expression too early.  In any event, don't
@@ -10086,7 +10089,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
            memloc = assign_temp (TREE_TYPE (tem), 1, 1);
            emit_move_insn (memloc, op0);
            op0 = memloc;
-           mem_attrs_from_type = true;
+           clear_mem_expr = true;
          }
 
        if (offset)
@@ -10271,17 +10274,17 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
        if (op0 == orig_op0)
          op0 = copy_rtx (op0);
 
-       /* If op0 is a temporary because of forcing to memory, pass only the
-          type to set_mem_attributes so that the original expression is never
-          marked as ADDRESSABLE through MEM_EXPR of the temporary.  */
-       if (mem_attrs_from_type)
-         set_mem_attributes (op0, type, 0);
-       else
-         set_mem_attributes (op0, exp, 0);
+       set_mem_attributes (op0, exp, 0);
 
        if (REG_P (XEXP (op0, 0)))
          mark_reg_pointer (XEXP (op0, 0), MEM_ALIGN (op0));
 
+       /* If op0 is a temporary because the original expressions was forced
+          to memory, clear MEM_EXPR so that the original expression cannot
+          be marked as addressable through MEM_EXPR of the temporary.  */
+       if (clear_mem_expr)
+         set_mem_expr (op0, NULL_TREE);
+
        MEM_VOLATILE_P (op0) |= volatilep;
        if (mode == mode1 || mode1 == BLKmode || mode1 == tmode
            || modifier == EXPAND_CONST_ADDRESS
index 802c021..8e32c72 100644 (file)
@@ -7941,6 +7941,11 @@ fold_unary_loc (location_t loc, enum tree_code code, tree type, tree op0)
        return fold_convert_loc (loc, type, op0);
       return NULL_TREE;
 
+    case NON_LVALUE_EXPR:
+      if (!maybe_lvalue_p (op0))
+       return fold_convert_loc (loc, type, op0);
+      return NULL_TREE;
+
     CASE_CONVERT:
     case FLOAT_EXPR:
     case FIX_TRUNC_EXPR:
@@ -8006,16 +8011,12 @@ fold_unary_loc (location_t loc, enum tree_code code, tree type, tree op0)
             (for integers).  Avoid this if the final type is a pointer since
             then we sometimes need the middle conversion.  Likewise if the
             final type has a precision not equal to the size of its mode.  */
-         if (((inter_int && inside_int)
-              || (inter_float && inside_float)
-              || (inter_vec && inside_vec))
+         if (((inter_int && inside_int) || (inter_float && inside_float))
+             && (final_int || final_float)
              && inter_prec >= inside_prec
-             && (inter_float || inter_vec
-                 || inter_unsignedp == inside_unsignedp)
+             && (inter_float || inter_unsignedp == inside_unsignedp)
              && ! (final_prec != GET_MODE_PRECISION (TYPE_MODE (type))
-                   && TYPE_MODE (type) == TYPE_MODE (inter_type))
-             && ! final_ptr
-             && (! final_vec || inter_prec == inside_prec))
+                   && TYPE_MODE (type) == TYPE_MODE (inter_type)))
            return fold_build1_loc (loc, code, type, TREE_OPERAND (op0, 0));
 
          /* If we have a sign-extension of a zero-extended value, we can
@@ -8204,7 +8205,7 @@ fold_unary_loc (location_t loc, enum tree_code code, tree type, tree op0)
            }
        }
 
-      tem = fold_convert_const (code, type, op0);
+      tem = fold_convert_const (code, type, arg0);
       return tem ? tem : NULL_TREE;
 
     case ADDR_SPACE_CONVERT_EXPR:
@@ -8324,9 +8325,14 @@ fold_unary_loc (location_t loc, enum tree_code code, tree type, tree op0)
                    && integer_onep (TREE_OPERAND (arg0, 1)))
                   || (TREE_CODE (arg0) == PLUS_EXPR
                       && integer_all_onesp (TREE_OPERAND (arg0, 1)))))
-       return fold_build1_loc (loc, NEGATE_EXPR, type,
-                           fold_convert_loc (loc, type,
-                                             TREE_OPERAND (arg0, 0)));
+       {
+         /* Perform the negation in ARG0's type and only then convert
+            to TYPE as to avoid introducing undefined behavior.  */
+         tree t = fold_build1_loc (loc, NEGATE_EXPR,
+                                   TREE_TYPE (TREE_OPERAND (arg0, 0)),
+                                   TREE_OPERAND (arg0, 0));
+         return fold_convert_loc (loc, type, t);
+       }
       /* Convert ~(X ^ Y) to ~X ^ Y or X ^ ~Y if ~X or ~Y simplify.  */
       else if (TREE_CODE (arg0) == BIT_XOR_EXPR
               && (tem = fold_unary_loc (loc, BIT_NOT_EXPR, type,
@@ -9024,7 +9030,8 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
       /* If the constant operation overflowed this can be
         simplified as a comparison against INT_MAX/INT_MIN.  */
       if (TREE_CODE (lhs) == INTEGER_CST
-         && TREE_OVERFLOW (lhs))
+         && TREE_OVERFLOW (lhs)
+         && !TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg0)))
        {
          int const1_sgn = tree_int_cst_sgn (const1);
          enum tree_code code2 = code;
@@ -10810,8 +10817,8 @@ fold_binary_loc (location_t loc,
 
              /* Don't introduce overflows through reassociation.  */
              if (!any_overflows
-                 && ((lit0 && TREE_OVERFLOW (lit0))
-                     || (minus_lit0 && TREE_OVERFLOW (minus_lit0))))
+                 && ((lit0 && TREE_OVERFLOW_P (lit0))
+                     || (minus_lit0 && TREE_OVERFLOW_P (minus_lit0))))
                return NULL_TREE;
 
              if (minus_lit0)
@@ -13295,7 +13302,7 @@ fold_binary_loc (location_t loc,
          tree itype = TREE_TYPE (arg00);
          if (TREE_INT_CST_HIGH (arg01) == 0
              && TREE_INT_CST_LOW (arg01)
-                == (unsigned HOST_WIDE_INT) (TYPE_PRECISION (itype) - 1))
+                == (unsigned HOST_WIDE_INT) (element_precision (itype) - 1))
            {
              if (TYPE_UNSIGNED (itype))
                {
index 648621c..e0a8816 100644 (file)
@@ -1,3 +1,190 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-06-26  Jakub Jelinek  <jakub@redhat.com>
+
+       * gfortranspec.c: Update displayed copyright years.
+
+2015-06-03  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-03-30  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/65597
+       * trans-openmp.c (gfc_trans_omp_do): For !simple simd with explicit
+       linear clause for the iterator set OMP_CLAUSE_LINEAR_NO_COPYIN.
+       For implcitly added !simple OMP_CLAUSE_LINEAR set it too.  Use step 1
+       instead of the original step on the new iterator - count.
+
+2015-04-14  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/56674
+       PR fortran/58813
+       PR fortran/59016
+       PR fortran/59024
+       * symbol.c (save_symbol_data, gfc_save_symbol_data): Rename the
+       former to the latter and make it non-static.  Update callers.
+       * gfortran.h (gfc_save_symbol_data): New prototype.
+       * decl.c (gfc_match_decl_type_spec): Call 'gfc_save_symbol_data'
+       before modifying symbols 'sym' and 'dt_sym'.
+
+2015-03-23  Andre Vehreschild  <vehre@gmx.de>
+           Janus Weil  <janus@gcc.gnu.org>
+
+       Backported from mainline
+       PR fortran/60255
+       Initial patch version: Janus Weil
+       * class.c (gfc_get_len_component): New.
+       (gfc_build_class_symbol): Add _len component to unlimited
+       polymorphic entities.
+       (find_intrinsic_vtab): Removed emitting of error message.
+       * gfortran.h: Added prototype for gfc_get_len_component.
+       * simplify.c (gfc_simplify_len): Use _len component where
+       available.
+       * trans-expr.c (gfc_class_len_get): New.
+       (gfc_conv_intrinsic_to_class): Add handling for deferred
+       character arrays.
+       (gfc_conv_structure): Treat _len component correctly.
+       (gfc_conv_expr): Prevent bind_c handling when not required.
+       (gfc_trans_pointer_assignment): Propagate _len component.
+       * trans-stmt.c (class_has_len_component): New.
+       (trans_associate_var): _len component treatement for associate
+       context.
+       (gfc_trans_allocate): Same as for trans_associate_var()
+       * trans.h: Add prototype for gfc_class_len_get.
+
+2015-03-21  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/61138
+       * trans-expr.c (gfc_trans_pointer_assignment): Clear DESCRIPTOR_ONLY
+       field before reusing LSE.
+
+2015-03-19  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/59198
+       * trans-types.c (gfc_get_derived_type): If an abstract derived
+       type with procedure pointer components has no other type of
+       component, return the backend_decl. Otherwise build the
+       components if any of the non-procedure pointer components have
+       no backend_decl.
+
+2015-03-12  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/60898
+       * resolve.c (resolve_symbol): Check that the symbol found by
+       name lookup really is the current symbol being resolved.
+
+2015-03-10  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backported from mainline
+       PR fortran/65024
+       * trans-expr.c (gfc_conv_component_ref): If the component
+       backend declaration is missing and the derived type symbol is
+       available in the reference, call gfc_build_derived_type.
+
+2015-02-13  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/63744
+       * module.c (check_for_ambiguous): Change argument type
+       from gfc_symbol to gfc_symtree.  Check local (symtree) name
+       instead of original (symbol) name.
+       (read_module): Update caller.
+
+2015-02-12  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backported from mainline
+       2015-02-12  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/64932
+       * trans-stmt.c (gfc_trans_deallocate): If a component array
+       expression is not a descriptor type and it is a derived type
+       that has allocatable components and is not finalizable, then
+       deallocate the allocatable components.
+
+2015-02-03  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       * intrinsic.texi (CO_ASSOCIATED): c_prt_1 should be c_ptr_1.
+
+2015-01-27  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/62044
+       * resolve.c (resolve_allocate_expr): If the default initializer
+       is NULL, keep the original MOLD expression so that the correct
+       typespec is available.
+
+2015-01-27  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/64771
+       * interface.c (check_dummy_characteristics): Fix coarray handling.
+
+2015-01-26  Janus Weil  <janus@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/64230
+       * class.c (finalize_component): New argument 'sub_ns'. Insert code to
+       check if 'expr' is associated.
+       (generate_finalization_wrapper): Rename 'ptr' symbols to 'ptr1' and
+       'ptr2'. Pass 'sub_ns' to finalize_component.
+
+2015-01-24  Thomas Koenig  <tkoenig@netcologne.de>
+
+       Backport from trunk
+       PR fortran/57023
+       * dependency.c (callback_dummy_intent_not_int):  New function.
+       (dummy_intent_not_in):  New function.
+       (gfc_full_array_ref_p):  Use dummy_intent_not_in.
+
+2015-01-24  Janus Weil  <janus@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/60922
+       * class.c (finalize_component): Apply the check for 'fini_coarray' only
+       to coarray components.
+
+2015-01-14  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-01-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/64528
+       * trans-decl.c (create_function_arglist): Don't set TREE_READONLY
+       on dummy args with VALUE attribute.
+
+2015-01-12  Janus Weil  <janus@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/63733
+       * interface.c (gfc_extend_expr): Look for type-bound operators before
+       non-typebound ones.
+
+2015-01-08  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       Backport from trunk
+       PR fortran/56867
+       * trans-array.c (gfc_conv_resolve_dependencies):  Also check
+       dependencies when there may be substrings of character arrays.
+
+2014-12-23  Janus Weil  <janus@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/64244
+       * resolve.c (resolve_typebound_call): New argument to pass out the
+       non-overridable attribute of the specific procedure.
+       (resolve_typebound_subroutine): Get overridable flag from
+       resolve_typebound_call.
+
+2014-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-11-24  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/63938
+       * trans-openmp.c (gfc_trans_omp_atomic): Make sure lhsaddr is
+       simple enough for goa_lhs_expr_p.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 346aee6..cd0330a 100644 (file)
@@ -34,6 +34,12 @@ along with GCC; see the file COPYING3.  If not see
              (pointer/allocatable/dimension/...).
     * _vptr: A pointer to the vtable entry (see below) of the dynamic type.
 
+    Only for unlimited polymorphic classes:
+    * _len:  An integer(4) to store the string length when the unlimited
+             polymorphic pointer is used to point to a char array.  The '_len'
+             component will be zero when no character array is stored in
+             '_data'.
+
    For each derived type we set up a "vtable" entry, i.e. a structure with the
    following fields:
     * _hash:     A hash value serving as a unique identifier for this type.
@@ -544,10 +550,48 @@ gfc_intrinsic_hash_value (gfc_typespec *ts)
 }
 
 
+/* Get the _len component from a class/derived object storing a string.
+   For unlimited polymorphic entities a ref to the _data component is available
+   while a ref to the _len component is needed.  This routine traverses the
+   ref-chain and strips the last ref to a _data from it replacing it with a
+   ref to the _len component.  */
+
+gfc_expr *
+gfc_get_len_component (gfc_expr *e)
+{
+  gfc_expr *ptr;
+  gfc_ref *ref, **last;
+
+  ptr = gfc_copy_expr (e);
+
+  /* We need to remove the last _data component ref from ptr.  */
+  last = &(ptr->ref);
+  ref = ptr->ref;
+  while (ref)
+    {
+      if (!ref->next
+         && ref->type == REF_COMPONENT
+         && strcmp ("_data", ref->u.c.component->name)== 0)
+       {
+         gfc_free_ref_list (ref);
+         *last = NULL;
+         break;
+       }
+      last = &(ref->next);
+      ref = ref->next;
+    }
+  /* And replace if with a ref to the _len component.  */
+  gfc_add_component_ref (ptr, "_len");
+  return ptr;
+}
+
+
 /* Build a polymorphic CLASS entity, using the symbol that comes from
    build_sym. A CLASS entity is represented by an encapsulating type,
    which contains the declared type as '_data' component, plus a pointer
-   component '_vptr' which determines the dynamic type.  */
+   component '_vptr' which determines the dynamic type.  When this CLASS
+   entity is unlimited polymorphic, then also add a component '_len' to
+   store the length of string when that is stored in it.  */
 
 bool
 gfc_build_class_symbol (gfc_typespec *ts, symbol_attribute *attr,
@@ -645,19 +689,28 @@ gfc_build_class_symbol (gfc_typespec *ts, symbol_attribute *attr,
       if (!gfc_add_component (fclass, "_vptr", &c))
        return false;
       c->ts.type = BT_DERIVED;
+      c->attr.access = ACCESS_PRIVATE;
+      c->attr.pointer = 1;
 
       if (ts->u.derived->attr.unlimited_polymorphic)
        {
          vtab = gfc_find_derived_vtab (ts->u.derived);
          gcc_assert (vtab);
          c->ts.u.derived = vtab->ts.u.derived;
+
+         /* Add component '_len'.  Only unlimited polymorphic pointers may
+             have a string assigned to them, i.e., only those need the _len
+             component.  */
+         if (!gfc_add_component (fclass, "_len", &c))
+           return false;
+         c->ts.type = BT_INTEGER;
+         c->ts.kind = 4;
+         c->attr.access = ACCESS_PRIVATE;
+         c->attr.artificial = 1;
        }
       else
        /* Build vtab later.  */
        c->ts.u.derived = NULL;
-
-      c->attr.access = ACCESS_PRIVATE;
-      c->attr.pointer = 1;
     }
 
   if (!ts->u.derived->attr.unlimited_polymorphic)
@@ -828,7 +881,8 @@ comp_is_finalizable (gfc_component *comp)
 
 static void
 finalize_component (gfc_expr *expr, gfc_symbol *derived, gfc_component *comp,
-                   gfc_symbol *stat, gfc_symbol *fini_coarray, gfc_code **code)
+                   gfc_symbol *stat, gfc_symbol *fini_coarray, gfc_code **code,
+                   gfc_namespace *sub_ns)
 {
   gfc_expr *e;
   gfc_ref *ref;
@@ -875,7 +929,7 @@ finalize_component (gfc_expr *expr, gfc_symbol *derived, gfc_component *comp,
       /* Add IF (fini_coarray).  */
       if (comp->attr.codimension
          || (comp->ts.type == BT_CLASS && CLASS_DATA (comp)
-             && CLASS_DATA (comp)->attr.allocatable))
+             && CLASS_DATA (comp)->attr.codimension))
        {
          block = gfc_get_code (EXEC_IF);
          if (*code)
@@ -897,15 +951,32 @@ finalize_component (gfc_expr *expr, gfc_symbol *derived, gfc_component *comp,
       dealloc->ext.alloc.list->expr = e;
       dealloc->expr1 = gfc_lval_expr_from_sym (stat);
 
+      gfc_code *cond = gfc_get_code (EXEC_IF);
+      cond->block = gfc_get_code (EXEC_IF);
+      cond->block->expr1 = gfc_get_expr ();
+      cond->block->expr1->expr_type = EXPR_FUNCTION;
+      gfc_get_sym_tree ("associated", sub_ns, &cond->block->expr1->symtree, false);
+      cond->block->expr1->symtree->n.sym->attr.flavor = FL_PROCEDURE;
+      cond->block->expr1->symtree->n.sym->attr.intrinsic = 1;
+      cond->block->expr1->symtree->n.sym->result = cond->block->expr1->symtree->n.sym;
+      gfc_commit_symbol (cond->block->expr1->symtree->n.sym);
+      cond->block->expr1->ts.type = BT_LOGICAL;
+      cond->block->expr1->ts.kind = gfc_default_logical_kind;
+      cond->block->expr1->value.function.isym = gfc_intrinsic_function_by_id (GFC_ISYM_ASSOCIATED);
+      cond->block->expr1->value.function.actual = gfc_get_actual_arglist ();
+      cond->block->expr1->value.function.actual->expr = gfc_copy_expr (expr);
+      cond->block->expr1->value.function.actual->next = gfc_get_actual_arglist ();
+      cond->block->next = dealloc;
+
       if (block)
-       block->next = dealloc;
+       block->next = cond;
       else if (*code)
        {
-         (*code)->next = dealloc;
+         (*code)->next = cond;
          (*code) = (*code)->next;
        }
       else
-       (*code) = dealloc;
+       (*code) = cond;
     }
   else if (comp->ts.type == BT_DERIVED
            && comp->ts.u.derived->f2k_derived
@@ -941,7 +1012,8 @@ finalize_component (gfc_expr *expr, gfc_symbol *derived, gfc_component *comp,
       gfc_component *c;
 
       for (c = comp->ts.u.derived->components; c; c = c->next)
-       finalize_component (e, comp->ts.u.derived, c, stat, fini_coarray, code);
+       finalize_component (e, comp->ts.u.derived, c, stat, fini_coarray, code,
+                           sub_ns);
       gfc_free_expr (e);
     }
 }
@@ -1874,7 +1946,7 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns,
     {
       gfc_finalizer *fini, *fini_elem = NULL;
 
-      gfc_get_symbol ("ptr", sub_ns, &ptr);
+      gfc_get_symbol ("ptr1", sub_ns, &ptr);
       ptr->ts.type = BT_DERIVED;
       ptr->ts.u.derived = derived;
       ptr->attr.flavor = FL_VARIABLE;
@@ -1998,7 +2070,7 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns,
 
       if (!ptr)
        {
-         gfc_get_symbol ("ptr", sub_ns, &ptr);
+         gfc_get_symbol ("ptr2", sub_ns, &ptr);
          ptr->ts.type = BT_DERIVED;
          ptr->ts.u.derived = derived;
          ptr->attr.flavor = FL_VARIABLE;
@@ -2047,7 +2119,7 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns,
            continue;
 
          finalize_component (gfc_lval_expr_from_sym (ptr), derived, comp,
-                             stat, fini_coarray, &block);
+                             stat, fini_coarray, &block, sub_ns);
          if (!last_code->block->next)
            last_code->block->next = block;
        }
@@ -2415,18 +2487,9 @@ find_intrinsic_vtab (gfc_typespec *ts)
   gfc_symbol *copy = NULL, *src = NULL, *dst = NULL;
   int charlen = 0;
 
-  if (ts->type == BT_CHARACTER)
-    {
-      if (ts->deferred)
-       {
-         gfc_error ("TODO: Deferred character length variable at %C cannot "
-                    "yet be associated with unlimited polymorphic entities");
-         return NULL;
-       }
-      else if (ts->u.cl && ts->u.cl->length
-              && ts->u.cl->length->expr_type == EXPR_CONSTANT)
-       charlen = mpz_get_si (ts->u.cl->length->value.integer);
-    }
+  if (ts->type == BT_CHARACTER && !ts->deferred && ts->u.cl && ts->u.cl->length
+      && ts->u.cl->length->expr_type == EXPR_CONSTANT)
+    charlen = mpz_get_si (ts->u.cl->length->value.integer);
 
   /* Find the top-level namespace.  */
   for (ns = gfc_current_ns; ns; ns = ns->parent)
index eebecd5..ea1b20e 100644 (file)
@@ -2851,6 +2851,7 @@ gfc_match_decl_type_spec (gfc_typespec *ts, int implicit_flag)
       return MATCH_ERROR;
     }
 
+  gfc_save_symbol_data (sym);
   gfc_set_sym_referenced (sym);
   if (!sym->attr.generic
       && !gfc_add_generic (&sym->attr, sym->name, NULL))
@@ -2875,6 +2876,8 @@ gfc_match_decl_type_spec (gfc_typespec *ts, int implicit_flag)
       sym->generic = intr;
       sym->attr.if_source = IFSRC_DECL;
     }
+  else
+    gfc_save_symbol_data (dt_sym);
 
   gfc_set_sym_referenced (dt_sym);
 
index f9b975a..3c7d579 100644 (file)
@@ -1848,11 +1848,40 @@ gfc_check_element_vs_element (gfc_ref *lref, gfc_ref *rref, int n)
   return GFC_DEP_EQUAL;
 }
 
+/* Callback function for checking if an expression depends on a
+   dummy variable which is any other than INTENT(IN).  */
+
+static int
+callback_dummy_intent_not_in (gfc_expr **ep,
+                             int *walk_subtrees ATTRIBUTE_UNUSED,
+                             void *data ATTRIBUTE_UNUSED)
+{
+  gfc_expr *e = *ep;
+
+  if (e->expr_type == EXPR_VARIABLE && e->symtree
+      && e->symtree->n.sym->attr.dummy)
+    return e->symtree->n.sym->attr.intent != INTENT_IN;
+  else
+    return 0;
+}
+
+/* Auxiliary function to check if subexpressions have dummy variables which
+   are not intent(in).
+*/
+
+static bool
+dummy_intent_not_in (gfc_expr **ep)
+{
+  return gfc_expr_walker (ep, callback_dummy_intent_not_in, NULL);
+}
 
 /* Determine if an array ref, usually an array section specifies the
    entire array.  In addition, if the second, pointer argument is
    provided, the function will return true if the reference is
-   contiguous; eg. (:, 1) gives true but (1,:) gives false.  */
+   contiguous; eg. (:, 1) gives true but (1,:) gives false. 
+   If one of the bounds depends on a dummy variable which is
+   not INTENT(IN), also return false, because the user may
+   have changed the variable.  */
 
 bool
 gfc_full_array_ref_p (gfc_ref *ref, bool *contiguous)
@@ -1916,14 +1945,16 @@ gfc_full_array_ref_p (gfc_ref *ref, bool *contiguous)
          && (!ref->u.ar.as
              || !ref->u.ar.as->lower[i]
              || gfc_dep_compare_expr (ref->u.ar.start[i],
-                                      ref->u.ar.as->lower[i])))
+                                      ref->u.ar.as->lower[i])
+             || dummy_intent_not_in (&ref->u.ar.start[i])))
        lbound_OK = false;
       /* Check the upper bound.  */
       if (ref->u.ar.end[i]
          && (!ref->u.ar.as
              || !ref->u.ar.as->upper[i]
              || gfc_dep_compare_expr (ref->u.ar.end[i],
-                                      ref->u.ar.as->upper[i])))
+                                      ref->u.ar.as->upper[i])
+             || dummy_intent_not_in (&ref->u.ar.end[i])))
        ubound_OK = false;
       /* Check the stride.  */
       if (ref->u.ar.stride[i]
index a193f53..11d3996 100644 (file)
@@ -2815,6 +2815,7 @@ bool verify_bind_c_derived_type (gfc_symbol *);
 bool verify_com_block_vars_c_interop (gfc_common_head *);
 gfc_symtree *generate_isocbinding_symbol (const char *, iso_c_binding_symbol,
                                          const char *, gfc_symtree *, bool);
+void gfc_save_symbol_data (gfc_symbol *);
 int gfc_get_sym_tree (const char *, gfc_namespace *, gfc_symtree **, bool);
 int gfc_get_ha_symbol (const char *, gfc_symbol **);
 int gfc_get_ha_sym_tree (const char *, gfc_symtree **);
@@ -3173,6 +3174,7 @@ bool gfc_is_class_scalar_expr (gfc_expr *);
 bool gfc_is_class_container_ref (gfc_expr *e);
 gfc_expr *gfc_class_initializer (gfc_typespec *, gfc_expr *);
 unsigned int gfc_hash_value (gfc_symbol *);
+gfc_expr *gfc_get_len_component (gfc_expr *e);
 bool gfc_build_class_symbol (gfc_typespec *, symbol_attribute *,
                             gfc_array_spec **);
 gfc_symbol *gfc_find_derived_vtab (gfc_symbol *);
index e62e3f6..0a5fac1 100644 (file)
@@ -5925,7 +5925,7 @@ File: gfortran.info,  Node: C_ASSOCIATED,  Next: C_F_POINTER,  Prev: BTEST,  Up:
 ============================================
 
 _Description_:
-     'C_ASSOCIATED(c_prt_1[, c_ptr_2])' determines the status of the C
+     'C_ASSOCIATED(c_ptr_1[, c_ptr_2])' determines the status of the C
      pointer C_PTR_1 or if C_PTR_1 is associated with the target
      C_PTR_2.
 
@@ -5936,7 +5936,7 @@ _Class_:
      Inquiry function
 
 _Syntax_:
-     'RESULT = C_ASSOCIATED(c_prt_1[, c_ptr_2])'
+     'RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])'
 
 _Arguments_:
      C_PTR_1     Scalar of the type 'C_PTR' or 'C_FUNPTR'.
index cceee6d..1cf7037 100644 (file)
@@ -276,7 +276,7 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
 
        case OPT__version:
          printf ("GNU Fortran %s%s\n", pkgversion_string, version_string);
-         printf ("Copyright %s 2014 Free Software Foundation, Inc.\n\n",
+         printf ("Copyright %s 2015 Free Software Foundation, Inc.\n\n",
                  _("(C)"));
          printf (_("GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n\
 You may redistribute copies of GNU Fortran\n\
index 21af23b..db20475 100644 (file)
@@ -1204,8 +1204,15 @@ check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
          return false;
        }
 
+      if (s1->as->corank != s2->as->corank)
+       {
+         snprintf (errmsg, err_len, "Corank mismatch in argument '%s' (%i/%i)",
+                   s1->name, s1->as->corank, s2->as->corank);
+         return false;
+       }
+
       if (s1->as->type == AS_EXPLICIT)
-       for (i = 0; i < s1->as->rank + s1->as->corank; i++)
+       for (i = 0; i < s1->as->rank + MAX (0, s1->as->corank-1); i++)
          {
            shape1 = gfc_subtract (gfc_copy_expr (s1->as->upper[i]),
                                  gfc_copy_expr (s1->as->lower[i]));
@@ -1219,8 +1226,12 @@ check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
              case -1:
              case  1:
              case -3:
-               snprintf (errmsg, err_len, "Shape mismatch in dimension %i of "
-                         "argument '%s'", i + 1, s1->name);
+               if (i < s1->as->rank)
+                 snprintf (errmsg, err_len, "Shape mismatch in dimension %i of"
+                           " argument '%s'", i + 1, s1->name);
+               else
+                 snprintf (errmsg, err_len, "Shape mismatch in codimension %i "
+                           "of argument '%s'", i - s1->as->rank + 1, s1->name);
                return false;
 
              case -2:
@@ -3675,6 +3686,8 @@ gfc_extend_expr (gfc_expr *e)
   gfc_user_op *uop;
   gfc_intrinsic_op i;
   const char *gname;
+  gfc_typebound_proc* tbo;
+  gfc_expr* tb_base;
 
   sym = NULL;
 
@@ -3691,6 +3704,48 @@ gfc_extend_expr (gfc_expr *e)
 
   i = fold_unary_intrinsic (e->value.op.op);
 
+  /* See if we find a matching type-bound operator.  */
+  if (i == INTRINSIC_USER)
+    tbo = matching_typebound_op (&tb_base, actual,
+                                 i, e->value.op.uop->name, &gname);
+  else
+    switch (i)
+      {
+#define CHECK_OS_COMPARISON(comp) \
+  case INTRINSIC_##comp: \
+  case INTRINSIC_##comp##_OS: \
+    tbo = matching_typebound_op (&tb_base, actual, \
+                                INTRINSIC_##comp, NULL, &gname); \
+    if (!tbo) \
+      tbo = matching_typebound_op (&tb_base, actual, \
+                                  INTRINSIC_##comp##_OS, NULL, &gname); \
+    break;
+       CHECK_OS_COMPARISON(EQ)
+       CHECK_OS_COMPARISON(NE)
+       CHECK_OS_COMPARISON(GT)
+       CHECK_OS_COMPARISON(GE)
+       CHECK_OS_COMPARISON(LT)
+       CHECK_OS_COMPARISON(LE)
+#undef CHECK_OS_COMPARISON
+
+       default:
+         tbo = matching_typebound_op (&tb_base, actual, i, NULL, &gname);
+         break;
+      }
+
+  /* If there is a matching typebound-operator, replace the expression with
+      a call to it and succeed.  */
+  if (tbo)
+    {
+      gcc_assert (tb_base);
+      build_compcall_for_operator (e, actual, tb_base, tbo, gname);
+
+      if (!gfc_resolve_expr (e))
+       return MATCH_ERROR;
+      else
+       return MATCH_YES;
+    }
   if (i == INTRINSIC_USER)
     {
       for (ns = gfc_current_ns; ns; ns = ns->parent)
@@ -3741,58 +3796,9 @@ gfc_extend_expr (gfc_expr *e)
 
   if (sym == NULL)
     {
-      gfc_typebound_proc* tbo;
-      gfc_expr* tb_base;
-
-      /* See if we find a matching type-bound operator.  */
-      if (i == INTRINSIC_USER)
-       tbo = matching_typebound_op (&tb_base, actual,
-                                    i, e->value.op.uop->name, &gname);
-      else
-       switch (i)
-         {
-#define CHECK_OS_COMPARISON(comp) \
-  case INTRINSIC_##comp: \
-  case INTRINSIC_##comp##_OS: \
-    tbo = matching_typebound_op (&tb_base, actual, \
-                                INTRINSIC_##comp, NULL, &gname); \
-    if (!tbo) \
-      tbo = matching_typebound_op (&tb_base, actual, \
-                                  INTRINSIC_##comp##_OS, NULL, &gname); \
-    break;
-           CHECK_OS_COMPARISON(EQ)
-           CHECK_OS_COMPARISON(NE)
-           CHECK_OS_COMPARISON(GT)
-           CHECK_OS_COMPARISON(GE)
-           CHECK_OS_COMPARISON(LT)
-           CHECK_OS_COMPARISON(LE)
-#undef CHECK_OS_COMPARISON
-
-           default:
-             tbo = matching_typebound_op (&tb_base, actual, i, NULL, &gname);
-             break;
-         }
-
-      /* If there is a matching typebound-operator, replace the expression with
-        a call to it and succeed.  */
-      if (tbo)
-       {
-         bool result;
-
-         gcc_assert (tb_base);
-         build_compcall_for_operator (e, actual, tb_base, tbo, gname);
-
-         result = gfc_resolve_expr (e);
-         if (!result)
-           return MATCH_ERROR;
-
-         return MATCH_YES;
-       }
-
       /* Don't use gfc_free_actual_arglist().  */
       free (actual->next);
       free (actual);
-
       return MATCH_NO;
     }
 
index eb6924c..8d003d6 100644 (file)
@@ -2231,7 +2231,7 @@ end program test_btest
 
 @table @asis
 @item @emph{Description}:
-@code{C_ASSOCIATED(c_prt_1[, c_ptr_2])} determines the status of the C pointer
+@code{C_ASSOCIATED(c_ptr_1[, c_ptr_2])} determines the status of the C pointer
 @var{c_ptr_1} or if @var{c_ptr_1} is associated with the target @var{c_ptr_2}.
 
 @item @emph{Standard}:
@@ -2241,7 +2241,7 @@ Fortran 2003 and later
 Inquiry function
 
 @item @emph{Syntax}:
-@code{RESULT = C_ASSOCIATED(c_prt_1[, c_ptr_2])}
+@code{RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])}
 
 @item @emph{Arguments}:
 @multitable @columnfractions .15 .70
index f50c5b7..26c4552 100644 (file)
@@ -4849,19 +4849,21 @@ read_cleanup (pointer_info *p)
 /* It is not quite enough to check for ambiguity in the symbols by
    the loaded symbol and the new symbol not being identical.  */
 static bool
-check_for_ambiguous (gfc_symbol *st_sym, pointer_info *info)
+check_for_ambiguous (gfc_symtree *st, pointer_info *info)
 {
   gfc_symbol *rsym;
   module_locus locus;
   symbol_attribute attr;
+  gfc_symbol *st_sym;
 
-  if (gfc_current_ns->proc_name && st_sym->name == gfc_current_ns->proc_name->name)
+  if (gfc_current_ns->proc_name && st->name == gfc_current_ns->proc_name->name)
     {
       gfc_error ("'%s' of module '%s', imported at %C, is also the name of the "
-                "current program unit", st_sym->name, module_name);
+                "current program unit", st->name, module_name);
       return true;
     }
 
+  st_sym = st->n.sym;
   rsym = info->u.rsym.sym;
   if (st_sym == rsym)
     return false;
@@ -5093,7 +5095,7 @@ read_module (void)
          if (st != NULL)
            {
              /* Check for ambiguous symbols.  */
-             if (check_for_ambiguous (st->n.sym, info))
+             if (check_for_ambiguous (st, info))
                st->ambiguous = 1;
              else
                info->u.rsym.symtree = st;
index c959f5d..1707e25 100644 (file)
@@ -1815,7 +1815,7 @@ resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype,
              && sym->ns->proc_name->attr.flavor != FL_MODULE)
            {
              if (!gfc_notify_std (GFC_STD_F2008, "Internal procedure '%s' is"
-                                  " used as actual argument at %L", 
+                                  " used as actual argument at %L",
                                   sym->name, &e->where))
                goto cleanup;
            }
@@ -2435,7 +2435,7 @@ resolve_global_procedure (gfc_symbol *sym, locus *where,
 
       if (!gfc_compare_interfaces (sym, def_sym, sym->name, 0, 1,
                                   reason, sizeof(reason), NULL, NULL))
-       {       
+       {
          gfc_error ("Interface mismatch in global procedure '%s' at %L: %s ",
                    sym->name, &sym->declared_at, reason);
          goto done;
@@ -2449,7 +2449,7 @@ resolve_global_procedure (gfc_symbol *sym, locus *where,
       if (sym->attr.if_source != IFSRC_IFBODY)
        gfc_procedure_use (def_sym, actual, where);
     }
-    
+
 done:
   gfc_errors_to_warnings (0);
 
@@ -2551,7 +2551,7 @@ generic:
 
   if (intr)
     {
-      if (!gfc_convert_to_structure_constructor (expr, intr->sym, NULL, 
+      if (!gfc_convert_to_structure_constructor (expr, intr->sym, NULL,
                                                 NULL, false))
        return false;
       return resolve_structure_cons (expr, 0);
@@ -2853,7 +2853,7 @@ resolve_function (gfc_expr *expr)
   no_formal_args = sym && is_external_proc (sym)
                       && gfc_sym_get_dummy_args (sym) == NULL;
 
-  if (!resolve_actual_arglist (expr->value.function.actual, 
+  if (!resolve_actual_arglist (expr->value.function.actual,
                               p, no_formal_args))
     {
       inquiry_argument = false;
@@ -4122,7 +4122,7 @@ gfc_resolve_index_1 (gfc_expr *index, int check_scalar,
     }
 
   if (index->ts.type == BT_REAL)
-    if (!gfc_notify_std (GFC_STD_LEGACY, "REAL array index at %L", 
+    if (!gfc_notify_std (GFC_STD_LEGACY, "REAL array index at %L",
                         &index->where))
       return false;
 
@@ -5590,7 +5590,7 @@ success:
 /* Resolve a call to a type-bound subroutine.  */
 
 static bool
-resolve_typebound_call (gfc_code* c, const char **name)
+resolve_typebound_call (gfc_code* c, const char **name, bool *overridable)
 {
   gfc_actual_arglist* newactual;
   gfc_symtree* target;
@@ -5614,6 +5614,10 @@ resolve_typebound_call (gfc_code* c, const char **name)
   if (!resolve_typebound_generic_call (c->expr1, name))
     return false;
 
+  /* Pass along the NON_OVERRIDABLE attribute of the specific TBP. */
+  if (overridable)
+    *overridable = !c->expr1->value.compcall.tbp->non_overridable;
+
   /* Transform into an ordinary EXEC_CALL for now.  */
 
   if (!resolve_typebound_static (c->expr1, &target, &newactual))
@@ -5778,7 +5782,7 @@ resolve_typebound_function (gfc_expr* e)
 
   /* Get the CLASS declared type.  */
   declared = get_declared_from_expr (&class_ref, &new_ref, e, true);
-  
+
   if (!resolve_fl_derived (declared))
     return false;
 
@@ -5873,7 +5877,7 @@ resolve_typebound_subroutine (gfc_code *code)
       if (c->ts.u.derived == NULL)
        c->ts.u.derived = gfc_find_derived_vtab (declared);
 
-      if (!resolve_typebound_call (code, &name))
+      if (!resolve_typebound_call (code, &name, NULL))
        return false;
 
       /* Use the generic name if it is there.  */
@@ -5905,7 +5909,7 @@ resolve_typebound_subroutine (gfc_code *code)
     }
 
   if (st == NULL)
-    return resolve_typebound_call (code, NULL);
+    return resolve_typebound_call (code, NULL, NULL);
 
   if (!resolve_ref (code->expr1))
     return false;
@@ -5918,10 +5922,10 @@ resolve_typebound_subroutine (gfc_code *code)
         || (!class_ref && st->n.sym->ts.type != BT_CLASS))
     {
       gfc_free_ref_list (new_ref);
-      return resolve_typebound_call (code, NULL);
+      return resolve_typebound_call (code, NULL, NULL);
     }
 
-  if (!resolve_typebound_call (code, &name))
+  if (!resolve_typebound_call (code, &name, &overridable))
     {
       gfc_free_ref_list (new_ref);
       return false;
@@ -5978,8 +5982,8 @@ resolve_ppc_call (gfc_code* c)
 
   c->ext.actual = c->expr1->value.compcall.actual;
 
-  if (!resolve_actual_arglist (c->ext.actual, comp->attr.proc, 
-                              !(comp->ts.interface 
+  if (!resolve_actual_arglist (c->ext.actual, comp->attr.proc,
+                              !(comp->ts.interface
                                 && comp->ts.interface->formal)))
     return false;
 
@@ -6013,8 +6017,8 @@ resolve_expr_ppc (gfc_expr* e)
   if (!resolve_ref (e))
     return false;
 
-  if (!resolve_actual_arglist (e->value.function.actual, comp->attr.proc, 
-                              !(comp->ts.interface 
+  if (!resolve_actual_arglist (e->value.function.actual, comp->attr.proc,
+                              !(comp->ts.interface
                                 && comp->ts.interface->formal)))
     return false;
 
@@ -6226,19 +6230,19 @@ gfc_resolve_iterator (gfc_iterator *iter, bool real_ok, bool own_scope)
   if (!gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable"))
     return false;
 
-  if (!gfc_check_vardef_context (iter->var, false, false, own_scope, 
+  if (!gfc_check_vardef_context (iter->var, false, false, own_scope,
                                 _("iterator variable")))
     return false;
 
-  if (!gfc_resolve_iterator_expr (iter->start, real_ok, 
+  if (!gfc_resolve_iterator_expr (iter->start, real_ok,
                                  "Start expression in DO loop"))
     return false;
 
-  if (!gfc_resolve_iterator_expr (iter->end, real_ok, 
+  if (!gfc_resolve_iterator_expr (iter->end, real_ok,
                                  "End expression in DO loop"))
     return false;
 
-  if (!gfc_resolve_iterator_expr (iter->step, real_ok, 
+  if (!gfc_resolve_iterator_expr (iter->step, real_ok,
                                  "Step expression in DO loop"))
     return false;
 
@@ -6496,10 +6500,10 @@ resolve_deallocate_expr (gfc_expr *e)
     }
 
   if (pointer
-      && !gfc_check_vardef_context (e, true, true, false, 
+      && !gfc_check_vardef_context (e, true, true, false,
                                    _("DEALLOCATE object")))
     return false;
-  if (!gfc_check_vardef_context (e, false, true, false, 
+  if (!gfc_check_vardef_context (e, false, true, false,
                                 _("DEALLOCATE object")))
     return false;
 
@@ -6849,10 +6853,10 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code)
   e2 = remove_last_array_ref (e);
   t = true;
   if (t && pointer)
-    t = gfc_check_vardef_context (e2, true, true, false, 
+    t = gfc_check_vardef_context (e2, true, true, false,
                                  _("ALLOCATE object"));
   if (t)
-    t = gfc_check_vardef_context (e2, false, true, false, 
+    t = gfc_check_vardef_context (e2, false, true, false,
                                  _("ALLOCATE object"));
   gfc_free_expr (e2);
   if (!t)
@@ -6895,9 +6899,12 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code)
     {
       /* Default initialization via MOLD (non-polymorphic).  */
       gfc_expr *rhs = gfc_default_initializer (&code->expr3->ts);
-      gfc_resolve_expr (rhs);
-      gfc_free_expr (code->expr3);
-      code->expr3 = rhs;
+      if (rhs != NULL)
+       {
+         gfc_resolve_expr (rhs);
+         gfc_free_expr (code->expr3);
+         code->expr3 = rhs;
+       }
     }
 
   if (e->ts.type == BT_CLASS && !unlimited && !UNLIMITED_POLY (code->expr3))
@@ -7051,7 +7058,7 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn)
   /* Check the stat variable.  */
   if (stat)
     {
-      gfc_check_vardef_context (stat, false, false, false, 
+      gfc_check_vardef_context (stat, false, false, false,
                                _("STAT variable"));
 
       if ((stat->ts.type != BT_INTEGER
@@ -8264,7 +8271,7 @@ resolve_transfer (gfc_code *code)
      code->ext.dt may be NULL if the TRANSFER is related to
      an INQUIRE statement -- but in this case, we are not reading, either.  */
   if (code->ext.dt && code->ext.dt->dt_io_kind->value.iokind == M_READ
-      && !gfc_check_vardef_context (exp, false, false, false, 
+      && !gfc_check_vardef_context (exp, false, false, false,
                                    _("item in READ")))
     return;
 
@@ -8394,7 +8401,7 @@ resolve_lock_unlock (gfc_code *code)
               &code->expr2->where);
 
   if (code->expr2
-      && !gfc_check_vardef_context (code->expr2, false, false, false, 
+      && !gfc_check_vardef_context (code->expr2, false, false, false,
                                    _("STAT variable")))
     return;
 
@@ -8406,7 +8413,7 @@ resolve_lock_unlock (gfc_code *code)
               &code->expr3->where);
 
   if (code->expr3
-      && !gfc_check_vardef_context (code->expr3, false, false, false, 
+      && !gfc_check_vardef_context (code->expr3, false, false, false,
                                    _("ERRMSG variable")))
     return;
 
@@ -8418,7 +8425,7 @@ resolve_lock_unlock (gfc_code *code)
               "variable", &code->expr4->where);
 
   if (code->expr4
-      && !gfc_check_vardef_context (code->expr4, false, false, false, 
+      && !gfc_check_vardef_context (code->expr4, false, false, false,
                                    _("ACQUIRED_LOCK variable")))
     return;
 }
@@ -9077,7 +9084,7 @@ resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
 
   if (rhs->is_boz
       && !gfc_notify_std (GFC_STD_GNU, "BOZ literal at %L outside "
-                         "a DATA statement and outside INT/REAL/DBLE/CMPLX", 
+                         "a DATA statement and outside INT/REAL/DBLE/CMPLX",
                          &code->loc))
     return false;
 
@@ -9878,7 +9885,7 @@ gfc_resolve_code (gfc_code *code, gfc_namespace *ns)
          if (!t)
            break;
 
-         if (!gfc_check_vardef_context (code->expr1, false, false, false, 
+         if (!gfc_check_vardef_context (code->expr1, false, false, false,
                                         _("assignment")))
            break;
 
@@ -10686,7 +10693,7 @@ resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
              return false;
            }
          else if (!gfc_notify_std (GFC_STD_F2003, "Scalar object "
-                                   "'%s' at %L may not be ALLOCATABLE", 
+                                   "'%s' at %L may not be ALLOCATABLE",
                                    sym->name, &sym->declared_at))
            return false;
        }
@@ -11017,8 +11024,8 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
              && !gfc_check_symbol_access (arg->sym->ts.u.derived)
              && !gfc_notify_std (GFC_STD_F2003, "'%s' is of a PRIVATE type "
                                  "and cannot be a dummy argument"
-                                 " of '%s', which is PUBLIC at %L", 
-                                 arg->sym->name, sym->name, 
+                                 " of '%s', which is PUBLIC at %L",
+                                 arg->sym->name, sym->name,
                                  &sym->declared_at))
            {
              /* Stop this message from recurring.  */
@@ -11040,8 +11047,8 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
                  && !gfc_notify_std (GFC_STD_F2003, "Procedure '%s' in "
                                      "PUBLIC interface '%s' at %L "
                                      "takes dummy arguments of '%s' which "
-                                     "is PRIVATE", iface->sym->name, 
-                                     sym->name, &iface->sym->declared_at, 
+                                     "is PRIVATE", iface->sym->name,
+                                     sym->name, &iface->sym->declared_at,
                                      gfc_typename(&arg->sym->ts)))
                {
                  /* Stop this message from recurring.  */
@@ -11064,8 +11071,8 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
                  && !gfc_notify_std (GFC_STD_F2003, "Procedure '%s' in "
                                      "PUBLIC interface '%s' at %L takes "
                                      "dummy arguments of '%s' which is "
-                                     "PRIVATE", iface->sym->name, 
-                                     sym->name, &iface->sym->declared_at, 
+                                     "PRIVATE", iface->sym->name,
+                                     sym->name, &iface->sym->declared_at,
                                      gfc_typename(&arg->sym->ts)))
                {
                  /* Stop this message from recurring.  */
@@ -11176,7 +11183,7 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
       gfc_formal_arglist *curr_arg;
       int has_non_interop_arg = 0;
 
-      if (!verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common, 
+      if (!verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
                              sym->common_block))
         {
           /* Clear these to prevent looking at them again if there was an
@@ -12019,7 +12026,7 @@ resolve_typebound_procedures (gfc_symbol* derived)
   for (op = 0; op != GFC_INTRINSIC_OPS; ++op)
     {
       gfc_typebound_proc* p = derived->f2k_derived->tb_op[op];
-      if (p && !resolve_typebound_intrinsic_op (derived, 
+      if (p && !resolve_typebound_intrinsic_op (derived,
                                                (gfc_intrinsic_op)op, p))
        resolve_bindings_result = false;
     }
@@ -12471,7 +12478,7 @@ resolve_fl_derived0 (gfc_symbol *sym)
          && !gfc_check_symbol_access (c->ts.u.derived)
          && !gfc_notify_std (GFC_STD_F2003, "the component '%s' is a "
                              "PRIVATE type and cannot be a component of "
-                             "'%s', which is PUBLIC at %L", c->name, 
+                             "'%s', which is PUBLIC at %L", c->name,
                              sym->name, &sym->declared_at))
        return false;
 
@@ -12545,8 +12552,8 @@ resolve_fl_derived0 (gfc_symbol *sym)
            && sym != c->ts.u.derived)
        add_dt_to_dt_list (c->ts.u.derived);
 
-      if (!gfc_resolve_array_spec (c->as, 
-                                  !(c->attr.pointer || c->attr.proc_pointer 
+      if (!gfc_resolve_array_spec (c->as,
+                                  !(c->attr.pointer || c->attr.proc_pointer
                                     || c->attr.allocatable)))
        return false;
 
@@ -12595,13 +12602,13 @@ resolve_fl_derived (gfc_symbol *sym)
          || gen_dt->generic->sym->module != gen_dt->generic->next->sym->module)
       && !gfc_notify_std (GFC_STD_F2003, "Generic name '%s' of function "
                          "'%s' at %L being the same name as derived "
-                         "type at %L", sym->name, 
-                         gen_dt->generic->sym == sym 
-                         ? gen_dt->generic->next->sym->name 
-                         : gen_dt->generic->sym->name, 
-                         gen_dt->generic->sym == sym 
-                         ? &gen_dt->generic->next->sym->declared_at 
-                         : &gen_dt->generic->sym->declared_at, 
+                         "type at %L", sym->name,
+                         gen_dt->generic->sym == sym
+                         ? gen_dt->generic->next->sym->name
+                         : gen_dt->generic->sym->name,
+                         gen_dt->generic->sym == sym
+                         ? &gen_dt->generic->next->sym->declared_at
+                         : &gen_dt->generic->sym->declared_at,
                          &sym->declared_at))
     return false;
 
@@ -12656,13 +12663,13 @@ resolve_fl_namelist (gfc_symbol *sym)
 
       if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SHAPE
          && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object '%s' "
-                             "with assumed shape in namelist '%s' at %L", 
+                             "with assumed shape in namelist '%s' at %L",
                              nl->sym->name, sym->name, &sym->declared_at))
        return false;
 
       if (is_non_constant_shape_array (nl->sym)
          && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object '%s' "
-                             "with nonconstant shape in namelist '%s' at %L", 
+                             "with nonconstant shape in namelist '%s' at %L",
                              nl->sym->name, sym->name, &sym->declared_at))
        return false;
 
@@ -12671,7 +12678,7 @@ resolve_fl_namelist (gfc_symbol *sym)
              || !gfc_is_constant_expr (nl->sym->ts.u.cl->length))
          && !gfc_notify_std (GFC_STD_F2003, "NAMELIST object '%s' with "
                              "nonconstant character length in "
-                             "namelist '%s' at %L", nl->sym->name, 
+                             "namelist '%s' at %L", nl->sym->name,
                              sym->name, &sym->declared_at))
        return false;
 
@@ -12691,7 +12698,7 @@ resolve_fl_namelist (gfc_symbol *sym)
        {
          if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object '%s' in "
                               "namelist '%s' at %L with ALLOCATABLE "
-                              "or POINTER components", nl->sym->name, 
+                              "or POINTER components", nl->sym->name,
                               sym->name, &sym->declared_at))
            return false;
 
@@ -12857,10 +12864,13 @@ resolve_symbol (gfc_symbol *sym)
            {
              this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
                                               sym->name);
-             gfc_release_symbol (sym);
-             symtree->n.sym->refs++;
-             this_symtree->n.sym = symtree->n.sym;
-             return;
+             if (this_symtree->n.sym == sym)
+               {
+                 symtree->n.sym->refs++;
+                 gfc_release_symbol (sym);
+                 this_symtree->n.sym = symtree->n.sym;
+                 return;
+               }
            }
        }
 
@@ -13261,10 +13271,10 @@ resolve_symbol (gfc_symbol *sym)
       && gfc_check_symbol_access (sym)
       && !gfc_check_symbol_access (sym->ts.u.derived)
       && !gfc_notify_std (GFC_STD_F2003, "PUBLIC %s '%s' at %L of PRIVATE "
-                         "derived type '%s'", 
-                         (sym->attr.flavor == FL_PARAMETER) 
-                         ? "parameter" : "variable", 
-                         sym->name, &sym->declared_at, 
+                         "derived type '%s'",
+                         (sym->attr.flavor == FL_PARAMETER)
+                         ? "parameter" : "variable",
+                         sym->name, &sym->declared_at,
                          sym->ts.u.derived->name))
     return;
 
@@ -13407,15 +13417,15 @@ resolve_symbol (gfc_symbol *sym)
       if (!gfc_logical_kinds[i].c_bool && sym->attr.dummy
          && !gfc_notify_std (GFC_STD_GNU, "LOGICAL dummy argument '%s' at "
                              "%L with non-C_Bool kind in BIND(C) procedure "
-                             "'%s'", sym->name, &sym->declared_at, 
+                             "'%s'", sym->name, &sym->declared_at,
                              sym->ns->proc_name->name))
        return;
       else if (!gfc_logical_kinds[i].c_bool
               && !gfc_notify_std (GFC_STD_GNU, "LOGICAL result variable "
                                   "'%s' at %L with non-C_Bool kind in "
-                                  "BIND(C) procedure '%s'", sym->name, 
-                                  &sym->declared_at, 
-                                  sym->attr.function ? sym->name 
+                                  "BIND(C) procedure '%s'", sym->name,
+                                  &sym->declared_at,
+                                  sym->attr.function ? sym->name
                                   : sym->ns->proc_name->name))
        return;
     }
@@ -14618,7 +14628,7 @@ resolve_types (gfc_namespace *ns)
       unsigned letter;
       for (letter = 0; letter != GFC_LETTERS; ++letter)
        if (ns->set_flag[letter]
-           && !resolve_typespec_used (&ns->default_type[letter], 
+           && !resolve_typespec_used (&ns->default_type[letter],
                                       &ns->implicit_loc[letter], NULL))
          return;
     }
index d205523..3106d79 100644 (file)
@@ -3690,6 +3690,14 @@ gfc_simplify_len (gfc_expr *e, gfc_expr *kind)
       mpz_set (result->value.integer, e->ts.u.cl->length->value.integer);
       return range_check (result, "LEN");
     }
+  else if (e->expr_type == EXPR_VARIABLE && e->ts.type == BT_CHARACTER
+          && e->symtree->n.sym
+          && e->symtree->n.sym->assoc && e->symtree->n.sym->assoc->target
+          && e->symtree->n.sym->assoc->target->ts.type == BT_DERIVED)
+    /* The expression in assoc->target points to a ref to the _data component
+       of the unlimited polymorphic entity.  To get the _len component the last
+       _data ref needs to be stripped and a ref to the _len component added.  */
+    return gfc_get_len_component (e->symtree->n.sym->assoc->target);
   else
     return NULL;
 }
index 8edd693..dca3220 100644 (file)
@@ -2747,8 +2747,8 @@ single_undo_checkpoint_p (void)
 
 /* Save symbol with the information necessary to back it out.  */
 
-static void
-save_symbol_data (gfc_symbol *sym)
+void
+gfc_save_symbol_data (gfc_symbol *sym)
 {
   gfc_symbol *s;
   unsigned i;
@@ -2849,7 +2849,7 @@ gfc_get_sym_tree (const char *name, gfc_namespace *ns, gfc_symtree **result,
       p->mark = 1;
 
       /* Copy in case this symbol is changed.  */
-      save_symbol_data (p);
+      gfc_save_symbol_data (p);
     }
 
   *result = st;
@@ -2888,7 +2888,7 @@ gfc_get_ha_sym_tree (const char *name, gfc_symtree **result)
 
   if (st != NULL)
     {
-      save_symbol_data (st->n.sym);
+      gfc_save_symbol_data (st->n.sym);
       *result = st;
       return i;
     }
index a36db45..8e5bea1 100644 (file)
@@ -4350,6 +4350,13 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest,
              && ss_expr->rank)
            nDepend = gfc_check_dependency (dest_expr, ss_expr, true);
 
+         /* Check for cases like   c(:)(1:2) = c(2)(2:3)  */
+         if (!nDepend && dest_expr->rank > 0
+             && dest_expr->ts.type == BT_CHARACTER
+             && ss_expr->expr_type == EXPR_VARIABLE)
+           
+           nDepend = gfc_check_dependency (dest_expr, ss_expr, false);
+
          continue;
        }
 
index 2b06679..4b3e89b 100644 (file)
@@ -2262,8 +2262,9 @@ create_function_arglist (gfc_symbol * sym)
       /* Fill in arg stuff.  */
       DECL_CONTEXT (parm) = fndecl;
       DECL_ARG_TYPE (parm) = TREE_VALUE (typelist);
-      /* All implementation args are read-only.  */
-      TREE_READONLY (parm) = 1;
+      /* All implementation args except for VALUE are read-only.  */
+      if (!f->sym->attr.value)
+       TREE_READONLY (parm) = 1;
       if (POINTER_TYPE_P (type)
          && (!f->sym->attr.proc_pointer
              && f->sym->attr.flavor != FL_PROCEDURE))
index 2b06304..b18ccd8 100644 (file)
@@ -92,6 +92,7 @@ gfc_conv_scalar_to_descriptor (gfc_se *se, tree scalar, symbol_attribute attr)
    in future implementations.  Use the corresponding APIs.  */
 #define CLASS_DATA_FIELD 0
 #define CLASS_VPTR_FIELD 1
+#define CLASS_LEN_FIELD 2
 #define VTABLE_HASH_FIELD 0
 #define VTABLE_SIZE_FIELD 1
 #define VTABLE_EXTENDS_FIELD 2
@@ -146,6 +147,20 @@ gfc_class_vptr_get (tree decl)
 }
 
 
+tree
+gfc_class_len_get (tree decl)
+{
+  tree len;
+  if (POINTER_TYPE_P (TREE_TYPE (decl)))
+    decl = build_fold_indirect_ref_loc (input_location, decl);
+  len = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (decl)),
+                           CLASS_LEN_FIELD);
+  return fold_build3_loc (input_location, COMPONENT_REF,
+                         TREE_TYPE (len), decl, len,
+                         NULL_TREE);
+}
+
+
 static tree
 gfc_vtable_field_get (tree decl, int field)
 {
@@ -599,6 +614,45 @@ gfc_conv_intrinsic_to_class (gfc_se *parmse, gfc_expr *e,
        }
     }
 
+  /* When the actual arg is a char array, then set the _len component of the
+     unlimited polymorphic entity, too.  */
+  if (e->ts.type == BT_CHARACTER)
+    {
+      ctree = gfc_class_len_get (var);
+      /* Start with parmse->string_length because this seems to be set to a
+        correct value more often.  */
+      if (parmse->string_length)
+         gfc_add_modify (&parmse->pre, ctree, parmse->string_length);
+      /* When the string_length is not yet set, then try the backend_decl of
+        the cl.  */
+      else if (e->ts.u.cl->backend_decl)
+          gfc_add_modify (&parmse->pre, ctree, e->ts.u.cl->backend_decl);
+      /* If both of the above approaches fail, then try to generate an
+        expression from the input, which is only feasible currently, when the
+        expression can be evaluated to a constant one.  */
+      else
+       {
+         /* Try to simplify the expression.  */
+         gfc_simplify_expr (e, 0);
+         if (e->expr_type == EXPR_CONSTANT && !e->ts.u.cl->resolved)
+           {
+             /* Amazingly all data is present to compute the length of a
+                constant string, but the expression is not yet there.  */
+             e->ts.u.cl->length = gfc_get_constant_expr (BT_INTEGER, 4,
+                                                         &e->where);
+             mpz_set_ui (e->ts.u.cl->length->value.integer,
+                         e->value.character.length);
+             gfc_conv_const_charlen (e->ts.u.cl);
+             e->ts.u.cl->resolved = 1;
+             gfc_add_modify (&parmse->pre, ctree, e->ts.u.cl->backend_decl);
+           }
+         else
+           {
+             gfc_error ("Can't compute the length of the char array at %L.",
+                        &e->where);
+           }
+       }
+    }
   /* Pass the address of the class object.  */
   parmse->expr = gfc_build_addr_expr (NULL_TREE, var);
 }
@@ -1657,10 +1711,12 @@ gfc_conv_component_ref (gfc_se * se, gfc_ref * ref)
 
   c = ref->u.c.component;
 
-  gcc_assert (c->backend_decl);
+  if (c->backend_decl == NULL_TREE
+      && ref->u.c.sym != NULL)
+    gfc_get_derived_type (ref->u.c.sym);
 
   field = c->backend_decl;
-  gcc_assert (TREE_CODE (field) == FIELD_DECL);
+  gcc_assert (field && TREE_CODE (field) == FIELD_DECL);
   decl = se->expr;
 
   /* Components can correspond to fields of different containing
@@ -6191,7 +6247,7 @@ gfc_conv_structure (gfc_se * se, gfc_expr * expr, int init)
         of EXPR_NULL,... by default, the static nullify is not needed
         since this is done every time we come into scope.  */
       if (!c->expr || (cm->attr.allocatable && cm->attr.flavor != FL_PROCEDURE))
-        continue;
+       continue;
 
       if (cm->initializer && cm->initializer->expr_type != EXPR_NULL
          && strcmp (cm->name, "_extends") == 0
@@ -6209,6 +6265,10 @@ gfc_conv_structure (gfc_se * se, gfc_expr * expr, int init)
          val = TYPE_SIZE_UNIT (gfc_get_derived_type (cm->ts.u.derived));
          CONSTRUCTOR_APPEND_ELT (v, cm->backend_decl, val);
        }
+      else if (cm->ts.type == BT_INTEGER && strcmp (cm->name, "_len") == 0)
+       CONSTRUCTOR_APPEND_ELT (v, cm->backend_decl,
+                               fold_convert (TREE_TYPE (cm->backend_decl),
+                                             integer_zero_node));
       else
        {
          val = gfc_conv_initializer (c->expr, &cm->ts,
@@ -6285,7 +6345,8 @@ gfc_conv_expr (gfc_se * se, gfc_expr * expr)
      null_pointer_node.  C_PTR and C_FUNPTR are converted to match the
      typespec for the C_PTR and C_FUNPTR symbols, which has already been
      updated to be an integer with a kind equal to the size of a (void *).  */
-  if (expr->ts.type == BT_DERIVED && expr->ts.u.derived->ts.f90_type == BT_VOID)
+  if (expr->ts.type == BT_DERIVED && expr->ts.u.derived->ts.f90_type == BT_VOID
+      && expr->ts.u.derived->attr.is_bind_c)
     {
       if (expr->expr_type == EXPR_VARIABLE
          && (expr->symtree->n.sym->intmod_sym_id == ISOCBINDING_NULL_PTR
@@ -6550,6 +6611,27 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2)
        rse.expr = build_fold_indirect_ref_loc (input_location,
                                            rse.expr);
 
+      /* For string assignments to unlimited polymorphic pointers add an
+        assignment of the string_length to the _len component of the
+        pointer.  */
+      if ((expr1->ts.type == BT_CLASS || expr1->ts.type == BT_DERIVED)
+         && expr1->ts.u.derived->attr.unlimited_polymorphic
+         && (expr2->ts.type == BT_CHARACTER ||
+             ((expr2->ts.type == BT_DERIVED || expr2->ts.type == BT_CLASS)
+              && expr2->ts.u.derived->attr.unlimited_polymorphic)))
+       {
+         gfc_expr *len_comp;
+         gfc_se se;
+         len_comp = gfc_get_len_component (expr1);
+         gfc_init_se (&se, NULL);
+         gfc_conv_expr (&se, len_comp);
+
+         /* ptr % _len = len (str)  */
+         gfc_add_modify (&block, se.expr, rse.string_length);
+         lse.string_length = se.expr;
+         gfc_free_expr (len_comp);
+       }
+
       gfc_add_block_to_block (&block, &lse.pre);
       gfc_add_block_to_block (&block, &rse.pre);
 
@@ -6661,6 +6743,7 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2)
                                               bound, bound, 0,
                                               GFC_ARRAY_POINTER_CONT, false);
              tmp = gfc_create_var (tmp, "ptrtemp");
+             lse.descriptor_only = 0;
              lse.expr = tmp;
              lse.direct_byref = 1;
              gfc_conv_expr_descriptor (&lse, expr2);
@@ -6676,6 +6759,7 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2)
       else if (expr2->expr_type == EXPR_VARIABLE)
        {
          /* Assign directly to the LHS's descriptor.  */
+         lse.descriptor_only = 0;
          lse.direct_byref = 1;
          gfc_conv_expr_descriptor (&lse, expr2);
          strlen_rhs = lse.string_length;
@@ -6726,6 +6810,7 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2)
          /* Assign to a temporary descriptor and then copy that
             temporary to the pointer.  */
          tmp = gfc_create_var (TREE_TYPE (desc), "ptrtemp");
+         lse.descriptor_only = 0;
          lse.expr = tmp;
          lse.direct_byref = 1;
          gfc_conv_expr_descriptor (&lse, expr2);
index e31ede2..e9f4894 100644 (file)
@@ -2683,6 +2683,18 @@ gfc_trans_omp_atomic (gfc_code *code)
     }
 
   lhsaddr = save_expr (lhsaddr);
+  if (TREE_CODE (lhsaddr) != SAVE_EXPR
+      && (TREE_CODE (lhsaddr) != ADDR_EXPR
+         || TREE_CODE (TREE_OPERAND (lhsaddr, 0)) != VAR_DECL))
+    {
+      /* Make sure LHS is simple enough so that goa_lhs_expr_p can recognize
+        it even after unsharing function body.  */
+      tree var = create_tmp_var_raw (TREE_TYPE (lhsaddr), NULL);
+      DECL_CONTEXT (var) = current_function_decl;
+      lhsaddr = build4 (TARGET_EXPR, TREE_TYPE (lhsaddr), var, lhsaddr,
+                       NULL_TREE, NULL_TREE);
+    }
+
   rhs = gfc_evaluate_now (rse.expr, &block);
 
   if (((atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
@@ -2965,6 +2977,19 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock,
          inits.safe_push (e);
        }
 
+      if (dovar_found == 2
+         && op == EXEC_OMP_SIMD
+         && collapse == 1
+         && !simple)
+       {
+         for (tmp = omp_clauses; tmp; tmp = OMP_CLAUSE_CHAIN (tmp))
+           if (OMP_CLAUSE_CODE (tmp) == OMP_CLAUSE_LINEAR
+               && OMP_CLAUSE_DECL (tmp) == dovar)
+             {
+               OMP_CLAUSE_LINEAR_NO_COPYIN (tmp) = 1;
+               break;
+             }
+       }
       if (!dovar_found)
        {
          if (op == EXEC_OMP_SIMD)
@@ -2973,6 +2998,7 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock,
                {
                  tmp = build_omp_clause (input_location, OMP_CLAUSE_LINEAR);
                  OMP_CLAUSE_LINEAR_STEP (tmp) = step;
+                 OMP_CLAUSE_LINEAR_NO_COPYIN (tmp) = 1;
                }
              else
                tmp = build_omp_clause (input_location, OMP_CLAUSE_LASTPRIVATE);
@@ -3040,7 +3066,7 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock,
          else if (collapse == 1)
            {
              tmp = build_omp_clause (input_location, OMP_CLAUSE_LINEAR);
-             OMP_CLAUSE_LINEAR_STEP (tmp) = step;
+             OMP_CLAUSE_LINEAR_STEP (tmp) = build_int_cst (type, 1);
              OMP_CLAUSE_LINEAR_NO_COPYIN (tmp) = 1;
              OMP_CLAUSE_LINEAR_NO_COPYOUT (tmp) = 1;
            }
index 6d2db5e..508346d 100644 (file)
@@ -1133,6 +1133,22 @@ gfc_trans_critical (gfc_code *code)
 }
 
 
+/* Return true, when the class has a _len component.  */
+
+static bool
+class_has_len_component (gfc_symbol *sym)
+{
+  gfc_component *comp = sym->ts.u.derived->components;
+  while (comp)
+    {
+      if (strcmp (comp->name, "_len") == 0)
+       return true;
+      comp = comp->next;
+    }
+  return false;
+}
+
+
 /* Do proper initialization for ASSOCIATE names.  */
 
 static void
@@ -1146,6 +1162,8 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block)
   tree offset;
   tree dim;
   int n;
+  tree charlen;
+  bool need_len_assign;
 
   gcc_assert (sym->assoc);
   e = sym->assoc->target;
@@ -1156,6 +1174,20 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block)
 
   unlimited = UNLIMITED_POLY (e);
 
+  /* Assignments to the string length need to be generated, when
+     ( sym is a char array or
+       sym has a _len component)
+     and the associated expression is unlimited polymorphic, which is
+     not (yet) correctly in 'unlimited', because for an already associated
+     BT_DERIVED the u-poly flag is not set, i.e.,
+      __tmp_CHARACTER_0_1 => w => arg
+       ^ generated temp      ^ from code, the w does not have the u-poly
+     flag set, where UNLIMITED_POLY(e) expects it.  */
+  need_len_assign = ((unlimited || (e->ts.type == BT_DERIVED
+                     && e->ts.u.derived->attr.unlimited_polymorphic))
+      && (sym->ts.type == BT_CHARACTER
+          || ((sym->ts.type == BT_CLASS || sym->ts.type == BT_DERIVED)
+              && class_has_len_component (sym))));
   /* Do a `pointer assignment' with updated descriptor (or assign descriptor
      to array temporary) for arrays with either unknown shape or if associating
      to a variable.  */
@@ -1255,8 +1287,11 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block)
         unconditionally associate pointers and the symbol is scalar.  */
       if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->attr.dimension)
        {
+         tree target_expr;
          /* For a class array we need a descriptor for the selector.  */
          gfc_conv_expr_descriptor (&se, e);
+         /* Needed to get/set the _len component below.  */
+         target_expr = se.expr;
 
          /* Obtain a temporary class container for the result.  */
          gfc_conv_class_to_class (&se, e, sym->ts, false, true, false, false);
@@ -1276,6 +1311,23 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block)
                                        gfc_array_index_type,
                                        offset, tmp);
            }
+         if (need_len_assign)
+           {
+             /* Get the _len comp from the target expr by stripping _data
+                from it and adding component-ref to _len.  */
+             tmp = gfc_class_len_get (TREE_OPERAND (target_expr, 0));
+             /* Get the component-ref for the temp structure's _len comp.  */
+             charlen = gfc_class_len_get (se.expr);
+             /* Add the assign to the beginning of the the block...  */
+             gfc_add_modify (&se.pre, charlen,
+                             fold_convert (TREE_TYPE (charlen), tmp));
+             /* and the oposite way at the end of the block, to hand changes
+                on the string length back.  */
+             gfc_add_modify (&se.post, tmp,
+                             fold_convert (TREE_TYPE (tmp), charlen));
+             /* Length assignment done, prevent adding it again below.  */
+             need_len_assign = false;
+           }
          gfc_conv_descriptor_offset_set (&se.pre, desc, offset);
        }
       else if (sym->ts.type == BT_CLASS && e->ts.type == BT_CLASS
@@ -1290,7 +1342,13 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block)
          se.expr = build_fold_indirect_ref_loc (input_location, se.expr);
        }
       else
-       gfc_conv_expr (&se, e);
+       {
+         /* For BT_CLASS and BT_DERIVED, this boils down to a pointer assign,
+            which has the string length included.  For CHARACTERS it is still
+            needed and will be done at the end of this routine.  */
+         gfc_conv_expr (&se, e);
+         need_len_assign = need_len_assign && sym->ts.type == BT_CHARACTER;
+       }
 
       tmp = TREE_TYPE (sym->backend_decl);
       tmp = gfc_build_addr_expr (tmp, se.expr);
@@ -1311,21 +1369,30 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block)
       gfc_add_init_cleanup (block, tmp, NULL_TREE);
     }
 
-  /* Set the stringlength from the vtable size.  */
-  if (sym->ts.type == BT_CHARACTER && sym->attr.select_type_temporary)
+  /* Set the stringlength, when needed.  */
+  if (need_len_assign)
     {
-      tree charlen;
       gfc_se se;
       gfc_init_se (&se, NULL);
-      gcc_assert (UNLIMITED_POLY (e->symtree->n.sym));
-      tmp = gfc_get_symbol_decl (e->symtree->n.sym);
-      tmp = gfc_vtable_size_get (tmp);
+      if (e->symtree->n.sym->ts.type == BT_CHARACTER)
+       {
+         /* What about deferred strings?  */
+         gcc_assert (!e->symtree->n.sym->ts.deferred);
+         tmp = e->symtree->n.sym->ts.u.cl->backend_decl;
+       }
+      else
+       tmp = gfc_class_len_get (gfc_get_symbol_decl (e->symtree->n.sym));
       gfc_get_symbol_decl (sym);
-      charlen = sym->ts.u.cl->backend_decl;
-      gfc_add_modify (&se.pre, charlen,
-                     fold_convert (TREE_TYPE (charlen), tmp));
-      gfc_add_init_cleanup (block, gfc_finish_block( &se.pre),
-                           gfc_finish_block (&se.post));
+      charlen = sym->ts.type == BT_CHARACTER ? sym->ts.u.cl->backend_decl
+                                       : gfc_class_len_get (sym->backend_decl);
+      /* Prevent adding a noop len= len.  */
+      if (tmp != charlen)
+       {
+         gfc_add_modify (&se.pre, charlen,
+                         fold_convert (TREE_TYPE (charlen), tmp));
+         gfc_add_init_cleanup (block, gfc_finish_block (&se.pre),
+                               gfc_finish_block (&se.post));
+       }
     }
 }
 
@@ -5038,6 +5105,15 @@ gfc_trans_allocate (gfc_code * code)
                gfc_add_modify (&se.pre, se.string_length,
                                fold_convert (TREE_TYPE (se.string_length),
                                memsz));
+             else if ((al->expr->ts.type == BT_DERIVED
+                       || al->expr->ts.type == BT_CLASS)
+                      && expr->ts.u.derived->attr.unlimited_polymorphic)
+               {
+                 tmp = gfc_class_len_get (al->expr->symtree->n.sym->backend_decl);
+                 gfc_add_modify (&se.pre, tmp,
+                                 fold_convert (TREE_TYPE (tmp),
+                                               memsz));
+               }
 
              /* Convert to size in bytes, using the character KIND.  */
              if (unlimited_char)
@@ -5458,11 +5534,13 @@ gfc_trans_deallocate (gfc_code *code)
 
       if (expr->rank || gfc_is_coarray (expr))
        {
+         gfc_ref *ref;
+
          if (expr->ts.type == BT_DERIVED && expr->ts.u.derived->attr.alloc_comp
              && !gfc_is_finalizable (expr->ts.u.derived, NULL))
            {
-             gfc_ref *ref;
              gfc_ref *last = NULL;
+
              for (ref = expr->ref; ref; ref = ref->next)
                if (ref->type == REF_COMPONENT)
                  last = ref;
@@ -5473,13 +5551,45 @@ gfc_trans_deallocate (gfc_code *code)
                    && !(!last && expr->symtree->n.sym->attr.pointer))
                {
                  tmp = gfc_deallocate_alloc_comp (expr->ts.u.derived, se.expr,
-                                                 expr->rank);
+                                                  expr->rank);
                  gfc_add_expr_to_block (&se.pre, tmp);
                }
            }
-         tmp = gfc_array_deallocate (se.expr, pstat, errmsg, errlen,
-                                     label_finish, expr);
-         gfc_add_expr_to_block (&se.pre, tmp);
+
+         if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (se.expr)))
+           {
+             tmp = gfc_array_deallocate (se.expr, pstat, errmsg, errlen,
+                                         label_finish, expr);
+             gfc_add_expr_to_block (&se.pre, tmp);
+           }
+         else if (TREE_CODE (se.expr) == COMPONENT_REF
+                  && TREE_CODE (TREE_TYPE (se.expr)) == ARRAY_TYPE
+                  && TREE_CODE (TREE_TYPE (TREE_TYPE (se.expr)))
+                       == RECORD_TYPE)
+           {
+             /* class.c(finalize_component) generates these, when a
+                finalizable entity has a non-allocatable derived type array
+                component, which has allocatable components. Obtain the
+                derived type of the array and deallocate the allocatable
+                components. */
+             for (ref = expr->ref; ref; ref = ref->next)
+               {
+                 if (ref->u.c.component->attr.dimension
+                     && ref->u.c.component->ts.type == BT_DERIVED)
+                   break;
+               }
+
+             if (ref && ref->u.c.component->ts.u.derived->attr.alloc_comp
+                 && !gfc_is_finalizable (ref->u.c.component->ts.u.derived,
+                                         NULL))
+               {
+                 tmp = gfc_deallocate_alloc_comp
+                               (ref->u.c.component->ts.u.derived,
+                                se.expr, expr->rank);
+                 gfc_add_expr_to_block (&se.pre, tmp);
+               }
+           }
+
          if (al->expr->ts.type == BT_CLASS)
            gfc_reset_vptr (&se.pre, al->expr);
        }
index 22f456e..20069e2 100644 (file)
@@ -2415,9 +2415,24 @@ gfc_get_derived_type (gfc_symbol * derived)
       /* Its components' backend_decl have been built or we are
         seeing recursion through the formal arglist of a procedure
         pointer component.  */
-      if (TYPE_FIELDS (derived->backend_decl)
-           || derived->attr.proc_pointer_comp)
+      if (TYPE_FIELDS (derived->backend_decl))
         return derived->backend_decl;
+      else if (derived->attr.abstract
+              && derived->attr.proc_pointer_comp)
+       {
+         /* If an abstract derived type with procedure pointer
+            components has no other type of component, return the
+            backend_decl. Otherwise build the components if any of the
+            non-procedure pointer components have no backend_decl.  */
+         for (c = derived->components; c; c = c->next)
+           {
+             if (!c->attr.proc_pointer && c->backend_decl == NULL)
+               break;
+             else if (c->next == NULL)
+               return derived->backend_decl;
+           }
+         typenode = derived->backend_decl;
+       }
       else
         typenode = derived->backend_decl;
     }
index b55460f..fe2779a 100644 (file)
@@ -347,6 +347,7 @@ gfc_wrapped_block;
 /* Class API functions.  */
 tree gfc_class_data_get (tree);
 tree gfc_class_vptr_get (tree);
+tree gfc_class_len_get (tree);
 void gfc_reset_vptr (stmtblock_t *, gfc_expr *);
 tree gfc_class_set_static_fields (tree, tree, tree);
 tree gfc_vtable_hash_get (tree);
index 1a8682b..b377667 100644 (file)
@@ -7193,6 +7193,15 @@ match_asm_constraints_1 (rtx insn, rtx *p_sets, int noutputs)
     df_insn_rescan (insn);
 }
 
+/* Add the decl D to the local_decls list of FUN.  */
+
+void
+add_local_decl (struct function *fun, tree d)
+{
+  gcc_assert (TREE_CODE (d) == VAR_DECL);
+  vec_safe_push (fun->local_decls, d);
+}
+
 static unsigned
 rest_of_match_asm_constraints (void)
 {
index 38a0fc4..fd4639c 100644 (file)
@@ -674,11 +674,7 @@ struct GTY(()) function {
 
 /* Add the decl D to the local_decls list of FUN.  */
 
-static inline void
-add_local_decl (struct function *fun, tree d)
-{
-  vec_safe_push (fun->local_decls, d);
-}
+void add_local_decl (struct function *fun, tree d);
 
 #define FOR_EACH_LOCAL_DECL(FUN, I, D)         \
   FOR_EACH_VEC_SAFE_ELT_REVERSE ((FUN)->local_decls, I, D)
index c7ce64d..adbf0c4 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -6857,7 +6857,7 @@ main (int argc, char **argv)
     {
       printf (_("%s %s%s\n"), progname, pkgversion_string,
              version_string);
-      printf ("Copyright %s 2014 Free Software Foundation, Inc.\n",
+      printf ("Copyright %s 2015 Free Software Foundation, Inc.\n",
              _("(C)"));
       fputs (_("This is free software; see the source for copying conditions.  There is NO\n\
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"),
index f21878d..150fbe0 100644 (file)
@@ -142,7 +142,7 @@ static void
 print_version (void)
 {
   printf ("gcov-dump %s%s\n", pkgversion_string, version_string);
-  printf ("Copyright (C) 2014 Free Software Foundation, Inc.\n");
+  printf ("Copyright (C) 2015 Free Software Foundation, Inc.\n");
   printf ("This is free software; see the source for copying conditions.\n"
          "There is NO warranty; not even for MERCHANTABILITY or \n"
          "FITNESS FOR A PARTICULAR PURPOSE.\n\n");
index b0e59e8..26d5899 100644 (file)
@@ -500,7 +500,7 @@ static void
 print_version (void)
 {
   fnotice (stdout, "gcov %s%s\n", pkgversion_string, version_string);
-  fprintf (stdout, "Copyright %s 2014 Free Software Foundation, Inc.\n",
+  fprintf (stdout, "Copyright %s 2015 Free Software Foundation, Inc.\n",
           _("(C)"));
   fnotice (stdout,
           _("This is free software; see the source for copying conditions.\n"
index 271ee7d..e0e1180 100644 (file)
@@ -1174,7 +1174,7 @@ int yy_flex_debug = 0;
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
-#line 1 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 1 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 /* -*- indented-text -*- */
 /* Process source files and output type information.
    Copyright (C) 2002-2014 Free Software Foundation, Inc.
@@ -1195,7 +1195,7 @@ 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/>.  */
 #define YY_NO_INPUT 1
-#line 24 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 24 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 #ifdef GENERATOR_FILE
 #include "bconfig.h"
 #else
@@ -1410,7 +1410,7 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
     
-#line 65 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 65 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 
   /* Do this on entry to yylex():  */
   *yylval = 0;
@@ -1507,7 +1507,7 @@ case 1:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 76 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 76 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return TYPEDEF;
@@ -1519,7 +1519,7 @@ case 2:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 80 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 80 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return STRUCT;
@@ -1531,7 +1531,7 @@ case 3:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 84 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 84 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return UNION;
@@ -1543,7 +1543,7 @@ case 4:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 88 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 88 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return STRUCT;
@@ -1555,7 +1555,7 @@ case 5:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 92 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 92 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return EXTERN;
@@ -1567,7 +1567,7 @@ case 6:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 96 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 96 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   BEGIN(in_struct);
   return STATIC;
@@ -1578,25 +1578,25 @@ YY_RULE_SETUP
 
 case 7:
 YY_RULE_SETUP
-#line 104 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 104 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { BEGIN(in_struct_comment); }
        YY_BREAK
 case 8:
 /* rule 8 can match eol */
 YY_RULE_SETUP
-#line 105 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 105 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { lexer_line.line++; }
        YY_BREAK
 case 9:
 /* rule 9 can match eol */
 YY_RULE_SETUP
-#line 107 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 107 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { update_lineno (yytext, yyleng); }
        YY_BREAK
 case 10:
 /* rule 10 can match eol */
 YY_RULE_SETUP
-#line 108 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 108 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { lexer_line.line++; }
        YY_BREAK
 case 11:
@@ -1605,7 +1605,7 @@ case 11:
 (yy_c_buf_p) = yy_cp = yy_bp + 5;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 110 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 110 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 /* don't care */
        YY_BREAK
 case 12:
@@ -1613,14 +1613,14 @@ case 12:
 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
-#line 112 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 112 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 case 13:
 /* rule 13 can match eol */
-#line 113 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 113 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 case 14:
 /* rule 14 can match eol */
 YY_RULE_SETUP
-#line 113 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 113 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
     *yylval = XDUPVAR (const char, yytext, yyleng, yyleng + 1);
     return IGNORABLE_CXX_KEYWORD;
@@ -1632,7 +1632,7 @@ case 15:
 (yy_c_buf_p) = yy_cp = yy_bp + 3;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 117 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 117 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return GTY_TOKEN; }
        YY_BREAK
 case 16:
@@ -1641,7 +1641,7 @@ case 16:
 (yy_c_buf_p) = yy_cp = yy_bp + 5;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 118 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 118 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return UNION; }
        YY_BREAK
 case 17:
@@ -1650,7 +1650,7 @@ case 17:
 (yy_c_buf_p) = yy_cp = yy_bp + 6;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 119 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 119 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return STRUCT; }
        YY_BREAK
 case 18:
@@ -1659,7 +1659,7 @@ case 18:
 (yy_c_buf_p) = yy_cp = yy_bp + 5;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 120 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 120 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return STRUCT; }
        YY_BREAK
 case 19:
@@ -1668,7 +1668,7 @@ case 19:
 (yy_c_buf_p) = yy_cp = yy_bp + 7;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 121 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 121 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return TYPEDEF; }
        YY_BREAK
 case 20:
@@ -1677,7 +1677,7 @@ case 20:
 (yy_c_buf_p) = yy_cp = yy_bp + 4;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 122 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 122 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return ENUM; }
        YY_BREAK
 case 21:
@@ -1686,7 +1686,7 @@ case 21:
 (yy_c_buf_p) = yy_cp = yy_bp + 9;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 123 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 123 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return PTR_ALIAS; }
        YY_BREAK
 case 22:
@@ -1695,7 +1695,7 @@ case 22:
 (yy_c_buf_p) = yy_cp = yy_bp + 10;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 124 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 124 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return NESTED_PTR; }
        YY_BREAK
 case 23:
@@ -1704,12 +1704,12 @@ case 23:
 (yy_c_buf_p) = yy_cp = yy_bp + 4;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 125 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 125 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return USER_GTY; }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 126 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 126 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return NUM; }
        YY_BREAK
 case 25:
@@ -1718,7 +1718,7 @@ case 25:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 127 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 127 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
   return PARAM_IS;
@@ -1729,11 +1729,11 @@ case 26:
 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
-#line 133 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 133 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 case 27:
 /* rule 27 can match eol */
 YY_RULE_SETUP
-#line 133 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 133 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   size_t len;
 
@@ -1751,7 +1751,7 @@ case 28:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 144 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 144 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
   return ID;
@@ -1760,7 +1760,7 @@ YY_RULE_SETUP
 case 29:
 /* rule 29 can match eol */
 YY_RULE_SETUP
-#line 149 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 149 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
   return STRING;
@@ -1770,7 +1770,7 @@ YY_RULE_SETUP
 case 30:
 /* rule 30 can match eol */
 YY_RULE_SETUP
-#line 154 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 154 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
   return ARRAY;
@@ -1779,7 +1779,7 @@ YY_RULE_SETUP
 case 31:
 /* rule 31 can match eol */
 YY_RULE_SETUP
-#line 158 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 158 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng);
   return CHAR;
@@ -1787,24 +1787,24 @@ YY_RULE_SETUP
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 163 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 163 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return ELLIPSIS; }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 164 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 164 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { return yytext[0]; }
        YY_BREAK
 /* ignore pp-directives */
 case 34:
 /* rule 34 can match eol */
 YY_RULE_SETUP
-#line 167 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 167 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {lexer_line.line++;}
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 169 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 169 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   error_at_line (&lexer_line, "unexpected character `%s'", yytext);
 }
@@ -1812,36 +1812,36 @@ YY_RULE_SETUP
 
 case 36:
 YY_RULE_SETUP
-#line 174 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 174 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { BEGIN(in_comment); }
        YY_BREAK
 case 37:
 /* rule 37 can match eol */
 YY_RULE_SETUP
-#line 175 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 175 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { lexer_line.line++; }
        YY_BREAK
 case 38:
 /* rule 38 can match eol */
 YY_RULE_SETUP
-#line 176 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 176 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { lexer_line.line++; }
        YY_BREAK
 case 39:
-#line 178 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 178 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 case 40:
 /* rule 40 can match eol */
-#line 179 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 179 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 case 41:
 /* rule 41 can match eol */
 YY_RULE_SETUP
-#line 179 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 179 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 /* do nothing */
        YY_BREAK
 case 42:
 /* rule 42 can match eol */
 YY_RULE_SETUP
-#line 180 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 180 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { update_lineno (yytext, yyleng); }
        YY_BREAK
 case 43:
@@ -1850,21 +1850,21 @@ case 43:
 (yy_c_buf_p) = yy_cp = yy_bp + 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 181 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 181 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 /* do nothing */
        YY_BREAK
 
 case 44:
 /* rule 44 can match eol */
 YY_RULE_SETUP
-#line 184 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 184 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { lexer_line.line++; }
        YY_BREAK
 case 45:
-#line 186 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 186 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 case 46:
 YY_RULE_SETUP
-#line 186 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 186 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 /* do nothing */
        YY_BREAK
 case 47:
@@ -1873,25 +1873,25 @@ case 47:
 (yy_c_buf_p) = yy_cp = yy_bp + 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 187 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 187 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 /* do nothing */
        YY_BREAK
 
 case 48:
 YY_RULE_SETUP
-#line 190 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 190 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { BEGIN(INITIAL); } 
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 191 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 191 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 { BEGIN(in_struct); }
        YY_BREAK
 case 50:
-#line 194 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 194 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 case 51:
 YY_RULE_SETUP
-#line 194 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 194 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 {
   error_at_line (&lexer_line, 
                 "unterminated comment or string; unexpected EOF");
@@ -1900,12 +1900,12 @@ YY_RULE_SETUP
 case 52:
 /* rule 52 can match eol */
 YY_RULE_SETUP
-#line 199 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 199 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 /* do nothing */
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 201 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 201 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
 #line 1911 "gengtype-lex.c"
@@ -2872,7 +2872,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 201 "/d/gcc-4.9.2/gcc-4.9.2/gcc/gengtype-lex.l"
+#line 201 "/d/gcc-4.9.3/gcc-4.9.3/gcc/gengtype-lex.l"
 
 
 
index cb51027..ea93012 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 13c61a5..e37f034 100644 (file)
@@ -91,6 +91,7 @@ should_export(Named_object* no)
 
 void
 Export::export_globals(const std::string& package_name,
+                      const std::string& prefix,
                       const std::string& pkgpath,
                       int package_priority,
                       const std::map<std::string, Package*>& imports,
@@ -140,9 +141,18 @@ Export::export_globals(const std::string& package_name,
   this->write_string(package_name);
   this->write_c_string(";\n");
 
-  // The package path, used for all global symbols.
-  this->write_c_string("pkgpath ");
-  this->write_string(pkgpath);
+  // The prefix or package path, used for all global symbols.
+  if (prefix.empty())
+    {
+      go_assert(!pkgpath.empty());
+      this->write_c_string("pkgpath ");
+      this->write_string(pkgpath);
+    }
+  else
+    {
+      this->write_c_string("prefix ");
+      this->write_string(prefix);
+    }
   this->write_c_string(";\n");
 
   // The package priority.
index c6a4810..c010a14 100644 (file)
@@ -117,14 +117,17 @@ class Export : public String_dump
   // Export the identifiers in BINDINGS which are marked for export.
   // The exporting is done via a series of calls to THIS->STREAM_.  If
   // is nothing to export, this->stream_->write will not be called.
-  // PKGPATH is the package path.
+  // PREFIX is the package prefix.  PKGPATH is the package path.
+  // Only one of PREFIX and PKGPATH will be non-empty.
   // PACKAGE_PRIORITY is the priority to use for this package.
+  // IMPORTS is the explicitly imported packages.
   // IMPORT_INIT_FN is the name of the import initialization function
   // for this package; it will be empty if none is needed.
   // IMPORTED_INIT_FNS is the list of initialization functions for
   // imported packages.
   void
   export_globals(const std::string& package_name,
+                const std::string& prefix,
                 const std::string& pkgpath,
                 int package_priority,
                 const std::map<std::string, Package*>& imports,
index f042f64..699456d 100644 (file)
@@ -338,22 +338,28 @@ Gogo::set_package_name(const std::string& package_name,
   // Now that we know the name of the package we are compiling, set
   // the package path to use for reflect.Type.PkgPath and global
   // symbol names.
-  if (!this->pkgpath_set_)
+  if (this->pkgpath_set_)
+    this->pkgpath_symbol_ = Gogo::pkgpath_for_symbol(this->pkgpath_);
+  else
     {
       if (!this->prefix_from_option_ && package_name == "main")
-       this->pkgpath_ = package_name;
+       {
+         this->pkgpath_ = package_name;
+         this->pkgpath_symbol_ = Gogo::pkgpath_for_symbol(package_name);
+       }
       else
        {
          if (!this->prefix_from_option_)
            this->prefix_ = "go";
          this->pkgpath_ = this->prefix_ + '.' + package_name;
+         this->pkgpath_symbol_ = (Gogo::pkgpath_for_symbol(this->prefix_) + '.'
+                                  + Gogo::pkgpath_for_symbol(package_name));
        }
       this->pkgpath_set_ = true;
     }
 
-  this->pkgpath_symbol_ = Gogo::pkgpath_for_symbol(this->pkgpath_);
-
-  this->package_ = this->register_package(this->pkgpath_, location);
+  this->package_ = this->register_package(this->pkgpath_,
+                                         this->pkgpath_symbol_, location);
   this->package_->set_package_name(package_name, location);
 
   if (this->is_main_package())
@@ -656,10 +662,11 @@ Gogo::add_imported_package(const std::string& real_name,
                           const std::string& alias_arg,
                           bool is_alias_exported,
                           const std::string& pkgpath,
+                          const std::string& pkgpath_symbol,
                           Location location,
                           bool* padd_to_globals)
 {
-  Package* ret = this->register_package(pkgpath, location);
+  Package* ret = this->register_package(pkgpath, pkgpath_symbol, location);
   ret->set_package_name(real_name, location);
 
   *padd_to_globals = false;
@@ -688,10 +695,13 @@ Gogo::add_imported_package(const std::string& real_name,
 // Register a package.  This package may or may not be imported.  This
 // returns the Package structure for the package, creating if it
 // necessary.  LOCATION is the location of the import statement that
-// led us to see this package.
+// led us to see this package.  PKGPATH_SYMBOL is the symbol to use
+// for names in the package; it may be the empty string, in which case
+// we either get it later or make a guess when we need it.
 
 Package*
-Gogo::register_package(const std::string& pkgpath, Location location)
+Gogo::register_package(const std::string& pkgpath,
+                      const std::string& pkgpath_symbol, Location location)
 {
   Package* package = NULL;
   std::pair<Packages::iterator, bool> ins =
@@ -701,13 +711,15 @@ Gogo::register_package(const std::string& pkgpath, Location location)
       // We have seen this package name before.
       package = ins.first->second;
       go_assert(package != NULL && package->pkgpath() == pkgpath);
+      if (!pkgpath_symbol.empty())
+       package->set_pkgpath_symbol(pkgpath_symbol);
       if (Linemap::is_unknown_location(package->location()))
        package->set_location(location);
     }
   else
     {
       // First time we have seen this package name.
-      package = new Package(pkgpath, location);
+      package = new Package(pkgpath, pkgpath_symbol, location);
       go_assert(ins.first->second == NULL);
       ins.first->second = package;
     }
@@ -3424,10 +3436,24 @@ Gogo::do_exports()
   // support streaming to a separate file.
   Stream_to_section stream;
 
+  // Write out either the prefix or pkgpath depending on how we were
+  // invoked.
+  std::string prefix;
+  std::string pkgpath;
+  if (this->pkgpath_from_option_)
+    pkgpath = this->pkgpath_;
+  else if (this->prefix_from_option_)
+    prefix = this->prefix_;
+  else if (this->is_main_package())
+    pkgpath = "main";
+  else
+    prefix = "go";
+
   Export exp(&stream);
   exp.register_builtin_types(this);
   exp.export_globals(this->package_name(),
-                    this->pkgpath(),
+                    prefix,
+                    pkgpath,
                     this->package_priority(),
                     this->imports_,
                     (this->need_init_fn_ && !this->is_main_package()
@@ -6030,8 +6056,9 @@ Unnamed_label::get_goto(Translate_context* context, Location location)
 
 // Class Package.
 
-Package::Package(const std::string& pkgpath, Location location)
-  : pkgpath_(pkgpath), pkgpath_symbol_(Gogo::pkgpath_for_symbol(pkgpath)),
+Package::Package(const std::string& pkgpath,
+                const std::string& pkgpath_symbol, Location location)
+  : pkgpath_(pkgpath), pkgpath_symbol_(pkgpath_symbol),
     package_name_(), bindings_(new Bindings(NULL)), priority_(0),
     location_(location), used_(false), is_imported_(false),
     uses_sink_alias_(false)
@@ -6055,6 +6082,34 @@ Package::set_package_name(const std::string& package_name, Location location)
             package_name.c_str());
 }
 
+// Return the pkgpath symbol, which is a prefix for symbols defined in
+// this package.
+
+std::string
+Package::pkgpath_symbol() const
+{
+  if (this->pkgpath_symbol_.empty())
+    {
+      // In the general case, this is wrong, because the package might
+      // have been compiled with -fprefix.  However, it is what we
+      // used to do, so it is no more wrong than we were before.
+      return Gogo::pkgpath_for_symbol(this->pkgpath_);
+    }
+  return this->pkgpath_symbol_;
+}
+
+// Set the package path symbol.
+
+void
+Package::set_pkgpath_symbol(const std::string& pkgpath_symbol)
+{
+  go_assert(!pkgpath_symbol.empty());
+  if (this->pkgpath_symbol_.empty())
+    this->pkgpath_symbol_ = pkgpath_symbol;
+  else
+    go_assert(this->pkgpath_symbol_ == pkgpath_symbol);
+}
+
 // Set the priority.  We may see multiple priorities for an imported
 // package; we want to use the largest one.
 
index 3f28087..2e378b4 100644 (file)
@@ -255,6 +255,7 @@ class Gogo
   add_imported_package(const std::string& real_name, const std::string& alias,
                       bool is_alias_exported,
                       const std::string& pkgpath,
+                      const std::string& pkgpath_symbol,
                       Location location,
                       bool* padd_to_globals);
 
@@ -262,7 +263,8 @@ class Gogo
   // This returns the Package structure for the package, creating if
   // it necessary.
   Package*
-  register_package(const std::string& pkgpath, Location);
+  register_package(const std::string& pkgpath,
+                  const std::string& pkgpath_symbol, Location);
 
   // Start compiling a function.  ADD_METHOD_TO_TYPE is true if a
   // method function should be added to the type of its receiver.
@@ -2597,7 +2599,8 @@ class Unnamed_label
 class Package
 {
  public:
-  Package(const std::string& pkgpath, Location location);
+  Package(const std::string& pkgpath, const std::string& pkgpath_symbol,
+         Location location);
 
   // Get the package path used for all symbols exported from this
   // package.
@@ -2606,9 +2609,12 @@ class Package
   { return this->pkgpath_; }
 
   // Return the package path to use for a symbol name.
-  const std::string&
-  pkgpath_symbol() const
-  { return this->pkgpath_symbol_; }
+  std::string
+  pkgpath_symbol() const;
+
+  // Set the package path symbol.
+  void
+  set_pkgpath_symbol(const std::string&);
 
   // Return the location of the import statement.
   Location
index 34fb528..a902cfa 100644 (file)
@@ -295,6 +295,15 @@ Archive_file::interpret_header(const Archive_header* hdr, off_t off,
       // This is the symbol table.
       pname->clear();
     }
+  else if (hdr->ar_name[1] == 'S' && hdr->ar_name[2] == 'Y'
+          && hdr->ar_name[3] == 'M' && hdr->ar_name[4] == '6'
+          && hdr->ar_name[5] == '4' && hdr->ar_name[6] == '/'
+          && hdr->ar_name[7] == ' '
+         )
+    {
+      // 64-bit symbol table.
+      pname->clear();
+    }
   else if (hdr->ar_name[1] == '/')
     {
       // This is the extended name table.
index 4913100..daeb42f 100644 (file)
@@ -301,23 +301,27 @@ Import::import(Gogo* gogo, const std::string& local_name,
       this->require_c_string(";\n");
 
       std::string pkgpath;
+      std::string pkgpath_symbol;
       if (this->match_c_string("prefix "))
        {
          this->advance(7);
          std::string unique_prefix = this->read_identifier();
          this->require_c_string(";\n");
          pkgpath = unique_prefix + '.' + package_name;
+         pkgpath_symbol = (Gogo::pkgpath_for_symbol(unique_prefix) + '.'
+                           + Gogo::pkgpath_for_symbol(package_name));
        }
       else
        {
          this->require_c_string("pkgpath ");
          pkgpath = this->read_identifier();
          this->require_c_string(";\n");
+         pkgpath_symbol = Gogo::pkgpath_for_symbol(pkgpath);
        }
 
       this->package_ = gogo->add_imported_package(package_name, local_name,
                                                  is_local_name_exported,
-                                                 pkgpath,
+                                                 pkgpath, pkgpath_symbol,
                                                  this->location_,
                                                  &this->add_to_globals_);
       if (this->package_ == NULL)
@@ -392,7 +396,7 @@ Import::read_one_import()
     stream->advance(1);
   this->require_c_string("\";\n");
 
-  Package* p = this->gogo_->register_package(pkgpath,
+  Package* p = this->gogo_->register_package(pkgpath, "",
                                             Linemap::unknown_location());
   p->set_package_name(package_name, this->location());
 }
@@ -649,7 +653,7 @@ Import::read_type()
     package = this->package_;
   else
     {
-      package = this->gogo_->register_package(pkgpath,
+      package = this->gogo_->register_package(pkgpath, "",
                                              Linemap::unknown_location());
       if (!package_name.empty())
        package->set_package_name(package_name, this->location());
index e7c61f0..e9409b2 100644 (file)
@@ -22,7 +22,7 @@ Gogo::import_unsafe(const std::string& local_name, bool is_local_name_exported,
   bool add_to_globals;
   Package* package = this->add_imported_package("unsafe", local_name,
                                                is_local_name_exported,
-                                               "unsafe", location,
+                                               "unsafe", "unsafe", location,
                                                &add_to_globals);
 
   if (package == NULL)
index fc60845..134388c 100644 (file)
@@ -30,6 +30,11 @@ along with GCC; see the file COPYING3.  If not see
 #include <isl/aff.h>
 #include <cloog/cloog.h>
 #include <cloog/isl/domain.h>
+#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+#include <isl/deprecated/int.h>
+#include <isl/lp.h>
+#include <isl/deprecated/ilp_int.h>
+#endif
 #endif
 
 #include "system.h"
index 55e3fab..2e625c1 100644 (file)
@@ -31,6 +31,12 @@ along with GCC; see the file COPYING3.  If not see
 #include <isl/ilp.h>
 #include <cloog/cloog.h>
 #include <cloog/isl/domain.h>
+#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+#include <isl/deprecated/int.h>
+#include <isl/deprecated/aff_int.h>
+#include <isl/deprecated/ilp_int.h>
+#include <isl/deprecated/constraint_int.h>
+#endif
 #endif
 
 #include "system.h"
index 88d6d6c..fc12eeb 100644 (file)
@@ -28,6 +28,10 @@ along with GCC; see the file COPYING3.  If not see
 #include <isl/band.h>
 #include <isl/aff.h>
 #include <isl/options.h>
+#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+#include <isl/deprecated/int.h>
+#include <isl/deprecated/aff_int.h>
+#endif
 #endif
 
 #include "system.h"
@@ -373,7 +377,11 @@ getScheduleForBandList (isl_band_list *BandList)
        {
          for (i = ScheduleDimensions - 1 ;  i >= 0 ; i--)
            {
+#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+             if (isl_band_member_is_coincident (Band, i))
+#else
              if (isl_band_member_is_zero_distance (Band, i))
+#endif
                {
                  isl_map *TileMap;
                  isl_union_map *TileUMap;
index 4ca62f9..fccc2ec 100644 (file)
@@ -30,6 +30,10 @@ along with GCC; see the file COPYING3.  If not see
 #include <isl/aff.h>
 #include <cloog/cloog.h>
 #include <cloog/isl/domain.h>
+#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+#include <isl/deprecated/int.h>
+#include <isl/deprecated/ilp_int.h>
+#endif
 #endif
 
 #include "system.h"
index 28447e4..059c10d 100644 (file)
@@ -29,6 +29,11 @@ along with GCC; see the file COPYING3.  If not see
 #include <cloog/cloog.h>
 #include <cloog/cloog.h>
 #include <cloog/isl/domain.h>
+#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+#include <isl/deprecated/int.h>
+#include <isl/deprecated/aff_int.h>
+#include <isl/deprecated/constraint_int.h>
+#endif
 #endif
 
 #include "system.h"
index 8e0f5dd..9e71f43 100644 (file)
@@ -861,9 +861,19 @@ evaluate_conditions_for_known_args (struct cgraph_node *node,
        }
       if (c->code == IS_NOT_CONSTANT || c->code == CHANGED)
        continue;
-      res = fold_binary_to_constant (c->code, boolean_type_node, val, c->val);
-      if (res && integer_zerop (res))
-       continue;
+
+      if (operand_equal_p (TYPE_SIZE (TREE_TYPE (c->val)),
+                          TYPE_SIZE (TREE_TYPE (val)), 0))
+       {
+         val = fold_unary (VIEW_CONVERT_EXPR, TREE_TYPE (c->val), val);
+
+         res = val
+           ? fold_binary_to_constant (c->code, boolean_type_node, val, c->val)
+           : NULL;
+
+         if (res && integer_zerop (res))
+           continue;
+       }
       clause |= 1 << (i + predicate_first_dynamic_condition);
     }
   return clause;
index 6f68631..a9be22f 100644 (file)
@@ -87,7 +87,6 @@ can_remove_node_now_p_1 (struct cgraph_node *node)
      the callgraph so references can point to it.  */
   return (!node->address_taken
          && !ipa_ref_has_aliases_p (&node->ref_list)
-         && !node->used_as_abstract_origin
          && cgraph_can_remove_if_no_direct_calls_p (node)
          /* Inlining might enable more devirtualizing, so we want to remove
             those only after all devirtualizable virtual calls are processed.
@@ -185,6 +184,7 @@ clone_inlined_nodes (struct cgraph_edge *e, bool duplicate,
          n = cgraph_clone_node (e->callee, e->callee->decl,
                                 e->count, freq_scale, update_original,
                                 vNULL, true, inlining_into, NULL);
+         n->used_as_abstract_origin = e->callee->used_as_abstract_origin;
          cgraph_redirect_edge_callee (e, n);
        }
     }
index 7d35880..8f1f5b1 100644 (file)
@@ -1434,7 +1434,7 @@ propagate_nothrow (void)
              else if (e->can_throw_external && !TREE_NOTHROW (y->decl))
                can_throw = true;
            }
-          for (ie = node->indirect_calls; ie; ie = ie->next_callee)
+          for (ie = w->indirect_calls; ie; ie = ie->next_callee)
            if (ie->can_throw_external)
              {
                can_throw = true;
index ebaa82d..fe4d0fb 100644 (file)
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -364,9 +364,17 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
              && DECL_ABSTRACT_ORIGIN (node->decl))
            {
              struct cgraph_node *origin_node
-             = cgraph_get_create_node (DECL_ABSTRACT_ORIGIN (node->decl));
-             origin_node->used_as_abstract_origin = true;
-             enqueue_node (origin_node, &first, reachable);
+             = cgraph_get_node (DECL_ABSTRACT_ORIGIN (node->decl));
+             if (origin_node && !origin_node->used_as_abstract_origin)
+               {
+                 origin_node->used_as_abstract_origin = true;
+                 gcc_assert (!origin_node->prev_sibling_clone);
+                 gcc_assert (!origin_node->next_sibling_clone);
+                 for (cgraph_node *n = origin_node->clones; n;
+                      n = n->next_sibling_clone)
+                   if (n->decl == DECL_ABSTRACT_ORIGIN (node->decl))
+                     n->used_as_abstract_origin = true;
+               }
            }
          /* If any symbol in a comdat group is reachable, force
             all externally visible symbols in the same comdat
index 0396f37..643bbe9 100644 (file)
@@ -523,6 +523,7 @@ ira_create_allocno (int regno, bool cap_p,
   ALLOCNO_BAD_SPILL_P (a) = false;
   ALLOCNO_ASSIGNED_P (a) = false;
   ALLOCNO_MODE (a) = (regno < 0 ? VOIDmode : PSEUDO_REGNO_MODE (regno));
+  ALLOCNO_WMODE (a) = ALLOCNO_MODE (a);
   ALLOCNO_PREFS (a) = NULL;
   ALLOCNO_COPIES (a) = NULL;
   ALLOCNO_HARD_REG_COSTS (a) = NULL;
@@ -892,6 +893,7 @@ create_cap_allocno (ira_allocno_t a)
   parent = ALLOCNO_LOOP_TREE_NODE (a)->parent;
   cap = ira_create_allocno (ALLOCNO_REGNO (a), true, parent);
   ALLOCNO_MODE (cap) = ALLOCNO_MODE (a);
+  ALLOCNO_WMODE (cap) = ALLOCNO_WMODE (a);
   aclass = ALLOCNO_CLASS (a);
   ira_set_allocno_class (cap, aclass);
   ira_create_allocno_objects (cap);
@@ -1856,9 +1858,9 @@ static basic_block curr_bb;
 
 /* This recursive function creates allocnos corresponding to
    pseudo-registers containing in X.  True OUTPUT_P means that X is
-   a lvalue.  */
+   an lvalue.  PARENT corresponds to the parent expression of X.  */
 static void
-create_insn_allocnos (rtx x, bool output_p)
+create_insn_allocnos (rtx x, rtx outer, bool output_p)
 {
   int i, j;
   const char *fmt;
@@ -1873,7 +1875,15 @@ create_insn_allocnos (rtx x, bool output_p)
          ira_allocno_t a;
 
          if ((a = ira_curr_regno_allocno_map[regno]) == NULL)
-           a = ira_create_allocno (regno, false, ira_curr_loop_tree_node);
+           {
+             a = ira_create_allocno (regno, false, ira_curr_loop_tree_node);
+             if (outer != NULL && GET_CODE (outer) == SUBREG)
+               {
+                 enum machine_mode wmode = GET_MODE (outer);
+                 if (GET_MODE_SIZE (wmode) > GET_MODE_SIZE (ALLOCNO_WMODE (a)))
+                   ALLOCNO_WMODE (a) = wmode;
+               }
+           }
 
          ALLOCNO_NREFS (a)++;
          ALLOCNO_FREQ (a) += REG_FREQ_FROM_BB (curr_bb);
@@ -1884,25 +1894,25 @@ create_insn_allocnos (rtx x, bool output_p)
     }
   else if (code == SET)
     {
-      create_insn_allocnos (SET_DEST (x), true);
-      create_insn_allocnos (SET_SRC (x), false);
+      create_insn_allocnos (SET_DEST (x), NULL, true);
+      create_insn_allocnos (SET_SRC (x), NULL, false);
       return;
     }
   else if (code == CLOBBER)
     {
-      create_insn_allocnos (XEXP (x, 0), true);
+      create_insn_allocnos (XEXP (x, 0), NULL, true);
       return;
     }
   else if (code == MEM)
     {
-      create_insn_allocnos (XEXP (x, 0), false);
+      create_insn_allocnos (XEXP (x, 0), NULL, false);
       return;
     }
   else if (code == PRE_DEC || code == POST_DEC || code == PRE_INC ||
           code == POST_INC || code == POST_MODIFY || code == PRE_MODIFY)
     {
-      create_insn_allocnos (XEXP (x, 0), true);
-      create_insn_allocnos (XEXP (x, 0), false);
+      create_insn_allocnos (XEXP (x, 0), NULL, true);
+      create_insn_allocnos (XEXP (x, 0), NULL, false);
       return;
     }
 
@@ -1910,10 +1920,10 @@ create_insn_allocnos (rtx x, bool output_p)
   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
     {
       if (fmt[i] == 'e')
-       create_insn_allocnos (XEXP (x, i), output_p);
+       create_insn_allocnos (XEXP (x, i), x, output_p);
       else if (fmt[i] == 'E')
        for (j = 0; j < XVECLEN (x, i); j++)
-         create_insn_allocnos (XVECEXP (x, i, j), output_p);
+         create_insn_allocnos (XVECEXP (x, i, j), x, output_p);
     }
 }
 
@@ -1932,7 +1942,7 @@ create_bb_allocnos (ira_loop_tree_node_t bb_node)
   ira_assert (bb != NULL);
   FOR_BB_INSNS_REVERSE (bb, insn)
     if (NONDEBUG_INSN_P (insn))
-      create_insn_allocnos (PATTERN (insn), false);
+      create_insn_allocnos (PATTERN (insn), NULL, false);
   /* It might be a allocno living through from one subloop to
      another.  */
   EXECUTE_IF_SET_IN_REG_SET (df_get_live_in (bb), FIRST_PSEUDO_REGISTER, i, bi)
index c0b4f04..94157df 100644 (file)
@@ -774,6 +774,27 @@ ira_build_conflicts (void)
                                temp_hard_reg_set);
            }
 
+         /* Now we deal with paradoxical subreg cases where certain registers
+            cannot be accessed in the widest mode.  */
+         enum machine_mode outer_mode = ALLOCNO_WMODE (a);
+         enum machine_mode inner_mode = ALLOCNO_MODE (a);
+         if (GET_MODE_SIZE (outer_mode) > GET_MODE_SIZE (inner_mode))
+           {
+             enum reg_class aclass = ALLOCNO_CLASS (a);
+             for (int j = ira_class_hard_regs_num[aclass] - 1; j >= 0; --j)
+               {
+                  int inner_regno = ira_class_hard_regs[aclass][j];
+                  int outer_regno = simplify_subreg_regno (inner_regno,
+                                                           inner_mode, 0,
+                                                           outer_mode);
+                  if (outer_regno < 0
+                      || !in_hard_reg_set_p (reg_class_contents[aclass],
+                                             outer_mode, outer_regno))
+                    SET_HARD_REG_BIT (OBJECT_CONFLICT_HARD_REGS (obj),
+                                      inner_regno);
+               }
+           }
+
          if (ALLOCNO_CALLS_CROSSED_NUM (a) != 0)
            {
              int regno;
index e36bb92..8c07cb4 100644 (file)
@@ -281,6 +281,9 @@ struct ira_allocno
   /* Mode of the allocno which is the mode of the corresponding
      pseudo-register.  */
   ENUM_BITFIELD (machine_mode) mode : 8;
+  /* Widest mode of the allocno which in at least one case could be
+     for paradoxical subregs where wmode > mode.  */
+  ENUM_BITFIELD (machine_mode) wmode : 8;
   /* Register class which should be used for allocation for given
      allocno.  NO_REGS means that we should use memory.  */
   ENUM_BITFIELD (reg_class) aclass : 16;
@@ -313,7 +316,7 @@ struct ira_allocno
      number (0, ...) - 2.  Value -1 is used for allocnos spilled by the
      reload (at this point pseudo-register has only one allocno) which
      did not get stack slot yet.  */
-  short int hard_regno;
+  int hard_regno : 16;
   /* Allocnos with the same regno are linked by the following member.
      Allocnos corresponding to inner loops are first in the list (it
      corresponds to depth-first traverse of the loops).  */
@@ -430,6 +433,7 @@ struct ira_allocno
 #define ALLOCNO_BAD_SPILL_P(A) ((A)->bad_spill_p)
 #define ALLOCNO_ASSIGNED_P(A) ((A)->assigned_p)
 #define ALLOCNO_MODE(A) ((A)->mode)
+#define ALLOCNO_WMODE(A) ((A)->wmode)
 #define ALLOCNO_PREFS(A) ((A)->allocno_prefs)
 #define ALLOCNO_COPIES(A) ((A)->allocno_copies)
 #define ALLOCNO_HARD_REG_COSTS(A) ((A)->hard_reg_costs)
index 4d91d21..fb0650e 100644 (file)
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -4434,6 +4434,12 @@ rtx_moveable_p (rtx *loc, enum op_type type)
     case CLOBBER:
       return rtx_moveable_p (&SET_DEST (x), OP_OUT);
 
+    case UNSPEC_VOLATILE:
+      /* It is a bad idea to consider insns with with such rtl
+        as moveable ones.  The insn scheduler also considers them as barrier
+        for a reason.  */
+      return false;
+
     default:
       break;
     }
@@ -5347,7 +5353,18 @@ ira (FILE *f)
              ira_allocno_iterator ai;
 
              FOR_EACH_ALLOCNO (a, ai)
-               ALLOCNO_REGNO (a) = REGNO (ALLOCNO_EMIT_DATA (a)->reg);
+               {
+                 int old_regno = ALLOCNO_REGNO (a);
+                 int new_regno = REGNO (ALLOCNO_EMIT_DATA (a)->reg);
+
+                 ALLOCNO_REGNO (a) = new_regno;
+
+                 if (old_regno != new_regno)
+                   setup_reg_classes (new_regno, reg_preferred_class (old_regno),
+                                      reg_alternate_class (old_regno),
+                                      reg_allocno_class (old_regno));
+               }
+
            }
          else
            {
index 8dba8fa..d2677be 100644 (file)
@@ -1,3 +1,11 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-06-26  Jakub Jelinek  <jakub@redhat.com>
+
+       * jcf-dump.c: Update displayed copyright years.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 0a9cce1..c89b76a 100644 (file)
@@ -1227,7 +1227,7 @@ static void
 version (void)
 {
   printf ("jcf-dump %s%s\n\n", pkgversion_string, version_string);
-  printf ("Copyright %s 2014 Free Software Foundation, Inc.\n", _("(C)"));
+  printf ("Copyright %s 2015 Free Software Foundation, Inc.\n", _("(C)"));
   printf (_("This is free software; see the source for copying conditions.  There is NO\n"
            "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"));
   exit (0);
index e6dabd0..d41373b 100644 (file)
@@ -133,7 +133,30 @@ cleanup_barriers (void)
          if (BARRIER_P (prev))
            delete_insn (insn);
          else if (prev != PREV_INSN (insn))
-           reorder_insns_nobb (insn, insn, prev);
+           {
+             basic_block bb = BLOCK_FOR_INSN (prev);
+             rtx end = PREV_INSN (insn);
+             reorder_insns_nobb (insn, insn, prev);
+             if (bb)
+               {
+                 /* If the backend called in machine reorg compute_bb_for_insn
+                    and didn't free_bb_for_insn again, preserve basic block
+                    boundaries.  Move the end of basic block to PREV since
+                    it is followed by a barrier now, and clear BLOCK_FOR_INSN
+                    on the following notes.
+                    ???  Maybe the proper solution for the targets that have
+                    cfg around after machine reorg is not to run cleanup_barriers
+                    pass at all.  */
+                 BB_END (bb) = prev;
+                 do
+                   {
+                     prev = NEXT_INSN (prev);
+                     if (prev != insn && BLOCK_FOR_INSN (prev) == bb)
+                       BLOCK_FOR_INSN (prev) = NULL;
+                   }
+                 while (prev != end);
+               }
+           }
        }
     }
   return 0;
index ac5ffd4..2ec160b 100644 (file)
@@ -849,6 +849,7 @@ spill_for (int regno, bitmap spilled_pseudo_bitmap, bool first_p)
   enum reg_class rclass;
   unsigned int spill_regno, reload_regno, uid;
   int insn_pseudos_num, best_insn_pseudos_num;
+  int bad_spills_num, smallest_bad_spills_num;
   lra_live_range_t r;
   bitmap_iterator bi;
 
@@ -867,6 +868,7 @@ spill_for (int regno, bitmap spilled_pseudo_bitmap, bool first_p)
   best_hard_regno = -1;
   best_cost = INT_MAX;
   best_insn_pseudos_num = INT_MAX;
+  smallest_bad_spills_num = INT_MAX;
   rclass_size = ira_class_hard_regs_num[rclass];
   mode = PSEUDO_REGNO_MODE (regno);
   /* Invalidate try_hard_reg_pseudos elements.  */
@@ -895,6 +897,7 @@ spill_for (int regno, bitmap spilled_pseudo_bitmap, bool first_p)
            && ! bitmap_bit_p (&lra_optional_reload_pseudos, spill_regno))
          goto fail;
       insn_pseudos_num = 0;
+      bad_spills_num = 0;
       if (lra_dump_file != NULL)
        fprintf (lra_dump_file, "        Trying %d:", hard_regno);
       sparseset_clear (live_range_reload_inheritance_pseudos);
@@ -902,6 +905,8 @@ spill_for (int regno, bitmap spilled_pseudo_bitmap, bool first_p)
        {
          if (bitmap_bit_p (&insn_conflict_pseudos, spill_regno))
            insn_pseudos_num++;
+         if (spill_regno >= (unsigned int) lra_bad_spill_regno_start)
+           bad_spills_num++;
          for (r = lra_reg_info[spill_regno].live_ranges;
               r != NULL;
               r = r->next)
@@ -972,15 +977,19 @@ spill_for (int regno, bitmap spilled_pseudo_bitmap, bool first_p)
            }
          if (best_insn_pseudos_num > insn_pseudos_num
              || (best_insn_pseudos_num == insn_pseudos_num
-                 && best_cost > cost))
+                 && (bad_spills_num < smallest_bad_spills_num
+                     || (bad_spills_num == smallest_bad_spills_num
+                         && best_cost > cost))))
            {
              best_insn_pseudos_num = insn_pseudos_num;
+             smallest_bad_spills_num = bad_spills_num;
              best_cost = cost;
              best_hard_regno = hard_regno;
              bitmap_copy (&best_spill_pseudos_bitmap, &spill_pseudos_bitmap);
              if (lra_dump_file != NULL)
-               fprintf (lra_dump_file, "        Now best %d(cost=%d)\n",
-                        hard_regno, cost);
+               fprintf (lra_dump_file,
+                        "       Now best %d(cost=%d, bad_spills=%d, insn_pseudos=%d)\n",
+                        hard_regno, cost, bad_spills_num, insn_pseudos_num);
            }
          assign_temporarily (regno, -1);
          for (j = 0; j < n; j++)
index 8746968..ae8f3cd 100644 (file)
@@ -144,6 +144,10 @@ static basic_block curr_bb;
 static lra_insn_recog_data_t curr_id;
 static struct lra_static_insn_data *curr_static_id;
 static enum machine_mode curr_operand_mode[MAX_RECOG_OPERANDS];
+/* Mode of the register substituted by its equivalence with VOIDmode
+   (e.g. constant) and whose subreg is given operand of the current
+   insn.  VOIDmode in all other cases.  */
+static machine_mode original_subreg_reg_mode[MAX_RECOG_OPERANDS];
 
 \f
 
@@ -1235,13 +1239,13 @@ static int valid_address_p (enum machine_mode mode, rtx addr, addr_space_t as);
 
 /* Make reloads for subreg in operand NOP with internal subreg mode
    REG_MODE, add new reloads for further processing.  Return true if
-   any reload was generated.  */
+   any change was done.  */
 static bool
 simplify_operand_subreg (int nop, enum machine_mode reg_mode)
 {
   int hard_regno;
   rtx before, after;
-  enum machine_mode mode;
+  enum machine_mode mode, innermode;
   rtx reg, new_reg;
   rtx operand = *curr_id->operand_loc[nop];
   enum reg_class regclass;
@@ -1254,6 +1258,7 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
 
   mode = GET_MODE (operand);
   reg = SUBREG_REG (operand);
+  innermode = GET_MODE (reg);
   type = curr_static_id->operand[nop].type;
   /* If we change address for paradoxical subreg of memory, the
      address might violate the necessary alignment or the access might
@@ -1272,7 +1277,7 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
       alter_subreg (curr_id->operand_loc[nop], false);
       subst = *curr_id->operand_loc[nop];
       lra_assert (MEM_P (subst));
-      if (! valid_address_p (GET_MODE (reg), XEXP (reg, 0),
+      if (! valid_address_p (innermode, XEXP (reg, 0),
                             MEM_ADDR_SPACE (reg))
          || valid_address_p (GET_MODE (subst), XEXP (subst, 0),
                              MEM_ADDR_SPACE (subst)))
@@ -1287,6 +1292,20 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
       alter_subreg (curr_id->operand_loc[nop], false);
       return true;
     }
+  else if (CONSTANT_P (reg))
+    {
+      /* Try to simplify subreg of constant.  It is usually result of
+        equivalence substitution.  */
+      if (innermode == VOIDmode
+         && (innermode = original_subreg_reg_mode[nop]) == VOIDmode)
+       innermode = curr_static_id->operand[nop].mode;
+      if ((new_reg = simplify_subreg (mode, reg, innermode,
+                                     SUBREG_BYTE (operand))) != NULL_RTX)
+       {
+         *curr_id->operand_loc[nop] = new_reg;
+         return true;
+       }
+    }
   /* Put constant into memory when we have mixed modes.  It generates
      a better code in most cases as it does not need a secondary
      reload memory.  It also prevents LRA looping when LRA is using
@@ -1306,9 +1325,9 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
        && (hard_regno = lra_get_regno_hard_regno (REGNO (reg))) >= 0
        /* Don't reload paradoxical subregs because we could be looping
          having repeatedly final regno out of hard regs range.  */
-       && (hard_regno_nregs[hard_regno][GET_MODE (reg)]
+       && (hard_regno_nregs[hard_regno][innermode]
           >= hard_regno_nregs[hard_regno][mode])
-       && simplify_subreg_regno (hard_regno, GET_MODE (reg),
+       && simplify_subreg_regno (hard_regno, innermode,
                                 SUBREG_BYTE (operand), mode) < 0
        /* Don't reload subreg for matching reload.  It is actually
          valid subreg in LRA.  */
@@ -1334,7 +1353,7 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
          bitmap_set_bit (&lra_subreg_reload_pseudos, REGNO (new_reg));
 
          insert_before = (type != OP_OUT
-                          || GET_MODE_SIZE (GET_MODE (reg)) > GET_MODE_SIZE (mode));
+                          || GET_MODE_SIZE (innermode) > GET_MODE_SIZE (mode));
          insert_after = (type != OP_IN);
          insert_move_for_subreg (insert_before ? &before : NULL,
                                  insert_after ? &after : NULL,
@@ -1377,7 +1396,7 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
   else if (REG_P (reg)
           && REGNO (reg) >= FIRST_PSEUDO_REGISTER
           && (hard_regno = lra_get_regno_hard_regno (REGNO (reg))) >= 0
-          && (hard_regno_nregs[hard_regno][GET_MODE (reg)]
+          && (hard_regno_nregs[hard_regno][innermode]
               < hard_regno_nregs[hard_regno][mode])
           && (regclass = lra_get_allocno_class (REGNO (reg)))
           && (type != OP_IN
@@ -1395,7 +1414,7 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode)
          bool insert_before, insert_after;
 
          PUT_MODE (new_reg, mode);
-          subreg = simplify_gen_subreg (GET_MODE (reg), new_reg, mode, 0);
+          subreg = simplify_gen_subreg (innermode, new_reg, mode, 0);
          bitmap_set_bit (&lra_subreg_reload_pseudos, REGNO (new_reg));
 
          insert_before = (type != OP_OUT);
@@ -3184,6 +3203,9 @@ swap_operands (int nop)
   enum machine_mode mode = curr_operand_mode[nop];
   curr_operand_mode[nop] = curr_operand_mode[nop + 1];
   curr_operand_mode[nop + 1] = mode;
+  mode = original_subreg_reg_mode[nop];
+  original_subreg_reg_mode[nop] = original_subreg_reg_mode[nop + 1];
+  original_subreg_reg_mode[nop + 1] = mode;
   rtx x = *curr_id->operand_loc[nop];
   *curr_id->operand_loc[nop] = *curr_id->operand_loc[nop + 1];
   *curr_id->operand_loc[nop + 1] = x;
@@ -3280,14 +3302,19 @@ curr_insn_transform (void)
       if (GET_CODE (old) == SUBREG)
        old = SUBREG_REG (old);
       subst = get_equiv_with_elimination (old, curr_insn);
+      original_subreg_reg_mode[i] = VOIDmode;
       if (subst != old)
        {
          subst = copy_rtx (subst);
          lra_assert (REG_P (old));
-         if (GET_CODE (op) == SUBREG)
-           SUBREG_REG (op) = subst;
-         else
+         if (GET_CODE (op) != SUBREG)
            *curr_id->operand_loc[i] = subst;
+         else
+           {
+             SUBREG_REG (op) = subst;
+             if (GET_MODE (subst) == VOIDmode)
+               original_subreg_reg_mode[i] = GET_MODE (old);
+           }
          if (lra_dump_file != NULL)
            {
              fprintf (lra_dump_file,
index 7262087..7af67f3 100644 (file)
@@ -312,6 +312,7 @@ extern bool lra_former_scratch_operand_p (rtx, int);
 
 extern int lra_new_regno_start;
 extern int lra_constraint_new_regno_start;
+extern int lra_bad_spill_regno_start;
 extern bitmap_head lra_inheritance_pseudos;
 extern bitmap_head lra_split_regs;
 extern bitmap_head lra_subreg_reload_pseudos;
index 8444ade..6b8efdc 100644 (file)
@@ -565,7 +565,15 @@ process_bb_lives (basic_block bb, int &curr_point)
          dst_regno = REGNO (SET_DEST (set));
          if (dst_regno >= lra_constraint_new_regno_start
              && src_regno >= lra_constraint_new_regno_start)
-           lra_create_copy (dst_regno, src_regno, freq);
+           {
+             /* It might be still an original (non-reload) insn with
+                one unused output and a constraint requiring to use
+                the same reg for input/output operands. In this case
+                dst_regno and src_regno have the same value, we don't
+                need a misleading copy for this case.  */
+             if (dst_regno != src_regno)
+               lra_create_copy (dst_regno, src_regno, freq);
+           }
          else if (dst_regno >= lra_constraint_new_regno_start)
            {
              if ((hard_regno = src_regno) >= FIRST_PSEUDO_REGISTER)
index 69b08dc..ed23da3 100644 (file)
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -2215,6 +2215,10 @@ int lra_new_regno_start;
 /* Start of reload pseudo regnos before the new spill pass.  */
 int lra_constraint_new_regno_start;
 
+/* Avoid spilling pseudos with regno more than the following value if
+   it is possible.  */
+int lra_bad_spill_regno_start;
+
 /* Inheritance pseudo regnos before the new spill pass.         */
 bitmap_head lra_inheritance_pseudos;
 
@@ -2306,6 +2310,7 @@ lra (FILE *f)
      permit changing reg classes for pseudos created by this
      simplification.  */
   lra_constraint_new_regno_start = lra_new_regno_start = max_reg_num ();
+  lra_bad_spill_regno_start = INT_MAX;
   remove_scratches ();
   scratch_p = lra_constraint_new_regno_start != max_reg_num ();
 
@@ -2418,6 +2423,12 @@ lra (FILE *f)
         some eliminations.  So update the offsets here.  */
       lra_eliminate (false, false);
       lra_constraint_new_regno_start = max_reg_num ();
+      if (lra_bad_spill_regno_start == INT_MAX
+         && lra_inheritance_iter > LRA_MAX_INHERITANCE_PASSES)
+       /* After switching off inheritance and rematerialization
+          passes, avoid spilling reload pseudos will be created to
+          prevent LRA cycling in some complicated cases.  */
+       lra_bad_spill_regno_start = lra_constraint_new_regno_start;
       lra_constraint_new_insn_uid_start = get_max_uid ();
       lra_assignment_iter_after_spill = 0;
     }
index 173067f..9e6915f 100644 (file)
@@ -793,7 +793,8 @@ compute_ltrans_boundary (lto_symtab_encoder_t in_encoder)
       if (DECL_ABSTRACT_ORIGIN (node->decl))
        {
          struct cgraph_node *origin_node
-         = cgraph_get_node (DECL_ABSTRACT_ORIGIN (node->decl));
+         = cgraph_get_create_node (DECL_ABSTRACT_ORIGIN (node->decl));
+         origin_node->used_as_abstract_origin = true;
          add_node_to (encoder, origin_node, true);
        }
     }
index 6b5df1a..2a022de 100644 (file)
@@ -135,8 +135,12 @@ tree_is_indexable (tree t)
   /* Parameters and return values of functions of variably modified types
      must go to global stream, because they may be used in the type
      definition.  */
-  if (TREE_CODE (t) == PARM_DECL || TREE_CODE (t) == RESULT_DECL)
+  if ((TREE_CODE (t) == PARM_DECL || TREE_CODE (t) == RESULT_DECL)
+      && DECL_CONTEXT (t))
     return variably_modified_type_p (TREE_TYPE (DECL_CONTEXT (t)), NULL_TREE);
+  /* IMPORTED_DECL is put into BLOCK and thus it never can be shared.  */
+  else if (TREE_CODE (t) == IMPORTED_DECL)
+    return false;
   else if (((TREE_CODE (t) == VAR_DECL && !TREE_STATIC (t))
            || TREE_CODE (t) == TYPE_DECL
            || TREE_CODE (t) == CONST_DECL
index 8aed890..bf67693 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 507e32b..ee722a8 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 307fcaa..1f3f906 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index f77df89..b6ddf48 100644 (file)
@@ -1483,7 +1483,8 @@ fixup_child_record_type (omp_context *ctx)
       layout_type (type);
     }
 
-  TREE_TYPE (ctx->receiver_decl) = build_pointer_type (type);
+  TREE_TYPE (ctx->receiver_decl)
+    = build_qualified_type (build_reference_type (type), TYPE_QUAL_RESTRICT);
 }
 
 /* Instantiate decls as necessary in CTX to satisfy the data sharing
@@ -1633,7 +1634,8 @@ scan_sharing_clauses (tree clauses, omp_context *ctx)
                 #pragma omp target data, there is nothing to map for
                 those.  */
              if (gimple_omp_target_kind (ctx->stmt) == GF_OMP_TARGET_KIND_DATA
-                 && !POINTER_TYPE_P (TREE_TYPE (decl)))
+                 && !POINTER_TYPE_P (TREE_TYPE (decl))
+                 && !OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION (c))
                break;
            }
          if (DECL_P (decl))
@@ -4784,7 +4786,10 @@ expand_omp_taskreg (struct omp_region *region)
   child_cfun = DECL_STRUCT_FUNCTION (child_fn);
 
   entry_bb = region->entry;
-  exit_bb = region->exit;
+  if (gimple_code (entry_stmt) == GIMPLE_OMP_TASK)
+    exit_bb = region->cont;
+  else
+    exit_bb = region->exit;
 
   if (is_combined_parallel (region))
     ws_args = region->ws_args;
@@ -4833,7 +4838,9 @@ expand_omp_taskreg (struct omp_region *region)
         variable.  In which case, we need to keep the assignment.  */
       if (gimple_omp_taskreg_data_arg (entry_stmt))
        {
-         basic_block entry_succ_bb = single_succ (entry_bb);
+         basic_block entry_succ_bb
+           = single_succ_p (entry_bb) ? single_succ (entry_bb)
+                                      : FALLTHRU_EDGE (entry_bb)->dest;
          gimple_stmt_iterator gsi;
          tree arg, narg;
          gimple parcopy_stmt = NULL;
@@ -4922,14 +4929,28 @@ expand_omp_taskreg (struct omp_region *region)
       gsi_remove (&gsi, true);
       e = split_block (entry_bb, stmt);
       entry_bb = e->dest;
-      single_succ_edge (entry_bb)->flags = EDGE_FALLTHRU;
+      edge e2 = NULL;
+      if (gimple_code (entry_stmt) == GIMPLE_OMP_PARALLEL)
+       single_succ_edge (entry_bb)->flags = EDGE_FALLTHRU;
+      else
+       {
+         e2 = make_edge (e->src, BRANCH_EDGE (entry_bb)->dest, EDGE_ABNORMAL);
+         gcc_assert (e2->dest == region->exit);
+         remove_edge (BRANCH_EDGE (entry_bb));
+         set_immediate_dominator (CDI_DOMINATORS, e2->dest, e->src);
+         gsi = gsi_last_bb (region->exit);
+         gcc_assert (!gsi_end_p (gsi)
+                     && gimple_code (gsi_stmt (gsi)) == GIMPLE_OMP_RETURN);
+         gsi_remove (&gsi, true);
+       }
 
-      /* Convert GIMPLE_OMP_RETURN into a RETURN_EXPR.  */
+      /* Convert GIMPLE_OMP_{RETURN,CONTINUE} into a RETURN_EXPR.  */
       if (exit_bb)
        {
          gsi = gsi_last_bb (exit_bb);
          gcc_assert (!gsi_end_p (gsi)
-                     && gimple_code (gsi_stmt (gsi)) == GIMPLE_OMP_RETURN);
+                     && (gimple_code (gsi_stmt (gsi))
+                         == (e2 ? GIMPLE_OMP_CONTINUE : GIMPLE_OMP_RETURN)));
          stmt = gimple_build_return (NULL);
          gsi_insert_after (&gsi, stmt, GSI_SAME_STMT);
          gsi_remove (&gsi, true);
@@ -4950,6 +4971,14 @@ expand_omp_taskreg (struct omp_region *region)
       new_bb = move_sese_region_to_fn (child_cfun, entry_bb, exit_bb, block);
       if (exit_bb)
        single_succ_edge (new_bb)->flags = EDGE_FALLTHRU;
+      if (e2)
+       {
+         basic_block dest_bb = e2->dest;
+         if (!exit_bb)
+           make_edge (new_bb, dest_bb, EDGE_FALLTHRU);
+         remove_edge (e2);
+         set_immediate_dominator (CDI_DOMINATORS, dest_bb, new_bb);
+       }
       /* When the OMP expansion process cannot guarantee an up-to-date
          loop tree arrange for the child function to fixup loops.  */
       if (loops_state_satisfies_p (LOOPS_NEED_FIXUP))
@@ -9699,6 +9728,10 @@ lower_omp_taskreg (gimple_stmt_iterator *gsi_p, omp_context *ctx)
     gimple_seq_add_stmt (&new_body, gimple_build_label (ctx->cancel_label));
   gimple_seq_add_seq (&new_body, par_olist);
   new_body = maybe_catch_exception (new_body);
+  if (gimple_code (stmt) == GIMPLE_OMP_TASK)
+    gimple_seq_add_stmt (&new_body,
+                        gimple_build_omp_continue (integer_zero_node,
+                                                   integer_zero_node));
   gimple_seq_add_stmt (&new_body, gimple_build_omp_return (false));
   gimple_omp_set_body (stmt, new_body);
 
@@ -10699,6 +10732,10 @@ make_gimple_omp_edges (basic_block bb, struct omp_region **region,
         somewhere other than the next block.  This will be
         created later.  */
       cur_region->exit = bb;
+      if (cur_region->type == GIMPLE_OMP_TASK)
+       /* Add an edge corresponding to not scheduling the task
+          immediately.  */
+       make_edge (cur_region->entry, bb, EDGE_ABNORMAL);
       fallthru = cur_region->type != GIMPLE_OMP_SECTION;
       cur_region = cur_region->outer;
       break;
@@ -10747,6 +10784,10 @@ make_gimple_omp_edges (basic_block bb, struct omp_region **region,
          }
          break;
 
+       case GIMPLE_OMP_TASK:
+         fallthru = true;
+         break;
+
        default:
          gcc_unreachable ();
        }
@@ -11105,9 +11146,11 @@ simd_clone_mangle (struct cgraph_node *node,
     }
 
   pp_underscore (&pp);
-  pp_string (&pp,
-            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (node->decl)));
-  const char *str = pp_formatted_text (&pp);
+  const char *str = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (node->decl));
+  if (*str == '*')
+    ++str;
+  pp_string (&pp, str);
+  str = pp_formatted_text (&pp);
 
   /* If there already is a SIMD clone with the same mangled name, don't
      add another one.  This can happen e.g. for
@@ -11181,24 +11224,24 @@ simd_clone_adjust_return_type (struct cgraph_node *node)
   if (orig_rettype == void_type_node)
     return NULL_TREE;
   TREE_TYPE (fndecl) = build_distinct_type_copy (TREE_TYPE (fndecl));
-  if (INTEGRAL_TYPE_P (TREE_TYPE (TREE_TYPE (fndecl)))
-      || POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (fndecl))))
+  t = TREE_TYPE (TREE_TYPE (fndecl));
+  if (INTEGRAL_TYPE_P (t) || POINTER_TYPE_P (t))
     veclen = node->simdclone->vecsize_int;
   else
     veclen = node->simdclone->vecsize_float;
-  veclen /= GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (TREE_TYPE (fndecl))));
+  veclen /= GET_MODE_BITSIZE (TYPE_MODE (t));
   if (veclen > node->simdclone->simdlen)
     veclen = node->simdclone->simdlen;
+  if (POINTER_TYPE_P (t))
+    t = pointer_sized_int_node;
   if (veclen == node->simdclone->simdlen)
-    TREE_TYPE (TREE_TYPE (fndecl))
-      = build_vector_type (TREE_TYPE (TREE_TYPE (fndecl)),
-                          node->simdclone->simdlen);
+    t = build_vector_type (t, node->simdclone->simdlen);
   else
     {
-      t = build_vector_type (TREE_TYPE (TREE_TYPE (fndecl)), veclen);
+      t = build_vector_type (t, veclen);
       t = build_array_type_nelts (t, node->simdclone->simdlen / veclen);
-      TREE_TYPE (TREE_TYPE (fndecl)) = t;
     }
+  TREE_TYPE (TREE_TYPE (fndecl)) = t;
   if (!node->definition)
     return NULL_TREE;
 
@@ -11287,7 +11330,10 @@ simd_clone_adjust_argument_types (struct cgraph_node *node)
          if (veclen > node->simdclone->simdlen)
            veclen = node->simdclone->simdlen;
          adj.arg_prefix = "simd";
-         adj.type = build_vector_type (parm_type, veclen);
+         if (POINTER_TYPE_P (parm_type))
+           adj.type = build_vector_type (pointer_sized_int_node, veclen);
+         else
+           adj.type = build_vector_type (parm_type, veclen);
          node->simdclone->args[i].vector_type = adj.type;
          for (j = veclen; j < node->simdclone->simdlen; j += veclen)
            {
@@ -11328,7 +11374,10 @@ simd_clone_adjust_argument_types (struct cgraph_node *node)
       veclen /= GET_MODE_BITSIZE (TYPE_MODE (base_type));
       if (veclen > node->simdclone->simdlen)
        veclen = node->simdclone->simdlen;
-      adj.type = build_vector_type (base_type, veclen);
+      if (POINTER_TYPE_P (base_type))
+       adj.type = build_vector_type (pointer_sized_int_node, veclen);
+      else
+       adj.type = build_vector_type (base_type, veclen);
       adjustments.safe_push (adj);
 
       for (j = veclen; j < node->simdclone->simdlen; j += veclen)
index 23a4a9c..3738720 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 0481d7d..be305de 100644 (file)
@@ -2627,9 +2627,14 @@ constrain_operands (int strict)
                      break;
                    win = 1;
                  }
-               /* Before reload, accept what reload can turn into mem.  */
+               /* Before reload, accept what reload can turn into mem.  */
                else if (strict < 0 && CONSTANT_P (op))
                  win = 1;
+               /* Before reload, accept a pseudo,
+                  since LRA can turn it into a mem.  */
+               else if (strict < 0 && targetm.lra_p () && REG_P (op)
+                        && REGNO (op) >= FIRST_PSEUDO_REGISTER)
+                 win = 1;
                /* During reload, accept a pseudo  */
                else if (reload_in_progress && REG_P (op)
                         && REGNO (op) >= FIRST_PSEUDO_REGISTER)
@@ -2708,6 +2713,10 @@ constrain_operands (int strict)
                    /* Before reload, accept what reload can handle.  */
                    || (strict < 0
                        && (CONSTANT_P (op) || MEM_P (op)))
+                   /* Before reload, accept a pseudo,
+                      since LRA can turn it into a mem.  */
+                   || (strict < 0 && targetm.lra_p () && REG_P (op)
+                       && REGNO (op) >= FIRST_PSEUDO_REGISTER)
                    /* During reload, accept a pseudo  */
                    || (reload_in_progress && REG_P (op)
                        && REGNO (op) >= FIRST_PSEUDO_REGISTER))
@@ -2739,8 +2748,12 @@ constrain_operands (int strict)
                           /* Every memory operand can be reloaded to fit.  */
                           && ((strict < 0 && MEM_P (op))
                               /* Before reload, accept what reload can turn
-                                 into mem.  */
+                                 into mem.  */
                               || (strict < 0 && CONSTANT_P (op))
+                              /* Before reload, accept a pseudo,
+                                 since LRA can turn it into a mem.  */
+                              || (strict < 0 && targetm.lra_p () && REG_P (op)
+                                  && REGNO (op) >= FIRST_PSEUDO_REGISTER)
                               /* During reload, accept a pseudo  */
                               || (reload_in_progress && REG_P (op)
                                   && REGNO (op) >= FIRST_PSEUDO_REGISTER)))
index 0d5090b..67fc9c3 100644 (file)
--- a/gcc/ree.c
+++ b/gcc/ree.c
@@ -261,6 +261,50 @@ typedef struct ext_cand
 
 static int max_insn_uid;
 
+/* Update or remove REG_EQUAL or REG_EQUIV notes for INSN.  */
+
+static bool
+update_reg_equal_equiv_notes (rtx insn, enum machine_mode new_mode,
+                             enum machine_mode old_mode, enum rtx_code code)
+{
+  rtx *loc = &REG_NOTES (insn);
+  while (*loc)
+    {
+      enum reg_note kind = REG_NOTE_KIND (*loc);
+      if (kind == REG_EQUAL || kind == REG_EQUIV)
+       {
+         rtx orig_src = XEXP (*loc, 0);
+         /* Update equivalency constants.  Recall that RTL constants are
+            sign-extended.  */
+         if (GET_CODE (orig_src) == CONST_INT
+             && HOST_BITS_PER_WIDE_INT >= GET_MODE_BITSIZE (new_mode))
+           {
+             if (INTVAL (orig_src) >= 0 || code == SIGN_EXTEND)
+               /* Nothing needed.  */;
+             else
+               {
+                 /* Zero-extend the negative constant by masking out the
+                    bits outside the source mode.  */
+                 rtx new_const_int
+                   = gen_int_mode (INTVAL (orig_src)
+                                   & GET_MODE_MASK (old_mode),
+                                   new_mode);
+                 if (!validate_change (insn, &XEXP (*loc, 0),
+                                       new_const_int, true))
+                   return false;
+               }
+             loc = &XEXP (*loc, 1);
+           }
+         /* Drop all other notes, they assume a wrong mode.  */
+         else if (!validate_change (insn, loc, XEXP (*loc, 1), true))
+           return false;
+       }
+      else
+       loc = &XEXP (*loc, 1);
+    }
+  return true;
+}
+
 /* Given a insn (CURR_INSN), an extension candidate for removal (CAND)
    and a pointer to the SET rtx (ORIG_SET) that needs to be modified,
    this code modifies the SET rtx to a new SET rtx that extends the
@@ -282,6 +326,7 @@ static bool
 combine_set_extension (ext_cand *cand, rtx curr_insn, rtx *orig_set)
 {
   rtx orig_src = SET_SRC (*orig_set);
+  enum machine_mode orig_mode = GET_MODE (SET_DEST (*orig_set));
   rtx new_set;
   rtx cand_pat = PATTERN (cand->insn);
 
@@ -318,9 +363,8 @@ combine_set_extension (ext_cand *cand, rtx curr_insn, rtx *orig_set)
        {
          /* Zero-extend the negative constant by masking out the bits outside
             the source mode.  */
-         enum machine_mode src_mode = GET_MODE (SET_DEST (*orig_set));
          rtx new_const_int
-           = gen_int_mode (INTVAL (orig_src) & GET_MODE_MASK (src_mode),
+           = gen_int_mode (INTVAL (orig_src) & GET_MODE_MASK (orig_mode),
                            GET_MODE (new_reg));
          new_set = gen_rtx_SET (VOIDmode, new_reg, new_const_int);
        }
@@ -359,7 +403,9 @@ combine_set_extension (ext_cand *cand, rtx curr_insn, rtx *orig_set)
 
   /* This change is a part of a group of changes.  Hence,
      validate_change will not try to commit the change.  */
-  if (validate_change (curr_insn, orig_set, new_set, true))
+  if (validate_change (curr_insn, orig_set, new_set, true)
+      && update_reg_equal_equiv_notes (curr_insn, cand->mode, orig_mode,
+                                      cand->code))
     {
       if (dump_file)
         {
@@ -409,7 +455,9 @@ transform_ifelse (ext_cand *cand, rtx def_insn)
   ifexpr = gen_rtx_IF_THEN_ELSE (cand->mode, cond, map_srcreg, map_srcreg2);
   new_set = gen_rtx_SET (VOIDmode, map_dstreg, ifexpr);
 
-  if (validate_change (def_insn, &PATTERN (def_insn), new_set, true))
+  if (validate_change (def_insn, &PATTERN (def_insn), new_set, true)
+      && update_reg_equal_equiv_notes (def_insn, cand->mode, GET_MODE (dstreg),
+                                      cand->code))
     {
       if (dump_file)
         {
@@ -719,6 +767,17 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
        != REGNO (get_extended_src_reg (SET_SRC (PATTERN (cand->insn)))));
   if (copy_needed)
     {
+      /* Considering transformation of
+        (set (reg1) (expression))
+        ...
+        (set (reg2) (any_extend (reg1)))
+
+        into
+
+        (set (reg2) (any_extend (expression)))
+        (set (reg1) (reg2))
+        ...  */
+
       /* In theory we could handle more than one reaching def, it
         just makes the code to update the insn stream more complex.  */
       if (state->defs_list.length () != 1)
@@ -734,18 +793,6 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
       if (state->modified[INSN_UID (cand->insn)].kind != EXT_MODIFIED_NONE)
        return false;
 
-      /* Transformation of
-        (set (reg1) (expression))
-        (set (reg2) (any_extend (reg1)))
-        into
-        (set (reg2) (any_extend (expression)))
-        (set (reg1) (reg2))
-        is only valid for scalar integral modes, as it relies on the low
-        subreg of reg1 to have the value of (expression), which is not true
-        e.g. for vector modes.  */
-      if (!SCALAR_INT_MODE_P (GET_MODE (SET_DEST (PATTERN (cand->insn)))))
-       return false;
-
       /* There's only one reaching def.  */
       rtx def_insn = state->defs_list[0];
 
@@ -954,6 +1001,7 @@ add_removable_extension (const_rtx expr, rtx insn,
         different extension.  FIXME: this obviously can be improved.  */
       for (def = defs; def; def = def->next)
        if ((idx = def_map[INSN_UID (DF_REF_INSN (def->ref))])
+           && idx != -1U
            && (cand = &(*insn_list)[idx - 1])
            && cand->code != code)
          {
@@ -965,6 +1013,57 @@ add_removable_extension (const_rtx expr, rtx insn,
              }
            return;
          }
+       /* For vector mode extensions, ensure that all uses of the
+          XEXP (src, 0) register are the same extension (both code
+          and to which mode), as unlike integral extensions lowpart
+          subreg of the sign/zero extended register are not equal
+          to the original register, so we have to change all uses or
+          none.  */
+       else if (VECTOR_MODE_P (GET_MODE (XEXP (src, 0))))
+         {
+           if (idx == 0)
+             {
+               struct df_link *ref_chain, *ref_link;
+
+               ref_chain = DF_REF_CHAIN (def->ref);
+               for (ref_link = ref_chain; ref_link; ref_link = ref_link->next)
+                 {
+                   if (ref_link->ref == NULL
+                       || DF_REF_INSN_INFO (ref_link->ref) == NULL)
+                     {
+                       idx = -1U;
+                       break;
+                     }
+                   rtx use_insn = DF_REF_INSN (ref_link->ref);
+                   const_rtx use_set;
+                   if (use_insn == insn || DEBUG_INSN_P (use_insn))
+                     continue;
+                   if (!(use_set = single_set (use_insn))
+                       || !REG_P (SET_DEST (use_set))
+                       || GET_MODE (SET_DEST (use_set)) != GET_MODE (dest)
+                       || GET_CODE (SET_SRC (use_set)) != code
+                       || !rtx_equal_p (XEXP (SET_SRC (use_set), 0),
+                                        XEXP (src, 0)))
+                     {
+                       idx = -1U;
+                       break;
+                     }
+                 }
+               if (idx == -1U)
+                 def_map[INSN_UID (DF_REF_INSN (def->ref))] = idx;
+             }
+           if (idx == -1U)
+             {
+               if (dump_file)
+                 {
+                   fprintf (dump_file, "Cannot eliminate extension:\n");
+                   print_rtl_single (dump_file, insn);
+                   fprintf (dump_file,
+                            " because some vector uses aren't extension\n");
+                 }
+               return;
+             }
+         }
 
       /* Then add the candidate to the list and insert the reaching definitions
          into the definition map.  */
index 851daf3..e040509 100644 (file)
@@ -1622,6 +1622,7 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
                                               end_hard_regno (rel_mode,
                                                               regno),
                                               PATTERN (this_insn), inloc)
+           && ! find_reg_fusage (this_insn, USE, XEXP (note, 0))
            /* If this is also an output reload, IN cannot be used as
               the reload register if it is set in this insn unless IN
               is also OUT.  */
index 98fbacc..e99ef7b 100644 (file)
@@ -873,6 +873,17 @@ reg_set_between_p (const_rtx reg, const_rtx from_insn, const_rtx to_insn)
 int
 reg_set_p (const_rtx reg, const_rtx insn)
 {
+  /* After delay slot handling, call and branch insns might be in a
+     sequence.  Check all the elements there.  */
+  if (INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE)
+    {
+      for (int i = 0; i < XVECLEN (PATTERN (insn), 0); ++i)
+       if (reg_set_p (reg, XVECEXP (PATTERN (insn), 0, i)))
+         return true;
+
+      return false;
+    }
+
   /* We can be passed an insn or part of one.  If we are passed an insn,
      check if a side-effect of the insn clobbers REG.  */
   if (INSN_P (insn)
@@ -884,7 +895,7 @@ reg_set_p (const_rtx reg, const_rtx insn)
                                               GET_MODE (reg), REGNO (reg)))
                  || MEM_P (reg)
                  || find_reg_fusage (insn, CLOBBER, reg)))))
-    return 1;
+    return true;
 
   return set_of (reg, insn) != NULL_RTX;
 }
index 04af01e..037adef 100644 (file)
@@ -3633,7 +3633,21 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode,
          while (GET_MODE (vec) != mode
                 && GET_CODE (vec) == VEC_CONCAT)
            {
-             HOST_WIDE_INT vec_size = GET_MODE_SIZE (GET_MODE (XEXP (vec, 0)));
+             HOST_WIDE_INT vec_size;
+
+             if (CONST_INT_P (XEXP (vec, 0)))
+               {
+                 /* vec_concat of two const_ints doesn't make sense with
+                    respect to modes.  */
+                 if (CONST_INT_P (XEXP (vec, 1)))
+                   return 0;
+
+                 vec_size = GET_MODE_SIZE (GET_MODE (trueop0))
+                            - GET_MODE_SIZE (GET_MODE (XEXP (vec, 1)));
+               }
+             else
+               vec_size = GET_MODE_SIZE (GET_MODE (XEXP (vec, 0)));
+
              if (offset < vec_size)
                vec = XEXP (vec, 0);
              else
index 288821d..a4c7da9 100644 (file)
@@ -969,6 +969,7 @@ symtab_make_decl_local (tree decl)
   DECL_VISIBILITY_SPECIFIED (decl) = 0;
   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
   TREE_PUBLIC (decl) = 0;
+  DECL_DLLIMPORT_P (decl) = 0;
   if (!DECL_RTL_SET_P (decl))
     return;
 
@@ -1222,6 +1223,7 @@ symtab_nonoverwritable_alias (symtab_node *node)
 
   /* Otherwise create a new one.  */
   new_decl = copy_node (node->decl);
+  DECL_DLLIMPORT_P (new_decl) = 0;
   DECL_NAME (new_decl) = clone_function_name (node->decl, "localalias");
   if (TREE_CODE (new_decl) == FUNCTION_DECL)
     DECL_STRUCT_FUNCTION (new_decl) = NULL;
index cac2f59..7c1ea7a 100644 (file)
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-06-19  Christophe Lyon  <christophe.lyon@linaro.org>
+
+       Backport from mainline r224649.
+       2015-06-19  Christophe Lyon  <christophe.lyon@linaro.org>
+
+       * gcc.target/aarch64/pr62308.c: New test.
+
+2015-06-18  Richard Biener  <rguenther@suse.de>
+
+       * g++.dg/other/const4.C: New testcase.
+
+2015-06-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/66233
+       * gcc.c-torture/execute/pr66233.c: New test.
+
+2015-06-16  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+       PR target/66200
+       * g++.dg/abi/aarch64_guard1.C: Adjust.
+
+2015-06-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/63608
+       * gcc.c-torture/compile/pr63608.c: New test.
+
+2015-06-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/66470
+       * gcc.dg/tls/pr66470.c: New test.
+       * gcc.target/i386/pr66470.c: New test.
+
+2015-06-08  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline:
+       2015-06-03  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/66275
+       * gcc.target/i386/pr66275.c: New test.
+
+2015-06-04  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/66251
+       * gcc.dg/vect/pr66251.c: Fix expected vectorization.
+
+2015-06-03  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-05-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/65984
+       * c-c++-common/ubsan/pr65984.c: New test.
+
+       2015-04-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/65680
+       * gcc.c-torture/compile/pr65680.c: New test.
+
+       2015-03-23  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/65504
+       * gfortran.dg/pr65504.f90: New test.
+
+       2015-03-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/65450
+       * gfortran.dg/pr65450.f90: New test.
+
+       2015-03-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/65427
+       * gcc.c-torture/execute/pr65427.c: New test.
+
+       2015-03-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/65368
+       * gcc.target/i386/bmi2-bzhi-2.c: New test.
+
+       2015-02-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR gcov-profile/64634
+       * g++.dg/gcov/gcov-15.C: New test.
+
+2015-06-03  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2015-05-26  Michael Matz  <matz@suse.de>
+
+       PR middle-end/66251
+       * gcc.dg/vect/pr66251.c: New test.
+
+       2015-05-22  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/66251
+       * gfortran.fortran-torture/compile/pr66251.f90: New testcase.
+
+       2015-05-27  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/66272
+       * gcc.dg/torture/pr66272.c: New testcase.
+
+       2015-05-13  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/66123
+       * gcc.dg/torture/pr66123.c: New testcase.
+
+       2015-06-02  Richard Biener  <rguenther@suse.de>
+
+       PR debug/65549
+       * g++.dg/lto/pr65549_0.C: New testcase.
+
+       2015-03-23  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/65518
+       * gcc.dg/vect/pr65518.c: New testcase.
+
+2015-06-01  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.target/s390/hotpatch-compile-15.c: Remove dg-prune-output
+       directives.
+       (hp3, hp4): Add inline keyword.
+       * gcc.target/s390/hotpatch-19.c: Remove dg-prune-output directive.
+       (hp2): Add inline keyword.
+       * gcc.target/s390/hotpatch-19.c: Remove dg-prune-output directives.
+       (hp2): Add inline keyword.
+
+2015-06-01  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2015-05-29  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       PR target/66215
+       * gcc.target/s390/hotpatch-1.c: Remove optimization options from
+       dg-options.
+       * gcc.target/s390/hotpatch-10.c: Likewise.
+       * gcc.target/s390/hotpatch-11.c: Likewise.
+       * gcc.target/s390/hotpatch-12.c: Likewise.
+       * gcc.target/s390/hotpatch-17.c: Likewise.
+       * gcc.target/s390/hotpatch-18.c: Likewise.
+       * gcc.target/s390/hotpatch-20.c: Likewise.
+       * gcc.target/s390/hotpatch-21.c: Likewise.
+       * gcc.target/s390/hotpatch-22.c: Likewise.
+       * gcc.target/s390/hotpatch-23.c: Likewise.
+       * gcc.target/s390/hotpatch-24.c: Likewise.
+       * gcc.target/s390/hotpatch-2.c: Likewise.  Adjust scan-assembler
+       to check for the exact nops too.
+       * gcc.target/s390/hotpatch-3.c: Likewise.
+       * gcc.target/s390/hotpatch-4.c: Likewise.
+       * gcc.target/s390/hotpatch-5.c: Likewise.
+       * gcc.target/s390/hotpatch-6.c: Likewise.
+       * gcc.target/s390/hotpatch-7.c: Likewise.
+       * gcc.target/s390/hotpatch-8.c: Likewise.
+       * gcc.target/s390/hotpatch-9.c: Likewise.
+       * gcc.target/s390/hotpatch-14.c: Likewise.
+       * gcc.target/s390/hotpatch-15.c: Likewise.
+       * gcc.target/s390/hotpatch-16.c: Likewise.
+       * gcc.target/s390/hotpatch-19.c: Likewise.
+       * gcc.target/s390/hotpatch-25.c: Likewise.  Remove
+       scan-assembler-times counting number of .align directives.
+       * gcc.target/s390/hotpatch-13.c: Remove optimization options from
+       dg-options.  Remove scan-assembler-times counting number of .align
+       directives.
+       * gcc.target/s390/hotpatch-26.c: New file.
+       * gcc.target/s390/hotpatch-27.c: New file.
+       * gcc.target/s390/hotpatch-28.c: New file.
+       * gcc.target/s390/s390.exp: Run hotpatch-*.c tests as torture tests
+       using -Os -O0 -O1 -O2 -O3 options.
+
+2015-05-29  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backported from mainline
+       2015-03-23  Martin Sebor  <msebor@redhat.com>
+
+       PR testsuite/63175
+       * gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a-pr63175.c: Scan
+       assembly for lvx in addition to lxv.
+
+2015-05-26  Rohit Arul Raj  <rohitarulraj@freescale.com>
+
+       Backported from mainline
+       2015-05-14  Rohit Arul Raj  <rohitarulraj@freescale.com>
+
+       * gcc.target/powerpc/pr60158.c: New test.
+
+2015-05-16  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/66140
+       * gcc.target/alpha/pr66140.c: New test.
+
+2015-05-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/65990
+       * gcc.target/i386/pr65990.c: New test.
+
+2015-05-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       * g++.dg/cpp1y/auto-fn26.C (dg-do): Use c++1y target.
+
+2015-05-05  Shanyao chen  <chenshanyao@huawei.com>
+
+       Backported from mainline
+       2015-01-19  Jiong Wang  <jiong.wang@arm.com>
+
+       * gcc.target/aarch64/pr64304.c: New testcase.
+
+2015-05-05  Peter Bergner  <bergner@vnet.ibm.com>
+
+       Backport from mainline.
+       2015-04-27  Peter Bergner  <bergner@vnet.ibm.com>
+
+       PR target/64579
+       * gcc.target/powerpc/htm-1.c: New test.
+       * gcc.target/powerpc/htm-builtin-1.c (__builtin_tabortdc): Only test
+       on 64-bit compiles.
+       (__builtin_tabortdci): Likewise.
+       (__builtin_tcheck): Remove operand.
+       * lib/target-supports.exp (check_htm_hw_available): New function.
+
+2015-04-30  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline r222664
+       2015-04-30  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/crypto-builtin-2.c: Replace powerpc_vsx_ok
+       with powerpc_p8vector_ok.
+
+2015-04-30  Marek Polacek  <polacek@redhat.com>
+
+       PR tree-optimization/63551
+       * g++.dg/ipa/pr63551.C: New test.
+
+2015-04-29  Thomas Schwinge  <thomas@codesourcery.com>
+
+       Backport from trunk r222564:
+
+       2015-04-29  Thomas Schwinge  <thomas@codesourcery.com>
+
+       * g++.dg/gomp/tpl-target-update.C: New file.
+
+2015-04-28  Tejas Belagod  <tejas.belagod@arm.com>
+
+       Backport from mainline
+       2014-11-20  Tejas Belagod  <tejas.belagod@arm.com>
+
+       * gcc.target/aarch64/symbol-range.c: New.
+       * gcc.target/aarch64/symbol-range-tiny.c: New.
+
+2015-04-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline r222362
+       2015-04-23  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/crypto-builtin-2.c: New.
+
+2015-04-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline r222351
+       2015-04-22  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/swaps-p8-18.c: New test.
+
+2015-04-24  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline r222349
+       2015-04-22  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR target/65456
+       * gcc.dg/vect/bb-slp-24.c: Exclude test for POWER8.
+       * gcc.dg/vect/bb-slp-25.c: Likewise.
+       * gcc.dg/vect/bb-slp-29.c: Likewise.
+       * gcc.dg/vect/bb-slp-32.c: Replace vect_no_align with
+       vect_no_align && { ! vect_hw_misalign }.
+       * gcc.dg/vect/bb-slp-9.c: Likewise.
+       * gcc.dg/vect/costmodel/ppc/costmodel-slp-33.c: Exclude test for
+       vect_hw_misalign.
+       * gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c: Likewise.
+       * gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c: Adjust tests to
+       account for POWER8, where peeling for alignment is not needed.
+       * gcc.dg/vect/costmodel/ppc/costmodel-vect-outer-fir.c: Replace
+       vect_no_align with vect_no_align && { ! vect_hw_misalign }.
+       * gcc.dg.vect.if-cvt-stores-vect-ifcvt-18.c: Likewise.
+       * gcc.dg/vect/no-scevccp-outer-6-global.c: Likewise.
+       * gcc.dg/vect/no-scevccp-outer-6.c: Likewise.
+       * gcc.dg/vect/no-vfa-vect-43.c: Likewise.
+       * gcc.dg/vect/no-vfa-vect-57.c: Likewise.
+       * gcc.dg/vect/no-vfa-vect-61.c: Likewise.
+       * gcc.dg/vect/no-vfa-vect-depend-1.c: Likewise.
+       * gcc.dg/vect/no-vfa-vect-depend-2.c: Likewise.
+       * gcc.dg/vect/no-vfa-vect-depend-3.c: Likewise.
+       * gcc.dg/vect/pr16105.c: Likewise.
+       * gcc.dg/vect/pr20122.c: Likewise.
+       * gcc.dg/vect/pr33804.c: Likewise.
+       * gcc.dg/vect/pr33953.c: Likewise.
+       * gcc.dg/vect/pr56787.c: Likewise.
+       * gcc.dg/vect/pr58508.c: Likewise.
+       * gcc.dg/vect/slp-25.c: Likewise.
+       * gcc.dg/vect/vect-105-bit-array.c: Likewise.
+       * gcc.dg/vect/vect-105.c: Likewise.
+       * gcc.dg/vect/vect-27.c: Likewise.
+       * gcc.dg/vect/vect-29.c: Likewise.
+       * gcc.dg/vect/vect-33.c: Exclude unaligned access test for
+       POWER8.
+       * gcc.dg/vect/vect-42.c: Replace vect_no_align with vect_no_align
+       && { ! vect_hw_misalign }.
+       * gcc.dg/vect/vect-44.c: Likewise.
+       * gcc.dg/vect/vect-48.c: Likewise.
+       * gcc.dg/vect/vect-50.c: Likewise.
+       * gcc.dg/vect/vect-52.c: Likewise.
+       * gcc.dg/vect/vect-56.c: Likewise.
+       * gcc.dg/vect/vect-60.c: Likewise.
+       * gcc.dg/vect/vect-72.c: Likewise.
+       * gcc.dg/vect/vect-75-big-array.c: Likewise.
+       * gcc.dg/vect/vect-75.c: Likewise.
+       * gcc.dg/vect/vect-77-alignchecks.c: Likewise.
+       * gcc.dg/vect/vect-77-global.c: Likewise.
+       * gcc.dg/vect/vect-78-alignchecks.c: Likewise.
+       * gcc.dg/vect/vect-78-global.c: Likewise.
+       * gcc.dg/vect/vect-93.c: Likewise.
+       * gcc.dg/vect/vect-95.c: Likewise.
+       * gcc.dg/vect/vect-96.c: Likewise.
+       * gcc.dg/vect/vect-cond-1.c: Likewise.
+       * gcc.dg/vect/vect-cond-3.c: Likewise.
+       * gcc.dg/vect/vect-cond-4.c: Likewise.
+       * gcc.dg/vect/vect-cselim-1.c: Likewise.
+       * gcc.dg/vect/vect-multitypes-1.c: Likewise.
+       * gcc.dg/vect/vect-multitypes-3.c: Likewise.
+       * gcc.dg/vect/vect-multitypes-4.c: Likewise.
+       * gcc.dg/vect/vect-multitypes-6.c: Likewise.
+       * gcc.dg/vect/vect-nest-cycle-1.c: Likewise.
+       * gcc.dg/vect/vect-nest-cycle-2.c: Likewise.
+       * gcc.dg/vect/vect-outer-3a-big-array.c: Likewise.
+       * gcc.dg/vect/vect-outer-3a.c: Likewise.
+       * gcc.dg/vect/vect-outer-5.c: Likewise.
+       * gcc.dg/vect/vect-outer-fir-big-array.c: Likewise.
+       * gcc.dg/vect/vect-outer-fir-lb-big-array.c: Likewise.
+       * gcc.dg/vect/vect-outer-fir-lb.c: Likewise.
+       * gcc.dg/vect/vect-outer-fir.c: Likewise.
+       * gcc.dg/vect/vect-peel-3.c: Likewise.
+       * gcc.dg/vect/vect-peel-4.c: Likewise.
+       * gcc.dg/vect/vect-pre-interact.c: Likewise.
+       * gcc.target/powerpc/pr65456.c: New test.
+       * gcc.target/powerpc/vsx-vectorize-2.c: Exclude test for POWER8.
+       * gcc.target/powerpc/vsx-vectorize-4.c: Likewise.
+       * gcc.target/powerpc/vsx-vectorize-6.c: Likewise.
+       * gcc.target/powerpc/vsx-vectorize-7.c: Likewise.
+       * gfortran.dg/vect/vect-2.f90: Replace vect_no_align with
+       vect_no_align && { ! vect_hw_misalign }.
+       * gfortran.dg/vect/vect-3.f90: Likewise.
+       * gfortran.dg/vect/vect-4.f90: Likewise.
+       * gfortran.dg/vect/vect-5.f90: Likewise.
+       * lib/target-supports.exp (check_effective_target_vect_no_align):
+       Return 1 for POWER8.
+       (check_effective_target_vect_hw_misalign): Return 1 for POWER8.
+
+       Backport from mainline r222372
+       2015-04-23  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a.c: Replace
+       vect_no_align with vect_no_align && { ! vect_hw_misalign }.
+
+2015-04-18  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline r222205
+       2015-04-17  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR target/65787
+       * gcc.target/powerpc/pr65787.c: New.
+
+2015-04-16  Kirill Yukhin  <kirill.yukhin@intel.com>
+
+       PR target/65676
+       * gcc.target/i386/sse-25.c: New.
+
+2015-04-14  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/56674
+       PR fortran/58813
+       PR fortran/59016
+       PR fortran/59024
+       * gfortran.dg/used_types_27.f90: New.
+
+2015-04-07  Bin Cheng  <bin.cheng@arm.com>
+
+       Backport from trunk r221889
+       2015-04-07  Bin Cheng  <bin.cheng@arm.com>
+       * gcc.target/arm/pr65647.c: Add option "-mfloat-abi=soft".
+
+2015-04-05  Yvan Roux  <yvan.roux@linaro.org>
+
+       Backport from trunk r221867
+       2015-04-04  Vladimir Makarov <vmakarov@redhat.com>
+
+       PR target/65647
+       * gcc.target/arm/pr65647.c: New.
+       * gcc.target/arm/pr65647-2.c: New.
+
+2015-03-31  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       * gcc.target/s390/hotpatch-25.c: New test.
+       * gcc.target/s390/hotpatch-1.c: Update test.
+       * gcc.target/s390/hotpatch-10.c: Update test.
+       * gcc.target/s390/hotpatch-11.c: Update test.
+       * gcc.target/s390/hotpatch-12.c: Update test.
+       * gcc.target/s390/hotpatch-13.c: Update test.
+       * gcc.target/s390/hotpatch-14.c: Update test.
+       * gcc.target/s390/hotpatch-15.c: Update test.
+       * gcc.target/s390/hotpatch-16.c: Update test.
+       * gcc.target/s390/hotpatch-17.c: Update test.
+       * gcc.target/s390/hotpatch-18.c: Update test.
+       * gcc.target/s390/hotpatch-19.c: Update test.
+       * gcc.target/s390/hotpatch-2.c: Update test.
+       * gcc.target/s390/hotpatch-21.c: Update test.
+       * gcc.target/s390/hotpatch-22.c: Update test.
+       * gcc.target/s390/hotpatch-23.c: Update test.
+       * gcc.target/s390/hotpatch-24.c: Update test.
+       * gcc.target/s390/hotpatch-3.c: Update test.
+       * gcc.target/s390/hotpatch-4.c: Update test.
+       * gcc.target/s390/hotpatch-5.c: Update test.
+       * gcc.target/s390/hotpatch-6.c: Update test.
+       * gcc.target/s390/hotpatch-7.c: Update test.
+       * gcc.target/s390/hotpatch-8.c: Update test.
+       * gcc.target/s390/hotpatch-9.c: Update test.
+       * gcc.target/s390/hotpatch-compile-16.c: Update test.
+
+2015-03-28 Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libgfortran/65596
+       * gfortran.dg/namelist_86.f90: New test.
+
+2015-03-27  Vladimir Makarov  <vmakarov@redhat.com>
+
+       Backport from mainline
+       2015-01-30  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/64688
+       * g++.dg/pr64688-2.C: New.
+
+2015-03-26  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport r214254 and related tests from mainline
+       * gcc.target/powerpc/swaps-p8-1.c: New test.
+       * gcc.target/powerpc/swaps-p8-2.c: New test.
+       * gcc.target/powerpc/swaps-p8-3.c: New test.
+       * gcc.target/powerpc/swaps-p8-4.c: New test.
+       * gcc.target/powerpc/swaps-p8-5.c: New test.
+       * gcc.target/powerpc/swaps-p8-6.c: New test.
+       * gcc.target/powerpc/swaps-p8-7.c: New test.
+       * gcc.target/powerpc/swaps-p8-8.c: New test.
+       * gcc.target/powerpc/swaps-p8-9.c: New test.
+       * gcc.target/powerpc/swaps-p8-10.c: New test.
+       * gcc.target/powerpc/swaps-p8-11.c: New test.
+       * gcc.target/powerpc/swaps-p8-12.c: New test.
+       * gcc.target/powerpc/swaps-p8-13.c: New test.
+       * gcc.target/powerpc/swaps-p8-14.c: New test.
+       * gcc.target/powerpc/swaps-p8-15.c: New test.
+       * gcc.target/powerpc/swaps-p8-16.c: New test.
+       * gcc.target/powerpc/swaps-p8-17.c: New test.
+
+2015-03-26  Alan Modra  <amodra@gmail.com>
+
+       * gcc.target/powerpc/pr53199.c: Add extra functions.  Revert
+       2014-12-05 change.
+
+2015-03-24  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+
+       Backport from mainline:
+
+       2015-02-19  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+       PR testsuite/65116
+       * lib/target-supports.exp (check_compile): Check whether
+       additional_sources is defined before using it.
+
+       2015-02-19  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+       * lib/target-supports.exp (check_compile): Save/restore
+       additional_sources that may belong to an actual test.
+
+2015-03-24  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR rtl-optimization/60851
+       * gcc.target/i386/pr60851.c: New test.
+
+2015-03-23  Andre Vehreschild  <vehre@gmx.de>
+
+       Backport from mainline
+       PR fortran/60255
+       * gfortran.dg/unlimited_polymorphic_2.f03: Removed error.
+       Converted from dos to unix line endings.
+       * gfortran.dg/unlimited_polymorphic_20.f03: New test.
+
+2015-03-23  Yvan Roux  <yvan.roux@linaro.org>
+
+       Backport from trunk r216841.
+       2014-10-29  Martin Liska  <mliska@suse.cz>
+
+       PR ipa/63587
+       * g++.dg/ipa/pr63587-1.C: New test.
+       * g++.dg/ipa/pr63587-2.C: New test.
+
+2015-03-21  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/61138
+       * gfortran.dg/pointer_remapping_9.f90: New.
+
+2015-03-19  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/59198
+       * gfortran.dg/proc_ptr_comp_44.f90 : New test
+       * gfortran.dg/proc_ptr_comp_45.f90 : New test
+
+2015-03-19  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Backport from mainline
+       2015-03-12  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       PR rtl-optimization/65235
+       * gcc.target/aarch64/pr65235_1.c: New test.
+
+2015-03-16  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * testsuite/g++.dg/pr65049.C: New test.
+
+2015-03-16  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/loop_optimization18.ad[sb]: New test.
+       * gnat.dg/loop_optimization18_pkg.ads: New helper.
+
+2015-03-12  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/60898
+       * gfortran.dg/entry_20.f90: New.
+
+2015-03-12  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       * gcc.target/s390/hotpatch-21.c: New test for hotpatch alignment.
+       * gcc.target/s390/hotpatch-22.c: Likewise.
+       * gcc.target/s390/hotpatch-23.c: Likewise.
+       * gcc.target/s390/hotpatch-24.c: Likewise.
+       * gcc.target/s390/hotpatch-2.c: Also check hotpatch alignment.
+       * gcc.target/s390/hotpatch-1.c: Update expected output.
+       * gcc.target/s390/hotpatch-2.c: Likewise.
+       * gcc.target/s390/hotpatch-3.c: Likewise.
+       * gcc.target/s390/hotpatch-4.c: Likewise.
+       * gcc.target/s390/hotpatch-5.c: Likewise.
+       * gcc.target/s390/hotpatch-6.c: Likewise.
+       * gcc.target/s390/hotpatch-7.c: Likewise.
+       * gcc.target/s390/hotpatch-8.c: Likewise.
+       * gcc.target/s390/hotpatch-9.c: Likewise.
+       * gcc.target/s390/hotpatch-10.c: Likewise.
+       * gcc.target/s390/hotpatch-11.c: Likewise.
+       * gcc.target/s390/hotpatch-12.c: Likewise.
+       * gcc.target/s390/hotpatch-13.c: Likewise.
+       * gcc.target/s390/hotpatch-14.c: Likewise.
+       * gcc.target/s390/hotpatch-15.c: Likewise.
+       * gcc.target/s390/hotpatch-16.c: Likewise.
+       * gcc.target/s390/hotpatch-17.c: Likewise.
+       * gcc.target/s390/hotpatch-18.c: Likewise.
+       * gcc.target/s390/hotpatch-19.c: Likewise.
+
+2015-03-12  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       Backport from mainline
+       2015-02-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       * gcc.target/s390/20140327-1.c: Remove -m31 and guard with ! lp64.
+       * gcc.target/s390/hotpatch-8.c: Likewise.
+       * gcc.target/s390/hotpatch-9.c: Likewise.
+       * gcc.target/s390/pr57960.c: Remove -m64.
+       * gcc.target/s390/pr57559.c: Likewise.
+
+2015-03-11  Marek Polacek  <polacek@redhat.com>
+
+       Backported from mainline
+       2014-12-04  Marek Polacek  <polacek@redhat.com>
+
+       PR middle-end/56917
+       * c-c++-common/ubsan/pr56917.c: New test.
+
+2015-03-10  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backported from mainline
+       PR fortran/65024
+       * gfortran.dg/unlimited_polymorphic_23.f90: New test
+
+2015-03-10  Martin Sebor  <msebor@redhat.com>
+
+       PR testsuite/63175
+       * gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a.c (main1): Move
+       checking of results into main to prevent it from getting optimized
+       away.
+       * gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a-pr63175.c: New test.
+
+2015-03-10  Yvan Roux  <yvan.roux@linaro.org>
+
+       Backport from trunk r220489.
+       2015-02-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR ipa/64896
+       * g++.dg/ipa/pr64896.C: New test
+
+2015-03-10  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/53988
+       * gcc.target/sh/pr53988.c: Mark tests as xfail.
+
+2015-03-06  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * g++.dg/other/dump-ada-spec-3.C: Remove include and adjust.
+
+2015-03-05  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * g++.dg/other/dump-ada-spec-3.C: New test.
+
+2015-03-04  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       Backport from mainline
+       2014-11-27  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       PR target/59593
+       * gcc.target/arm/constant-pool.c: New test.
+
+2015-03-03  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/64331
+       * gcc.target/avr/torture/pr64331.c: New test.
+
+2015-03-03  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       Backport from mainline
+       2015-01-14  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       PR target/64453
+       * gcc.target/arm/pr64453.c: New.
+
+2015-02-27  Pat Haugen <pthaugen@us.ibm.com>
+
+       * gcc.dg/vect/pr59354.c: Move vector producing code to
+       separate function.
+
+2015-02-27  Marek Polacek  <polacek@redhat.com>
+
+       Backported from mainline
+       2015-02-27  Marek Polacek  <polacek@redhat.com>
+
+       PR c/65228
+       * gcc.dg/pr65228.c: New test.
+
+2015-02-27  Richard Biener  <rguenther@suse.de>
+
+       PR lto/65193
+       * g++.dg/lto/pr65193_0.C: New testcase.
+
+2015-02-26  Peter Bergner  <bergner@vnet.ibm.com>
+
+       Backport from mainline
+       2015-02-25  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * gcc.target/powerpc/htm-builtin-1.c (dg-do) Change to assemble.
+       (dg-options): Add -save-temps.
+       (dg-final): Add cleanup-saved-temps.
+
+       2015-02-25  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/htm-builtin-1.c: Fix tcheck expect value.
+
+2015-02-25  Kai Tietz  <ktietz@redhat.com>
+
+       Backported from mainline
+       PR tree-optimization/61917
+       * gcc.dg/vect/vect-pr61917.c: New file.
+
+2015-02-23  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2015-02-23  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/65163
+       * gcc.c-torture/compile/pr65163.c: New.
+
+2015-02-23  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-11-27  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/61634
+       * gcc.dg/vect/pr61634.c: New testcase.
+
+       2015-01-14  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/59354
+       * gcc.dg/vect/pr59354.c: New testcase.
+
+       2015-02-10  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/64909
+       * gcc.dg/vect/costmodel/x86_64/costmodel-pr64909.c: New testcase.
+
+2015-02-23  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       Backport from mainline
+       2015-02-23  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+       * gcc.target/s390/hotpatch-1.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-10.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-11.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-12.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-13.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-14.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-15.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-16.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-17.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-18.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-19.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-2.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-20.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-3.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-4.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-5.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-6.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-7.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-8.c: Remove --save-temps option.
+       * gcc.target/s390/hotpatch-9.c: Remove --save-temps option.
+       * gcc.target/s390/htm-nofloat-1.c: Cleanup --save-temps files.
+
+2015-02-23  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       Backport from mainline
+       2015-02-23  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+       * gcc.target/s390/hotpatch-8.c: Add -march=g5.
+       * gcc.target/s390/hotpatch-9.c: Add -march=g5.
+       * gcc.target/s390/hotpatch-compile-1.c: Fix error message.
+       * gcc.target/s390/hotpatch-compile-10.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-11.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-12.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-13.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-14.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-2.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-3.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-4.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-5.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-6.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-7.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-8.c: Likewise.
+       * gcc.target/s390/hotpatch-compile-9.c: Likewise.
+
+2015-02-20  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Backport from mainline
+       2015-02-20  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * gcc.target/aarch64/sisd-shft-neg_1.c: New test.
+
+2015-02-20  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2015-02-20 trunk r220847.
+
+       PR target/64452
+       * gcc.target/avr/torture/pr64452.c: New test.
+
+2015-02-20  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2015-01-12  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/64530
+       * gfortran.dg/pr64530.f90: New testcase.
+
+       2015-02-13  Richard Biener  <rguenther@suse.de>
+
+       PR lto/64373
+       * gcc.dg/lto/pr64373_0.c: New testcase.
+
+       2015-02-16  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/63593
+       * gcc.dg/pr63593.c: New testcase.
+
+       2015-02-18  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/65063
+       * gcc.dg/pr65063.c: New testcase.
+
+2015-02-19  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-12-09  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/64199
+       * gcc.dg/torture/pr64199.c: New testcase.
+
+       2015-01-14  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/64493
+       PR tree-optimization/64495
+       * gcc.dg/vect/pr64493.c: New testcase.
+       * gcc.dg/vect/pr64495.c: Likewise.
+
+       2015-01-27  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/56273
+       PR tree-optimization/59124
+       PR tree-optimization/64277
+       * g++.dg/warn/Warray-bounds-6.C: New testcase.
+       * gcc.dg/Warray-bounds-12.c: Likewise.
+       * gcc.dg/Warray-bounds-13.c: Likewise.
+
+       2015-02-19  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2015-01-15  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/64365
+       * gcc.dg/torture/pr64365.c: New testcase.
+
+2015-02-19  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+
+       Revert:
+
+       2015-02-19  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+       Backport from mainline
+       2015-02-19  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+
+       * lib/target-supports.exp (check_compile): Save/restore
+       additional_sources that may belong to an actual test.
+
+2015-02-19  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+
+       Backport from mainline
+       2015-02-19  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+
+       * lib/target-supports.exp (check_compile): Save/restore
+       additional_sources that may belong to an actual test.
+
+2015-02-17  Sandra Loosemore  <sandra@codesourcery.com>
+
+       Backported from mainline
+       2015-02-17  Sandra Loosemore  <sandra@codesourcery.com>
+
+       * gcc.target/arm/divzero.c: New test case.
+
+2015-02-17  Ilya Tocar  <ilya.tocar@intel.com>
+
+       Backport from mainline
+       2015-01-14  Ilya Tocar  <ilya.tocar@intel.com>
+
+       PR target/64387
+       * gcc.target/i386/pr64387.c: New test.
+
+2015-02-13  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/63744
+       gfortran.dg/use_rename_8.f90: New.
+
+2015-02-12  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backported from mainline
+       2015-02-12  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/64932
+       * gfortran.dg/finalize_28.f90: New test
+
+2015-02-11  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-02-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/64979
+       * gcc.dg/tree-ssa/stdarg-7.c: New test.
+       * gcc.c-torture/execute/pr64979.c: New test.
+
+2015-02-11  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-07-24  Marek Polacek  <polacek@redhat.com>
+
+       PR c/57653
+       * c-c++-common/pr57653.c: New test.
+       * c-c++-common/pr57653.h: New file.
+       * c-c++-common/pr57653-2.c: New test.
+       * c-c++-common/pr57653-2.h: New file.
+
+2015-02-09  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       * gcc/testsuite/gcc.target/s390/hotpatch-13.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-14.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-15.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-16.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-17.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-18.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-19.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-20.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-10.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-11.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-12.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-13.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-14.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-15.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-16.c: New testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-9.c: New
+       testcase.
+       * gcc/testsuite/gcc.target/s390/hotpatch-1.c: Testcase adjusted to
+       new -mhotpatch.
+       * gcc/testsuite/gcc.target/s390/hotpatch-10.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-11.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-12.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-2.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-3.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-4.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-5.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-6.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-7.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-8.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-9.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c: Likewise.
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c: Likewise.
+
+2015-02-04  Matthias Klose  <doko@ubuntu.com>
+
+       Backport from mainline
+       2015-01-15  Martin Liska  <mliska@suse.cz>
+
+       * g++.dg/ipa/pr64068.C: New test.
+       * gcc.dg/ipa/PR64559.c: New test.
+
+2015-02-04  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2015-01-31  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/64882
+       * gcc.dg/torture/pr64882.c: New test.
+
+2015-02-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backported from mainline
+       2015-01-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * gcc.target/i386/builtin_target.c (check_intel_cpu_model): Add
+       Silvermont, Ivy Bridge, Haswell and Broadwell tests.  Update Sandy
+       Bridge test.
+
+2015-02-01  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-01-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/61058
+       * gcc.dg/pr61058.c: New test.
+
+       PR c/64766
+       * gcc.dg/pr64766.c: New test.
+
+       2015-01-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/64778
+       * gcc.dg/pr64778.c: New test.
+
+       PR middle-end/64421
+       * gcc.dg/vect/pr64421.c: New test.
+
+       2015-01-23  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/63637
+       PR rtl-optimization/60663
+       * gcc.dg/pr63637-1.c: New test.
+       * gcc.dg/pr63637-2.c: New test.
+       * gcc.dg/pr63637-3.c: New test.
+       * gcc.dg/pr63637-4.c: New test.
+       * gcc.dg/pr63637-5.c: New test.
+       * gcc.dg/pr63637-6.c: New test.
+       * gcc.target/i386/pr63637-1.c: New test.
+       * gcc.target/i386/pr63637-2.c: New test.
+       * gcc.target/i386/pr63637-3.c: New test.
+       * gcc.target/i386/pr63637-4.c: New test.
+       * gcc.target/i386/pr63637-5.c: New test.
+       * gcc.target/i386/pr63637-6.c: New test.
+
+       2015-01-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/64663
+       * gcc.dg/pr64663.c: New test.
+
+2015-01-29  Ilya Tocar  <ilya.tocar@intel.com>
+
+       * gcc.target/i386/sse-14.c: Test new intrinsic.
+       * gcc.target/i386/sse-22.c: Ditto.
+
+2015-01-27  Paul Thomas  <pault@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/62044
+       * gfortran.dg/allocate_with_mold_1.f90: New test
+
+2015-01-27  Janus Weil  <janus@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/64230
+       * gfortran.dg/class_allocate_18.f90: Remove -fsanitize option to
+       prevent linking errors.
+
+2015-01-27  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/64771
+       * gfortran.dg/coarray_36.f: New.
+       * gfortran.dg/coarray_37.f90: New.
+
+2015-01-26  Janus Weil  <janus@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/64230
+       * gfortran.dg/class_allocate_18.f90: New.
+
+2015-01-26  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR testsuite/64712
+       * gnat.dg/unchecked_convert1.adb (Unchecked_Convert1): Initialize A.
+
+2015-01-24  Thomas Koenig  <tkoenig@netcologne.de>
+
+       Backport from trunk
+       PR fortran/57023
+       * gfortran.dg/internal_pack_15.f90:  New test.
+
+2015-01-24  Janus Weil  <janus@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/60922
+       * gfortran.dg/class_allocate_17.f90: New.
+
+2015-01-20  Marek Polacek  <polacek@redhat.com>
+
+       Backport from mainline
+       2014-06-23  Marek Polacek  <polacek@redhat.com>
+
+       PR c/61553
+       * c-c++-common/pr61553.c: New test.
+
+2015-01-16  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       * c-c++-common/tsan/tsan_barrier.h: New.
+       * c-c++-common/tsan/atomic_stack.c: Reworked to not depend on sleep.
+       * c-c++-common/tsan/fd_pipe_race.c: Likewise.
+       * c-c++-common/tsan/mutexset1.c: Likewise.
+       * c-c++-common/tsan/race_on_barrier.c: Likewise.
+       * c-c++-common/tsan/race_on_mutex.c: Likewise.
+       * c-c++-common/tsan/race_on_mutex2.c: Likewise.
+       * c-c++-common/tsan/simple_race.c: Likewise.
+       * c-c++-common/tsan/simple_stack.c: Likewise.
+       * c-c++-common/tsan/sleep_sync.c: Likewise.
+       * c-c++-common/tsan/tiny_race.c: Likewise.
+       * c-c++-common/tsan/tls_race.c: Likewise.
+       * c-c++-common/tsan/write_in_reader_lock.c: Likewise.
+       * g++.dg/tsan/atomic_free.C: Likewise.
+       * g++.dg/tsan/atomic_free2.C: Likewise.
+       * g++.dg/tsan/cond_race.C: Likewise.
+       * g++.dg/tsan/tsan_barrier.h: Copied from c-c++-common/tsan.
+
+2015-01-15  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/opt47.adb: New test.
+
+2015-01-14  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-01-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/64513
+       * gcc.target/i386/pr64513.c: New test.
+
+       2015-01-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/64286
+       * gcc.target/i386/avx2-pr64286.c: New test.
+
+       PR fortran/64528
+       * gfortran.dg/pr64528.f90: New test.
+
+       2015-01-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/64563
+       * gcc.dg/pr64563.c: New test.
+
+2015-01-14  Marek Polacek  <polacek@redhat.com>
+
+       Backport from mainline
+       2015-01-13  Marek Polacek  <polacek@redhat.com>
+
+       PR middle-end/64391
+       * gcc.dg/tm/pr64391.c: New test.
+
+2015-01-13  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR c++/54442
+       * g++.dg/pr54442.C: New file.
+
+2015-01-13  Renlin Li  <renlin.li@arm.com>
+
+       Backported from mainline
+       2014-11-19 Renlin Li <renlin.li@arm.com>
+
+       PR target/63424
+       * gcc.target/aarch64/pr63424.c: New Test.
+
+2015-01-12  Janus Weil  <janus@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/63733
+       * gfortran.dg/typebound_operator_20.f90: New.
+
+2015-01-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/64536
+       * gcc.dg/pr64536.c: New test.
+
+2015-01-09  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline:
+       2015-01-06  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR target/64505
+       * gcc.target/powerpc/pr64505.c: New file to test -m32 -mpowerpc64
+       fix is correct.
+
+2014-01-08  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/56867
+       * gfortran.dg/dependency_45.f90:  New test.
+
+2015-01-08  Christian Bruel  <christian.bruel@st.com>
+
+       PR target/64507
+       * gcc.target/sh/pr64507.c: New test.
+
+2015-01-05  Ian Lance Taylor  <iant@google.com>
+
+       Backport from mainline:
+       2014-11-21  Lynn Boger  <laboger@linux.vnet.ibm.com>
+
+       * go.test/go-test.exp (go-set-goarch): Add case for ppc64le goarch
+       value for go testing.
+
+2014-12-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline:
+       2014-12-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * gcc.target/i386/pr57003.c: Skip on x32.
+       * gcc.target/i386/pr59927.c: Likewise.
+       * gcc.target/i386/pr60516.c: Likewise.
+
+2014-12-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline:
+       2014-12-26  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/64409
+       * gcc.target/i386/pr64409.c: New test.
+
+2014-12-23  Janus Weil  <janus@gcc.gnu.org>
+
+       Backport from mainline
+       PR fortran/64244
+       * gfortran.dg/typebound_call_26.f90: New.
+
+2014-12-19  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/60955
+       * g++.dg/warn/register-parm-1.C: New.
+
+2014-12-15  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/63551
+       * gcc.dg/ipa/pr63551.c (fn2): Use 4294967286U instead of
+       4294967286 to avoid warnings.
+
+2014-12-14  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backported from mainline
+       2014-12-14  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/64037
+       * g++.dg/pr64037.C: New test.
+
+2014-12-14  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backported from mainline
+       2014-12-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/64200
+       * gcc.target/i386/memcpy-strategy-4.c: New test.
+
+2014-12-13  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-12-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/64269
+       * gcc.c-torture/compile/pr64269.c: New test.
+
+2014-12-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2014-09-02  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/builtins-1.c: Add tests for vec_ctf,
+       vec_cts, and vec_ctu.
+       * gcc.target/powerpc/builtins-2.c: Likewise.
+
+       Backport from mainline
+       2014-08-28  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/builtins-1.c: Add tests for vec_xl, vec_xst,
+       vec_round, vec_splat, vec_div, and vec_mul.
+       * gcc.target/powerpc/builtins-2.c: New test.
+
+       Backport from mainline
+       2014-08-20  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * testsuite/gcc.target/powerpc/builtins-1.c: New test.
+
+2014-12-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/62021
+       * gcc.dg/vect/pr62021.c: New test.
+
+2014-12-09  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR bootstrap/64213
+       Revert:
+       2014-11-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/64037
+       * g++.dg/pr64037.C: New test.
+
+2014-12-07  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2014-12-07  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       * gcc.target/h8300/h8300.exp: Fix duplicated text.
+       * gcc.target/h8300/pragma-isr.c: Likewise.
+       * gcc.target/h8300/pragma-isr2.c: Likewise.
+
+2014-12-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline
+       2014-12-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/64108
+       * gcc.target/i386/memset-strategy-2.c: New test.
+
+2014-12-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline
+       2014-11-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/64037
+       * g++.dg/pr64037.C: New test.
+
+2014-12-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/56493
+       * c-c++-common/pr56493.c: New test.
+
+2014-12-03  Renlin Li  <Renlin.Li@arm.com>
+
+       Backported from mainline
+       2014-12-03  Renlin Li  <Renlin.Li@arm.com>
+                   H.J. Lu  <hongjiu.lu@intel.com>
+
+        PR middle-end/63762
+        PR target/63661
+        * gcc.dg/pr63762.c: New test.
+        * gcc.target/i386/pr63661.c: New test.
+
+2014-12-01  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/63551
+       * gcc.dg/ipa/pr63551.c: New test.
+       * gcc.dg/ipa/pr64041.c: Likewise.
+
+2014-12-01  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/63738
+       * gcc.dg/torture/pr63738.c: Fix call to setjmp.
+
+2014-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-11-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/64067
+       * gcc.c-torture/compile/pr64067.c: New test.
+
+       2014-11-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/63915
+       * c-c++-common/gomp/pr60823-4.c: New test.
+
+       PR sanitizer/63913
+       * g++.dg/ubsan/pr63913.C: New test.
+
+       2014-10-31  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/63659
+       * gcc.c-torture/execute/pr63659.c: New test.
+
+2014-11-26  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/63738
+       * gcc.dg/torture/pr63738.c: New testcase.
+
+2014-11-26  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2014-11-26  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/62238
+       * gcc.dg/torture/pr62238.c: New testcase.
+
+       2014-11-07  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/63605
+       * gcc.dg/vect/pr63605.c: New testcase.
+
+       2014-10-28  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/63665
+       * gcc.dg/pr63665.c: New testcase.
+
+2014-11-24  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/opt45.adb: New test.
+
+2014-11-22  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2014-11-22  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/63783
+       PR target/51244
+       * gcc.target/sh/torture/pr63783-1.c: New.
+       * gcc.target/sh/torture/pr63783-2.c: New.
+       * gcc.target/sh/pr51244-20.c: Adjust.
+       * gcc.target/sh/pr51244-20-sh2a.c: Adjust.
+
+2014-11-19  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/63947
+       * gcc.target/i386/pr63947.c: New test.
+
+2014-11-19  Tom de Vries  <tom@codesourcery.com>
+
+       Backport from mainline
+       PR tree-optimization/62167
+       * gcc.dg/pr51879-12.c: Add xfails.
+       * gcc.dg/pr62167-run.c: New test.
+       * gcc.dg/pr62167.c: New test.
+
+2014-11-13  Teresa Johnson  <tejohnson@google.com>
+
+       PR tree-optimization/63841
+       * g++.dg/tree-ssa/pr63841.C: New test.
+
+2014-11-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR ipa/63838
+       * g++.dg/ipa/pr63838.C: New test.
+
+2014-11-11  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/63265
+       * g++.dg/cpp0x/constexpr-63265.C: New.
+
+2014-11-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backported from mainline
+       2014-11-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR testsuite/63305
+       * gcc.target/i386/avx256-unaligned-load-7.c (avx_test): Fix
+       buffer overflow.
+       * gcc.target/i386/avx256-unaligned-store-7.c (avx_test): Likewise.
+
+2014-11-07  Marek Polacek  <polacek@redhat.com>
+
+       * c-c++-common/ubsan/undefined-2.c: New test.
+
+2014-11-05  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/63538
+       * gcc.target/i386/pr63538.c: New test.
+
+2014-11-03  Marek Polacek  <polacek@redhat.com>
+
+       PR c/52769
+       * gcc.dg/pr52769.c: New test.
+
+2014-10-31  DJ Delorie  <dj@redhat.com>
+
+       * gcc.dg/20141029-1.c: New.
+
+2014-10-31  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/63697
+       * c-c++-common/ubsan/overflow-sub-3.c: New test.
+
+2014-10-30  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR63633
+       * gcc.target/avr/torture/pr63633-ice-mult.c: New test.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
 2014-10-25  Yury Gribov  <y.gribov@samsung.com>
 
        PR sanitizer/63638
-       * c-c++-common/asan/pr63638.c: New test.
+       * c-c++-common/asan/pr63638.c: New test.
 
 2014-10-24  Markus Trippelsdorf  <markus@trippelsdorf.de>
 
        2014-10-11  Christophe Lyon  <christophe.lyon@linaro.org>
        * lib/target-supports.exp (check_effective_target_shared): New
        function.
-        * g++.dg/ipa/devirt-28a.C: Check if -shared is supported.
+       * g++.dg/ipa/devirt-28a.C: Check if -shared is supported.
 
 2014-10-10  Jakub Jelinek  <jakub@redhat.com>
 
 2014-09-12  Martin Jambor  <mjambor@suse.cz>
 
        PR ipa/61654
-        * g++.dg/ipa/pr61654.C: New test.
+       * g++.dg/ipa/pr61654.C: New test.
 
 2014-09-11  Alan Lawrence  <alan.lawrence@arm.com>
 
        PR middle-end/60849
        * g++.dg/opt/pr60849.C: New testcase.
 
-2014-04-22   Richard Biener  <rguenther@suse.de>
+2014-04-22  Richard Biener  <rguenther@suse.de>
 
        Backport from mainline
-       2014-04-17   Richard Biener  <rguenther@suse.de>
+       2014-04-17  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/60841
        * gcc.dg/vect/pr60841.c: New testcase.
diff --git a/gcc/testsuite/c-c++-common/gomp/pr60823-4.c b/gcc/testsuite/c-c++-common/gomp/pr60823-4.c
new file mode 100644 (file)
index 0000000..a9bc0fa
--- /dev/null
@@ -0,0 +1,7 @@
+/* PR tree-optimization/63915 */
+/* { dg-do run } */
+/* { dg-require-effective-target vect_simd_clones } */
+/* { dg-options "-O2 -fopenmp-simd" } */
+/* { dg-additional-options "-fpic" { target fpic } } */
+
+#include "pr60823-2.c"
diff --git a/gcc/testsuite/c-c++-common/pr56493.c b/gcc/testsuite/c-c++-common/pr56493.c
new file mode 100644 (file)
index 0000000..4181260
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR c++/56493 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-gimple" } */
+
+unsigned long long bar (void);
+int x;
+
+void
+foo (void)
+{
+  x += bar ();
+}
+
+/* Verify we narrow the addition from unsigned long long to unsigned int type.  */
+/* { dg-final { scan-tree-dump "  (\[a-zA-Z._0-9]*) = \\(unsigned int\\) \[^;\n\r]*;.*  (\[a-zA-Z._0-9]*) = \\(unsigned int\\) \[^;\n\r]*;.* = \\1 \\+ \\2;" "gimple" { target { ilp32 || lp64 } } } } */
+/* { dg-final { cleanup-tree-dump "gimple" } } */
diff --git a/gcc/testsuite/c-c++-common/pr57653-2.c b/gcc/testsuite/c-c++-common/pr57653-2.c
new file mode 100644 (file)
index 0000000..086f6be
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do preprocess } */
+/* { dg-options "-imacros ${srcdir}/c-c++-common/pr57653-2.h" } */
+
+/* Empty.  */
diff --git a/gcc/testsuite/c-c++-common/pr57653-2.h b/gcc/testsuite/c-c++-common/pr57653-2.h
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/gcc/testsuite/c-c++-common/pr57653.c b/gcc/testsuite/c-c++-common/pr57653.c
new file mode 100644 (file)
index 0000000..620471e
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-imacros ${srcdir}/c-c++-common/pr57653.h" } */
+
+__attribute__((used)) static const char s[] = F;
+
+/* { dg-final { scan-assembler-not "command-line" } } */
diff --git a/gcc/testsuite/c-c++-common/pr57653.h b/gcc/testsuite/c-c++-common/pr57653.h
new file mode 100644 (file)
index 0000000..5a93388
--- /dev/null
@@ -0,0 +1 @@
+#define F __FILE__
diff --git a/gcc/testsuite/c-c++-common/pr61553.c b/gcc/testsuite/c-c++-common/pr61553.c
new file mode 100644 (file)
index 0000000..8a3b699
--- /dev/null
@@ -0,0 +1,8 @@
+/* PR c/61553 */
+/* { dg-do compile } */
+
+void
+foo (char *s)
+{
+  __atomic_store (s, (void *) 0, __ATOMIC_SEQ_CST); /* { dg-error "size mismatch" } */
+}
index 6a37951..746afa7 100644 (file)
@@ -1,22 +1,26 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
 
+static pthread_barrier_t barrier;
 int Global;
 
 void *Thread1(void *x) {
-  sleep(1);
+  barrier_wait(&barrier);
   __atomic_fetch_add(&Global, 1, __ATOMIC_RELAXED);
   return NULL;
 }
 
 void *Thread2(void *x) {
   Global++;
+  barrier_wait(&barrier);
   return NULL;
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   pthread_t t[2];
   pthread_create(&t[0], NULL, Thread1, NULL);
   pthread_create(&t[1], NULL, Thread2, NULL);
index 28cd630..e2176da 100644 (file)
@@ -1,30 +1,35 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <stdio.h>
 #include <unistd.h>
+#include "tsan_barrier.h"
 
+static pthread_barrier_t barrier;
 int fds[2];
 
 void *Thread1(void *x) {
   write(fds[1], "a", 1);
+  barrier_wait(&barrier);
   return NULL;
 }
 
 void *Thread2(void *x) {
-  sleep(1);
+  barrier_wait(&barrier);
   close(fds[0]);
   close(fds[1]);
   return NULL;
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   pipe(fds);
   pthread_t t[2];
   pthread_create(&t[0], NULL, Thread1, NULL);
   pthread_create(&t[1], NULL, Thread2, NULL);
   pthread_join(t[0], NULL);
   pthread_join(t[1], NULL);
+  return 0;
 }
 
 /* { dg-output "WARNING: ThreadSanitizer: data race.*\n" } */
index 7c32a85..084f514 100644 (file)
@@ -1,14 +1,15 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
 
+static pthread_barrier_t barrier;
 int Global;
 pthread_mutex_t mtx;
 
 void *Thread1(void *x) {
-  sleep(1);
+  barrier_wait(&barrier);
   pthread_mutex_lock(&mtx);
   Global++;
   pthread_mutex_unlock(&mtx);
@@ -17,11 +18,13 @@ void *Thread1(void *x) {
 
 void *Thread2(void *x) {
   Global--;
+  barrier_wait(&barrier);
   return NULL;/* { dg-output ".*" } */
 
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   pthread_mutex_init(&mtx, 0);
   pthread_t t[2];
   pthread_create(&t[0], NULL, Thread1, NULL);
index 0a0e5fa..3de3ff2 100644 (file)
@@ -1,26 +1,28 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
 
+static pthread_barrier_t barrier;
 pthread_barrier_t B;
 int Global;
 
 void *Thread1(void *x) {
   pthread_barrier_init(&B, 0, 2);
+  barrier_wait(&barrier);
   pthread_barrier_wait(&B);
   return NULL;
 }
 
 void *Thread2(void *x) {
-  sleep(1);
+  barrier_wait(&barrier);
   pthread_barrier_wait(&B);
   return NULL;
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   pthread_t t;
   pthread_create(&t, NULL, Thread1, NULL);
   Thread2(0);
index 5dad345..ae30d05 100644 (file)
@@ -1,10 +1,10 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
 
+static pthread_barrier_t barrier;
 pthread_mutex_t Mtx;
 int Global;
 
@@ -13,11 +13,12 @@ void *Thread1(void *x) {
   pthread_mutex_lock(&Mtx);
   Global = 42;
   pthread_mutex_unlock(&Mtx);
+  barrier_wait(&barrier);
   return NULL;
 }
 
 void *Thread2(void *x) {
-  sleep(1);
+  barrier_wait(&barrier);
   pthread_mutex_lock(&Mtx);
   Global = 43;
   pthread_mutex_unlock(&Mtx);
@@ -25,6 +26,7 @@ void *Thread2(void *x) {
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   pthread_t t[2];
   pthread_create(&t[0], NULL, Thread1, NULL);
   pthread_create(&t[1], NULL, Thread2, NULL);
@@ -37,7 +39,7 @@ int main() {
 /* { dg-output "WARNING: ThreadSanitizer: data race.*(\n|\r\n|\r)" } */
 /* { dg-output "  Atomic read of size 1 at .* by thread T2:(\n|\r\n|\r)" } */
 /* { dg-output "    #0 pthread_mutex_lock.*" } */
-/* { dg-output "    #1 Thread2.* .*(race_on_mutex.c:21|\\?{2}:0) (.*)" } */
+/* { dg-output "    #1 Thread2.* .*(race_on_mutex.c:22|\\?{2}:0) (.*)" } */
 /* { dg-output "  Previous write of size 1 at .* by thread T1:(\n|\r\n|\r)" } */
 /* { dg-output "    #0 pthread_mutex_init .* (.)*" } */
 /* { dg-output "    #1 Thread1.* .*(race_on_mutex.c:12|\\?{2}:0) .*" } */
index 80a6fb6..57d7e21 100644 (file)
@@ -1,22 +1,25 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
+
+static pthread_barrier_t barrier;
 
 void *Thread(void *x) {
   pthread_mutex_lock((pthread_mutex_t*)x);
   pthread_mutex_unlock((pthread_mutex_t*)x);
+  barrier_wait(&barrier);
   return 0;
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   pthread_mutex_t Mtx;
   pthread_mutex_init(&Mtx, 0);
   pthread_t t;
   pthread_create(&t, 0, Thread, &Mtx);
-  sleep(1);
+  barrier_wait(&barrier);
   pthread_mutex_destroy(&Mtx);
   pthread_join(t, 0);
   return 0;
index a40accd..c1a369b 100644 (file)
@@ -1,13 +1,15 @@
 /* { dg-set-target-env-var TSAN_OPTIONS "halt_on_error=1" } */
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <stdio.h>
 #include <unistd.h>
+#include "tsan_barrier.h"
 
-#define MAX_ITERATIONS_NUMBER 100
-#define SLEEP_STEP 128000 
+#define MAX_ITERATIONS_NUMBER 1
+#define SLEEP_STEP 128000
 
+static pthread_barrier_t barrier;
 unsigned int delay_time = 1000;
 
 static inline void delay () {
@@ -17,6 +19,7 @@ static inline void delay () {
 extern int main_1();
 
 int main() {
+  barrier_init(&barrier, 2);
   int i;
   for (i = 0; i < MAX_ITERATIONS_NUMBER; i++) {
     main_1();
@@ -28,6 +31,7 @@ int main() {
 int Global;
 
 void *Thread1(void *x) {
+  barrier_wait(&barrier);
   delay();
   Global = 42;
   return NULL;
@@ -35,6 +39,7 @@ void *Thread1(void *x) {
 
 void *Thread2(void *x) {
   Global = 43;
+  barrier_wait(&barrier);
   return NULL;
 }
 
index b66a670..a4d0aba 100644 (file)
@@ -1,9 +1,10 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
 
+static pthread_barrier_t barrier;
 int Global;
 
 void __attribute__((noinline)) foo1() {
@@ -25,13 +26,14 @@ void __attribute__((noinline)) bar2() {
 }
 
 void *Thread1(void *x) {
-  sleep(1);
+  barrier_wait(&barrier);
   bar1();
   return NULL;
 }
 
 void *Thread2(void *x) {
   bar2();
+  barrier_wait(&barrier);
   return NULL;
 }
 
@@ -40,6 +42,7 @@ void StartThread(pthread_t *t, void *(*f)(void*)) {
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   pthread_t t[2];
   StartThread(&t[0], Thread1);
   StartThread(&t[1], Thread2);
@@ -50,16 +53,16 @@ int main() {
 
 /* { dg-output "WARNING: ThreadSanitizer: data race.*" } */
 /* { dg-output "  Write of size 4 at .* by thread T1:(\n|\r\n|\r)" } */
-/* { dg-output "    #0 foo1.* .*(simple_stack.c:10|\\?{2}:0) (.*)" } */
-/* { dg-output "    #1 bar1.* .*(simple_stack.c:15|\\?{2}:0) (.*)" } */
-/* { dg-output "    #2 Thread1.* .*(simple_stack.c:29|\\?{2}:0) (.*)" } */
+/* { dg-output "    #0 foo1.* .*(simple_stack.c:11|\\?{2}:0) (.*)" } */
+/* { dg-output "    #1 bar1.* .*(simple_stack.c:16|\\?{2}:0) (.*)" } */
+/* { dg-output "    #2 Thread1.* .*(simple_stack.c:30|\\?{2}:0) (.*)" } */
 /* { dg-output "  Previous read of size 4 at .* by thread T2:(\n|\r\n|\r)" } */
-/* { dg-output "    #0 foo2.* .*(simple_stack.c:19|\\?{2}:0) (.*)" } */
-/* { dg-output "    #1 bar2.* .*(simple_stack.c:24|\\?{2}:0) (.*)" } */
-/* { dg-output "    #2 Thread2.* .*(simple_stack.c:34|\\?{2}:0) (.*)" } */
+/* { dg-output "    #0 foo2.* .*(simple_stack.c:20|\\?{2}:0) (.*)" } */
+/* { dg-output "    #1 bar2.* .*(simple_stack.c:25|\\?{2}:0) (.*)" } */
+/* { dg-output "    #2 Thread2.* .*(simple_stack.c:35|\\?{2}:0) (.*)" } */
 /* { dg-output "  Thread T1 \\(tid=.*, running\\) created by main thread at:(\n|\r\n|\r)" } */
 /* { dg-output "    #0 pthread_create .* (.*)" } */
-/* { dg-output "    #1 StartThread.* .*(simple_stack.c:39|\\?{2}:0) (.*)" } */
+/* { dg-output "    #1 StartThread.* .*(simple_stack.c:41|\\?{2}:0) (.*)" } */
 /* { dg-output "  Thread T2 (.*) created by main thread at:(\n|\r\n|\r)" } */
 /* { dg-output "    #0 pthread_create .* (.*)" } */
-/* { dg-output "    #1 StartThread.* .*(simple_stack.c:39|\\?{2}:0) (.*)" } */
+/* { dg-output "    #1 StartThread.* .*(simple_stack.c:41|\\?{2}:0) (.*)" } */
index 44d4455..c681dce 100644 (file)
@@ -1,8 +1,11 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
 #include <unistd.h>
+#include "tsan_barrier.h"
 
+static pthread_barrier_t barrier;
 int X = 0;
 
 void MySleep() {
@@ -10,15 +13,18 @@ void MySleep() {
 }
 
 void *Thread(void *p) {
+  barrier_wait(&barrier);
   MySleep();  // Assume the main thread has done the write.
   X = 42;
   return 0;
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   pthread_t t;
   pthread_create(&t, 0, Thread, 0);
   X = 43;
+  barrier_wait(&barrier);
   pthread_join(t, 0);
   return 0;
 }
index 962497b..10a3feb 100644 (file)
@@ -1,20 +1,24 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
 
+static pthread_barrier_t barrier;
 int Global;
 
 void *Thread1(void *x) {
-  sleep(1);
+  barrier_wait(&barrier);
   Global = 42;
   return x;
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   pthread_t t;
   pthread_create(&t, 0, Thread1, 0);
   Global = 43;
+  barrier_wait(&barrier);
   pthread_join(t, 0);
   return Global;
 }
index 423867e..4dd6506 100644 (file)
@@ -1,18 +1,24 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <stddef.h>
+#include "tsan_barrier.h"
+
+static pthread_barrier_t barrier;
 
 void *Thread(void *a) {
+  barrier_wait(&barrier);
   *(int*)a = 43;
   return 0;
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   static __thread int Var = 42;
   pthread_t t;
   pthread_create(&t, 0, Thread, &Var);
   Var = 43;
+  barrier_wait(&barrier);
   pthread_join(t, 0);
 }
 
diff --git a/gcc/testsuite/c-c++-common/tsan/tsan_barrier.h b/gcc/testsuite/c-c++-common/tsan/tsan_barrier.h
new file mode 100644 (file)
index 0000000..5d37a64
--- /dev/null
@@ -0,0 +1,14 @@
+/* TSAN-invisible barriers.  Link with -ldl.  */
+#include <pthread.h>
+#include <dlfcn.h>
+
+static __typeof(pthread_barrier_wait) *barrier_wait;
+
+static
+void barrier_init (pthread_barrier_t *barrier, unsigned count)
+{
+  void *h = dlopen ("libpthread.so.0", RTLD_LAZY);
+  barrier_wait = (__typeof (pthread_barrier_wait) *)
+                dlsym (h, "pthread_barrier_wait");
+  pthread_barrier_init (barrier, NULL, count);
+}
index 898d23d..df32632 100644 (file)
@@ -1,8 +1,10 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
 
+static pthread_barrier_t barrier;
 pthread_rwlock_t rwlock;
 int GLOB;
 
@@ -10,13 +12,14 @@ void *Thread1(void *p) {
  (void)p;
   pthread_rwlock_rdlock(&rwlock);
   // Write under reader lock.
-  sleep(1);
+  barrier_wait(&barrier);
   GLOB++;
   pthread_rwlock_unlock(&rwlock);
   return 0;
 }
 
 int main(int argc, char *argv[]) {
+  barrier_init(&barrier, 2);
   pthread_rwlock_init(&rwlock, NULL);
   pthread_rwlock_rdlock(&rwlock);
   pthread_t t;
@@ -24,6 +27,7 @@ int main(int argc, char *argv[]) {
   volatile int x = GLOB;
  (void)x;
   pthread_rwlock_unlock(&rwlock);
+  barrier_wait(&barrier);
   pthread_join(t, 0);
   pthread_rwlock_destroy(&rwlock);
   return 0;
diff --git a/gcc/testsuite/c-c++-common/ubsan/overflow-sub-3.c b/gcc/testsuite/c-c++-common/ubsan/overflow-sub-3.c
new file mode 100644 (file)
index 0000000..deec5c4
--- /dev/null
@@ -0,0 +1,34 @@
+/* { dg-do run } */
+/* { dg-options "-fsanitize=signed-integer-overflow" } */
+
+__attribute__((noinline, noclone)) int
+foo1 (int x, int y)
+{
+  return x - y;
+}
+
+__attribute__((noinline, noclone)) int
+foo2 (int x, int y)
+{
+  unsigned int xa = (unsigned int) x - (__INT_MAX__ - 3);
+  xa &= 3;
+  x = __INT_MAX__ - 3 + xa;
+  unsigned int ya = y + 1U;
+  ya &= 1;
+  y = ya - 1;
+  return x - y;
+}
+
+int
+main ()
+{
+  int xm1, y;
+  for (xm1 = __INT_MAX__ - 4; xm1 < __INT_MAX__; xm1++)
+    for (y = -1; y <= 0; y++)
+      if (foo1 (xm1 + 1, y) != (int) (xm1 + 1U - y)
+         || foo2 (xm1 + 1, y) != (int) (xm1 + 1U - y))
+       __builtin_abort ();
+  return 0;
+}
+/* { dg-output ":7:\[0-9]\[^\n\r]*signed integer overflow: 2147483647 - -1 cannot be represented in type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*:19:\[0-9]\[^\n\r]*signed integer overflow: 2147483647 - -1 cannot be represented in type 'int'" } */
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr56917.c b/gcc/testsuite/c-c++-common/ubsan/pr56917.c
new file mode 100644 (file)
index 0000000..0eb8492
--- /dev/null
@@ -0,0 +1,43 @@
+/* PR middle-end/56917 */
+/* { dg-do run } */
+/* { dg-options "-fsanitize=undefined" } */
+
+#include <stdio.h>
+
+#define INT_MIN (-__INT_MAX__ - 1)
+#define LONG_MIN (-__LONG_MAX__ - 1L)
+#define LLONG_MIN (-__LONG_LONG_MAX__ - 1LL)
+
+int __attribute__ ((noinline,noclone))
+fn1 (unsigned int u)
+{
+  return (-(int) (u - 1U)) - 1;
+}
+
+long __attribute__ ((noinline,noclone))
+fn2 (unsigned long int ul)
+{
+  return (-(long) (ul - 1UL)) - 1L;
+}
+
+long long __attribute__ ((noinline,noclone))
+fn3 (unsigned long long int ull)
+{
+  return (-(long long) (ull - 1ULL)) - 1LL;
+}
+
+int
+main (void)
+{
+  fputs ("UBSAN TEST START\n", stderr);
+
+  if (fn1 (__INT_MAX__ + 1U) != INT_MIN
+      || fn2 (__LONG_MAX__ + 1UL) != LONG_MIN
+      || fn3 (__LONG_LONG_MAX__ + 1ULL) != LLONG_MIN)
+    __builtin_abort ();
+
+  fputs ("UBSAN TEST END\n", stderr);
+  return 0;
+}
+
+/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr65984.c b/gcc/testsuite/c-c++-common/ubsan/pr65984.c
new file mode 100644 (file)
index 0000000..94ba011
--- /dev/null
@@ -0,0 +1,23 @@
+/* PR tree-optimization/65984 */
+/* { dg-do compile } */
+/* { dg-options "-fnon-call-exceptions -fsanitize=bool,enum" } */
+
+#ifndef __cplusplus
+#define bool _Bool
+#endif
+
+enum E { E0, E1, E2 };
+enum E e[2];
+bool *b;
+
+int
+foo (int i)
+{
+  return e[i];
+}
+
+int
+bar (int i)
+{
+  return b[i];
+}
diff --git a/gcc/testsuite/c-c++-common/ubsan/undefined-2.c b/gcc/testsuite/c-c++-common/ubsan/undefined-2.c
new file mode 100644 (file)
index 0000000..fd5b4d3
--- /dev/null
@@ -0,0 +1,26 @@
+/* { dg-do run } */
+/* { dg-options "-fsanitize=undefined" } */
+/* { dg-additional-options "-std=gnu11" { target c } } */
+/* { dg-additional-options "-std=c++11" { target c++ } } */
+
+#include <stdio.h>
+
+volatile int w, z;
+
+__attribute__ ((noinline, noclone)) int
+foo (int x, int y)
+{
+  z++;
+  return x << y;
+}
+
+int
+main ()
+{
+  fputs ("1st\n", stderr);
+  w = foo (0, -__INT_MAX__);
+  return 0;
+}
+
+/* { dg-output "1st(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*shift exponent -\[^\n\r]* is negative\[^\n\r]*(\n|\r\n|\r)" } */
index ca1778b..e78f93c 100644 (file)
@@ -13,5 +13,4 @@ int *foo ()
 }
 
 // { dg-final { scan-assembler _ZGVZ3foovE1x,8,8 } }
-// { dg-final { scan-tree-dump "_ZGVZ3foovE1x & 1" "original" } }
 // { dg-final { cleanup-tree-dump "original" } }
diff --git a/gcc/testsuite/g++.dg/abi/anon4.C b/gcc/testsuite/g++.dg/abi/anon4.C
new file mode 100644 (file)
index 0000000..088ba99
--- /dev/null
@@ -0,0 +1,41 @@
+// PR c++/65209
+// { dg-final { scan-assembler-not "comdat" } }
+
+// Everything involving the anonymous namespace bits should be private, not
+// COMDAT.
+
+struct Bar
+{
+  static Bar *self();
+  char pad[24];
+};
+
+template <Bar *(&holderFunction)()>
+struct BarGlobalStatic
+{
+  Bar *operator()() { return holderFunction(); }
+};
+
+namespace {
+  namespace Q_QGS_s_self {
+    inline Bar *innerFunction() {
+      static struct Holder {
+       Bar value;
+       ~Holder() {}
+      } holder;
+      return &holder.value;
+    }
+  }
+}
+static BarGlobalStatic<Q_QGS_s_self::innerFunction> s_self;
+
+Bar *Bar::self()
+{
+  return s_self();
+}
+
+int main(int argc, char *argv[])
+{
+  Bar* bar = Bar::self();
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-44.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-44.C
new file mode 100644 (file)
index 0000000..bd20b54
--- /dev/null
@@ -0,0 +1,43 @@
+// PR c++/63849
+// { dg-do compile { target c++11 } }
+
+template <class _T, class...>
+using First = _T;            // we should not use this
+                             // alias with only
+                             // one pack parameter (?)
+
+template <template <class...> class _Successor,
+          int,
+          class... _Xs>
+struct Overlay
+{
+    using O = _Successor<_Xs...>;
+};
+
+template <class... _Pack>
+struct List
+{
+    template <int _s>
+    using O = typename Overlay<List, _s, _Pack...>::O;
+
+    template <template <class...> class _S>
+    using Pass = _S<_Pack...>;
+
+    template <int _i>
+    using At = typename O<_i>
+    ::template Pass<First>;
+};
+
+template <int _i>
+using At = typename List<int, char>
+::template At<_i>;
+
+template <int _i>
+void func_crash(At<_i>&) {}
+
+int main(int argc, char *argv[])
+{
+    char ccc;
+    int iii;
+    func_crash<0>(iii);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-63265.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-63265.C
new file mode 100644 (file)
index 0000000..aa0ce5e
--- /dev/null
@@ -0,0 +1,19 @@
+// PR c++/63265
+// { dg-do compile { target c++11 } }
+
+#define LSHIFT (sizeof(unsigned int) * __CHAR_BIT__)
+
+template <int lshift>
+struct SpuriouslyWarns1 {
+    static constexpr unsigned int v = lshift < LSHIFT ? 1U << lshift : 0;
+};
+
+static_assert(SpuriouslyWarns1<LSHIFT>::v == 0, "Impossible occurred");
+
+template <int lshift>
+struct SpuriouslyWarns2 {
+    static constexpr bool okay = lshift < LSHIFT;
+    static constexpr unsigned int v = okay ? 1U << lshift : 0;
+};
+
+static_assert(SpuriouslyWarns2<LSHIFT>::v == 0, "Impossible occurred");
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem4.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem4.C
new file mode 100644 (file)
index 0000000..68788ca
--- /dev/null
@@ -0,0 +1,26 @@
+// PR c++/65695
+// { dg-do compile { target c++11 } }
+
+struct Foo;
+
+struct Bar
+{
+    using MemberFuncT = int (Foo::*)();
+
+    MemberFuncT h_;
+    constexpr Bar(MemberFuncT h) : h_{h}
+    {
+    }
+};
+
+struct Foo
+{
+    int test()
+    {
+        return -1;
+    }
+
+    static constexpr Bar bar {&Foo::test};
+};
+
+constexpr Bar Foo::bar;
diff --git a/gcc/testsuite/g++.dg/cpp0x/deleted9.C b/gcc/testsuite/g++.dg/cpp0x/deleted9.C
new file mode 100644 (file)
index 0000000..af97be7
--- /dev/null
@@ -0,0 +1,31 @@
+// PR c++/64352
+// { dg-do compile { target c++11 } }
+
+template<bool B> struct bool_type
+{ static constexpr bool value = B; };
+
+using true_type = bool_type<true>;
+using false_type = bool_type<false>;
+
+template<typename T> T&& declval();
+
+template<typename...> struct void_ { using type = void; };
+template<typename... I> using void_t = typename void_<I...>::type;
+
+template<typename _Tp, typename = void>
+struct _Has_addressof_free: false_type { };
+
+template<typename _Tp>
+struct _Has_addressof_free
+<_Tp, void_t<decltype( operator&(declval<const _Tp&>()) )>>
+: true_type { };
+
+struct foo {};
+void operator&(foo) = delete;
+
+int main()
+{
+    static_assert( !_Has_addressof_free<int>::value, "" );
+    // error: use of deleted function 'void operator&(foo)'
+    static_assert( !_Has_addressof_free<foo>::value, "" );
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist89.C b/gcc/testsuite/g++.dg/cpp0x/initlist89.C
new file mode 100644 (file)
index 0000000..e221664
--- /dev/null
@@ -0,0 +1,4 @@
+// PR c++/64029
+// { dg-do compile { target c++11 } }
+
+const int (&in)[]{1,2,3,4,5};
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-decltype2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-decltype2.C
new file mode 100644 (file)
index 0000000..51bf0ec
--- /dev/null
@@ -0,0 +1,25 @@
+// PR c++/65727
+// { dg-do compile { target c++11 } }
+
+struct type_a { void(*cb)(); };
+
+struct type_b
+{
+    type_b(type_a p);
+    void dummy();
+};
+
+template<class T>
+constexpr T function_c(T**t) {return **t;}
+
+class type_d {
+    public:
+        static void dummy();
+};
+class type_e {
+    public:
+        static type_b b;
+        type_d *d[1];
+};
+
+type_b type_e::b = {{[](){decltype(function_c(type_e::d))::dummy();}}};
index 03a7a4b..09e046f 100644 (file)
@@ -3,7 +3,7 @@
 
 class Klass
 {
-  unsigned int local;
+  unsigned int local;          // { dg-message "" }
 public:
   bool dostuff();
 };
@@ -11,7 +11,7 @@ public:
 bool Klass::dostuff()
 {
   auto f = []() -> bool {
-    if (local & 1) { return true; } // { dg-error "not captured" }
+    if (local & 1) { return true; } // { dg-error "" }
     return false;
   };
 }
index e05693f..77f6034 100644 (file)
@@ -4,8 +4,11 @@ struct B
   virtual void f() final {}
   virtual void g() {}
   virtual void x() const {}
+  virtual void y() final;
 };
 
+void B::y() {} // { dg-error "overriding" }
+
 struct B2
 {
   virtual void h() {}
@@ -14,6 +17,7 @@ struct B2
 struct D : B
 {
   virtual void g() override final {} // { dg-error "overriding" }
+  virtual void y() override final {} // { dg-error "virtual" }
 };
 
 template <class T> struct D2 : T
diff --git a/gcc/testsuite/g++.dg/cpp0x/ref-qual16.C b/gcc/testsuite/g++.dg/cpp0x/ref-qual16.C
new file mode 100644 (file)
index 0000000..1d7650b
--- /dev/null
@@ -0,0 +1,12 @@
+// PR c++/64297
+// { dg-do compile { target c++11 } }
+
+struct A {
+  typedef int X;
+  template <int> X m_fn1() const;
+};
+template <typename> struct is_function {};
+is_function<int() const &> i;
+struct D {
+  template <typename Y, typename = is_function<Y>> D(Y);
+} b(&A::m_fn1<0>);
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-array1.C b/gcc/testsuite/g++.dg/cpp0x/rv-array1.C
new file mode 100644 (file)
index 0000000..9075764
--- /dev/null
@@ -0,0 +1,55 @@
+// PR c++/66501
+// { dg-do run { target c++11 } }
+
+int total_size;
+
+struct Object
+{
+  int size = 0;
+
+  Object () = default;
+
+  ~Object () {
+    total_size -= size;
+  }
+
+  Object (const Object &) = delete;
+  Object & operator= (const Object &) = delete;
+
+  Object (Object && b) {
+    size = b.size;
+    b.size = 0;
+  }
+
+  Object & operator= (Object && b) {
+    if (this != & b) {
+      total_size -= size;
+      size = b.size;
+      b.size = 0;
+    }
+    return * this;
+  }
+
+  void grow () {
+    size ++;
+    total_size ++;
+  }
+};
+
+struct Container {
+  Object objects[2];
+};
+
+int main (void)
+{
+  Container container;
+
+  // grow some objects in the container
+  for (auto & object : container.objects)
+    object.grow ();
+
+  // now empty it
+  container = Container ();
+
+  return total_size;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic165.C b/gcc/testsuite/g++.dg/cpp0x/variadic165.C
new file mode 100644 (file)
index 0000000..862931f
--- /dev/null
@@ -0,0 +1,17 @@
+// PR c++/64514
+// { dg-do compile { target c++11 } }
+
+template<typename... T>
+struct Functor
+{
+    template <T...>
+    struct Inner
+    {};
+};
+
+template struct Functor<>::Inner<>;
+
+int main()
+{
+
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-fn26.C b/gcc/testsuite/g++.dg/cpp1y/auto-fn26.C
new file mode 100644 (file)
index 0000000..c05c954
--- /dev/null
@@ -0,0 +1,6 @@
+// PR c++/59766
+// { dg-do compile { target c++1y } }
+
+struct T {
+  friend auto f() { }
+};
diff --git a/gcc/testsuite/g++.dg/gcov/gcov-15.C b/gcc/testsuite/g++.dg/gcov/gcov-15.C
new file mode 100644 (file)
index 0000000..fcd16b0
--- /dev/null
@@ -0,0 +1,26 @@
+// PR gcov-profile/64634
+// { dg-options "-fprofile-arcs -ftest-coverage" }
+// { dg-do run { target native } }
+
+void catchEx ()                // count(1)
+{
+  __builtin_exit (0);  // count(1)
+  try
+  {}
+  catch (int)
+  {}
+}
+
+int main ()            // count(1)
+{
+  try
+  {
+    throw 5;           // count(1)
+  }
+  catch (...)          // count(1)
+  {
+    catchEx ();                // count(1)
+  }
+}
+
+// { dg-final { run-gcov gcov-15.C } }
diff --git a/gcc/testsuite/g++.dg/gomp/tpl-target-update.C b/gcc/testsuite/g++.dg/gomp/tpl-target-update.C
new file mode 100644 (file)
index 0000000..6226ebf
--- /dev/null
@@ -0,0 +1,20 @@
+// { dg-do compile }
+
+template <typename T>
+void f(T A, T B)
+{
+  extern int *v;
+  T a = 2;
+  T b = 4;
+
+#pragma omp target update to(v[a:b])
+  v[a] = 0;
+
+#pragma omp target update to(v[A:B])
+  v[a] = 0;
+}
+
+void g()
+{
+  f(1, 5);
+}
diff --git a/gcc/testsuite/g++.dg/init/array39.C b/gcc/testsuite/g++.dg/init/array39.C
new file mode 100644 (file)
index 0000000..2fd8937
--- /dev/null
@@ -0,0 +1,46 @@
+// PR c++/65154
+// { dg-do run { target c++11 } }
+
+int cnt1 = 0,
+    cnt2 = 0;
+
+struct S_empty
+{
+    S_empty () {
+       cnt1++;
+    };
+};
+
+struct C1
+{
+  S_empty s;
+};
+
+struct S_init
+{
+  S_init () : i(42)
+  {
+    cnt2++;
+  };
+  int i;
+};
+
+struct C2
+{
+  S_init a, b;
+};
+
+int
+main ()
+{
+  C1 c1[5]{};
+  C2 c2[1]{};
+
+  if (c2[0].a.i != 42 || c2[0].b.i != 42)
+    return 1;
+
+  if (cnt1 != 5 || cnt2 != 2)
+    return 1;
+
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/ipa/pr63551.C b/gcc/testsuite/g++.dg/ipa/pr63551.C
new file mode 100644 (file)
index 0000000..03e0339
--- /dev/null
@@ -0,0 +1,23 @@
+// { dg-options "-O -Wno-psabi" }
+// { dg-do compile }
+
+struct A { int a; };
+template <typename T, typename V> struct B { V operator[] (T); };
+union U { long double ld; void *v; };
+A a;
+
+void
+bar (U &x)
+{
+  if (x.v) *reinterpret_cast <A *>(x.v) = a;
+}
+
+struct C { C (A) { c.ld = 0; bar (c); } U c; };
+struct D { A d, e; void foo () { f[0][d] = e; } B <int, B <A, C> > f; };
+
+void
+baz ()
+{
+  D d;
+  d.foo ();
+}
diff --git a/gcc/testsuite/g++.dg/ipa/pr63587-1.C b/gcc/testsuite/g++.dg/ipa/pr63587-1.C
new file mode 100644 (file)
index 0000000..cbf872e
--- /dev/null
@@ -0,0 +1,92 @@
+// PR ipa/63587
+// { dg-do compile { target c++11 } }
+// { dg-options "-O2 -fno-strict-aliasing" }
+
+template <class> struct A
+{
+};
+template <typename> struct B
+{
+  template <typename> struct C;
+};
+class D;
+template <typename> class F;
+struct G
+{
+  void operator()(const D &, D);
+};
+class D
+{
+public:
+  D (int);
+};
+struct H
+{
+  H (int);
+};
+template <typename _Key, typename, typename, typename _Compare, typename>
+class I
+{
+  typedef _Key key_type;
+  template <typename _Key_compare> struct J
+  {
+    _Key_compare _M_key_compare;
+  };
+  J<_Compare> _M_impl;
+
+public:
+  A<int> _M_get_insert_unique_pos (const key_type &);
+  A<int> _M_get_insert_hint_unique_pos (H &);
+  template <typename... _Args> int _M_emplace_hint_unique (H, _Args &&...);
+};
+template <typename _Key, typename _Tp, typename _Compare = G,
+         typename _Alloc = F<A<_Tp> > >
+class K
+{
+  typedef _Key key_type;
+  typedef _Key value_type;
+  typedef typename B<_Alloc>::template C<value_type> _Pair_alloc_type;
+  I<key_type, value_type, int, _Compare, _Pair_alloc_type> _M_t;
+
+public:
+  void operator[](key_type)
+  {
+    _M_t._M_emplace_hint_unique (0);
+  }
+};
+template <typename _Key, typename _Val, typename _KeyOfValue,
+         typename _Compare, typename _Alloc>
+A<int>
+I<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_get_insert_unique_pos (
+  const key_type &p1)
+{
+  _M_impl._M_key_compare (p1, 0);
+}
+template <typename _Key, typename _Val, typename _KeyOfValue,
+         typename _Compare, typename _Alloc>
+A<int>
+I<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_get_insert_hint_unique_pos (
+  H &)
+{
+  _M_get_insert_unique_pos (0);
+}
+template <typename _Key, typename _Val, typename _KeyOfValue,
+         typename _Compare, typename _Alloc>
+template <typename... _Args>
+int
+I<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_hint_unique (
+  H p1, _Args &&...)
+{
+  _M_get_insert_hint_unique_pos (p1);
+}
+namespace {
+struct L;
+}
+void
+fn1 ()
+{
+  K<D, L> a;
+  a[0];
+  K<D, int> b;
+  b[0];
+}
diff --git a/gcc/testsuite/g++.dg/ipa/pr63587-2.C b/gcc/testsuite/g++.dg/ipa/pr63587-2.C
new file mode 100644 (file)
index 0000000..f31c5bd
--- /dev/null
@@ -0,0 +1,250 @@
+// PR ipa/63587
+// { dg-do compile { target c++11 } }
+// { dg-options "-O2" }
+
+namespace boost {
+class basic_cstring
+{
+public:
+  basic_cstring (char *);
+};
+template <typename> struct identity
+{
+};
+struct make_identity;
+struct function_buffer
+{
+};
+template <typename FunctionObj> struct function_obj_invoker0
+{
+  static int
+  invoke (function_buffer &)
+  {
+    FunctionObj f;
+    f ();
+  }
+};
+template <typename FunctionObj> struct get_function_obj_invoker0
+{
+  typedef function_obj_invoker0<FunctionObj> type;
+};
+template <typename FunctionObj> struct apply
+{
+  typedef typename get_function_obj_invoker0<FunctionObj>::type invoker_type;
+};
+struct basic_vtable0
+{
+  typedef int (*invoker_type)(function_buffer &);
+  template <typename F> void assign_to (F, function_buffer);
+  invoker_type invoker;
+};
+class function0
+{
+public:
+  template <typename Functor> function0 (Functor)
+  {
+    typedef typename apply<Functor>::invoker_type invoker_type;
+    basic_vtable0 stored_vtable { invoker_type::invoke };
+    stored_vtable.assign_to (0, functor);
+  }
+  function_buffer functor;
+};
+class function : function0
+{
+public:
+  template <typename Functor> function (Functor f) : function0 (f) {}
+};
+class test_unit_generator
+{
+};
+class test_case
+{
+public:
+  test_case (basic_cstring, basic_cstring, int, function);
+};
+struct auto_test_unit_registrar
+{
+  auto_test_unit_registrar (test_unit_generator);
+};
+template <typename F> F unwrap (F, int);
+struct for_each_impl
+{
+  template <typename Iterator, typename LastIterator, typename TransformFunc,
+           typename F>
+  static void
+  execute (Iterator, LastIterator, TransformFunc, F f)
+  {
+    identity<char> __trans_tmp_1;
+    unwrap (f, 0)(__trans_tmp_1);
+  }
+};
+template <typename, typename, typename F>
+void
+for_each (F f)
+{
+  for_each_impl::execute (0, 0, 0, f);
+}
+template <typename TestCaseTemplate> class test_case_template_invoker
+{
+public:
+  void operator()()
+  {
+    TestCaseTemplate::run (0);
+  }
+};
+template <typename Generator, typename TestCaseTemplate>
+struct generate_test_case_4_type
+{
+  generate_test_case_4_type (basic_cstring, basic_cstring, int, Generator G)
+    : m_test_case_name (0), m_test_case_file (0), m_holder (G)
+  {
+  }
+  template <typename TestType> void operator()(identity<TestType>)
+  {
+    test_case (0, 0, 0, test_case_template_invoker<TestCaseTemplate> ());
+  }
+  basic_cstring m_test_case_name;
+  basic_cstring m_test_case_file;
+  Generator m_holder;
+};
+template <typename TestCaseTemplate>
+class template_test_case_gen : public test_unit_generator
+{
+public:
+  template_test_case_gen (basic_cstring, basic_cstring, int)
+  {
+    for_each<int, make_identity> (
+      generate_test_case_4_type<template_test_case_gen, TestCaseTemplate> (
+       0, 0, 0, *this));
+  }
+};
+class attribute_name
+{
+  int m_id;
+
+public:
+  attribute_name (char);
+};
+template <typename> struct term;
+namespace exprns_ {
+template <typename> struct expr;
+}
+using exprns_::expr;
+template <typename T> struct Trans_NS_proto_terminal
+{
+  typedef expr<term<T> > type;
+};
+namespace exprns_ {
+template <typename Arg0> struct expr<term<Arg0> >
+{
+  Arg0 child0;
+};
+}
+template <typename Expr> struct actor
+{
+  typename Trans_NS_proto_terminal<Expr>::type proto_expr_;
+};
+template <template <typename> class Actor = actor> struct terminal
+{
+  typedef Actor<int> type;
+};
+namespace log {
+struct to_log_fun
+{
+};
+class value_extractor;
+template <typename, typename = value_extractor, typename = void,
+         template <typename> class = actor>
+class attribute_actor;
+class attribute_terminal
+{
+public:
+  attribute_name m_name;
+  attribute_name
+  get_name ()
+  {
+    return m_name;
+  }
+};
+template <typename, typename, typename, template <typename> class ActorT>
+class attribute_actor : ActorT<attribute_terminal>
+{
+public:
+  typedef int value_type;
+  attribute_name
+  get_name ()
+  {
+    return this->proto_expr_.child0.get_name ();
+  }
+};
+template <typename AttributeValueT>
+attribute_actor<AttributeValueT> attr (attribute_name);
+terminal<>::type stream;
+template <typename LeftT, typename ImplT> class attribute_output_terminal
+{
+public:
+  template <typename U>
+  attribute_output_terminal (LeftT, attribute_name, ImplT, U);
+};
+template <typename LeftT> struct make_output_expression
+{
+  typedef attribute_output_terminal<LeftT, to_log_fun> type;
+  template <typename RightT>
+  static type
+  make (LeftT left, RightT &right)
+  {
+    type (left, right.get_name (), to_log_fun (), 0);
+  }
+};
+template <typename, typename RightT, typename = typename RightT::value_type>
+struct make_output_actor;
+template <template <typename> class ActorT, typename LeftExprT,
+         typename RightT, typename ValueT>
+struct make_output_actor<ActorT<LeftExprT>, RightT, ValueT>
+{
+  typedef make_output_expression<ActorT<LeftExprT> > make_expression;
+  typedef ActorT<typename make_expression::type> type;
+  static type
+  make (ActorT<LeftExprT> left, RightT &right)
+  {
+    type { make_expression::make (left, right) };
+  }
+};
+template <typename LeftExprT, typename T, typename FallbackPolicyT,
+         typename TagT>
+typename make_output_actor<actor<LeftExprT>, attribute_actor<TagT> >::type
+operator<<(actor<LeftExprT> left,
+          attribute_actor<T, FallbackPolicyT, TagT> right)
+{
+  make_output_actor<actor<LeftExprT>, attribute_actor<T> >::make (left, right);
+}
+}
+}
+namespace logging = boost::log;
+namespace expr = logging;
+namespace {
+class my_class;
+}
+template <typename> struct default_formatting
+{
+  void test_method ();
+};
+struct default_formatting_invoker
+{
+  static void
+  run (void *)
+  {
+    default_formatting<int> t;
+    t.test_method ();
+  }
+};
+boost::auto_test_unit_registrar default_formatting_registrar56 (
+  boost::template_test_case_gen<default_formatting_invoker> (0, 0, 0));
+template <typename CharT>
+void
+default_formatting<CharT>::test_method ()
+{
+  expr::stream << expr::attr<my_class> (0);
+  expr::stream << expr::attr<int> (0) << expr::attr<int> (0)
+              << expr::attr<int> (0);
+}
diff --git a/gcc/testsuite/g++.dg/ipa/pr63838.C b/gcc/testsuite/g++.dg/ipa/pr63838.C
new file mode 100644 (file)
index 0000000..d673649
--- /dev/null
@@ -0,0 +1,56 @@
+// PR ipa/63838
+// { dg-do run }
+// { dg-options "-O2 -fdump-ipa-pure-const" }
+// { dg-final { scan-ipa-dump-not "Function found to be nothrow: void foo" "pure-const" } }
+// { dg-final { scan-ipa-dump-not "Function found to be nothrow: void bar" "pure-const" } }
+// { dg-final { cleanup-ipa-dump "pure-const" } }
+
+__attribute__((noinline, noclone)) static void bar (int);
+volatile int v;
+void (*fn) ();
+struct S { S () { v++; } ~S () { v++; } };
+
+__attribute__((noinline, noclone)) static void
+foo (int x)
+{
+  v++;
+  if (x == 5)
+    bar (x);
+}
+
+__attribute__((noinline, noclone)) static void
+bar (int x)
+{
+  v++;
+  if (x == 6)
+    foo (x);
+  else if (x == 5)
+    fn ();
+}
+
+__attribute__((noinline, noclone)) int
+baz (int x)
+{
+  S s;
+  foo (x);
+}
+
+void
+throw0 ()
+{
+  throw 0;
+}
+
+int
+main ()
+{
+  fn = throw0;
+  asm volatile ("" : : : "memory");
+  try
+    {
+      baz (5);
+    }
+  catch (int)
+    {
+    }
+}
diff --git a/gcc/testsuite/g++.dg/ipa/pr64068.C b/gcc/testsuite/g++.dg/ipa/pr64068.C
new file mode 100644 (file)
index 0000000..9528883
--- /dev/null
@@ -0,0 +1,49 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+typedef int PROV_ENUMALGS_EX, PCCRYPT_OID_INFO;
+class A {
+  int m_fn2();
+  virtual bool m_fn1(PCCRYPT_OID_INFO);
+};
+int fn1();
+void fn2();
+int A::m_fn2() { m_fn1(0); }
+
+bool fn3() {
+  for (;;) {
+    if (fn1()) {
+      if (fn1() != 259)
+        fn2();
+      break;
+    }
+    return 1;
+  }
+  return 0;
+}
+
+class B {
+public:
+  B() { fn3(); }
+};
+class C : A {
+  bool m_fn1(PCCRYPT_OID_INFO) { m_fn3(); }
+  int isSupportedByProvider_algId;
+  PROV_ENUMALGS_EX isSupportedByProvider_outEnumAlgs;
+  PROV_ENUMALGS_EX isSupportedByProvider_enumAlgs;
+  bool m_fn3() {
+    while (1) {
+      if (fn1()) {
+        if (fn1() != 259)
+          fn2();
+        break;
+      }
+      if (isSupportedByProvider_algId)
+        isSupportedByProvider_outEnumAlgs = isSupportedByProvider_enumAlgs;
+      return 1;
+    }
+    return 0;
+  }
+};
+
+void fn4() { B(); }
diff --git a/gcc/testsuite/g++.dg/ipa/pr64896.C b/gcc/testsuite/g++.dg/ipa/pr64896.C
new file mode 100644 (file)
index 0000000..0a78220
--- /dev/null
@@ -0,0 +1,29 @@
+// PR ipa/64896
+// { dg-do compile }
+// { dg-options "-O2" }
+
+struct A { int a, b; };
+struct B { A c; int d; };
+struct C { virtual B fn1 () const; };
+struct D { B fn2 () const; int fn3 () const; C *fn4 () const; };
+
+int
+D::fn3 () const
+{
+  fn4 ()->fn1 ();
+}
+
+B
+D::fn2 () const
+{
+  return B ();
+}
+
+class F : C
+{
+  B
+  fn1 () const
+  {
+    return B ();
+  }
+};
diff --git a/gcc/testsuite/g++.dg/lookup/using55.C b/gcc/testsuite/g++.dg/lookup/using55.C
new file mode 100644 (file)
index 0000000..61098b1
--- /dev/null
@@ -0,0 +1,19 @@
+// PR c++/65721
+
+template<typename T>
+struct A {
+  typedef T D;
+};
+
+template<typename X>
+class B : public A<X> {
+  using typename B::D;         // { dg-error "not a base" }
+public:
+  D echo(D x) {                        // { dg-error "D" }
+    return x;
+  }
+};
+
+int main() {
+  B<int> b;
+}
diff --git a/gcc/testsuite/g++.dg/lto/pr65193_0.C b/gcc/testsuite/g++.dg/lto/pr65193_0.C
new file mode 100644 (file)
index 0000000..d778fca
--- /dev/null
@@ -0,0 +1,71 @@
+/* { dg-lto-do link } */
+/* { dg-require-effective-target fpic } */
+/* { dg-lto-options {{-fPIC -r -nostdlib -flto -O2 -g}} } */
+
+void frexp (int, int *);
+namespace std
+{
+  int ldexp (int, int);
+  struct A
+    {
+    };
+  template <class T> T get_min_shift_value ();
+  template <class> struct min_shift_initializer
+    {
+      struct B
+       {
+         B () { get_min_shift_value<long double> (); }
+       } static const b;
+      static void
+         m_fn1 ()
+           {
+             b;
+           }
+    };
+  template <class T>
+      const typename min_shift_initializer<T>::B min_shift_initializer<T>::b;
+  template <class T>
+      inline T
+      get_min_shift_value ()
+       {
+         using std::ldexp;
+         static T c = ldexp (0, 0);
+         min_shift_initializer<T>::m_fn1;
+       }
+  template <class T, class Policy>
+      void
+      float_next_imp (T p1, Policy p2)
+       {
+         using std::ldexp;
+         int d;
+         float_next (0, p2);
+         frexp (p1, &d);
+       }
+  template <class T, class Policy>
+      int
+      float_next (const T &p1, Policy &p2)
+       {
+         float_next_imp (p1, p2);
+       }
+  template <class T, class Policy> void float_prior_imp (T, Policy)
+    {
+      get_min_shift_value<T> ();
+    }
+  template <class T, class Policy> int float_prior (T, Policy)
+    {
+      float_prior_imp (static_cast<T> (0), 0);
+    }
+  template <class T, class U, class Policy>
+      void
+      nextafter (T p1, U p2, Policy p3)
+       {
+         p2 ? float_next (0, p3) : float_prior (p1, 0);
+       }
+  long double e;
+  int f;
+  void
+      nextafter ()
+       {
+         nextafter (e, f, A ());
+       }
+}
diff --git a/gcc/testsuite/g++.dg/lto/pr65549_0.C b/gcc/testsuite/g++.dg/lto/pr65549_0.C
new file mode 100644 (file)
index 0000000..4c6358d
--- /dev/null
@@ -0,0 +1,144 @@
+// { dg-lto-do link }
+// { dg-lto-options { { -std=gnu++14 -flto -g } { -std=gnu++14 -flto -g -O2 -fno-inline -flto-partition=max } } }
+// { dg-extra-ld-options "-r -nostdlib" }
+
+namespace std {
+inline namespace __cxx11 {}
+template <typename _Tp, _Tp> struct integral_constant {
+  static constexpr _Tp value = 0;
+};
+template <typename> struct __and_;
+struct is_member_object_pointer : integral_constant<bool, false> {};
+template <typename>
+struct is_member_function_pointer : integral_constant<bool, false> {};
+template <typename> struct remove_reference { typedef int type; };
+template <typename> class C;
+template <bool, int, typename...> struct __result_of_impl;
+template <typename _Functor, typename... _ArgTypes>
+struct __result_of_impl<false, 0, _Functor, _ArgTypes...> {
+  typedef decltype(0) type;
+};
+template <typename _Functor, typename... _ArgTypes>
+struct C<_Functor(_ArgTypes...)>
+    : __result_of_impl<is_member_object_pointer::value,
+                       is_member_function_pointer<
+                           typename remove_reference<_Functor>::type>::value,
+                       _Functor> {};
+template <typename _Tp> using result_of_t = typename C<_Tp>::type;
+template <typename> void forward();
+template <typename _Tp> _Tp move(_Tp) {}
+namespace __cxx11 {
+class basic_string typedef string;
+}
+template <typename> struct allocator_traits { typedef decltype(0) pointer; };
+}
+struct F : std::allocator_traits<int> {};
+namespace std {
+namespace __cxx11 {
+class basic_string {
+public:
+  struct _Alloc_hider : F {
+    _Alloc_hider(pointer);
+  } _M_dataplus;
+  basic_string(int) : _M_dataplus(0) {}
+  ~basic_string();
+};
+}
+template <typename> class function;
+template <typename _Functor> class _Base_manager {
+protected:
+  static _Functor *_M_get_pointer(int) {}
+};
+template <typename, typename> class _Function_handler;
+template <typename _Res, typename _Functor, typename... _ArgTypes>
+class _Function_handler<_Res(_ArgTypes...), _Functor>
+    : _Base_manager<_Functor> {
+public:
+  static _Res _M_invoke(const int &) {
+    (*_Base_manager<_Functor>::_M_get_pointer(0))();
+  }
+};
+template <typename, typename> using __check_func_return_type = int;
+template <typename _Res, typename... _ArgTypes>
+class function<_Res(_ArgTypes...)> {
+  template <typename> using _Invoke = decltype(0);
+  template <typename _Functor>
+  using _Callable = __and_<__check_func_return_type<_Invoke<_Functor>, _Res>>;
+  template <typename, typename> using _Requires = int;
+
+public:
+  template <typename _Functor, typename = _Requires<_Callable<_Functor>, void>>
+  function(_Functor);
+  using _Invoker_type = _Res (*)(const int &);
+  _Invoker_type _M_invoker;
+};
+template <typename _Res, typename... _ArgTypes>
+template <typename _Functor, typename>
+function<_Res(_ArgTypes...)>::function(_Functor) {
+  _M_invoker = _Function_handler<_Res(), _Functor>::_M_invoke;
+}
+class unique_ptr {
+public:
+  ~unique_ptr();
+};
+template <typename _Tp, typename... _Args> _Tp make_unique(_Args... __args) {
+  _Tp(__args...);
+}
+}
+class A {
+public:
+  template <class T> T as();
+};
+class variables_map {
+public:
+  A operator[](std::basic_string);
+};
+class B {
+public:
+  variables_map configuration();
+  void run(int, int, std::function<void()>);
+};
+class H;
+struct G {
+  enum {} _state;
+};
+class D {
+  G _local_state;
+  std::unique_ptr _task;
+  template <typename Func> void schedule(Func func) {
+    struct task_with_state {
+      task_with_state(Func func) : _func(func) {}
+      Func _func;
+    } tws = std::make_unique<task_with_state>(std::move(func));
+  }
+  friend H;
+};
+template <typename> using futurize_t = H;
+class H {
+  D *_promise;
+  template <typename Func> void schedule(Func func) {
+    G __trans_tmp_1;
+    struct task_with_ready_state {
+      task_with_ready_state(Func, G);
+    };
+    std::make_unique<task_with_ready_state>(std::move(func), __trans_tmp_1);
+    _promise->schedule(std::move(func));
+  }
+  template <typename Func, typename Param> void then(Func func, Param) {
+    using P = D;
+    P pr;
+    schedule([ pr = std::move(pr), func, param = std::forward<Param> ]{});
+  }
+
+public:
+  template <typename Func> futurize_t<std::result_of_t<Func()>> then(Func) {
+    then(0, [] {});
+  }
+} clients;
+main() {
+  B app;
+  app.run(0, 0, [&] {
+    auto config = app.configuration()[0].as<std::string>();
+    clients.then([] {});
+  });
+}
diff --git a/gcc/testsuite/g++.dg/opt/flifetime-dse1.C b/gcc/testsuite/g++.dg/opt/flifetime-dse1.C
new file mode 100644 (file)
index 0000000..733d28a
--- /dev/null
@@ -0,0 +1,23 @@
+// { dg-options "-O3 -fno-lifetime-dse" }
+// { dg-do run }
+
+typedef __SIZE_TYPE__ size_t;
+inline void * operator new (size_t, void *p) { return p; }
+
+struct A
+{
+  int i;
+  A() {}
+  ~A() {}
+};
+
+int main()
+{
+  int ar[1];
+
+  A* ap = new(ar) A;
+  ap->i = 42;
+  ap->~A();
+
+  if (ar[0] != 42) __builtin_abort();
+}
diff --git a/gcc/testsuite/g++.dg/other/anon7.C b/gcc/testsuite/g++.dg/other/anon7.C
new file mode 100644 (file)
index 0000000..12c1ab2
--- /dev/null
@@ -0,0 +1,10 @@
+// PR c++/65879
+
+static struct
+{
+  void f();
+  struct Inner
+  {
+    void g();
+  };
+} x;
diff --git a/gcc/testsuite/g++.dg/other/const4.C b/gcc/testsuite/g++.dg/other/const4.C
new file mode 100644 (file)
index 0000000..6e30d9e
--- /dev/null
@@ -0,0 +1,10 @@
+// { dg-do compile }
+
+int lValue;
+int main()
+{
+  switch (lValue)
+    {
+    case -(int)((2U << (8 * sizeof(int) - 2)) - 1) - 1:;
+    }
+}
diff --git a/gcc/testsuite/g++.dg/other/dump-ada-spec-3.C b/gcc/testsuite/g++.dg/other/dump-ada-spec-3.C
new file mode 100644 (file)
index 0000000..ae4985c
--- /dev/null
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-options "-fdump-ada-spec" } */
+
+using namespace std;
+
+class Base {
+   public:
+     int My_V;
+     virtual void Primitive ();
+
+     Base ();
+};
+
+void Base::Primitive () {
+}
+
+Base::Base () {
+}
+
+void Dispatch (Base * B) {
+  B->Primitive ();
+}
+
+/* { dg-final { cleanup-ada-spec } } */
diff --git a/gcc/testsuite/g++.dg/pr54442.C b/gcc/testsuite/g++.dg/pr54442.C
new file mode 100644 (file)
index 0000000..a489565
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+
+struct S
+{
+  void s (int) const throw ();
+  void s (int) throw ();
+};
+
+typedef int index_t;
+
+void (S::*f) (index_t)       = &S::s;
+void (S::*g) (index_t) const = &S::s;
diff --git a/gcc/testsuite/g++.dg/pr64037.C b/gcc/testsuite/g++.dg/pr64037.C
new file mode 100644 (file)
index 0000000..e5cd0e2
--- /dev/null
@@ -0,0 +1,27 @@
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-options "-std=c++11 -Os" }
+
+enum class X : unsigned char {
+  V = 2,
+};
+
+static void
+__attribute__((noinline,noclone))
+foo(unsigned &out, unsigned a, X b)
+{
+  out = static_cast<unsigned>(b);
+}
+
+int main()
+{
+  unsigned deadbeef = 0xDEADBEEF;
+  asm volatile ("" : "+d" (deadbeef), "+c" (deadbeef));
+
+  unsigned out;
+  foo(out, 2, X::V);
+
+  if (out != 2)
+    __builtin_abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/pr64688-2.C b/gcc/testsuite/g++.dg/pr64688-2.C
new file mode 100644 (file)
index 0000000..c4a22b8
--- /dev/null
@@ -0,0 +1,136 @@
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-options "-std=c++11 -O3 -march=westmere" }
+
+template <int> struct int_ {};
+template <typename> struct add_const { typedef int type; };
+template <typename> struct add_reference { typedef int type; };
+template <typename T> struct next { typedef typename T::next type; };
+template <typename> struct size_impl;
+template <typename T> struct msvc_eti_base : T {};
+template <int N> struct long_ {
+  static const int value = N;
+  typedef long_<N + 1> next;
+};
+template <typename Sequence>
+struct size : msvc_eti_base<typename size_impl<
+typename Sequence::tag>::template apply<Sequence>> {};
+template <typename Base> struct v_item : Base {
+  typedef typename next<typename Base::size>::type size;
+};
+template <typename = int> struct vector0 {
+  typedef int tag;
+  typedef long_<0> size;
+};
+template <> struct size_impl<int> {
+  template <typename Vector> struct apply : Vector::size {};
+};
+template <typename> struct vector3 : v_item<v_item<v_item<vector0<>>>> {};
+template <typename> struct layout { typedef vector3<int> color_space_t; };
+template <typename> struct kth_element_const_reference_type;
+template <typename> struct iterator_adaptor_get_base;
+template <typename, typename, int> struct homogeneous_color_base;
+template <typename> struct element_const_reference_type;
+template <typename Element, typename Layout>
+  struct homogeneous_color_base<Element, Layout, 3> {
+  Element _v0, _v1, _v2;
+  typename element_const_reference_type<homogeneous_color_base>::type
+    at(int_<0>) {
+    return _v0;
+  }
+  typename element_const_reference_type<homogeneous_color_base>::type
+    at(int_<1>) {
+    return _v1;
+  }
+  typename element_const_reference_type<homogeneous_color_base>::type
+    at(int_<2>) {
+    return _v2;
+  }
+};
+template <typename Element, typename Layout, int K1>
+  struct kth_element_const_reference_type<
+  homogeneous_color_base<Element, Layout, K1>>
+  : add_reference<typename add_const<Element>::type> {};
+template <int K, typename E, typename L, int N>
+  typename add_reference<typename add_const<E>::type>::type
+  at_c(homogeneous_color_base<E, L, N> p1) {
+  return p1.at(int_<K>());
+}
+template <typename> class memory_based_step_iterator;
+template <typename> class memory_based_2d_locator;
+template <typename> class image_view;
+template <typename, typename> struct pixel;
+struct iterator_type_from_pixel {
+  typedef pixel<unsigned char, layout<vector3<int>>> *type;
+};
+template <typename XIterator> struct type_from_x_iterator {
+    typedef image_view<
+    memory_based_2d_locator<memory_based_step_iterator<XIterator>>> view_t;
+};
+template <typename>
+struct element_const_reference_type
+: kth_element_const_reference_type<
+homogeneous_color_base<unsigned, layout<int>, 3>> {};
+template <typename, typename>
+  struct pixel : homogeneous_color_base<unsigned char, layout<int>,
+  size<layout<int>::color_space_t>::value> {
+};
+template <typename Iterator>
+struct iterator_adaptor_get_base<memory_based_step_iterator<Iterator>> {
+  typedef Iterator type;
+};
+template <typename> class memory_based_2d_locator {
+ public:
+    typedef iterator_adaptor_get_base<memory_based_step_iterator<
+      pixel<unsigned, layout<vector3<int>>> *>>::type x_iterator;
+};
+template <typename> class image_view {
+ public:
+  typedef memory_based_2d_locator<int>::x_iterator x_iterator;
+  x_iterator row_begin___trans_tmp_2;
+  x_iterator row_begin(int) { return row_begin___trans_tmp_2; }
+};
+template <typename, bool, typename = int> class image {
+ public:
+ typedef type_from_x_iterator<iterator_type_from_pixel::type>::view_t view_t;
+ image(int);
+};
+template <typename Pixel, bool IsPlanar, typename Alloc>
+  typename image<Pixel, 0>::view_t view(image<Pixel, IsPlanar, Alloc>);
+template <typename Op> void measure_time(Op p1) {
+  for (;;)
+    p1();
+}
+template <typename, typename> struct fill_nongil_t;
+template <typename T, typename P>
+  struct fill_nongil_t<
+      image_view<memory_based_2d_locator<
+  memory_based_step_iterator<pixel<T, layout<vector3<int>>> *>>>,
+  P> {
+    typedef image_view<memory_based_2d_locator<
+      memory_based_step_iterator<pixel<T, layout<vector3<int>>> *>>> View;
+    View _v;
+    P _p;
+ fill_nongil_t(View p1, P) : _v(p1) {}
+    void operator()() {
+      T *first = (T *)_v.row_begin(0);
+      T last;
+      while (first != &last) {
+       first[0] = at_c<0>(_p);
+       first[1] = at_c<1>(_p);
+       first[2] = at_c<2>(_p);
+       first += 3;
+      }
+    }
+};
+template <typename, typename> void test_fill(int) {
+  image<int, 0>::view_t __trans_tmp_1;
+  image<int, 0> im(0);
+  __trans_tmp_1 = view(im);
+  measure_time(fill_nongil_t<
+                    image_view<memory_based_2d_locator<memory_based_step_iterator<
+              pixel<unsigned char, layout<vector3<int>>> *>>>,
+              pixel<unsigned, int>>(__trans_tmp_1, pixel<unsigned, int>()));
+}
+void performance_testtest_method() {
+  test_fill<image_view<int>, pixel<unsigned, int>>(0);
+}
diff --git a/gcc/testsuite/g++.dg/pr65049.C b/gcc/testsuite/g++.dg/pr65049.C
new file mode 100644 (file)
index 0000000..7ced500
--- /dev/null
@@ -0,0 +1,19 @@
+// PR middle-end/65409
+// Reported by Ignacy Gawedzki <bugs@qult.net>
+
+struct Foo
+{
+  Foo() {}
+  int  a;
+  int  b;
+  char c;
+};
+
+Foo copy_foo(Foo);
+
+struct Bar : Foo
+{
+  Bar(Foo t) : Foo(copy_foo(t)) {}
+};
+
+Bar a = Foo();
diff --git a/gcc/testsuite/g++.dg/template/non-dependent14.C b/gcc/testsuite/g++.dg/template/non-dependent14.C
new file mode 100644 (file)
index 0000000..b257d9b
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/64251
+
+class DictionaryValue {};
+template <typename T> void CreateValue(T) {
+  DictionaryValue(0);
+  CreateValue(0);
+}
diff --git a/gcc/testsuite/g++.dg/template/offsetof3.C b/gcc/testsuite/g++.dg/template/offsetof3.C
new file mode 100644 (file)
index 0000000..b173746
--- /dev/null
@@ -0,0 +1,18 @@
+// PR c++/64487
+
+struct foo {
+      int member;
+};
+
+template < int N>
+struct bar {};
+
+template <int N>
+struct qux {
+        static bar<N+__builtin_offsetof(foo,member)> static_member;
+};
+
+template <int N>
+bar<N+__builtin_offsetof(foo,member)> qux<N>::static_member;
+
+int main() { }
diff --git a/gcc/testsuite/g++.dg/template/recurse4.C b/gcc/testsuite/g++.dg/template/recurse4.C
new file mode 100644 (file)
index 0000000..ee8d1b7
--- /dev/null
@@ -0,0 +1,18 @@
+// PR c++/62255
+
+// It's not clear whether this is well-formed; instantiating the
+// initializer of 'value' causes the instantiation of Derived, which in
+// turn requires the value of 'value', but the recursion ends there, so it
+// seems reasonable to allow it.
+
+template <typename T> struct Test {
+  template<typename X> static int check(typename X::Type*);
+  template<typename> static char check(...);
+  static const bool value = (sizeof(check<T>(0)) == sizeof(int));
+};
+template <int> struct Sink { };
+template <typename T> struct Derived : Sink<Test<Derived<T> >::value> {
+  typedef int Type;
+};
+
+Sink<Test<Derived<int> >::value> s;
diff --git a/gcc/testsuite/g++.dg/template/ref9.C b/gcc/testsuite/g++.dg/template/ref9.C
new file mode 100644 (file)
index 0000000..983f627
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/63658
+
+struct Descriptor {};
+
+template <Descriptor & D>
+struct foo
+{
+  void size ();
+};
+
+Descriptor g_descriptor = {};
+
+template<> void foo<g_descriptor>::size()
+{
+}
diff --git a/gcc/testsuite/g++.dg/template/repo11.C b/gcc/testsuite/g++.dg/template/repo11.C
new file mode 100644 (file)
index 0000000..5cabfd4
--- /dev/null
@@ -0,0 +1,31 @@
+// PR c++/64521
+// { dg-options "-frepo -std=c++11" }
+// { dg-require-host-local "" }
+// { dg-skip-if "dkms are not final links" { vxworks_kernel } }
+// { dg-final cleanup-repo-files }
+
+template <typename H> struct J { J(H) {} };
+template <unsigned long, typename...> struct K;
+template <unsigned long I> struct K<I> {};
+template <unsigned long I, typename H, typename... T>
+struct K<I, H, T...> : K<I + 1, T...>, J<H> {
+  K(const H &p1, const T &... p2) : K<I + 1, T...>(p2...), J<H>(p1) {}
+};
+template <typename... E> struct C : K<0, E...> {
+  C(const E &... p1) : K<0, E...>(p1...) {}
+};
+template <typename> struct A {
+  A() = default;
+};
+struct M;
+template <typename> struct L {
+  struct B {
+    template <typename> static M *__test(...);
+    typedef A<int> _Del;
+    typedef decltype(__test<_Del>()) type;
+  };
+  C<typename B::type, A<M>> _M_t;
+  L(typename B::type) : _M_t(0, A<M>()) {}
+};
+struct M {};
+int main() { L<int>(new M); }
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr63841.C b/gcc/testsuite/g++.dg/tree-ssa/pr63841.C
new file mode 100644 (file)
index 0000000..2a2c78f
--- /dev/null
@@ -0,0 +1,35 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+#include <string>
+
+std::string __attribute__ ((noinline)) comp_test_write() {
+  std::string data;
+
+  for (int i = 0; i < 2; ++i) {
+    char b = 1 >> (i * 8);
+    data.append(&b, 1);
+  }
+
+  return data;
+}
+
+std::string __attribute__ ((noinline)) comp_test_write_good() {
+  std::string data;
+
+  char b;
+  for (int i = 0; i < 2; ++i) {
+    b = 1 >> (i * 8);
+    data.append(&b, 1);
+  }
+
+  return data;
+}
+
+int main() {
+  std::string good = comp_test_write_good();
+  std::string bad = comp_test_write();
+
+  if (good != bad)
+    __builtin_abort ();
+}
index 26d01ae..20429f1 100644 (file)
@@ -1,18 +1,23 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
+
+static pthread_barrier_t barrier;
 
 void *Thread(void *a) {
   __atomic_fetch_add((int*)a, 1, __ATOMIC_SEQ_CST);
+  barrier_wait(&barrier);
   return 0;
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   int *a = new int(0);
   pthread_t t;
   pthread_create(&t, 0, Thread, a);
-  sleep(1);
+  barrier_wait(&barrier);
   delete a;
   pthread_join(t, 0);
 }
index 1fe512c..3b6a8e3 100644 (file)
@@ -1,19 +1,24 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 
 #include <pthread.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
+
+static pthread_barrier_t barrier;
 
 void *Thread(void *a) {
-  sleep(1);
+  barrier_wait(&barrier);
   __atomic_fetch_add((int*)a, 1, __ATOMIC_SEQ_CST);
   return 0;
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   int *a = new int(0);
   pthread_t t;
   pthread_create(&t, 0, Thread, a);
   delete a;
+  barrier_wait(&barrier);
   pthread_join(t, 0);
 }
 
index a937614..d72d0fb 100644 (file)
@@ -1,10 +1,12 @@
 /* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
 /* { dg-output "ThreadSanitizer: data race.*" } */
 /* { dg-output "pthread_cond_signal.*" } */
 
-#include <stdio.h>
-#include <stdlib.h>
 #include <pthread.h>
+#include "tsan_barrier.h"
+
+static pthread_barrier_t barrier;
 
 struct Ctx {
   pthread_mutex_t m;
@@ -18,10 +20,12 @@ void *thr(void *p) {
   c->done = true;
   pthread_mutex_unlock(&c->m);
   pthread_cond_signal(&c->c);
+  barrier_wait(&barrier);
   return 0;
 }
 
 int main() {
+  barrier_init(&barrier, 2);
   Ctx *c = new Ctx();
   pthread_mutex_init(&c->m, 0);
   pthread_cond_init(&c->c, 0);
@@ -31,6 +35,7 @@ int main() {
   while (!c->done)
     pthread_cond_wait(&c->c, &c->m);
   pthread_mutex_unlock(&c->m);
+  barrier_wait(&barrier);
   delete c;
   pthread_join(th, 0);
 }
diff --git a/gcc/testsuite/g++.dg/tsan/tsan_barrier.h b/gcc/testsuite/g++.dg/tsan/tsan_barrier.h
new file mode 100644 (file)
index 0000000..5d37a64
--- /dev/null
@@ -0,0 +1,14 @@
+/* TSAN-invisible barriers.  Link with -ldl.  */
+#include <pthread.h>
+#include <dlfcn.h>
+
+static __typeof(pthread_barrier_wait) *barrier_wait;
+
+static
+void barrier_init (pthread_barrier_t *barrier, unsigned count)
+{
+  void *h = dlopen ("libpthread.so.0", RTLD_LAZY);
+  barrier_wait = (__typeof (pthread_barrier_wait) *)
+                dlsym (h, "pthread_barrier_wait");
+  pthread_barrier_init (barrier, NULL, count);
+}
diff --git a/gcc/testsuite/g++.dg/ubsan/pr63913.C b/gcc/testsuite/g++.dg/ubsan/pr63913.C
new file mode 100644 (file)
index 0000000..34dceb4
--- /dev/null
@@ -0,0 +1,12 @@
+// PR sanitizer/63913
+// { dg-do compile }
+// { dg-options "-fsanitize=bool -fnon-call-exceptions" }
+
+struct B { B (); ~B (); };
+
+double
+foo (bool *x)
+{
+  B b;
+  return *x;
+}
diff --git a/gcc/testsuite/g++.dg/warn/Warray-bounds-6.C b/gcc/testsuite/g++.dg/warn/Warray-bounds-6.C
new file mode 100644 (file)
index 0000000..f2e5f2f
--- /dev/null
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-O3 -Warray-bounds" }
+
+struct type {
+    bool a, b;
+    bool get_b() { return b; }
+};
+
+type stuff[9u];
+
+void bar();
+
+void foo()
+{
+  for(unsigned i = 0u; i < 9u; i++)
+    {
+      if(!stuff[i].a)
+       continue;
+
+      bar();
+
+      for(unsigned j = i + 1u; j < 9u; j++)
+       if(stuff[j].a && stuff[j].get_b()) // { dg-bogus "above array bounds" }
+         return;
+    }
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-22.C b/gcc/testsuite/g++.dg/warn/Wunused-var-22.C
new file mode 100644 (file)
index 0000000..8ae46c1
--- /dev/null
@@ -0,0 +1,12 @@
+// PR c++/63657
+// { dg-options "-Wunused-variable" }
+
+class Bar
+{
+  virtual ~Bar() {}
+};
+Bar& getbar();
+void bar()
+{
+  Bar& b = getbar();           // { dg-warning "unused" }
+}
diff --git a/gcc/testsuite/g++.dg/warn/register-parm-1.C b/gcc/testsuite/g++.dg/warn/register-parm-1.C
new file mode 100644 (file)
index 0000000..44232d3
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/60955
+// { dg-options "-Wextra" }
+
+unsigned int erroneous_warning(register int a) {
+    if ((a) & 0xff) return 1; else return 0;
+}
+unsigned int no_erroneous_warning(register int a) {
+    if (a & 0xff) return 1; else return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr63608.c b/gcc/testsuite/gcc.c-torture/compile/pr63608.c
new file mode 100644 (file)
index 0000000..2d4a09a
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR middle-end/63608 */
+
+typedef long T;
+typedef unsigned long U;
+unsigned long a;
+
+unsigned long
+foo (int b)
+{
+  T c = 0;
+  const U d = 2248593032UL;
+  a = (c = +d) | (~4L & ~b);
+  return c;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr64067.c b/gcc/testsuite/gcc.c-torture/compile/pr64067.c
new file mode 100644 (file)
index 0000000..24ad996
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR middle-end/64067 */
+
+struct S { int s; };
+int *const v[1] = { &((struct S) { .s = 42 }).s };
+
+int *
+foo (void)
+{
+  return v[0];
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr64269.c b/gcc/testsuite/gcc.c-torture/compile/pr64269.c
new file mode 100644 (file)
index 0000000..640758d
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR tree-optimization/64269 */
+
+void
+foo (char *p)
+{
+  __SIZE_TYPE__ s = ~(__SIZE_TYPE__)0;
+  *p = 0;
+  __builtin_memset (p + 1, 0, s);
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr65163.c b/gcc/testsuite/gcc.c-torture/compile/pr65163.c
new file mode 100644 (file)
index 0000000..3a6b288
--- /dev/null
@@ -0,0 +1,22 @@
+/* PR target/65163  */
+
+typedef unsigned int uint32_t;
+typedef unsigned short uint16_t;
+union unaligned_32 { uint32_t l; } __attribute__((packed));
+union unaligned_16 { uint16_t l; } __attribute__((packed));
+
+int
+test_00 (unsigned char* buf, int bits_per_component)
+{
+  (((union unaligned_32*)(buf))->l) =
+    __builtin_bswap32 (bits_per_component == 10 ? 1 : 0);
+  return 0;
+}
+
+int
+test_01 (unsigned char* buf, int bits_per_component)
+{
+  (((union unaligned_16*)(buf))->l) =
+    __builtin_bswap16 (bits_per_component == 10 ? 1 : 0);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr65680.c b/gcc/testsuite/gcc.c-torture/compile/pr65680.c
new file mode 100644 (file)
index 0000000..02f08ce
--- /dev/null
@@ -0,0 +1,20 @@
+/* PR middle-end/65680 */
+/* { dg-do compile { target lp64 } } */
+
+struct S
+{
+  int f : 1;
+} a[100000000000000001][3];
+
+void
+foo (void)
+{
+  struct S b = { 0 };
+  a[100000000000000000][0] = b;
+}
+
+void
+bar (void)
+{
+  a[100000000000000000][0].f = 1;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr63659.c b/gcc/testsuite/gcc.c-torture/execute/pr63659.c
new file mode 100644 (file)
index 0000000..780dc8a
--- /dev/null
@@ -0,0 +1,29 @@
+/* PR rtl-optimization/63659 */
+
+int a, b, c, *d = &b, g, h, i;
+unsigned char e;
+char f;
+
+int
+main ()
+{
+  while (a)
+    {
+      for (a = 0; a; a++)
+       for (; c; c++)
+         ;
+      if (i)
+       break;
+    }
+
+  char j = c, k = -1, l;
+  l = g = j >> h;
+  f = l == 0 ? k : k % l;
+  e = 0 ? 0 : f;
+  *d = e;
+
+  if (b != 255)
+    __builtin_abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr64979.c b/gcc/testsuite/gcc.c-torture/execute/pr64979.c
new file mode 100644 (file)
index 0000000..ccb4608
--- /dev/null
@@ -0,0 +1,36 @@
+/* PR target/64979 */
+
+#include <stdarg.h>
+
+void __attribute__((noinline, noclone))
+bar (int x, va_list *ap)
+{
+  if (ap)
+    {
+      int i;
+      for (i = 0; i < 10; i++)
+       if (i != va_arg (*ap, int))
+         __builtin_abort ();
+      if (va_arg (*ap, double) != 0.5)
+       __builtin_abort ();
+    }
+}
+
+void __attribute__((noinline, noclone))
+foo (int x, ...)
+{
+  va_list ap;
+  int n;
+
+  va_start (ap, x);
+  n = va_arg (ap, int);
+  bar (x, (va_list *) ((n == 0) ? ((void *) 0) : &ap));
+  va_end (ap);
+}
+
+int
+main ()
+{
+  foo (100, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0.5);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr65427.c b/gcc/testsuite/gcc.c-torture/execute/pr65427.c
new file mode 100644 (file)
index 0000000..dd28a5d
--- /dev/null
@@ -0,0 +1,34 @@
+/* PR tree-optimization/65427 */
+
+typedef int V __attribute__ ((vector_size (8 * sizeof (int))));
+V a, b, c, d, e, f;
+
+__attribute__((noinline, noclone)) void
+foo (int x, int y)
+{
+  do
+    {
+      if (x)
+       d = a ^ c;
+      else
+       d = a ^ b;
+    }
+  while (y);
+}
+
+int
+main ()
+{
+  a = (V) { 1, 2, 3, 4, 5, 6, 7, 8 };
+  b = (V) { 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80 };
+  e = (V) { 0x41, 0x82, 0x43, 0x84, 0x45, 0x86, 0x47, 0x88 };
+  foo (0, 0);
+  if (__builtin_memcmp (&d, &e, sizeof (V)) != 0)
+    __builtin_abort ();
+  c = (V) { 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40 };
+  f = (V) { 0x81, 0x42, 0x83, 0x44, 0x85, 0x46, 0x87, 0x48 };
+  foo (1, 0);
+  if (__builtin_memcmp (&d, &f, sizeof (V)) != 0)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr66233.c b/gcc/testsuite/gcc.c-torture/execute/pr66233.c
new file mode 100644 (file)
index 0000000..b0d63b6
--- /dev/null
@@ -0,0 +1,22 @@
+/* PR tree-optimization/66233 */
+
+unsigned int v[8];
+
+__attribute__((noinline, noclone)) void
+foo (void)
+{
+  int i;
+  for (i = 0; i < 8; i++)
+    v[i] = (float) i;
+}
+
+int
+main ()
+{
+  unsigned int i;
+  foo ();
+  for (i = 0; i < 8; i++)
+    if (v[i] != i)
+      __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/20141029-1.c b/gcc/testsuite/gcc.dg/20141029-1.c
new file mode 100644 (file)
index 0000000..b25af57
--- /dev/null
@@ -0,0 +1,28 @@
+/* { dg-do compile } */
+/* { dg-options "-fstrict-volatile-bitfields -fdump-rtl-final" } */
+
+#define PERIPH (*(volatile struct system_periph *)0x81234)
+
+struct system_periph {
+  union {
+    unsigned short WORD;
+    struct {
+      unsigned short a:1;
+      unsigned short b:1;
+      unsigned short  :5;
+      unsigned short c:1;
+      unsigned short  :8;
+    } BIT;
+  } ALL;
+};
+
+void
+foo()
+{
+  while (1)
+    {
+      PERIPH.ALL.BIT.a = 1;
+    }
+}
+/* { dg-final { scan-rtl-dump-times "mem/v(/.)*:HI" 4 "final" } } */
+/* { dg-final { cleanup-rtl-dump "final" } } */
diff --git a/gcc/testsuite/gcc.dg/Warray-bounds-12.c b/gcc/testsuite/gcc.dg/Warray-bounds-12.c
new file mode 100644 (file)
index 0000000..ef26c65
--- /dev/null
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -Warray-bounds" } */
+/* { dg-additional-options "-mssse3" { target x86_64-*-* i?86-*-* } } */
+
+void foo(short a[], short m)
+{
+  int i, j;
+  int f1[10];
+  short nc;
+
+  nc = m + 1;
+  if (nc > 3)
+    {
+      for (i = 0; i <= nc; i++)
+       {
+         f1[i] = f1[i] + 1;
+       }
+    }
+
+  for (i = 0, j = m; i < nc; i++, j--)
+    {
+      a[i] = f1[i]; /* { dg-bogus "above array bounds" } */
+      a[j] = i;
+    }
+  return;
+}
diff --git a/gcc/testsuite/gcc.dg/Warray-bounds-13.c b/gcc/testsuite/gcc.dg/Warray-bounds-13.c
new file mode 100644 (file)
index 0000000..7b40a83
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -Warray-bounds" } */
+
+extern char *bar[17];
+
+int foo(int argc, char **argv)
+{
+  int i;
+  int n = 0;
+
+  for (i = 0; i < argc; i++)
+    n++;
+
+  for (i = 0; i < argc; i++)
+    argv[i] = bar[i + n]; /* { dg-bogus "above array bounds" } */
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/ipa/PR64559.c b/gcc/testsuite/gcc.dg/ipa/PR64559.c
new file mode 100644 (file)
index 0000000..463afdc
--- /dev/null
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+/* { dg-options "-Os"  } */
+
+int a, b, c, d;
+
+struct S
+{
+  int f0;
+};
+
+static int
+fn1 (int p)
+{
+  return p == 0 || a;
+}
+
+static int
+fn2 ()
+{
+  d = fn1 (c);
+  return 0;
+}
+
+static int
+fn3 (struct S p)
+{
+  p.f0 || fn2 ();
+  if (fn1 (1))
+    b = 0;
+  return 0;
+}
+
+int
+main ()
+{
+  struct S e = { 1 };
+  fn3 (e);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/ipa/pr63551.c b/gcc/testsuite/gcc.dg/ipa/pr63551.c
new file mode 100644 (file)
index 0000000..48b020a
--- /dev/null
@@ -0,0 +1,33 @@
+/* { dg-do run } */
+/* { dg-options "-Os" } */
+
+union U
+{
+  unsigned int f0;
+  int f1;
+};
+
+int a, d;
+
+void
+fn1 (union U p)
+{
+  if (p.f1 <= 0)
+    if (a)
+      d = 0;
+}
+
+void
+fn2 ()
+{
+  d = 0;
+  union U b = { 4294967286U };
+  fn1 (b);
+}
+
+int
+main ()
+{
+  fn2 ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/ipa/pr64041.c b/gcc/testsuite/gcc.dg/ipa/pr64041.c
new file mode 100644 (file)
index 0000000..4877b4b
--- /dev/null
@@ -0,0 +1,64 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+int printf (const char *, ...);
+
+int a, b = 1, d;
+
+union U1
+{
+  unsigned int f0;
+  int f1;
+};
+
+union U2
+{
+  int f2;
+  int f3;
+} c;
+
+int
+fn1 (int p)
+{
+  int t = p && a || p && a && p; 
+  return t ? t : a;
+}
+
+unsigned
+fn2 (union U1 p1, union U2 p2)
+{
+  if (p1.f1 <= 0)
+    {
+      for (; p2.f2;)
+       c.f2 = 0;
+      p2.f2 = fn1 (d);
+    }
+  return p2.f3;
+}
+
+int g = 0;
+
+int
+foo ()
+{
+  if (b)
+    {
+      union U1 f = { 0xFFFFFFFFU }; 
+
+      fn2 (f, c);
+    }
+  g = 1;
+  return 0; 
+}
+
+
+int
+main ()
+{
+  foo ();
+
+  if (g == 0)
+    __builtin_abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/pr64373_0.c b/gcc/testsuite/gcc.dg/lto/pr64373_0.c
new file mode 100644 (file)
index 0000000..b4f3fdf
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-lto-do assemble } */
+
+extern void b(int L, float (*data)[L]);
+
+void a(void)
+{
+  float* p = 0;
+  int i = 0;
+  b(10, (float (*)[10])(p + i));
+}
index 1b25e29..7490e33 100644 (file)
@@ -24,6 +24,6 @@ foo (int y)
   baz (a);
 }
 
-/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre"} } */
-/* { dg-final { scan-tree-dump-times "bar2 \\(" 1 "pre"} } */
+/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "bar2 \\(" 1 "pre" { xfail *-*-* } } } */
 /* { dg-final { cleanup-tree-dump "pre" } } */
diff --git a/gcc/testsuite/gcc.dg/pr52769.c b/gcc/testsuite/gcc.dg/pr52769.c
new file mode 100644 (file)
index 0000000..138cecb
--- /dev/null
@@ -0,0 +1,24 @@
+/* PR c/52769 */
+/* { dg-do run } */
+/* { dg-options "-O3" } */
+
+typedef struct
+{
+  int should_be_zero;
+  char s[6];
+  int x;
+} foo_t;
+
+int
+main (void)
+{
+  volatile foo_t foo = {
+    .s = "123456",
+    .x = 2
+  };
+
+  if (foo.should_be_zero != 0)
+    __builtin_abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr61058.c b/gcc/testsuite/gcc.dg/pr61058.c
new file mode 100644 (file)
index 0000000..6f840f4
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR rtl-optimization/61058 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+/* { dg-additional-options "-fno-asynchronous-unwind-tables -mtune=atom" { target i?86-*-* x86_64-*-* } } */
+
+void
+foo (void)
+{
+  __builtin_unreachable ();
+}
diff --git a/gcc/testsuite/gcc.dg/pr62167-run.c b/gcc/testsuite/gcc.dg/pr62167-run.c
new file mode 100644 (file)
index 0000000..37214a3
--- /dev/null
@@ -0,0 +1,47 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -ftree-tail-merge" } */
+
+struct node
+{
+  struct node *next;
+  struct node *prev;
+};
+
+struct node node;
+
+struct head
+{
+  struct node *first;
+};
+
+struct head heads[5];
+
+int k = 2;
+
+struct head *head = &heads[2];
+
+int
+main ()
+{
+  struct node *p;
+
+  node.next = (void*)0;
+
+  node.prev = (void *)head;
+
+  head->first = &node;
+
+  struct node *n = head->first;
+
+  struct head *h = &heads[k];
+
+  heads[2].first = n->next;
+
+  if ((void*)n->prev == (void *)h)
+    p = h->first;
+  else
+    /* Dead tbaa-unsafe load from ((struct node *)&heads[2])->next.  */
+    p = n->prev->next;
+
+  return !(p == (void*)0);
+}
diff --git a/gcc/testsuite/gcc.dg/pr62167.c b/gcc/testsuite/gcc.dg/pr62167.c
new file mode 100644 (file)
index 0000000..f8c31a0
--- /dev/null
@@ -0,0 +1,50 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */
+
+struct node
+{
+  struct node *next;
+  struct node *prev;
+};
+
+struct node node;
+
+struct head
+{
+  struct node *first;
+};
+
+struct head heads[5];
+
+int k = 2;
+
+struct head *head = &heads[2];
+
+int
+main ()
+{
+  struct node *p;
+
+  node.next = (void*)0;
+
+  node.prev = (void *)head;
+
+  head->first = &node;
+
+  struct node *n = head->first;
+
+  struct head *h = &heads[k];
+
+  heads[2].first = n->next;
+
+  if ((void*)n->prev == (void *)h)
+    p = h->first;
+  else
+    /* Dead tbaa-unsafe load from ((struct node *)&heads[2])->next.  */
+    p = n->prev->next;
+
+  return !(p == (void*)0);
+}
+
+/* { dg-final { scan-tree-dump-not "Removing basic block" "pre"} } */
+/* { dg-final { cleanup-tree-dump "pre" } } */
diff --git a/gcc/testsuite/gcc.dg/pr63593.c b/gcc/testsuite/gcc.dg/pr63593.c
new file mode 100644 (file)
index 0000000..08bc8f9
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -fno-tree-vectorize" } */
+
+int in[2 * 4][4];
+int out[4];
+
+void
+foo (void)
+{
+  int sum;
+  int i, j, k;
+  for (k = 0; k < 4; k++)
+    {
+      sum = 1;
+      for (j = 0; j < 4; j++)
+       for (i = 0; i < 4; i++)
+         sum *= in[i + k][j];
+      out[k] = sum;
+    }
+}
diff --git a/gcc/testsuite/gcc.dg/pr63637-1.c b/gcc/testsuite/gcc.dg/pr63637-1.c
new file mode 100644 (file)
index 0000000..7a716f9
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c;
+  asm ("# Magic instruction" : "=r" (a));
+  asm ("# Magic instruction" : "=r" (b));
+  asm ("# Magic instruction" : "=r" (c));
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 1 } } */
diff --git a/gcc/testsuite/gcc.dg/pr63637-2.c b/gcc/testsuite/gcc.dg/pr63637-2.c
new file mode 100644 (file)
index 0000000..44e9d7c
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c;
+  asm ("# Magic instruction" : "=r" (a) : "r" (0));
+  asm ("# Magic instruction" : "=r" (b) : "r" (0));
+  asm ("# Magic instruction" : "=r" (c) : "r" (0));
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 1 } } */
diff --git a/gcc/testsuite/gcc.dg/pr63637-3.c b/gcc/testsuite/gcc.dg/pr63637-3.c
new file mode 100644 (file)
index 0000000..51a2ff7
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c;
+  asm ("# Magic instruction" : "=r" (a) : : "memory");
+  asm ("# Magic instruction" : "=r" (b) : : "memory");
+  asm ("# Magic instruction" : "=r" (c) : : "memory");
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 3 } } */
diff --git a/gcc/testsuite/gcc.dg/pr63637-4.c b/gcc/testsuite/gcc.dg/pr63637-4.c
new file mode 100644 (file)
index 0000000..1a91483
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c;
+  asm ("# Magic instruction" : "=r" (a) : "r" (0) : "memory");
+  asm ("# Magic instruction" : "=r" (b) : "r" (0) : "memory");
+  asm ("# Magic instruction" : "=r" (c) : "r" (0) : "memory");
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 3 } } */
diff --git a/gcc/testsuite/gcc.dg/pr63637-5.c b/gcc/testsuite/gcc.dg/pr63637-5.c
new file mode 100644 (file)
index 0000000..fce8593
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c, d, e, f;
+  asm ("# Magic instruction" : "=r" (a), "=r" (d));
+  asm ("# Magic instruction" : "=r" (b), "=r" (e));
+  asm ("# Magic instruction" : "=r" (c), "=r" (f));
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 3 } } */
diff --git a/gcc/testsuite/gcc.dg/pr63637-6.c b/gcc/testsuite/gcc.dg/pr63637-6.c
new file mode 100644 (file)
index 0000000..1b997c4
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c, d, e, f;
+  asm ("# Magic instruction" : "=r" (a), "=r" (d) : "r" (0));
+  asm ("# Magic instruction" : "=r" (b), "=r" (e) : "r" (0));
+  asm ("# Magic instruction" : "=r" (c), "=r" (f) : "r" (0));
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 3 } } */
diff --git a/gcc/testsuite/gcc.dg/pr63665.c b/gcc/testsuite/gcc.dg/pr63665.c
new file mode 100644 (file)
index 0000000..046ecae
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do run } */
+/* { dg-require-effective-target int32plus } */
+/* { dg-options "-O -fno-tree-ccp -fno-tree-fre -fno-tree-copy-prop -fwrapv" } */
+
+static inline int
+test5 (int x)
+{
+  int y = 0x80000000;
+  return x + y;
+}
+
+int
+main ()
+{
+  if (test5 (0x80000000) != 0)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr63762.c b/gcc/testsuite/gcc.dg/pr63762.c
new file mode 100644 (file)
index 0000000..df11067
--- /dev/null
@@ -0,0 +1,77 @@
+/* PR middle-end/63762 */
+/* { dg-do assemble } */
+/* { dg-options "-O2" } */
+
+#include <stdlib.h>
+
+void *astFree ();
+void *astMalloc ();
+void astNegate (void *);
+int astGetNegated (void *);
+void astGetRegionBounds (void *, double *, double *);
+int astResampleF (void *, ...);
+
+extern int astOK;
+
+int
+MaskF (int inside, int ndim, const int lbnd[], const int ubnd[],
+       float in[], float val)
+{
+
+  void *used_region;
+  float *c, *d, *out, *tmp_out;
+  double *lbndgd, *ubndgd;
+  int *lbndg, *ubndg, idim, ipix, nax, nin, nout, npix, npixg, result = 0;
+  if (!astOK) return result;
+  lbndg = astMalloc (sizeof (int)*(size_t) ndim);
+  ubndg = astMalloc (sizeof (int)*(size_t) ndim);
+  lbndgd = astMalloc (sizeof (double)*(size_t) ndim);
+  ubndgd = astMalloc (sizeof (double)*(size_t) ndim);
+  if (astOK)
+    {
+      astGetRegionBounds (used_region, lbndgd, ubndgd);
+      npix = 1;
+      npixg = 1;
+      for (idim = 0; idim < ndim; idim++)
+        {
+          lbndg[ idim ] = lbnd[ idim ];
+          ubndg[ idim ] = ubnd[ idim ];
+          npix *= (ubnd[ idim ] - lbnd[ idim ] + 1);
+          if (npixg >= 0) npixg *= (ubndg[ idim ] - lbndg[ idim ] + 1);
+        }
+      if (npixg <= 0 && astOK)
+        {
+          if ((inside != 0) == (astGetNegated( used_region ) != 0))
+            {
+              c = in;
+              for (ipix = 0; ipix < npix; ipix++) *(c++) = val;
+              result = npix;
+            }
+        }
+      else if (npixg > 0 && astOK)
+        {
+          if ((inside != 0) == (astGetNegated (used_region) != 0))
+            {
+              tmp_out = astMalloc (sizeof (float)*(size_t) npix);
+              if (tmp_out)
+                {
+                  c = tmp_out;
+                  for (ipix = 0; ipix < npix; ipix++) *(c++) = val;
+                  result = npix - npixg;
+                }
+              out = tmp_out;
+            }
+          else
+            {
+              tmp_out = NULL;
+              out = in;
+            }
+          if (inside) astNegate (used_region);
+          result += astResampleF (used_region, ndim, lbnd, ubnd, in, NULL,
+                                  NULL, NULL, 0, 0.0, 100, val, ndim,
+                                  lbnd, ubnd, lbndg, ubndg, out, NULL);
+          if (inside) astNegate (used_region);
+        }
+    }
+  return result;
+}
diff --git a/gcc/testsuite/gcc.dg/pr64536.c b/gcc/testsuite/gcc.dg/pr64536.c
new file mode 100644 (file)
index 0000000..9a79829
--- /dev/null
@@ -0,0 +1,67 @@
+/* PR rtl-optimization/64536 */
+/* { dg-do link } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-fPIC" { target fpic } } */
+
+struct S { long q; } *h;
+long a, b, g, j, k, *c, *d, *e, *f, *i;
+long *baz (void)
+{
+  asm volatile ("" : : : "memory");
+  return e;
+}
+
+void
+bar (int x)
+{
+  int y;
+  for (y = 0; y < x; y++)
+    {
+      switch (b)
+       {
+       case 0:
+       case 2:
+         a++;
+         break;
+       case 3:
+         a++;
+         break;
+       case 1:
+         a++;
+       }
+      if (d)
+       {
+         f = baz ();
+         g = k++;
+         if (&h->q)
+           {
+             j = *f;
+             h->q = *f;
+           }
+         else
+           i = (long *) (h->q = *f);
+         *c++ = (long) f;
+         e += 6;
+       }
+      else
+       {
+         f = baz ();
+         g = k++;
+         if (&h->q)
+           {
+             j = *f;
+             h->q = *f;
+           }
+         else
+           i = (long *) (h->q = *f);
+         *c++ = (long) f;
+         e += 6;
+       }
+    }
+}
+
+int
+main ()
+{
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr64563.c b/gcc/testsuite/gcc.dg/pr64563.c
new file mode 100644 (file)
index 0000000..7223349
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR tree-optimization/64563 */
+/* { dg-do compile } */
+/* { dg-options "-Os -Wtype-limits" } */
+
+int a, b, c, d, f;
+unsigned int e;
+
+void
+foo (void)
+{
+  d = b = (a != (e | 4294967288UL));
+  if (!d)
+    c = f || b;
+}
diff --git a/gcc/testsuite/gcc.dg/pr64663.c b/gcc/testsuite/gcc.dg/pr64663.c
new file mode 100644 (file)
index 0000000..9a0bf0d
--- /dev/null
@@ -0,0 +1,17 @@
+/* PR debug/64663 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -g -w" } */
+
+void
+foo (void)
+{
+  int a[9];
+  a[-8] = 0;
+}
+
+void
+bar (void)
+{
+  int a[9];
+  a[-9] = 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr64766.c b/gcc/testsuite/gcc.dg/pr64766.c
new file mode 100644 (file)
index 0000000..bf6fb2d
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR c/64766 */
+/* { dg-do compile } */
+
+void
+foo ()
+{
+}
+
+void foo () = 0; /* { dg-error "is initialized like a variable|invalid initializer" } */
diff --git a/gcc/testsuite/gcc.dg/pr64778.c b/gcc/testsuite/gcc.dg/pr64778.c
new file mode 100644 (file)
index 0000000..71a2607
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR c/64778 */
+/* { dg-do compile } */
+
+int
+foo (int p)
+{
+  int a;
+  a ^= foo (,);        /* { dg-error "expected expression before|too many arguments" } */
+  return a;
+}
diff --git a/gcc/testsuite/gcc.dg/pr65063.c b/gcc/testsuite/gcc.dg/pr65063.c
new file mode 100644 (file)
index 0000000..bcbdbf0
--- /dev/null
@@ -0,0 +1,33 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -fno-tree-loop-ivcanon -fno-tree-vectorize" } */
+
+static int in[8][4];
+static int out[4];
+static const int check_result[] = {0, 16, 256, 4096};
+
+static inline void foo ()
+{
+  int sum;
+  int i, j, k;
+  for (k = 0; k < 4; k++)
+    {
+      sum = 1;
+      for (j = 0; j < 4; j++)
+       for (i = 0; i < 4; i++)
+         sum *= in[i + k][j];
+      out[k] = sum;
+    }
+}
+
+int main ()
+{
+  int i, j, k;
+  for (i = 0; i < 8; i++)
+    for (j = 0; j < 4; j++)
+      in[i][j] = (i + 2) / 3;
+  foo ();
+  for (k = 0; k < 4; k++)
+    if (out[k] != check_result[k])
+      __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr65228.c b/gcc/testsuite/gcc.dg/pr65228.c
new file mode 100644 (file)
index 0000000..fd83238
--- /dev/null
@@ -0,0 +1,11 @@
+/* PR c/65228 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+__auto_type a = b; /* { dg-error "undeclared" } */
+
+void
+f (void)
+{
+  __auto_type c = d; /* { dg-error "undeclared" } */
+}
diff --git a/gcc/testsuite/gcc.dg/tls/pr66470.c b/gcc/testsuite/gcc.dg/tls/pr66470.c
new file mode 100644 (file)
index 0000000..6d78327
--- /dev/null
@@ -0,0 +1,29 @@
+/* PR target/66470 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-require-effective-target tls } */
+
+extern __thread unsigned long long a[10];
+extern __thread struct S { int a, b; } b[10];
+
+unsigned long long
+foo (long x)
+{
+  return a[x];
+}
+
+struct S
+bar (long x)
+{
+  return b[x];
+}
+
+#ifdef __SIZEOF_INT128__
+extern __thread unsigned __int128 c[10];
+
+unsigned __int128
+baz (long x)
+{
+  return c[x];
+}
+#endif
diff --git a/gcc/testsuite/gcc.dg/tm/pr64391.c b/gcc/testsuite/gcc.dg/tm/pr64391.c
new file mode 100644 (file)
index 0000000..235118a
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR middle-end/64391 */
+/* { dg-do compile } */
+/* { dg-options "-fgnu-tm" } */
+
+void
+foo (void)
+{
+#pragma GCC ivdep
+  while (1);
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr62238.c b/gcc/testsuite/gcc.dg/torture/pr62238.c
new file mode 100644 (file)
index 0000000..de8951a
--- /dev/null
@@ -0,0 +1,30 @@
+/* { dg-do run } */
+
+int a[4], b, c, d; 
+
+int
+fn1 (int p)
+{
+  for (; d; d++)
+    {
+      unsigned int h;
+      for (h = 0; h < 3; h++)
+       {
+         if (a[c+c+h])
+           {
+             if (p)
+               break;
+             return 0;
+           }
+         b = 0;
+       }
+    }
+  return 0;
+}
+
+int
+main ()
+{
+  fn1 (0);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr63738.c b/gcc/testsuite/gcc.dg/torture/pr63738.c
new file mode 100644 (file)
index 0000000..06ede54
--- /dev/null
@@ -0,0 +1,27 @@
+/*  { dg-do compile } */
+
+#include <setjmp.h>
+
+struct longjmp_buffer {
+  jmp_buf buf;
+};
+
+void plouf();
+
+extern long interprete()
+{
+  long * sp;
+  int i;
+  long *args;
+  int n;
+
+  struct longjmp_buffer raise_buf;
+  setjmp (raise_buf.buf);
+
+  plouf();
+  sp -= 4;
+  for (i = 0; i < n; i++)
+    args[i] = sp[10-i];
+  plouf();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr64199.c b/gcc/testsuite/gcc.dg/torture/pr64199.c
new file mode 100644 (file)
index 0000000..e3f1002
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-ffast-math -frounding-math" } */
+
+float
+foo (void)
+{
+  return 1.1f + 2.2f + 2.2f;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr64365.c b/gcc/testsuite/gcc.dg/torture/pr64365.c
new file mode 100644 (file)
index 0000000..169993e
--- /dev/null
@@ -0,0 +1,37 @@
+/* { dg-do run } */
+/* { dg-require-effective-target int32plus } */
+
+extern void abort (void);
+extern int memcmp (const void * , const void *, __SIZE_TYPE__);
+
+void __attribute__((noinline,noclone))
+foo(int *in)
+{
+  int i;
+  for (i = 62; i >= 10; i--)
+    {
+      in[i - 8] -= in[i];
+      in[i - 5] += in[i] * 2;
+      in[i - 4] += in[i];
+    }
+}
+
+int main()
+{
+  int x[64];
+  int y[64] = { 0, 1, -2380134, -1065336, -1026376, 3264240, 3113534, 2328130, 3632054, 3839634, 2380136, 1065339, 1026380, 1496037, 1397286, 789976, 386408, 450984, 597112, 497464, 262008, 149184, 194768, 231519, 173984, 87753, 60712, 82042, 87502, 60014, 30050, 25550, 33570, 32386, 20464, 10675, 10868, 13329, 11794, 6892, 3988, 4564, 5148, 4228, 2284, 1568, 1848, 1943, 1472, 741, 628, 702, 714, 474, 230, 234, 238, 242, 120, 59, 60, 61, 62, 63 };
+  int i;
+
+  for (i = 0; i < 64; ++i)
+    {
+      x[i] = i;
+      __asm__ volatile ("");
+    }
+
+  foo (x);
+
+  if (memcmp (x, y, sizeof (x)) != 0)
+    abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr66123.c b/gcc/testsuite/gcc.dg/torture/pr66123.c
new file mode 100644 (file)
index 0000000..848f8fe
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+
+int
+test (int foo)
+{
+  static void *dummy[] = { &&a, &&b };
+  goto *((char *) &&b - 2 * (foo < 0));
+a:
+b:
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr66272.c b/gcc/testsuite/gcc.dg/torture/pr66272.c
new file mode 100644 (file)
index 0000000..6f0148a
--- /dev/null
@@ -0,0 +1,23 @@
+/* { dg-do run } */
+
+struct S
+{
+  int f0;
+  int f1;
+};
+
+int b;
+
+int main ()
+{
+  struct S a[2] = { 0 };
+  struct S d = { 0, 1 };
+  for (b = 0; b < 2; b++)
+    {
+      a[b] = d;
+      d = a[0];
+    }
+  if (d.f1 != 1)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/stdarg-7.c b/gcc/testsuite/gcc.dg/tree-ssa/stdarg-7.c
new file mode 100644 (file)
index 0000000..9b497c0
--- /dev/null
@@ -0,0 +1,22 @@
+/* PR target/64979 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-stdarg" } */
+
+#include <stdarg.h>
+
+void bar (int x, va_list *ap);
+
+void
+foo (int x, ...)
+{
+  va_list ap;
+  int n;
+
+  va_start (ap, x);
+  n = va_arg (ap, int);
+  bar (x, (va_list *) ((n == 0) ? ((void *) 0) : &ap));
+  va_end (ap);
+}
+
+/* { dg-final { scan-tree-dump "foo: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" } } */
+/* { dg-final { cleanup-tree-dump "stdarg" } } */
index d0c1d69..67a6017 100644 (file)
@@ -54,6 +54,8 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_element_align } } } */
+/* Exclude POWER8 (only POWER cpu for which vect_element_align is true)
+   because loops have vectorized before SLP gets a shot.  */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target { vect_element_align && { ! powerpc*-*-* } } } } } */
 /* { dg-final { cleanup-tree-dump "slp" } } */
 
index 737b3b0..edd17ec 100644 (file)
@@ -54,6 +54,8 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_element_align } } } */
+/* Exclude POWER8 (only POWER cpu for which vect_element_align is true)
+   because loops have vectorized before SLP gets a shot.  */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target { vect_element_align && { ! powerpc*-*-* } } } } } */
 /* { dg-final { cleanup-tree-dump "slp" } } */
 
index c5b3134..17f5c83 100644 (file)
@@ -54,6 +54,8 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  { target { vect_int_mult &&  vect_element_align } } } } */
+/* Exclude POWER8 (only POWER cpu for which vect_element_align is true)
+   because loops have vectorized before SLP gets a shot.  */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  { target { { vect_int_mult && vect_element_align } && { ! powerpc*-*-* } } } } } */
 /* { dg-final { cleanup-tree-dump "slp" } } */
 
index 6d69d15..09232ef 100644 (file)
@@ -19,5 +19,5 @@ int foo (int *p)
   return tem0 + tem1 + tem2 + tem3;
 }
 
-/* { dg-final { scan-tree-dump "vectorization is not profitable" "slp" { xfail  vect_no_align } } } */
+/* { dg-final { scan-tree-dump "vectorization is not profitable" "slp" { xfail  { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "slp" } } */
index 9f1a587..f1c10e4 100644 (file)
@@ -46,6 +46,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  { xfail  vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  { xfail  { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "slp" } } */
   
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a-pr63175.c b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a-pr63175.c
new file mode 100644 (file)
index 0000000..9f3c89c
--- /dev/null
@@ -0,0 +1,30 @@
+/* { dg-require-effective-target vect_int } */
+/* { dg-do compile } */
+
+#define N 16 
+
+const unsigned int in[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+unsigned int out[N];
+
+__attribute__ ((noinline)) int
+main1 (void)
+{
+  const unsigned int *pin = &in[1];
+  unsigned int *pout = &out[0];
+
+  /* Misaligned load.  */
+  *pout++ = *pin++;
+  *pout++ = *pin++;
+  *pout++ = *pin++;
+  *pout++ = *pin++;
+
+  return 0;
+}
+
+/* Verify that the assembly contains vector instructions alone
+   with no word loads (lw, lwu, lwz, lwzu, or their indexed forms)
+   or word stores (stw, stwu, stwx, stwux, or their indexed forms).  */
+
+/* { dg-final { scan-assembler "\t\(lvx|lxv|lvsr|stxv\)" } } */
+/* { dg-final { scan-assembler-not "\tlwz?u?x? " } } */
+/* { dg-final { scan-assembler-not "\tstwu?x? " } } */
index 4e8d71b..f0e302a 100644 (file)
@@ -1,6 +1,5 @@
 /* { dg-require-effective-target vect_int } */
 
-#include <stdarg.h>
 #include "../../tree-vect.h"
 
 #define N 16 
@@ -9,12 +8,10 @@ unsigned int out[N];
 unsigned int in[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
 
 __attribute__ ((noinline)) int
-main1 (unsigned int x, unsigned int y)
+main1 (void)
 {
-  int i;
   unsigned int *pin = &in[1];
   unsigned int *pout = &out[0];
-  unsigned int a0, a1, a2, a3;
 
   /* Misaligned load.  */
   *pout++ = *pin++;
@@ -22,13 +19,6 @@ main1 (unsigned int x, unsigned int y)
   *pout++ = *pin++;
   *pout++ = *pin++;
 
-  /* Check results.  */
-  if (out[0] != in[1]
-      || out[1] != in[2]
-      || out[2] != in[3]
-      || out[3] != in[4])
-    abort();
-
   return 0;
 }
 
@@ -36,11 +26,18 @@ int main (void)
 {
   check_vect ();
 
-  main1 (2, 3);
+  main1 ();
+
+  /* Check results.  */
+  if (out[0] != in[1]
+      || out[1] != in[2]
+      || out[2] != in[3]
+      || out[3] != in[4])
+    abort();
 
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp"  { xfail  vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  { xfail  { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "slp" } } */
   
index 9cae12f..9bc3ea5 100644 (file)
@@ -41,5 +41,5 @@ int main (void)
 } 
 
 /* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_hw_misalign } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 272b3f0..161497f 100644 (file)
@@ -47,5 +47,5 @@ int main (void)
 } 
 
 /* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vect_hw_misalign } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index d716b61..2d1ee97 100644 (file)
@@ -43,8 +43,8 @@ int main (void)
 }
 
 /* Peeling to align the store is used. Overhead of peeling is too high.  */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target vector_alignment_reachable } } } */
-/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" { target { vector_alignment_reachable && {! vect_no_align} } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { vector_alignment_reachable && {! vect_no_align} } } } } */
+/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" { target { vector_alignment_reachable && {! vect_hw_misalign} } } } } */
 
 /* Versioning to align the store is used. Overhead of versioning is not too high.  */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_no_align || {! vector_alignment_reachable} } } } } */
index efab046..5123950 100644 (file)
@@ -67,5 +67,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 2 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr64909.c b/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr64909.c
new file mode 100644 (file)
index 0000000..0f9feac
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-mtune=bdver1" } */
+
+unsigned short a[32];
+unsigned int b[32];
+void t()
+{
+  int i;
+  for (i=0;i<12;i++)
+    b[i]=a[i];
+}
+
+/* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
index 38906a9..cdf687a 100644 (file)
@@ -65,5 +65,5 @@ main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  { xfail { vect_no_align || { ! vect_strided2 } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  { xfail { { vect_no_align && { ! vect_hw_misalign } } || { ! vect_strided2 } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 9447524..4aa4a5e 100644 (file)
@@ -52,5 +52,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 70cf520..187a78c 100644 (file)
@@ -51,6 +51,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail { unaligned_stack || vect_no_align } } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail { unaligned_stack || { vect_no_align && { ! vect_hw_misalign } } } } } } */
 /* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 1 "vect" { xfail *-*-* } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 16a01d1..d09cd41 100644 (file)
@@ -90,5 +90,5 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 2 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 6 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 6 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 63d332a..fd4288c 100644 (file)
@@ -71,5 +71,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 2df45fd..8b1b6c6 100644 (file)
@@ -73,5 +73,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 5679ff7..2be1604 100644 (file)
@@ -50,7 +50,7 @@ int main (void)
   return main1 ();
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "dependence distance negative" 1 "vect"  } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
index f84528a..54f66ea 100644 (file)
@@ -50,6 +50,6 @@ int main (void)
   return main1 ();
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "dependence distance negative" 1 "vect"  } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 8f937a0..8a3dd54 100644 (file)
@@ -182,6 +182,6 @@ int main ()
   return main1 ();
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 4 "vect" {xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 4 "vect" {xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "dependence distance negative" 4 "vect"  } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index c59fe05..50c16c4 100644 (file)
@@ -18,5 +18,5 @@ void square(const float * __restrict__ a,
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 9d21fc6..c9c523c 100644 (file)
@@ -52,5 +52,5 @@ int main (int argc, char **argv)
 /* The loops in VecBug and VecBug2 require versioning for alignment.
    The loop in main is aligned.  */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */
-/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target vect_no_align } } } */
+/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index a4fb386..c7f3b6f 100644 (file)
@@ -11,6 +11,6 @@ void f(unsigned char *s, unsigned char *d, int n) {
     }
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index f501a45..3a88269 100644 (file)
@@ -28,8 +28,8 @@ void blockmove_NtoN_blend_noremap32 (const UINT32 *srcdata, int srcwidth,
    }
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" {xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
 
index 77fe4d8..0b09c86 100644 (file)
@@ -31,5 +31,5 @@ foo (unsigned long n, const float *__restrict u0,
     }
 }
 
-/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 80ba9cc..60c68be 100644 (file)
@@ -67,5 +67,5 @@ void test5 (int* a, int* b)
 }
 
 /* { dg-final { scan-tree-dump-times "hoist" 8 "vect" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "hoist" 3 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "hoist" 3 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr59354.c b/gcc/testsuite/gcc.dg/vect/pr59354.c
new file mode 100644 (file)
index 0000000..309ad3c
--- /dev/null
@@ -0,0 +1,41 @@
+/* { dg-do run } */
+/* { dg-additional-options "-O3" } */
+
+#include "tree-vect.h"
+
+void abort (void);
+
+unsigned int a[256];
+unsigned char b[256];
+
+__attribute__ ((noinline)) void
+main1()
+{
+  int i, z, x, y;
+
+  for(i = 0; i < 256; i++)
+    {
+      a[i] = i % 5;
+      __asm__ volatile ("");
+    }
+
+  for (z = 0; z < 16; z++)
+    for (y = 0; y < 4; y++)
+      for (x = 0; x < 4; x++)
+       b[y*64 + z*4 + x] = a[z*16 + y*4 + x];
+
+  if (b[4] != 1)
+    abort ();
+}
+
+int main (void)
+{
+  check_vect ();
+
+  main1 ();
+
+  return 0;
+}
+
+/* { dg-final { scan-tree-dump "vectorized 1 loop" "vect" { target { vect_pack_trunc } } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr61634.c b/gcc/testsuite/gcc.dg/vect/pr61634.c
new file mode 100644 (file)
index 0000000..80b2c3a
--- /dev/null
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+
+int a, b, c, d;
+short *e;
+void fn1 (int p1[], int p2, int p3[], int p4[], int p5[], int *p6)
+{
+  int f;
+  c = *p1;
+  d = *p5;
+  (void)p6;
+  for (; a; a--)
+    {
+      f = *e >> 2;
+      *e++ = f;
+      b += f * f;
+      f = *e >> 2;
+      *e++ = f;
+    }
+  p4[0] = p3[0];
+  for (;; p2--)
+    ;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr62021.c b/gcc/testsuite/gcc.dg/vect/pr62021.c
new file mode 100644 (file)
index 0000000..e0208e6
--- /dev/null
@@ -0,0 +1,30 @@
+/* { dg-require-effective-target vect_simd_clones } */
+/* { dg-additional-options "-fopenmp-simd" } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+#pragma omp declare simd linear(y)
+__attribute__((noinline)) int *
+foo (int *x, int y)
+{
+  return x + y;
+}
+
+int a[1024];
+int *b[1024] = { &a[0] };
+
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 1024; i++)
+    b[i] = &a[1023 - i];
+  #pragma omp simd
+  for (i = 0; i < 1024; i++)
+    b[i] = foo (b[i], i);
+  for (i = 0; i < 1024; i++)
+    if (b[i] != &a[1023])
+      __builtin_abort ();
+  return 0;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr63605.c b/gcc/testsuite/gcc.dg/vect/pr63605.c
new file mode 100644 (file)
index 0000000..5096c72
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do run } */
+
+#include "tree-vect.h"
+
+extern void abort (void);
+
+int a, b[8] = { 2, 0, 0, 0, 0, 0, 0, 0 }, c[8];
+
+int
+main ()
+{
+  int d;
+  check_vect ();
+  for (; a < 8; a++)
+    {
+      d = b[a] >> 1;
+      c[a] = d != 0;
+    }
+  if (c[0] != 1)
+    abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr64421.c b/gcc/testsuite/gcc.dg/vect/pr64421.c
new file mode 100644 (file)
index 0000000..7e48a8b
--- /dev/null
@@ -0,0 +1,36 @@
+/* PR middle-end/64421 */
+/* { dg-require-effective-target vect_simd_clones } */
+/* { dg-additional-options "-fopenmp-simd" } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+#include "tree-vect.h"
+
+#pragma omp declare simd linear (y) notinbranch
+int foo (int x, int y) __asm ("bar");
+
+#pragma omp declare simd linear (y) notinbranch
+int
+foo (int x, int y)
+{
+  return x + y;
+}
+
+int a[1024] = { 1, 2 };
+
+int
+main ()
+{
+  int i;
+  check_vect ();
+  #pragma omp simd
+  for (i = 0; i < 1024; i++)
+    a[i] = foo (a[i], i);
+  if (a[0] != 1 || a[1] != 3)
+    abort ();
+  for (i = 2; i < 1024; i++)
+    if (a[i] != i)
+      abort ();
+  return 0;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr64493.c b/gcc/testsuite/gcc.dg/vect/pr64493.c
new file mode 100644 (file)
index 0000000..a7dee4d
--- /dev/null
@@ -0,0 +1,31 @@
+/* { dg-do run } */
+
+#include "tree-vect.h"
+
+int a, b, c, d, e, f, g, h;
+
+int
+main ()
+{
+  check_vect ();
+
+  for (; a; a--)
+    for (d = 1; d <= 0; d++)
+      for (; d;)
+       if (h)
+         {
+           if (!g) __builtin_abort ();
+           if (!0) __builtin_abort ();
+         }
+
+  for (f = 4; f; f--)
+    {
+      for (b = 0; b < 2; b++)
+       c |= 1;
+      e |= c;
+    }
+
+  return 0;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr64495.c b/gcc/testsuite/gcc.dg/vect/pr64495.c
new file mode 100644 (file)
index 0000000..aad8752
--- /dev/null
@@ -0,0 +1,35 @@
+/* { dg-do run } */
+
+#include <assert.h>
+#include "tree-vect.h"
+
+int a, b, c, d, e, f, g, i, j;
+static int *h = &e;
+
+int
+main ()
+{
+  check_vect ();
+
+  for (; a;)
+    for (; g; g++)
+      for (; f; f++)
+       if (j)
+         {
+           assert(b); 
+           assert(0);
+         }
+  for (i = 24; i; i--)
+    {
+      for (c = 0; c < 6; c++)
+       d |= 1;
+      *h |= d;
+    }
+
+  if (e != 1) 
+    __builtin_abort (); 
+
+  return 0;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr65518.c b/gcc/testsuite/gcc.dg/vect/pr65518.c
new file mode 100644 (file)
index 0000000..dc400c6
--- /dev/null
@@ -0,0 +1,43 @@
+/* { dg-do run } */\r
+\r
+extern void abort (void);\r
+\r
+typedef struct giga\r
+{\r
+  unsigned int g[16];\r
+} giga;\r
+\r
+unsigned long __attribute__((noinline,noclone))\r
+addfst(giga const *gptr, int num)\r
+{\r
+  unsigned int retval = 0;\r
+  int i;\r
+  for (i = 0; i < num; i++)\r
+    retval += gptr[i].g[0];\r
+  return retval;\r
+}\r
+\r
+int main ()\r
+{\r
+  struct giga g[8];\r
+  unsigned int n = 1;\r
+  int i, j;\r
+  for (i = 0; i < 8; ++i)\r
+    for (j = 0; j < 16; ++j)\r
+      {\r
+       g[i].g[j] = n++;\r
+       __asm__ volatile ("");\r
+      }\r
+  if (addfst (g, 8) != 456)\r
+    abort ();\r
+  return 0;\r
+}\r
+\r
+/* We don't want to vectorize the single-element interleaving in the way\r
+   we currently do that (without ignoring not needed vectors in the\r
+   gap between gptr[0].g[0] and gptr[1].g[0]), because that's very\r
+   sub-optimal and causes memory explosion (even though the cost model\r
+   should reject that in the end).  */\r
+\r
+/* { dg-final { scan-tree-dump-times "vectorized 0 loops in function" 2 "vect" } } */\r
+/* { dg-final { cleanup-tree-dump "vect" } } */\r
diff --git a/gcc/testsuite/gcc.dg/vect/pr66251.c b/gcc/testsuite/gcc.dg/vect/pr66251.c
new file mode 100644 (file)
index 0000000..b789561
--- /dev/null
@@ -0,0 +1,78 @@
+/* { dg-require-effective-target vect_int } */
+/* { dg-require-effective-target vect_double } */
+/* { dg-require-effective-target vect_floatint_cvt } */
+/* { dg-require-effective-target vect_intfloat_cvt } */
+/* { dg-require-effective-target vect_pack_trunc } */
+/* { dg-require-effective-target vect_unpack } */
+/* { dg-require-effective-target vect_hw_misalign } */
+
+#include "tree-vect.h"
+
+void __attribute__((noinline,noclone))
+test1(_Complex double *a, _Complex int *b, int stride, int n)
+{
+  int i;
+  for (i = 0; i < n; i++)
+    {
+      a[i*stride] = b[i*stride];
+    }
+}
+
+void __attribute__((noinline,noclone))
+test2(_Complex int *a, _Complex double *b, int stride, int n)
+{
+  int i;
+  for (i = 0; i < n; i++)
+    {
+      a[i*stride] = b[i*stride];
+    }
+}
+
+_Complex int ia[256];
+_Complex double da[256];
+
+extern void abort (void);
+
+int main ()
+{
+  int i;
+  int stride;
+
+  check_vect ();
+
+  for (stride = 1; stride < 15; stride++)
+    {
+      for (i = 0; i < 256; i++)
+       {
+         __real__ ia[i] = (i + stride) % 19;
+         __imag__ ia[i] = (i + stride) % 23;
+         __asm__ volatile ("");
+       }
+
+      test1(da, ia, stride, 256/stride);
+
+      for (i = 0; i < 256/stride; i++)
+       {
+         if (da[i*stride] != ia[i*stride])
+           abort ();
+       }
+
+      for (i = 0; i < 256; i++)
+       {
+         __real__ da[i] = (i + stride + 1) % 29;
+         __imag__ da[i] = (i + stride + 1) % 31;
+         __asm__ volatile ("");
+       }
+
+      test2(ia, da, stride, 256/stride);
+
+      for (i = 0; i < 256/stride; i++)
+       {
+         if (da[i*stride] != ia[i*stride])
+           abort ();
+       }
+    }
+  return 0;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
index e5e5e3b..d69be28 100644 (file)
@@ -56,5 +56,5 @@ int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect"  } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail { vect_no_align || { ! vect_natural_alignment } } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || { ! vect_natural_alignment } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index f99a2af..0a4746e 100644 (file)
@@ -100,7 +100,7 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
index bbf42af..79d31c1 100644 (file)
@@ -66,7 +66,7 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
index 4a2da22..36c23fa 100644 (file)
@@ -43,8 +43,8 @@ int main (void)
 }
 
 /* The initialization induction loop (with aligned access) is also vectorized.  */
-/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 0ad2848..6e62ee9 100644 (file)
@@ -50,7 +50,7 @@ int main (void)
 
 /* The initialization induction loop (with aligned access) is also vectorized.  */
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" {target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" {target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 43daaa8..d4126af 100644 (file)
@@ -38,7 +38,7 @@ int main (void)
 
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! vect_hw_misalign } } } } */
 /* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" { target vector_alignment_reachable } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 3181081..6781ece 100644 (file)
@@ -64,7 +64,7 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { { ! vector_alignment_reachable } && { ! vect_element_align } } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail { vect_no_align || { { !  vector_alignment_reachable } || vect_element_align  } } } } }  */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_element_align } } } */
index ef1a463..70f28db 100644 (file)
@@ -65,8 +65,8 @@ int main (void)
    two loads to be aligned).  */
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || {! vector_alignment_reachable} } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {{! vect_no_align} && {! vect_hw_misalign} } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index d2eed3a..5da9737 100644 (file)
@@ -55,7 +55,7 @@ int main (void)
    (The store is aligned).  */
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 068c804..98ccf9a 100644 (file)
@@ -61,9 +61,9 @@ int main (void)
    align the store will not force the two loads to be aligned).  */
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align } } } }  */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target vect_hw_misalign } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || {! vector_alignment_reachable} } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && { {! vect_no_align } && {! vect_hw_misalign } } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 69c0979..c7cf6ab 100644 (file)
@@ -56,7 +56,7 @@ int main (void)
    (The store is aligned).  */
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 5a8130b..ced829e 100644 (file)
@@ -67,7 +67,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { vect_element_align } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail { vect_element_align } } } } */
index 838a9bc..8cfb8d9 100644 (file)
@@ -68,7 +68,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { vect_element_align } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail { vect_element_align } } } } */
index 67a1975..5d23178 100644 (file)
@@ -45,7 +45,7 @@ int main (void)
   return main1 ();
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 1c70cc2..3524fa9 100644 (file)
@@ -52,6 +52,6 @@ int main (void)
 
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
+/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 092a301..35336b9 100644 (file)
@@ -44,6 +44,6 @@ int main (void)
 
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 4a05874..56a2197 100644 (file)
@@ -49,8 +49,8 @@ int main (void)
    both for the load and the store.  */
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { {! vect_no_align} && { unaligned_stack && vector_alignment_reachable } } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { { {! unaligned_stack} && vect_no_align } || {unaligned_stack && { {! vector_alignment_reachable} && {! vect_no_align} } } } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { { {! unaligned_stack} && { vect_no_align && { ! vect_hw_misalign } } } || {unaligned_stack && { {! vector_alignment_reachable} && {! vect_no_align } } } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { { unaligned_stack && { vector_alignment_reachable && vect_no_align } } || {unaligned_stack && { {! vector_alignment_reachable} && vect_no_align } } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index ac29d7d..6236caf 100644 (file)
@@ -47,7 +47,7 @@ int main (void)
 /* Requires versioning for aliasing.  */
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 71c01ae..d420707 100644 (file)
@@ -50,8 +50,8 @@ int main (void)
    both for the load and the store.  */
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align } } } } */ 
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */ 
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { {! vect_no_align} && { unaligned_stack && vector_alignment_reachable } } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { { {! unaligned_stack} && vect_no_align } || {unaligned_stack && { {! vector_alignment_reachable} && {! vect_no_align} } } } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { { {! unaligned_stack} && { vect_no_align && { ! vect_hw_misalign } } } || {unaligned_stack && { {! vector_alignment_reachable} && { ! vect_no_align } } } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { { unaligned_stack && { vector_alignment_reachable && vect_no_align } } || {unaligned_stack && { {! vector_alignment_reachable} && vect_no_align } } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index ec6520f..22065bf 100644 (file)
@@ -47,7 +47,7 @@ int main (void)
    (The store is aligned).  */
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 65403eb..52ba1ca 100644 (file)
@@ -76,10 +76,10 @@ int main (void)
 
 /* in main1: */
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target !powerpc*-*-* !i?86-*-* !x86_64-*-* } } } */
-/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 
 /* in main: */
-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 
 /* { dg-final { cleanup-tree-dump "vect" } } */
index c03d196..be560a6 100644 (file)
@@ -64,6 +64,6 @@ int main (void)
 
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align} } } }  */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
-/*  { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target vect_no_align } } } */
-/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 4 "vect" { target vect_no_align } } } */
+/*  { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 4 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 0060d4e..7d8c92a 100644 (file)
@@ -46,5 +46,5 @@ int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { {! vect_no_align} && vector_alignment_reachable } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align } || { { ! vector_alignment_reachable} || vect_element_align } } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align || { {! vector_alignment_reachable} && {! vect_element_align} } } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { { vect_no_align && { ! vect_hw_misalign } } || { {! vector_alignment_reachable} && {! vect_element_align} } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index e42752f..bd2d2fb 100644 (file)
@@ -51,7 +51,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
 
index 32ebf0f..0f36e84 100644 (file)
@@ -59,7 +59,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
 
index 3c37c68..9a6e117 100644 (file)
@@ -56,7 +56,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
 
index 3c21918..ce2db7d 100644 (file)
@@ -82,5 +82,5 @@ main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  { xfail { vect_no_align || { ! vect_strided2 } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  { xfail { { vect_no_align && { ! vect_hw_misalign } } || { ! vect_strided2 } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 7ab21f1..7fbfa3c 100644 (file)
@@ -80,8 +80,8 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { vect_no_align } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail {{ vect_no_align } || {vect_sizes_32B_16B }}} } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail {{ vect_no_align } || {vect_sizes_32B_16B }}} } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail {{ vect_no_align && { ! vect_hw_misalign } } || {vect_sizes_32B_16B }}} } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail {{ vect_no_align && { ! vect_hw_misalign } } || {vect_sizes_32B_16B }}} } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
index 93796d0..2fdd4b7 100644 (file)
@@ -54,7 +54,7 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" {xfail { vect_no_align } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" {xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
index ed6ac6e..44891af 100644 (file)
@@ -91,7 +91,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { vect_no_align } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { vect_element_align}  } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 8 "vect" { xfail { vect_no_align || vect_element_align } } } } */
index 7f72785..a337ca4 100644 (file)
@@ -61,7 +61,7 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { sparc*-*-* && ilp32 } }} } */
-/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 6 "vect" { target vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 6 "vect" {xfail { vect_no_align } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 6 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 6 "vect" {xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
index 84883ca..588751e 100644 (file)
@@ -43,6 +43,6 @@ int main ()
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
index 22b1d98..247d327 100644 (file)
@@ -42,6 +42,6 @@ int main ()
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
index ecb2d90..a3e5ed8 100644 (file)
@@ -48,6 +48,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 1 "vect" } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index d0b4f80..186d853 100644 (file)
@@ -48,6 +48,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 1 "vect" } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 2d37d6d..f0cdcae 100644 (file)
@@ -78,5 +78,5 @@ int main ()
    is known.  */
 /* { dg-final { scan-tree-dump-times "not vectorized: possible dependence between data-refs" 1 "vect" { xfail *-*-* } } } */
 /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" } } */
-/* { dg-final { scan-tree-dump "zero step in outer loop." "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump "zero step in outer loop." "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index c69b7d7..07db614 100644 (file)
@@ -70,5 +70,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 2 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 5ac62ac..505eef5 100644 (file)
@@ -74,5 +74,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 2 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 3c1a362..c1732d9 100644 (file)
@@ -74,5 +74,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 2 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index af787b9..fa10263 100644 (file)
@@ -70,5 +70,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 2 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 5aab805..312947a 100644 (file)
@@ -47,7 +47,7 @@ int main (void)
   return main1 ();
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect"  { xfail { { vect_no_align } || {vect_sizes_32B_16B } } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align } || {vect_sizes_32B_16B } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect"  { xfail { { vect_no_align && { ! vect_hw_misalign } } || {vect_sizes_32B_16B } } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || {vect_sizes_32B_16B } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index dffb858..53871c8 100644 (file)
@@ -44,7 +44,7 @@ int main (void)
   return main1 ();
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect"  { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect"  { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-pr61917.c b/gcc/testsuite/gcc.dg/vect/vect-pr61917.c
new file mode 100644 (file)
index 0000000..c55c620
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-O3" } */
+
+int a, b, c, d;
+
+int
+fn1 ()
+{
+  for (; c; c++)
+    for (b = 0; b < 2; b++)
+      d = a - d;
+  return d; 
+}
index 096839f..8b7a72b 100644 (file)
@@ -12,5 +12,5 @@ void foo (void)
     res[i] = data[i] + data[i + 1];
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/pr62308.c b/gcc/testsuite/gcc.target/aarch64/pr62308.c
new file mode 100644 (file)
index 0000000..1cf6e21
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-mbig-endian" } */
+
+typedef int __attribute__((vector_size(16))) v4si;
+struct S2823 {v4si a;int b[0];};
+void checkx2823 (struct S2823 args){};
diff --git a/gcc/testsuite/gcc.target/aarch64/pr63424.c b/gcc/testsuite/gcc.target/aarch64/pr63424.c
new file mode 100644 (file)
index 0000000..c6bd762
--- /dev/null
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+#include <stdint.h>
+
+uint32_t
+truncate_int (const unsigned long long value)
+{
+  if ( value < 0 )
+    {
+      return 0;
+    }
+  else if ( value > UINT32_MAX )
+    {
+      return UINT32_MAX;
+    }
+  else
+    return (uint32_t)value;
+}
+
+uint32_t
+mul (const unsigned long long x, const unsigned long long y)
+{
+  uint32_t value = truncate_int (x * y);
+  return value;
+}
+
+uint32_t *
+test(unsigned size, uint32_t *a, uint32_t s)
+{
+  unsigned i;
+
+  for (i = 0; i < size; i++)
+    {
+      a[i] = mul (a[i], s);
+    }
+
+  return a;
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/pr64304.c b/gcc/testsuite/gcc.target/aarch64/pr64304.c
new file mode 100644 (file)
index 0000000..721b6b9
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile } */ 
+/* { dg-options "-O2 --save-temps" } */ 
+unsigned char byte = 0; 
+  
+void 
+set_bit (unsigned int bit, unsigned char value) 
+{ 
+  unsigned char mask = (unsigned char) (1 << (bit & 7)); 
+  if (! value) 
+    byte &= (unsigned char)~mask; 
+  else 
+    byte |= mask; 
+    /* { dg-final { scan-assembler "and\tw\[0-9\]+, w\[0-9\]+, 7" } } */ 
+} 
+  
+/* { dg-final { cleanup-saved-temps } } */ 
diff --git a/gcc/testsuite/gcc.target/aarch64/pr65235_1.c b/gcc/testsuite/gcc.target/aarch64/pr65235_1.c
new file mode 100644 (file)
index 0000000..ca12cd5
--- /dev/null
@@ -0,0 +1,30 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+#include "arm_neon.h"
+
+int
+main (int argc, char** argv)
+{
+  int64x1_t val1;
+  int64x1_t val2;
+  int64x1_t val3;
+  uint64x1_t val13;
+  uint64x2_t val14;
+  uint64_t got;
+  uint64_t exp;
+  val1 = vcreate_s64(UINT64_C(0xffffffff80008000));
+  val2 = vcreate_s64(UINT64_C(0x0000f38d00000000));
+  val3 = vcreate_s64(UINT64_C(0xffff7fff0000809b));
+  /* Expect: "val13" = 8000000000001553.  */
+  val13 = vcreate_u64 (UINT64_C(0x8000000000001553));
+  /* Expect: "val14" = 0010 0000 0000 0002 0000 0000 0000 0000.  */
+  val14 = vcombine_u64(vcgt_s64(vqrshl_s64(val1, val2),
+                               vshr_n_s64(val3, 18)),
+                      vshr_n_u64(val13, 11));
+  /* Should be 0000000000000000.  */
+  got = vgetq_lane_u64(val14, 0);
+  exp = 0;
+  if(exp != got)
+    __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/sisd-shft-neg_1.c b/gcc/testsuite/gcc.target/aarch64/sisd-shft-neg_1.c
new file mode 100644 (file)
index 0000000..c091657
--- /dev/null
@@ -0,0 +1,38 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-inline" } */
+
+extern void abort (void);
+
+#define force_simd_si(v) asm volatile ("mov %s0, %1.s[0]" :"=w" (v) :"w" (v) :)
+
+unsigned int
+shft_add (unsigned int a, unsigned int b)
+{
+  unsigned int c;
+
+  force_simd_si (a);
+  force_simd_si (b);
+  c = a >> b;
+  force_simd_si (c);
+
+  return c + b;
+}
+
+int
+main (void)
+{
+  unsigned int i = 0;
+  unsigned int a = 0xdeadbeef;
+
+  for (i = 0; i < 32; i++)
+  {
+    unsigned int exp = (a / (1 << i) + i);
+    unsigned int got = shft_add (a, i);
+
+    if (exp != got)
+      abort ();
+  }
+
+  return 0;
+}
+
diff --git a/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c b/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c
new file mode 100644 (file)
index 0000000..d7d2039
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -save-temps -mcmodel=tiny" } */
+
+int fixed_regs[0x00200000];
+
+int
+foo()
+{
+  return fixed_regs[0x00080000];
+}
+
+/* { dg-final { scan-assembler-not "adr\tx\[0-9\]+, fixed_regs\\\+" } } */
+/* { dg-final {cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/symbol-range.c b/gcc/testsuite/gcc.target/aarch64/symbol-range.c
new file mode 100644 (file)
index 0000000..f999bb3
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -save-temps -mcmodel=small" } */
+
+int fixed_regs[0x200000000ULL];
+
+int
+foo()
+{
+  return fixed_regs[0x100000000ULL];
+}
+
+/* { dg-final { scan-assembler-not "adrp\tx\[0-9\]+, fixed_regs\\\+" } } */
+/* { dg-final {cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/alpha/pr66140.c b/gcc/testsuite/gcc.target/alpha/pr66140.c
new file mode 100644 (file)
index 0000000..d559f69
--- /dev/null
@@ -0,0 +1,53 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcpu=ev4" } */
+
+struct scsi_cmnd {
+       int sc_data_direction;
+};
+struct lpfc_hba {
+       unsigned cfg_total_seg_cnt;
+};
+struct lpfc_scsi_buf {
+       struct scsi_cmnd *pCmd;
+       unsigned seg_cnt;
+       unsigned *fcp_bpl;
+};
+
+extern void *sg_next(void *sg);
+extern void *scsi_sglist(struct scsi_cmnd *cmd);
+extern unsigned scsi_sg_count(struct scsi_cmnd *cmd);
+
+static inline void dma_map_sg_attrs(void *sg, int nents, int dir)
+{
+       int i;
+
+       for (i = 0; i < nents; i++, sg = sg_next(sg))
+               ;
+
+       if (!dir)
+               asm volatile( "call_pal %0" : : "i"(129));
+}
+
+static inline void lpfc_bg_setup_bpl(struct lpfc_hba *phba, struct scsi_cmnd *sc,
+                                    unsigned *pde5)
+{
+       void *sgde;
+       int i;
+
+       *pde5 = (((0x85 & 0x000000ff) << 24) | (*pde5 & ~(0x000000ff << 24)));
+       for (i = 0, sgde = scsi_sglist(sc); i < 2; i++, sgde = sg_next(sgde))
+               ;
+}
+
+void lpfc_bg_scsi_prep_dma_buf_s3(struct lpfc_hba *phba,
+                                 struct lpfc_scsi_buf *lpfc_cmd)
+{
+       struct scsi_cmnd *scsi_cmnd = lpfc_cmd->pCmd;
+       unsigned *bpl = lpfc_cmd->fcp_bpl;
+
+       dma_map_sg_attrs(scsi_sglist(scsi_cmnd),
+                        scsi_sg_count(scsi_cmnd),
+                        scsi_cmnd->sc_data_direction);
+       if (lpfc_cmd->seg_cnt > phba->cfg_total_seg_cnt)
+               lpfc_bg_setup_bpl(phba, scsi_cmnd, bpl);
+}
diff --git a/gcc/testsuite/gcc.target/arm/constant-pool.c b/gcc/testsuite/gcc.target/arm/constant-pool.c
new file mode 100644 (file)
index 0000000..8427dfb
--- /dev/null
@@ -0,0 +1,27 @@
+/* { dg-do run } */
+/* { dg-options "-O1" } */
+
+unsigned short v = 0x5678;
+int i;
+int j = 0;
+int *ptr = &j;
+
+int
+func (void)
+{
+  for (i = 0; i < 1; ++i)
+    {
+      *ptr = -1;
+      v = 0x1234;
+    }
+  return v;
+}
+
+int
+main (void)
+{
+  func ();
+  if (v != 0x1234)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/divzero.c b/gcc/testsuite/gcc.target/arm/divzero.c
new file mode 100644 (file)
index 0000000..7d398a5
--- /dev/null
@@ -0,0 +1,85 @@
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-options "" } */
+/* { dg-do run } */
+
+/* Check that long long divmod functions pass the right argument to
+   __aeabi_ldiv0 on divide by zero.  */
+
+#ifdef DEBUGME
+#include <stdio.h>
+#else
+extern void abort (void);
+#endif
+
+/* Override div zero handler and simply return the provided value.  */
+long long __aeabi_ldiv0 (long long r)
+{
+  return r;
+}
+
+long long lldiv (long long a, long long b)
+{
+  return a / b;
+}
+
+unsigned long long ulldiv (unsigned long long a, unsigned long long b)
+{
+  return a / b;
+}
+
+void check (long long num, long long expected)
+{
+  long long res = lldiv (num, 0LL);
+  if (res != expected)
+#ifdef DEBUGME
+    {
+      printf ("num=%08X:%08X\n", (unsigned)(num >> 32), (unsigned)num);
+      printf ("res=%08X:%08X\n", (unsigned)(res >> 32), (unsigned)res);
+    }
+#else
+    abort ();
+#endif
+}
+
+void ucheck (unsigned long long num, unsigned long long expected)
+{
+  unsigned long long res = ulldiv (num, 0ULL);
+  if (res != expected)
+#ifdef DEBUGME
+    {
+      printf ("num=%08X:%08X\n", (unsigned)(num >> 32), (unsigned)num);
+      printf ("res=%08X:%08X\n", (unsigned)(res >> 32), (unsigned)res);
+    }
+#else
+    abort ();
+#endif
+}
+
+#define POS_BIG 0x7fffffffffffffffLL
+#define NEG_BIG 0x8000000000000000LL
+#define UNS_BIG 0xffffffffffffffffULL
+
+int main ()
+{
+  check (0LL, 0LL);
+  check (1LL, POS_BIG);
+  check (0x000000007fffffffLL, POS_BIG);
+  check (0x00000000ffffffffLL, POS_BIG);
+  check (0x0000000100000000LL, POS_BIG);
+  check (POS_BIG, POS_BIG);
+  check (-1LL, NEG_BIG);
+  check (-0x000000007fffffffLL, NEG_BIG);
+  check (-0x00000000ffffffffLL, NEG_BIG);
+  check (-0x0000000100000000LL, NEG_BIG);
+  check (NEG_BIG, NEG_BIG);
+
+  ucheck (0ULL, 0ULL);
+  ucheck (1ULL, UNS_BIG);
+  ucheck (0x000000007fffffffULL, UNS_BIG);
+  ucheck (0x00000000ffffffffULL, UNS_BIG);
+  ucheck (0x0000000100000000ULL, UNS_BIG);
+  ucheck ((unsigned long long)POS_BIG, UNS_BIG);
+  ucheck (UNS_BIG, UNS_BIG);
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr64453.c b/gcc/testsuite/gcc.target/arm/pr64453.c
new file mode 100644 (file)
index 0000000..17155af
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-mthumb -Os " }  */
+/* { dg-require-effective-target arm_thumb1_ok } */
+
+void save_regs () {
+  __asm volatile ("" ::: "r8");
+}
+
+/* { dg-final { scan-assembler "\tmov\tr., r8" } } */
diff --git a/gcc/testsuite/gcc.target/arm/pr65647-2.c b/gcc/testsuite/gcc.target/arm/pr65647-2.c
new file mode 100644 (file)
index 0000000..f2985f8
--- /dev/null
@@ -0,0 +1,32 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -marm -march=armv6 -std=c99" } */
+
+typedef struct {
+  int i;
+} x264_union32_t;
+typedef struct {
+  int level_idx;
+} trellis_node_t;
+int a, c, d, f, h, i = (int)&c;
+trellis_node_t b[1][1];
+short *e = 0;
+short g;
+void fn1() {
+  int k[64 * 8 * 2];
+  trellis_node_t *l = b[0];
+  for (; i >= d; i--) {
+    if (e[i]) {
+      for (int j = 1; j < 8; j++) {
+        ((x264_union32_t *)&k[a])->i = l[j].level_idx;
+        l[j].level_idx = a;
+        a++;
+      }
+      continue;
+    }
+    for (int j;; j++)
+      ;
+  }
+  int m[6] __attribute__((aligned(16)));
+  for (; h; h++, f++)
+    g = m[h];
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr65647.c b/gcc/testsuite/gcc.target/arm/pr65647.c
new file mode 100644 (file)
index 0000000..d3b44b2
--- /dev/null
@@ -0,0 +1,58 @@
+/* { dg-do compile } */
+/* { dg-options "-march=armv6-m -mthumb -O3 -w -mfloat-abi=soft" } */
+
+a, b, c, e, g = &e, h, i = 7, l = 1, m, n, o, q = &m, r, s = &r, u, w = 9, x,
+  y = 6, z, t6 = 7, t8, t9 = 1, t11 = 5, t12 = &t8, t13 = 3, t15,
+  t16 = &t15;
+struct {
+  long long f3;
+    char f4
+} p = {3}
+
+    ,
+  t = {4};
+
+struct S1 {
+  long long f0;
+  short f1;
+    long long f2
+} d;
+long long f = 4073709551613, t7 = 8, t14 = 4073709551610;
+j[];
+k = j;
+v = &d;
+*t10 = j;
+struct S1 fn1();
+struct S1 fn2() {
+  signed char t1;
+  struct S1 t2;
+  long t3 = x;
+  short t4 = h;
+  short *t5 = &l;
+  fn1(t2, w, 1, o);
+  if (u) {
+    l = q;
+    t1 = a < b ?: b;
+    z = c >= 2 || t1 << c;
+  }
+  *t5 = t4 &= t3;
+  fn3(y);
+}
+
+fn4() {
+  t6 = t.f3;
+  fn5(k, t7);
+}
+
+struct S1 fn1() {
+  f = 0;
+  for (; i;)
+    ;
+  t11 = 0;
+  t13 = *t10 = t14 || n;
+  t9 = t12;
+  for (; p.f4;)
+    s = t16 <= fn6();
+  if (g)
+    v = 0;
+}
diff --git a/gcc/testsuite/gcc.target/avr/torture/pr63633-ice-mult.c b/gcc/testsuite/gcc.target/avr/torture/pr63633-ice-mult.c
new file mode 100644 (file)
index 0000000..a523424
--- /dev/null
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+
+void ice_mult32 (int x)
+{
+  register long reg __asm ("22");
+  __asm volatile (" " :: "r" (reg = 0x12345 * x));
+}
+
+void ice_mult24 (int x)
+{
+  register __int24 reg __asm ("20");
+  __asm volatile (" " :: "r" (reg = 0x12345 * x));
+}
+
+void ice_sh24 (__int24 x)
+{
+  register __int24 reg __asm ("20");
+  __asm volatile (" " :: "r" (reg = x << 3));
+}
+
+void ice_sh24b (__int24 x)
+{
+  register __int24 reg __asm ("20");
+  __asm volatile (" " :: "r" (reg = x << 22));
+}
+
+void ice_s16s16 (int x)
+{
+  register long reg __asm ("20");
+  __asm volatile (" " :: "r" (reg = (long) x*x));
+}
+
+void ice_u16s16 (int x)
+{
+  register long reg __asm ("20");
+  __asm volatile (" " :: "r" (reg = (long) x*0x1234u));
+}
diff --git a/gcc/testsuite/gcc.target/avr/torture/pr64331.c b/gcc/testsuite/gcc.target/avr/torture/pr64331.c
new file mode 100644 (file)
index 0000000..1934ccf
--- /dev/null
@@ -0,0 +1,37 @@
+/* { dg-do run } */
+
+typedef struct
+{
+  unsigned a, b;
+} T2;
+
+
+__attribute__((__noinline__, __noclone__))
+void foo2 (T2 *t, int x)
+{
+  if (x != t->a)
+    {
+      t->a = x;
+  
+      if (x && x == t->b)
+       t->a = 20;
+    }
+}
+
+
+T2 t;
+
+int main (void)
+{
+  t.a = 1;
+  t.b = 1234;
+
+  foo2 (&t, 1234);
+
+  if (t.a != 20)
+    __builtin_abort();
+
+  __builtin_exit (0);
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/avr/torture/pr64452.c b/gcc/testsuite/gcc.target/avr/torture/pr64452.c
new file mode 100644 (file)
index 0000000..44cb2e0
--- /dev/null
@@ -0,0 +1,34 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c99" } */
+
+struct A
+{
+    char str[8];
+    void* v;
+};
+
+int varf (char* fmt, ...);
+
+void foo (struct A a, struct A b)
+{
+    varf ("%s%s", b.str, b.str);
+}
+
+long long x64;
+
+void foo2 (long long j0,
+           struct A a, struct A b, struct A c, struct A d,
+           struct A e, struct A f, struct A g, struct A h, struct A i,
+           long long j1)
+{
+    varf ("%s%s", i.str, i.str, x64, j1+j0);
+}
+
+
+void foo3 (long long j0,
+           struct A a, struct A b, struct A c, struct A d,
+           struct A e, struct A f, struct A g, struct A h, struct A i,
+           long long j1)
+{
+    varf ("%s%s", &i.str, &b.str, x64, j1+j0);
+}
index 8523a12..63579f6 100644 (file)
@@ -39,44 +39,3 @@ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
 
 # All done.
 dg-finish
-# Copyright (C) 2013-2014 Free Software Foundation, Inc.
-
-# This program 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 of the License, or
-# (at your option) any later version.
-# 
-# This program 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/>.
-
-# GCC testsuite that uses the `dg.exp' driver.
-
-# Exit immediately if this isn't a h8300 target.
-if ![istarget h8300*-*-*] then {
-  return
-}
-
-# Load support procs.
-load_lib gcc-dg.exp
-
-# If a testcase doesn't have special options, use these.
-global DEFAULT_CFLAGS
-if ![info exists DEFAULT_CFLAGS] then {
-    set DEFAULT_CFLAGS " -ansi -pedantic-errors"
-}
-
-# Initialize `dg'.
-dg-init
-
-# Main loop.
-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
-       "" $DEFAULT_CFLAGS
-
-# All done.
-dg-finish
index 24fba30..41bd78e 100644 (file)
@@ -18,23 +18,3 @@ isr2 (void)
 {
   foo ();
 }
-/* Check whether rte is generated for two ISRs.  */
-/* { dg-do compile { target h8300-*-* } }  */
-/* { dg-options "-O3" }  */
-/* { dg-final { scan-assembler-times "rte" 2} }  */
-
-extern void foo (void);
-
-#pragma interrupt
-void
-isr1 (void)
-{
-  foo ();
-}
-
-#pragma interrupt
-void
-isr2 (void)
-{
-  foo ();
-}
index 7c242ec..3d0a126 100644 (file)
@@ -19,24 +19,3 @@ main (void)
 {
   return 0;
 }
-/* Check whether rte is generated only for an ISR.  */
-/* { dg-do compile { target h8300-*-* } }  */
-/* { dg-options "-O" }  */
-/* { dg-final { scan-assembler-times "rte" 1 } }  */
-
-#pragma interrupt
-void
-isr (void)
-{
-}
-
-void
-delay (int a)
-{
-}
-
-int
-main (void)
-{
-  return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/avx2-pr64286.c b/gcc/testsuite/gcc.target/i386/avx2-pr64286.c
new file mode 100644 (file)
index 0000000..2edb321
--- /dev/null
@@ -0,0 +1,37 @@
+/* PR rtl-optimization/64286 */
+/* { dg-do run } */
+/* { dg-options "-O2 -mavx2" } */
+/* { dg-require-effective-target avx2 } */
+
+#include <string.h>
+#include <stdlib.h>
+#include <x86intrin.h>
+#include "avx2-check.h"
+
+__m128i v;
+__m256i w;
+
+__attribute__((noinline, noclone)) void
+foo (__m128i *p, __m128i *q)
+{
+  __m128i a = _mm_loadu_si128 (p);
+  __m128i b = _mm_xor_si128 (a, v);
+  w = _mm256_cvtepu8_epi16 (a);
+  *q = b;
+}
+
+static void
+avx2_test (void)
+{
+  v = _mm_set1_epi8 (0x40);
+  __m128i c = _mm_set_epi8 (16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
+  __m128i d;
+  foo (&c, &d);
+  __m128i e = _mm_set_epi8 (0x50, 0x4f, 0x4e, 0x4d, 0x4c, 0x4b, 0x4a, 0x49,
+                           0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41);
+  __m256i f = _mm256_set_epi16 (16, 15, 14, 13, 12, 11, 10, 9,
+                               8, 7, 6, 5, 4, 3, 2, 1);
+  if (memcmp (&w, &f, sizeof (w)) != 0
+      || memcmp (&d, &e, sizeof (d)) != 0)
+    abort ();
+}
index ad16a53..d8730dc 100644 (file)
@@ -33,7 +33,7 @@ avx_test (void)
   cp = mp;
   dp = lp;
 
-  for (i = N; i >= 0; i--)
+  for (i = N; i > 0; i--)
     {
       *cp++ = str;
       *dp++ = str;
@@ -44,13 +44,13 @@ avx_test (void)
   cp = mp;
   dp = lp;
 
-  for (i = N; i >= 0; i--)
+  for (i = N; i > 0; i--)
     {
       *ap++ = *cp++;
       *bp++ = *dp++;
     }
 
-  for (i = N; i >= 0; i--)
+  for (i = N; i > 0; i--)
     {
       if (strcmp (*--ap, "STR") != 0)
        abort ();
index 4272dc3..5ec1494 100644 (file)
@@ -29,13 +29,13 @@ avx_test (void)
   ap = ep;
   bp = fp;
 
-  for (i = N; i >= 0; i--)
+  for (i = N; i > 0; i--)
     {
       *ap++ = str;
       *bp++ = str;
     }
 
-  for (i = N; i >= 0; i--)
+  for (i = N; i > 0; i--)
     {
       if (strcmp (*--ap, "STR") != 0)
        abort ();
diff --git a/gcc/testsuite/gcc.target/i386/bmi2-bzhi-2.c b/gcc/testsuite/gcc.target/i386/bmi2-bzhi-2.c
new file mode 100644 (file)
index 0000000..34579d5
--- /dev/null
@@ -0,0 +1,67 @@
+/* PR target/65368 */
+/* { dg-do assemble { target bmi2 } } */
+/* { dg-options "-O2 -mbmi2" } */
+
+#include <x86intrin.h>
+#include "bmi2-check.h"
+
+unsigned int a;
+unsigned long long b;
+
+#define A __attribute__((noinline, noclone))
+
+A unsigned int f1 (void) { return _bzhi_u32 (a, 0); }
+A unsigned int f2 (unsigned int x) { return _bzhi_u32 (x, 0); }
+A unsigned int f3 (void) { return _bzhi_u32 (a, 5); }
+A unsigned int f4 (unsigned int x) { return _bzhi_u32 (x, 5); }
+A unsigned int f5 (void) { return _bzhi_u32 (a, 31); }
+A unsigned int f6 (unsigned int x) { return _bzhi_u32 (x, 31); }
+A unsigned int f7 (void) { return _bzhi_u32 (a, 32); }
+A unsigned int f8 (unsigned int x) { return _bzhi_u32 (x, 32); }
+A unsigned int f9 (void) { return _bzhi_u32 (a, 37); }
+A unsigned int f10 (unsigned int x) { return _bzhi_u32 (x, 37); }
+A unsigned int f11 (void) { return _bzhi_u32 (a, 257); }
+A unsigned int f12 (unsigned int x) { return _bzhi_u32 (x, 257); }
+A unsigned int f13 (void) { return _bzhi_u32 (a, 289); }
+A unsigned int f14 (unsigned int x) { return _bzhi_u32 (x, 289); }
+#ifdef __x86_64__
+A unsigned long long f21 (void) { return _bzhi_u64 (b, 0); }
+A unsigned long long f22 (unsigned long long x) { return _bzhi_u64 (x, 0); }
+A unsigned long long f23 (void) { return _bzhi_u64 (b, 5); }
+A unsigned long long f24 (unsigned long long x) { return _bzhi_u64 (x, 5); }
+A unsigned long long f25 (void) { return _bzhi_u64 (b, 63); }
+A unsigned long long f26 (unsigned long long x) { return _bzhi_u64 (x, 63); }
+A unsigned long long f27 (void) { return _bzhi_u64 (b, 64); }
+A unsigned long long f28 (unsigned long long x) { return _bzhi_u64 (x, 64); }
+A unsigned long long f29 (void) { return _bzhi_u64 (b, 69); }
+A unsigned long long f30 (unsigned long long x) { return _bzhi_u64 (x, 69); }
+A unsigned long long f31 (void) { return _bzhi_u64 (b, 257); }
+A unsigned long long f32 (unsigned long long x) { return _bzhi_u64 (x, 257); }
+A unsigned long long f33 (void) { return _bzhi_u64 (b, 321); }
+A unsigned long long f34 (unsigned long long x) { return _bzhi_u64 (x, 321); }
+#endif
+
+static void
+bmi2_test ()
+{
+  a = -1U;
+  b = -1ULL;
+  if (f1 () != 0 || f2 (-1U) != 0
+      || f3 () != 0x1f || f4 (-1U) != 0x1f
+      || f5 () != 0x7fffffffU || f6 (-1U) != 0x7fffffffU
+      || f7 () != -1U || f8 (-1U) != -1U
+      || f9 () != -1U || f10 (-1U) != -1U
+      || f11 () != 1 || f12 (-1U) != 1
+      || f13 () != -1U || f14 (-1U) != -1U)
+    abort ();
+#ifdef __x86_64__
+  if (f21 () != 0 || f22 (-1ULL) != 0
+      || f23 () != 0x1f || f24 (-1ULL) != 0x1f
+      || f25 () != 0x7fffffffffffffffULL || f26 (-1ULL) != 0x7fffffffffffffffULL
+      || f27 () != -1ULL || f28 (-1ULL) != -1ULL
+      || f29 () != -1ULL || f30 (-1ULL) != -1ULL
+      || f31 () != 1 || f32 (-1ULL) != 1
+      || f33 () != -1ULL || f34 (-1ULL) != -1ULL)
+    abort ();
+#endif
+}
index c40983e..af73338 100644 (file)
@@ -30,6 +30,14 @@ check_intel_cpu_model (unsigned int family, unsigned int model,
              /* Atom.  */
              assert (__builtin_cpu_is ("atom"));
              break;
+           case 0x37:
+           case 0x4a:
+           case 0x4d:
+           case 0x5a:
+           case 0x5d:
+             /* Silvermont.  */
+             assert (__builtin_cpu_is ("silvermont"));
+             break;
            case 0x1a:
            case 0x1e:
            case 0x1f:
@@ -46,10 +54,32 @@ check_intel_cpu_model (unsigned int family, unsigned int model,
              assert (__builtin_cpu_is ("westmere"));
              break;
            case 0x2a:
+           case 0x2d:
              /* Sandy Bridge.  */
              assert (__builtin_cpu_is ("corei7"));
              assert (__builtin_cpu_is ("sandybridge"));
              break;
+           case 0x3a:
+           case 0x3e:
+             /* Ivy Bridge.  */
+             assert (__builtin_cpu_is ("corei7"));
+             assert (__builtin_cpu_is ("ivybridge"));
+             break;
+           case 0x3c:
+           case 0x3f:
+           case 0x45:
+           case 0x46:
+             /* Haswell.  */
+             assert (__builtin_cpu_is ("corei7"));
+             assert (__builtin_cpu_is ("haswell"));
+             break;
+           case 0x3d:
+           case 0x4f:
+           case 0x56:
+             /* Broadwell.  */
+             assert (__builtin_cpu_is ("corei7"));
+             assert (__builtin_cpu_is ("broadwell"));
+             break;
            case 0x17:
            case 0x1d:
              /* Penryn.  */
diff --git a/gcc/testsuite/gcc.target/i386/memcpy-strategy-4.c b/gcc/testsuite/gcc.target/i386/memcpy-strategy-4.c
new file mode 100644 (file)
index 0000000..5c51248
--- /dev/null
@@ -0,0 +1,21 @@
+/* PR target/64200 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=atom -mmemcpy-strategy=libcall:-1:align -minline-stringops-dynamically" } */
+
+#include <stdarg.h>
+
+extern void bar(char *x);
+
+void foo (int size, ...)
+{
+  struct
+  {
+    char x[size];
+  } d;
+
+  va_list ap;
+  va_start(ap, size);
+  d = va_arg(ap, typeof (d));
+  va_end(ap);
+  bar(d.x);
+}
diff --git a/gcc/testsuite/gcc.target/i386/memset-strategy-2.c b/gcc/testsuite/gcc.target/i386/memset-strategy-2.c
new file mode 100644 (file)
index 0000000..aafa54d
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR target/64108 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=atom -mmemset-strategy=libcall:-1:align -minline-all-stringops" } */
+
+char a[2048];
+void t (void)
+{
+  __builtin_memset (a, 1, 2048);
+}
+
index dfa6b8b..08a743d 100644 (file)
@@ -1,5 +1,5 @@
 /* PR rtl-optimization/57003 */
-/* { dg-do run } */
+/* { dg-do run { target { ! x32 } } } */
 /* { dg-options "-O2" } */
 
 #define N 2001
index 693c765..afb5306 100644 (file)
@@ -1,5 +1,5 @@
 /* PR target/59927 */
-/* { dg-do compile } */
+/* { dg-do compile { target { ! x32 } } } */
 /* { dg-options "-O2 -g" } */
 
 extern void baz (int) __attribute__ ((__ms_abi__));
index 575c8b6..d7e1116 100644 (file)
@@ -1,5 +1,5 @@
 /* PR target/60516 */
-/* { dg-do compile } */
+/* { dg-do compile { target { ! x32 } } } */
 /* { dg-options "-O2" } */
 
 struct S { char c[65536]; };
diff --git a/gcc/testsuite/gcc.target/i386/pr60851.c b/gcc/testsuite/gcc.target/i386/pr60851.c
new file mode 100644 (file)
index 0000000..3b8d35d
--- /dev/null
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -flive-range-shrinkage -mtune=bdver4 -mdispatch-scheduler" } */
+
+long double ld (char c)
+{
+  return c;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr63538.c b/gcc/testsuite/gcc.target/i386/pr63538.c
new file mode 100644 (file)
index 0000000..7b979c3
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR target/63538 */
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -mcmodel=medium -mlarge-data-threshold=0" } */
+
+static char *str = "Hello World";
+
+char *foo ()
+{
+  return str;
+}
+
+/* { dg-final { scan-assembler "movabs" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr63637-1.c b/gcc/testsuite/gcc.target/i386/pr63637-1.c
new file mode 100644 (file)
index 0000000..9cc9750
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c;
+  asm ("# Magic instruction" : "=r" (a) : : "eax");
+  asm ("# Magic instruction" : "=r" (b) : : "edx");
+  asm ("# Magic instruction" : "=r" (c) : : "ecx");
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr63637-2.c b/gcc/testsuite/gcc.target/i386/pr63637-2.c
new file mode 100644 (file)
index 0000000..fc54900
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c;
+  asm ("# Magic instruction" : "=r" (a) : "r" (0) : "eax");
+  asm ("# Magic instruction" : "=r" (b) : "r" (0) : "edx");
+  asm ("# Magic instruction" : "=r" (c) : "r" (0) : "ecx");
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr63637-3.c b/gcc/testsuite/gcc.target/i386/pr63637-3.c
new file mode 100644 (file)
index 0000000..4b631ce
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c;
+  asm ("# Magic instruction" : "=r" (a) : : "eax", "memory");
+  asm ("# Magic instruction" : "=r" (b) : : "edx", "memory");
+  asm ("# Magic instruction" : "=r" (c) : : "ecx", "memory");
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 3 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr63637-4.c b/gcc/testsuite/gcc.target/i386/pr63637-4.c
new file mode 100644 (file)
index 0000000..7b36690
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c;
+  asm ("# Magic instruction" : "=r" (a) : "r" (0) : "eax", "memory");
+  asm ("# Magic instruction" : "=r" (b) : "r" (0) : "edx", "memory");
+  asm ("# Magic instruction" : "=r" (c) : "r" (0) : "ecx", "memory");
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 3 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr63637-5.c b/gcc/testsuite/gcc.target/i386/pr63637-5.c
new file mode 100644 (file)
index 0000000..f0c79b7
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c, d, e, f;
+  asm ("# Magic instruction" : "=r" (a), "=r" (d) : : "eax");
+  asm ("# Magic instruction" : "=r" (b), "=r" (e) : : "edx");
+  asm ("# Magic instruction" : "=r" (c), "=r" (f) : : "ecx");
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 3 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr63637-6.c b/gcc/testsuite/gcc.target/i386/pr63637-6.c
new file mode 100644 (file)
index 0000000..4b0b3ba
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR rtl-optimization/63637 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+foo (void)
+{
+  int a, b, c, d, e, f;
+  asm ("# Magic instruction" : "=r" (a), "=r" (d) : "r" (0) : "eax");
+  asm ("# Magic instruction" : "=r" (b), "=r" (e) : "r" (0) : "edx");
+  asm ("# Magic instruction" : "=r" (c), "=r" (f) : "r" (0) : "ecx");
+  return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "# Magic instruction" 3 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr63661.c b/gcc/testsuite/gcc.target/i386/pr63661.c
new file mode 100644 (file)
index 0000000..a5ffd2f
--- /dev/null
@@ -0,0 +1,80 @@
+/* PR target/63661 */
+/* { dg-do run } */
+/* { dg-require-effective-target fpic } */
+/* { dg-options "-mtune=nehalem -fPIC -O2" } */
+
+static void __attribute__((noinline,noclone,hot))
+foo (double a, double q, double *ff, double *gx, int e, int ni)
+{
+  union
+    {
+      double n;
+      unsigned long long o;
+    } punner;
+  double d;
+
+  punner.n = q;
+   __builtin_printf("B: 0x%016llx ---- %g\n", punner.o, q);
+
+  d = q - 5;
+  if(d < 0)
+    d = -d;
+  if (d > 0.1)
+    __builtin_abort();
+}
+
+static int __attribute__((noinline,noclone,hot))
+bar (int order, double q, double c[])
+{
+  int ni, nn, i, e;
+  double g2, x2, de, s, ratio, ff;
+
+  nn = 0;
+  e = order & 1;
+  s = 0;
+  ratio = 0;
+  x2 = 0;
+  g2 = 0;
+
+  if(q == 0.0)
+    return 0;
+
+  if (order < 5)
+    {
+      ratio = 1.0 / q;
+      nn = order;
+    }
+
+  ni = -nn;
+
+  while(1)
+    {
+      de = ratio - g2 - x2;
+
+      foo (0, q, &ff, &g2, e, ni);
+
+      if((int)de == 0)
+        break;
+    }
+
+  s += 2 * nn * c[nn];
+
+  for (i = 0; i < 1; i++)
+    {
+      c[0] = nn;
+      for (; i < 10; i++)
+        c[i] = 0.0;
+      c[0] /= s;
+    }
+
+  return 0;
+}
+
+int
+main ()
+{
+  double c[1000];
+
+  bar (1, 5.0, c);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr63947.c b/gcc/testsuite/gcc.target/i386/pr63947.c
new file mode 100644 (file)
index 0000000..3c0a67a
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR target/63947 */
+/* { dg-do assemble } */
+/* { dg-options "-Os" } */
+/* { dg-additional-options "-march=i686" { target ia32 } } */
+
+long double foo (unsigned a, unsigned b)
+{
+  return a + b < a;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr64387.c b/gcc/testsuite/gcc.target/i386/pr64387.c
new file mode 100644 (file)
index 0000000..dd38142
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vectorize -ffloat-store -mavx512er" } */
+
+float x[256];
+
+double *
+foo (void)
+{
+  double *z = __builtin_malloc (sizeof (double) * 256);
+  int i;
+  for (i = 0; i < 256; ++i)
+    z[i] = x[i] + 1.0f;
+  foo ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr64409.c b/gcc/testsuite/gcc.target/i386/pr64409.c
new file mode 100644 (file)
index 0000000..6a64b59
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-require-effective-target maybe_x32 } */
+/* { dg-options "-O0 -mx32" } */
+
+int a;
+int* __attribute__ ((ms_abi)) fn1 () { return &a; } /* { dg-error "X32 does not support ms_abi attribute" } */
diff --git a/gcc/testsuite/gcc.target/i386/pr64513.c b/gcc/testsuite/gcc.target/i386/pr64513.c
new file mode 100644 (file)
index 0000000..0236496
--- /dev/null
@@ -0,0 +1,17 @@
+/* PR target/64513 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mstack-arg-probe" } */
+
+struct A {};
+struct B { struct A y; };
+int foo (struct A);
+
+int
+bar (int x)
+{
+  struct B b;
+  int c;
+  while (x--)
+    c = foo (b.y);
+  return c;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr65990.c b/gcc/testsuite/gcc.target/i386/pr65990.c
new file mode 100644 (file)
index 0000000..c0e5bb6
--- /dev/null
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+/* { dg-options "-mtune=btver2 -mmemcpy-strategy=rep_8byte:-1:noalign" }
+
+/* { dg-error "stringop strategy name rep_8byte specified for option -mmemcpy_strategy= not supported for 32-bit code" "" { target ia32 } 0 } */
+
+struct U9
+{
+  unsigned a[9];
+};
+
+struct U9 u9;
+
+void
+foo ()
+{
+  u9 = (struct U9) {
+    .a = {
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF,
+      0xFF
+    }
+  };
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr66275.c b/gcc/testsuite/gcc.target/i386/pr66275.c
new file mode 100644 (file)
index 0000000..b8759ae
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-options "-mabi=ms -fdump-rtl-dfinit" } */
+
+void
+__attribute__((sysv_abi))
+foo () {};
+
+/* { dg-final { scan-rtl-dump "entry block defs\[^\\n]*\\\[si\\]\[^\\n]*\\\[di\\]" "dfinit" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr66470.c b/gcc/testsuite/gcc.target/i386/pr66470.c
new file mode 100644 (file)
index 0000000..73158d1
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR target/66470 */
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-options "-O2 -mx32 -maddress-mode=long" } */
+/* { dg-require-effective-target tls } */
+
+extern __thread unsigned __int128 c[10];
+int d;
+
+unsigned __int128
+foo (void)
+{
+  return c[d];
+}
index d9a5fed..ca0745e 100644 (file)
@@ -600,6 +600,8 @@ test_2 (_mm_alignr_pi8, __m64, __m64, __m64, 1)
 
 /* emmintrin.h */
 test_2 (_mm_shuffle_pd, __m128d, __m128d, __m128d, 1)
+test_1 (_mm_bsrli_si128, __m128i, __m128i, 1)
+test_1 (_mm_bslli_si128, __m128i, __m128i, 1)
 test_1 (_mm_srli_si128, __m128i, __m128i, 1)
 test_1 (_mm_slli_si128, __m128i, __m128i, 1)
 test_1 (_mm_extract_epi16, int, __m128i, 1)
index e9f227a..e6a1d31 100644 (file)
@@ -137,6 +137,8 @@ test_1 (_mm_prefetch, void, void *, _MM_HINT_NTA)
 #endif
 #include <emmintrin.h>
 test_2 (_mm_shuffle_pd, __m128d, __m128d, __m128d, 1)
+test_1 (_mm_bsrli_si128, __m128i, __m128i, 1)
+test_1 (_mm_bslli_si128, __m128i, __m128i, 1)
 test_1 (_mm_srli_si128, __m128i, __m128i, 1)
 test_1 (_mm_slli_si128, __m128i, __m128i, 1)
 test_1 (_mm_extract_epi16, int, __m128i, 1)
@@ -268,6 +270,8 @@ test_2 ( _mm256_blend_epi16, __m256i, __m256i, __m256i, 1)
 test_1 ( _mm256_shuffle_epi32, __m256i, __m256i, 1)
 test_1 ( _mm256_shufflehi_epi16, __m256i, __m256i, 1)
 test_1 ( _mm256_shufflelo_epi16, __m256i, __m256i, 1)
+test_1 ( _mm256_bslli_epi128, __m256i, __m256i, 8)
+test_1 ( _mm256_bsrli_epi128, __m256i, __m256i, 8)
 test_1 ( _mm256_slli_si256, __m256i, __m256i, 8)
 test_1 ( _mm256_srli_si256, __m256i, __m256i, 8)
 test_2 ( _mm_blend_epi32, __m128i, __m128i, __m128i, 1)
diff --git a/gcc/testsuite/gcc.target/i386/sse-25.c b/gcc/testsuite/gcc.target/i386/sse-25.c
new file mode 100644 (file)
index 0000000..c4b334c
--- /dev/null
@@ -0,0 +1,6 @@
+/* PR target/65676 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -funsigned-char" } */
+/* { dg-add-options bind_pic_locally } */
+
+#include "sse-23.c"
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-1.c b/gcc/testsuite/gcc.target/powerpc/builtins-1.c
new file mode 100644 (file)
index 0000000..3da7146
--- /dev/null
@@ -0,0 +1,166 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-options "-mcpu=power8 -O0" } */
+
+/* Test that a number of newly added builtin overloads are accepted
+   by the compiler.  */
+
+#include <altivec.h>
+
+vector double y = { 2.0, 4.0 };
+vector double z;
+
+int main ()
+{
+  vector float fa = {1.0, 2.0, 3.0, -4.0};
+  vector float fb = {-2.0, -3.0, -4.0, -5.0};
+  vector float fc = vec_cpsgn (fa, fb);
+
+  vector long long la = {5L, 14L};
+  vector long long lb = {3L, 86L};
+  vector long long lc = vec_and (la, lb);
+  vector bool long long ld = {0, -1};
+  vector long long le = vec_and (la, ld);
+  vector long long lf = vec_and (ld, lb);
+
+  vector unsigned long long ua = {5L, 14L};
+  vector unsigned long long ub = {3L, 86L};
+  vector unsigned long long uc = vec_and (ua, ub);
+  vector bool long long ud = {0, -1};
+  vector unsigned long long ue = vec_and (ua, ud);
+  vector unsigned long long uf = vec_and (ud, ub);
+
+  vector long long lg = vec_andc (la, lb);
+  vector long long lh = vec_andc (la, ld);
+  vector long long li = vec_andc (ld, lb);
+
+  vector unsigned long long ug = vec_andc (ua, ub);
+  vector unsigned long long uh = vec_andc (ua, ud);
+  vector unsigned long long ui = vec_andc (ud, ub);
+
+  vector double da = {1.0, -4.0};
+  vector double db = {-2.0, 5.0};
+  vector double dc = vec_cpsgn (da, db);
+
+  vector long long lj = vec_mergeh (la, lb);
+  vector long long lk = vec_mergeh (la, ld);
+  vector long long ll = vec_mergeh (ld, la);
+
+  vector unsigned long long uj = vec_mergeh (ua, ub);
+  vector unsigned long long uk = vec_mergeh (ua, ud);
+  vector unsigned long long ul = vec_mergeh (ud, ua);
+
+  vector long long lm = vec_mergel (la, lb);
+  vector long long ln = vec_mergel (la, ld);
+  vector long long lo = vec_mergel (ld, la);
+
+  vector unsigned long long um = vec_mergel (ua, ub);
+  vector unsigned long long un = vec_mergel (ua, ud);
+  vector unsigned long long uo = vec_mergel (ud, ua);
+
+  vector long long lp = vec_nor (la, lb);
+  vector long long lq = vec_nor (la, ld);
+  vector long long lr = vec_nor (ld, la);
+
+  vector unsigned long long up = vec_nor (ua, ub);
+  vector unsigned long long uq = vec_nor (ua, ud);
+  vector unsigned long long ur = vec_nor (ud, ua);
+
+  vector long long ls = vec_or (la, lb);
+  vector long long lt = vec_or (la, ld);
+  vector long long lu = vec_or (ld, la);
+
+  vector unsigned long long us = vec_or (ua, ub);
+  vector unsigned long long ut = vec_or (ua, ud);
+  vector unsigned long long uu = vec_or (ud, ua);
+
+  vector unsigned char ca = {0,4,8,1,5,9,2,6,10,3,7,11,15,12,14,13};
+  vector long long lv = vec_perm (la, lb, ca);
+  vector unsigned long long uv = vec_perm (ua, ub, ca);
+
+  vector long long lw = vec_sel (la, lb, lc);
+  vector long long lx = vec_sel (la, lb, uc);
+  vector long long ly = vec_sel (la, lb, ld);
+
+  vector unsigned long long uw = vec_sel (ua, ub, lc);
+  vector unsigned long long ux = vec_sel (ua, ub, uc);
+  vector unsigned long long uy = vec_sel (ua, ub, ld);
+
+  vector long long lz = vec_xor (la, lb);
+  vector long long l0 = vec_xor (la, ld);
+  vector long long l1 = vec_xor (ld, la);
+
+  vector unsigned long long uz = vec_xor (ua, ub);
+  vector unsigned long long u0 = vec_xor (ua, ud);
+  vector unsigned long long u1 = vec_xor (ud, ua);
+
+  int ia = vec_all_eq (ua, ub);
+  int ib = vec_all_ge (ua, ub);
+  int ic = vec_all_gt (ua, ub);
+  int id = vec_all_le (ua, ub);
+  int ie = vec_all_lt (ua, ub);
+  int ig = vec_all_ne (ua, ub);
+
+  int ih = vec_any_eq (ua, ub);
+  int ii = vec_any_ge (ua, ub);
+  int ij = vec_any_gt (ua, ub);
+  int ik = vec_any_le (ua, ub);
+  int il = vec_any_lt (ua, ub);
+  int im = vec_any_ne (ua, ub);
+
+  vector int sia = {9, 16, 25, 36};
+  vector int sib = {-8, -27, -64, -125};
+  vector int sic = vec_mergee (sia, sib);
+  vector int sid = vec_mergeo (sia, sib);
+
+  vector unsigned int uia = {9, 16, 25, 36};
+  vector unsigned int uib = {8, 27, 64, 125};
+  vector unsigned int uic = vec_mergee (uia, uib);
+  vector unsigned int uid = vec_mergeo (uia, uib);
+
+  vector bool int bia = {0, -1, -1, 0};
+  vector bool int bib = {-1, -1, 0, -1};
+  vector bool int bic = vec_mergee (bia, bib);
+  vector bool int bid = vec_mergeo (bia, bib);
+
+  vector unsigned int uie = vec_packsu (ua, ub);
+
+  vector long long l2 = vec_cntlz (la);
+  vector unsigned long long u2 = vec_cntlz (ua);
+  vector int sie = vec_cntlz (sia);
+  vector unsigned int uif = vec_cntlz (uia);
+  vector short ssa = {20, -40, -60, 80, 100, -120, -140, 160};
+  vector short ssb = vec_cntlz (ssa);
+  vector unsigned short usa = {81, 72, 63, 54, 45, 36, 27, 18};
+  vector unsigned short usb = vec_cntlz (usa);
+  vector signed char sca = {-4, 3, -9, 15, -31, 31, 0, 0,
+                           1, 117, -36, 99, 98, 97, 96, 95};
+  vector signed char scb = vec_cntlz (sca);
+  vector unsigned char cb = vec_cntlz (ca);
+
+  vector double dd = vec_xl (0, &y);
+  vec_xst (dd, 0, &z);
+
+  vector double de = vec_round (dd);
+
+  vector double df = vec_splat (de, 0);
+  vector double dg = vec_splat (de, 1);
+  vector long long l3 = vec_splat (l2, 0);
+  vector long long l4 = vec_splat (l2, 1);
+  vector unsigned long long u3 = vec_splat (u2, 0);
+  vector unsigned long long u4 = vec_splat (u2, 1);
+  vector bool long long l5 = vec_splat (ld, 0);
+  vector bool long long l6 = vec_splat (ld, 1);
+
+  vector long long l7 = vec_div (l3, l4);
+  vector unsigned long long u5 = vec_div (u3, u4);
+
+  vector long long l8 = vec_mul (l3, l4);
+  vector unsigned long long u6 = vec_mul (u3, u4);
+
+  vector double dh = vec_ctf (la, -2);
+  vector double di = vec_ctf (ua, 2);
+  vector long long l9 = vec_cts (dh, -2);
+  vector unsigned long long u7 = vec_ctu (di, 2);
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-2.c b/gcc/testsuite/gcc.target/powerpc/builtins-2.c
new file mode 100644 (file)
index 0000000..7f4a392
--- /dev/null
@@ -0,0 +1,47 @@
+/* { dg-do run { target { powerpc64le-*-* } } } */
+/* { dg-options "-mcpu=power8 " } */
+
+#include <altivec.h>
+
+void abort (void);
+
+int main ()
+{
+  vector long long sa = {27L, -14L};
+  vector long long sb = {-9L, -2L};
+
+  vector unsigned long long ua = {27L, 14L};
+  vector unsigned long long ub = {9L, 2L};
+
+  vector long long sc = vec_div (sa, sb);
+  vector unsigned long long uc = vec_div (ua, ub);
+
+  if (sc[0] != -3L || sc[1] != 7L || uc[0] != 3L || uc[1] != 7L)
+    abort ();
+
+  vector long long sd = vec_mul (sa, sb);
+  vector unsigned long long ud = vec_mul (ua, ub);
+
+  if (sd[0] != -243L || sd[1] != 28L || ud[0] != 243L || ud[1] != 28L)
+    abort ();
+
+  vector long long se = vec_splat (sa, 0);
+  vector long long sf = vec_splat (sa, 1);
+  vector unsigned long long ue = vec_splat (ua, 0);
+  vector unsigned long long uf = vec_splat (ua, 1);
+
+  if (se[0] != 27L || se[1] != 27L || sf[0] != -14L || sf[1] != -14L
+      || ue[0] != 27L || ue[1] != 27L || uf[0] != 14L || uf[1] != 14L)
+    abort ();
+
+  vector double da = vec_ctf (sa, -2);
+  vector double db = vec_ctf (ua, 2);
+  vector long long sg = vec_cts (da, -2);
+  vector unsigned long long ug = vec_ctu (db, 2);
+
+  if (da[0] != 108.0 || da[1] != -56.0 || db[0] != 6.75 || db[1] != 3.5
+      || sg[0] != 27L || sg[1] != -14L || ug[0] != 27L || ug[1] != 14L)
+    abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c b/gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c
new file mode 100644 (file)
index 0000000..0533f45
--- /dev/null
@@ -0,0 +1,36 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-O2 -mcpu=power8 -mno-crypto" } */
+
+void use_builtins_d (__vector unsigned long long *p, __vector unsigned long long *q, __vector unsigned long long *r, __vector unsigned long long *s)
+{
+  p[0] = __builtin_crypto_vcipher (q[0], r[0]); /* { dg-error "Builtin function __builtin_crypto_vcipher is not supported with the current options" } */
+  p[1] = __builtin_crypto_vcipherlast (q[1], r[1]); /* { dg-error "Builtin function __builtin_crypto_vcipherlast is not supported with the current options" } */
+  p[2] = __builtin_crypto_vncipher (q[2], r[2]); /* { dg-error "Builtin function __builtin_crypto_vncipher is not supported with the current options" } */
+  p[3] = __builtin_crypto_vncipherlast (q[3], r[3]); /* { dg-error "Builtin function __builtin_crypto_vncipherlast is not supported with the current options" } */
+  p[4] = __builtin_crypto_vpermxor (q[4], r[4], s[4]);
+  p[5] = __builtin_crypto_vpmsumd (q[5], r[5]);
+  p[6] = __builtin_crypto_vshasigmad (q[6], 1, 15); /* { dg-error "Builtin function __builtin_crypto_vshasigmad is not supported with the current options" } */
+  p[7] = __builtin_crypto_vsbox (q[7]); /* { dg-error "Builtin function __builtin_crypto_vsbox is not supported with the current options" } */
+}
+
+void use_builtins_w (__vector unsigned int *p, __vector unsigned int *q, __vector unsigned int *r, __vector unsigned int *s)
+{
+  p[0] = __builtin_crypto_vpermxor (q[0], r[0], s[0]);
+  p[1] = __builtin_crypto_vpmsumw (q[1], r[1]);
+  p[2] = __builtin_crypto_vshasigmaw (q[2], 1, 15); /* { dg-error "Builtin function __builtin_crypto_vshasigmaw is not supported with the current options" } */
+}
+
+void use_builtins_h (__vector unsigned short *p, __vector unsigned short *q, __vector unsigned short *r, __vector unsigned short *s)
+{
+  p[0] = __builtin_crypto_vpermxor (q[0], r[0], s[0]);
+  p[1] = __builtin_crypto_vpmsumh (q[1], r[1]);
+}
+
+void use_builtins_b (__vector unsigned char *p, __vector unsigned char *q, __vector unsigned char *r, __vector unsigned char *s)
+{
+  p[0] = __builtin_crypto_vpermxor (q[0], r[0], s[0]);
+  p[1] = __builtin_crypto_vpmsumb (q[1], r[1]);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/htm-1.c b/gcc/testsuite/gcc.target/powerpc/htm-1.c
new file mode 100644 (file)
index 0000000..f27e32c
--- /dev/null
@@ -0,0 +1,52 @@
+/* { dg-do run { target { powerpc*-*-* && htm_hw } } } */
+/* { dg-require-effective-target powerpc_htm_ok } */
+/* { dg-options "-mhtm" } */
+
+/* Program to test PowerPC HTM instructions.  */
+
+#include <stdlib.h>
+#include <htmintrin.h>
+
+int
+main (void)
+{
+  long i;
+  unsigned long mask = 0;
+
+repeat:
+  if (__builtin_tbegin (0))
+    {
+      mask++;
+    }
+  else
+    abort();
+
+  if (mask == 1)
+    {
+      __builtin_tsuspend ();
+
+      if (_HTM_STATE (__builtin_tcheck ()) != _HTM_SUSPENDED)
+       abort ();
+
+      __builtin_tresume ();
+
+      if (_HTM_STATE (__builtin_tcheck ()) != _HTM_TRANSACTIONAL)
+       abort ();
+    }
+  else
+    mask++;
+
+  if (_HTM_STATE (__builtin_tendall ()) != _HTM_TRANSACTIONAL)
+    abort ();
+
+  if (mask == 1)
+    goto repeat;
+
+  if (_HTM_STATE (__builtin_tendall ()) != _HTM_NONTRANSACTIONAL)
+    abort ();
+
+  if (mask != 3)
+    abort ();
+
+  return 0;
+}
index e58816a..b232580 100644 (file)
@@ -1,16 +1,16 @@
-/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-do assemble { target { powerpc*-*-* } } } */
 /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
 /* { dg-require-effective-target powerpc_htm_ok } */
-/* { dg-options "-O2 -mhtm" } */
+/* { dg-options "-O2 -mhtm -save-temps" } */
 
 /* { dg-final { scan-assembler-times "tbegin\\." 1 } } */
 /* { dg-final { scan-assembler-times "tend\\." 2 } } */
 /* { dg-final { scan-assembler-times "tabort\\." 2 } } */
-/* { dg-final { scan-assembler-times "tabortdc\\." 1 } } */
-/* { dg-final { scan-assembler-times "tabortdci\\." 1 } } */
+/* { dg-final { scan-assembler-times "tabortdc\\." 1 { target lp64 } } } */
+/* { dg-final { scan-assembler-times "tabortdci\\." 1 { target lp64 } } } */
 /* { dg-final { scan-assembler-times "tabortwc\\." 1 } } */
 /* { dg-final { scan-assembler-times "tabortwci\\." 2 } } */
-/* { dg-final { scan-assembler-times "tcheck\\." 1 } } */
+/* { dg-final { scan-assembler-times "tcheck" 1 } } */
 /* { dg-final { scan-assembler-times "trechkpt\\." 1 } } */
 /* { dg-final { scan-assembler-times "treclaim\\." 1 } } */
 /* { dg-final { scan-assembler-times "tsr\\." 3 } } */
@@ -25,12 +25,14 @@ void use_builtins (long *p, char code, long *a, long *b)
   p[3] = __builtin_tabort (0);
   p[4] = __builtin_tabort (code);
 
+#ifdef __powerpc64__
   p[5] = __builtin_tabortdc (0xf, a[5], b[5]);
   p[6] = __builtin_tabortdci (0xf, a[6], 13);
+#endif
   p[7] = __builtin_tabortwc (0xf, a[7], b[7]);
   p[8] = __builtin_tabortwci (0xf, a[8], 13);
 
-  p[9] = __builtin_tcheck (5);
+  p[9] = __builtin_tcheck ();
   p[10] = __builtin_trechkpt ();
   p[11] = __builtin_treclaim (0);
   p[12] = __builtin_tresume ();
@@ -49,3 +51,4 @@ void use_builtins (long *p, char code, long *a, long *b)
   __builtin_set_tfhar (a[22]);
   __builtin_set_tfiar (a[23]);
 }
+/* { dg-final { cleanup-saved-temps } } */
index 89a0cad..7635cb0 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile { target { powerpc*-*-* } } } */
 /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
 /* { dg-options "-O2 -mcpu=power6 -mavoid-indexed-addresses" } */
-/* { dg-final { scan-assembler-times "lwbrx" 6 } } */
+/* { dg-final { scan-assembler-times "lwbrx" 12 } } */
 /* { dg-final { scan-assembler-times "stwbrx" 6 } } */
 
 /* PR 51399: bswap gets an error if -mavoid-indexed-addresses was used in
@@ -25,6 +25,24 @@ load64_reverse_3 (long long *p, int i)
   return __builtin_bswap64 (p[i]);
 }
 
+long long
+load64_reverse_4 (long long dummy __attribute__ ((unused)), long long *p)
+{
+  return __builtin_bswap64 (*p);
+}
+
+long long
+load64_reverse_5 (long long dummy __attribute__ ((unused)), long long *p)
+{
+  return __builtin_bswap64 (p[1]);
+}
+
+long long
+load64_reverse_6 (long long dummy __attribute__ ((unused)), long long *p, int i)
+{
+  return __builtin_bswap64 (p[i]);
+}
+
 void
 store64_reverse_1 (long long *p, long long x)
 {
@@ -44,7 +62,13 @@ store64_reverse_3 (long long *p, long long x, int i)
 }
 
 long long
-reg_reverse (long long x)
+reg_reverse_1 (long long x)
+{
+  return __builtin_bswap64 (x);
+}
+
+long long
+reg_reverse_2 (long long dummy __attribute__ ((unused)), long long x)
 {
   return __builtin_bswap64 (x);
 }
diff --git a/gcc/testsuite/gcc.target/powerpc/pr60158.c b/gcc/testsuite/gcc.target/powerpc/pr60158.c
new file mode 100644 (file)
index 0000000..e832397
--- /dev/null
@@ -0,0 +1,89 @@
+/* { dg-do compile } */
+/* { dg-skip-if "not an SPE target" { ! powerpc_spe_nocache } { "*" } { "" } } */
+/* { dg-options "-mcpu=8548 -mno-spe -mfloat-gprs=double -Os -fdata-sections -fpic -mrelocatable" } */
+
+#define NULL 0
+int func (int val);
+void *func2 (void *ptr);
+
+static const char *ifs;
+static char map[256];
+
+typedef struct {
+/* None of these fields are used, but removing any
+   of them makes the problem go away.  */
+  char *data;
+  int length;
+  int maxlen;
+  int quote;
+} o_string;
+
+#define NULL_O_STRING {NULL,0,0,0}
+
+static int parse_stream (void *dest, void *ctx)
+{
+  int ch = func (0), m;
+
+  while (ch != -1) {
+    m = map[ch];
+    if (ch != '\n')
+    func2(dest);
+
+    ctx = func2 (ctx);
+    if (!func (0))
+      return 0;
+    if (m != ch) {
+      func2 ("htns");
+      break;
+    }
+  }
+  return -1;
+}
+
+static void mapset (const char *set, int code)
+{
+  const char *s;
+  for (s=set; *s; s++)  map[(int)*s] = code;
+}
+
+static void update_ifs_map(void)
+{
+  /* char *ifs and char map[256] are both globals.  */
+  ifs = func2 ("abc");
+  if (ifs == NULL) ifs="def";
+
+  func2 (map);
+  {
+    char subst[2] = {4, 0};
+    mapset (subst, 3);
+  }
+  mapset (";&|#", 1);
+}
+
+int parse_stream_outer (int flag)
+{
+  int blah;
+  o_string temp=NULL_O_STRING;
+  int rcode;
+
+  do {
+    update_ifs_map ();
+    func2 (&blah); /* a memory clobber works as well.  */
+    rcode = parse_stream (&temp, NULL);
+    func2 ("aoeu");
+    if (func (0) != 0) {
+      func2 (NULL);
+    }
+  } while (rcode != -1);
+  return 0;
+}
+
+/* { dg-final { if ![file exists pr60158.s] { fail "pr60158.c (compile)"; return; } } } */
+
+/* { dg-final { set c_rel [llength [grep pr60158.s \\.data\\.rel\\.ro\\.local]] } } */
+/* { dg-final { set c_fix [llength [grep pr60158.s \\.fixup]] } } */
+/* { dg-final { if [string match $c_rel $c_fix] \{     } } */
+/* { dg-final {     pass "pr60158.c (passed)"  } } */
+/* { dg-final { \} else \{     } } */
+/* { dg-final {     fail "pr60158.c (.fixup table entries not generated for .data.rel.ro.local section)"       } } */
+/* { dg-final { \}     } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr64505.c b/gcc/testsuite/gcc.target/powerpc/pr64505.c
new file mode 100644 (file)
index 0000000..9991621
--- /dev/null
@@ -0,0 +1,231 @@
+/* { dg-do compile { target { powerpc*-*-* && ilp32 } } } */
+/* { dg-options "-O2 -mpowerpc64" } */
+
+/*
+ * (below is inlined and simplified from previously included headers)
+ */
+
+struct fltcom_st {
+    short fltbuf[950];
+} fltcom_  __attribute__((common))  ;
+#define CM_PLIBOR (*(((double *)&fltcom_ + 1)))
+#define CM_QMRG (*(((double *)&fltcom_ + 2)))
+
+struct fltcom2_st {
+    short fltbuf2[56];
+} fltcom2_  __attribute__((common))  ;
+#define CM_FLPRV ((short *)&fltcom2_ + 17)
+#define CM_FLNXT ((short *)&fltcom2_ + 20)
+#define CM_FLCPN (*(((double *)&fltcom2_)))
+#define CM_FLCNT (*(((short *)&fltcom2_ + 12)))
+
+struct aidatcm_st {
+    double cm_aid, cm_ext, cm_basis;
+    short cm_aiday, cm_exday, cm_dperd, cm_aiexf, cm_aidex, cm_aiok,
+            cm_aigdo, cm_aildo, cm_prev[3], cm_next[3], cm_aid_pad[2];
+    double cm_rvgfact, cm_ai1st, cm_ai2nd;
+    int cm_aieurok;
+} aidatcm_  __attribute__((common))  ;
+#define CM_EXDAY aidatcm_.cm_exday
+#define CM_BASIS aidatcm_.cm_basis
+#define CM_PREV aidatcm_.cm_prev
+
+struct cshfcm_st {
+    short bufff[10862];
+} cshfcm_  __attribute__((common))  ;
+#define CM_FNUM (*(((short *)&cshfcm_ + 9038)))
+#define CM_FIFLX ((double *)&cshfcm_ + 1)
+#define CM_FEXTX ((double *)&cshfcm_ + 1201)
+#define CM_FSHDT ((short *)&cshfcm_ + 7230)
+
+struct calctsdb_st {
+    short calctsdbbuff[115];
+} calctsdb_  __attribute__((common))  ;
+#define CM_CTUP_GOOD_TO_GO (*(((short *)&calctsdb_ + 16)))
+#define CM_PAYMENT_FREQUENCY (*(((short *)&calctsdb_ + 61)))
+#define CM_DISCOUNTING_DAYTYP (*(((short *)&calctsdb_ + 59)))
+
+struct cf600cm_st {
+    short bufcf[14404];
+} cf600cm_  __attribute__((common)) ;
+#define CM_FLT_RFIXRATES ((double *)&cf600cm_ + 600)
+
+typedef struct { int id; int type; const char *name; } bregdb_bitinfo_t;
+
+int
+bregdb_eval_bbitcxt_bool_rv(const bregdb_bitinfo_t * const bbit,
+                            const int bbit_default,
+                            const void * const bregucxt);
+
+static const bregdb_bitinfo_t bbit_calc_dr_d33 =
+  { 160667, 5, "bbit_calc_dr_d33" };
+#define bbit_calc_dr_d33__value() \
+  bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d33, 0, 0)
+static const bregdb_bitinfo_t bbit_calc_sx_b24 =
+  { 158854, 5, "bbit_calc_sx_b24" };
+#define bbit_calc_sx_b24__value() \
+  bregdb_eval_bbitcxt_bool_rv(&bbit_calc_sx_b24, 0, 0)
+static const bregdb_bitinfo_t bbit_calc_dr_d36 =
+  { 161244, 5, "bbit_calc_dr_d36" };
+#define bbit_calc_dr_d36__value() \
+  bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d36, 0, 0)
+static const bregdb_bitinfo_t bbit_calc_dr_d37 =
+  { 161315, 5, "bbit_calc_dr_d37" };
+#define bbit_calc_dr_d37__value() \
+  bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d37, 0, 0)
+static const bregdb_bitinfo_t bbit_calc_dr_d47 =
+  { 163259, 5, "bbit_calc_dr_d47" };
+#define bbit_calc_dr_d47__value() \
+  bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d47, 0, 0)
+static const bregdb_bitinfo_t bbit_calc_dr_d46 =
+  { 163239, 5, "bbit_calc_dr_d46" };
+#define bbit_calc_dr_d46__value() \
+  bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d46, 0, 0)
+static const bregdb_bitinfo_t bbit_calc_dr_d62 =
+  { 166603, 5, "bbit_calc_dr_d62" };
+#define bbit_calc_dr_d62__value() \
+  bregdb_eval_bbitcxt_bool_rv(&bbit_calc_dr_d62, 0, 0)
+
+
+
+int dtyp_is_actact_(short *daytyp);
+double rnd_trunc_numb(double in, short num_digits, short rnd_or_trunc);
+void datetrn_(const short* dt, short* dt2);
+short difday_(short* daytyp_in, short* srtdti, short* enddti, short* ercode);
+
+
+double pow(double x, double y);
+
+
+/*
+ * (above is inlined and simplified from previously included headers)
+ */
+
+
+void calc_1566(
+  short  sCalcType,
+  short  sDayType,
+  short  sFreq,
+  short  asSettleDt[3],
+  short  asMtyDt[3],
+  short  asIssueDt[3],
+  short  asFCpnDt[3],
+  double dCpn,
+  short  *psNoPer,
+  double *pdExt,
+  double *pdAI,
+  double *pdAI2,
+  double *pdFCpn,
+  short  *psRcode)
+{
+
+    short ercode = 0;
+    int isactact;
+    short days_to_next_cpn = 0;
+    const short discDaytype = CM_DISCOUNTING_DAYTYP;
+    int j;
+
+    if(bbit_calc_sx_b24__value())
+        isactact = (dtyp_is_actact_(&sDayType) != 0);
+    else
+        isactact = (sDayType == 1 || sDayType == 10);
+
+    short days_in_current_period = difday_(&sDayType,CM_FLPRV,CM_FLNXT,&ercode);
+    const short sfreq1 = (CM_CTUP_GOOD_TO_GO == 1 && CM_PAYMENT_FREQUENCY == 1);
+
+    for (j = 0; j < CM_FNUM; j++) {
+
+        if(j == 0) {
+            days_to_next_cpn = difday_(&sDayType,asSettleDt,CM_FLNXT,&ercode);
+
+            if(isactact) {
+                CM_FIFLX[j] = CM_FLCPN / sFreq;
+                CM_FEXTX[j] = (double)days_to_next_cpn / (double)days_in_current_period;
+            }
+            else {
+                CM_FIFLX[j] = CM_FLCPN * days_in_current_period;
+                CM_FEXTX[j] = (double)days_to_next_cpn / (double)(1/sfreq1);
+            }
+
+            if(CM_FNUM == 1) {
+                CM_FEXTX[j] = (double)days_to_next_cpn / ((double)1/sfreq1);
+            }
+        }
+        else {
+
+            short days_from_settle, days_in_period;
+
+            if(bbit_calc_dr_d46__value()){
+             days_from_settle = difday_(&sDayType,asSettleDt,
+                                             &CM_FSHDT[j*3],&ercode);
+             days_in_period =  difday_(&sDayType,&CM_FSHDT[(j-1)*3],
+                                            &CM_FSHDT[j*3],&ercode);
+            }
+
+            double cpn_rate = CM_PLIBOR;
+
+            if(bbit_calc_dr_d62__value()) {
+              if(j < CM_FLCNT && CM_FLT_RFIXRATES[j] != 0) cpn_rate = CM_FLT_RFIXRATES[j];
+            }
+            else {
+              if(j < CM_FLCNT ) cpn_rate = CM_FLT_RFIXRATES[j];
+            }
+
+            if(bbit_calc_dr_d37__value()&& j >= CM_FLCNT && sCalcType == 1570) {
+                cpn_rate = CM_PLIBOR + CM_QMRG;
+
+                if(bbit_calc_dr_d36__value()){
+                double projected_rate = pow((1 + CM_PLIBOR/100.0),
+                                            (days_in_period)) - 1;
+
+                projected_rate = projected_rate + CM_QMRG/100.0 * days_in_period;
+                cpn_rate = 100 * projected_rate * (1/days_in_period);
+                }
+            }
+
+
+            if(isactact) {
+                CM_FIFLX[j] = cpn_rate / sFreq;
+                CM_FEXTX[j] = CM_FEXTX[j-1] + 1;
+
+                if(bbit_calc_dr_d46__value() && discDaytype != 0) {
+                    CM_FEXTX[j] = (double)days_from_settle / (double)(1/sfreq1);
+                }
+            }
+            else {
+                if(!bbit_calc_dr_d46__value()){
+                days_from_settle = difday_(&sDayType,asSettleDt,
+                                               &CM_FSHDT[j*3],&ercode);
+                days_in_period =  difday_(&sDayType,&CM_FSHDT[(j-1)*3],
+                                               &CM_FSHDT[j*3],&ercode);
+
+                }
+
+                CM_FIFLX[j] = cpn_rate * days_in_period;
+                CM_FEXTX[j] = (double)days_from_settle / (double)(1/sfreq1);
+            }
+
+        }
+
+        if(bbit_calc_dr_d33__value() && CM_CTUP_GOOD_TO_GO != 0) {
+            CM_FIFLX[j] = rnd_trunc_numb (CM_FIFLX[j], 0, 0);
+        }
+
+    }
+
+
+    short accrued_days = difday_(&sDayType,CM_FLPRV,asSettleDt,&ercode);
+
+    if(!bbit_calc_dr_d47__value()) {
+    if(isactact) {
+        *pdAI = (CM_FLCPN / sFreq)* accrued_days / ((double)days_in_current_period);
+    }
+    else{
+        *pdAI = (CM_FLCPN / sFreq)* accrued_days / ((double)1/sFreq);
+    }
+    }
+
+    CM_EXDAY = days_to_next_cpn;
+    CM_BASIS = days_in_current_period;
+    datetrn_(CM_FLPRV,CM_PREV);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr65456.c b/gcc/testsuite/gcc.target/powerpc/pr65456.c
new file mode 100644 (file)
index 0000000..5a645c7
--- /dev/null
@@ -0,0 +1,65 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc64le-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+
+/* Verify that swap optimization properly removes swaps for unaligned
+   vector stores.  See PR65456.  */
+
+typedef unsigned char UChar;
+typedef unsigned short UShort;
+typedef unsigned int UWord;
+
+typedef unsigned long SizeT;
+typedef unsigned long Addr;
+
+void *memmove(void *dst, const void *src, SizeT len)
+{
+  const Addr WS = sizeof(UWord);/* 8 or 4 */
+  const Addr WM = WS - 1;/* 7 or 3 */
+
+  /* Copying backwards. */
+  SizeT n = len;
+  Addr d = (Addr) dst;
+  Addr s = (Addr) src;
+
+  if (((s ^ d) & WM) == 0) {
+    /* s and d have same UWord alignment. */
+    /* Pull up to a UWord boundary. */
+    while ((s & WM) != 0 && n >= 1) {
+      *(UChar *) d = *(UChar *) s;
+      s += 1;
+      d += 1;
+      n -= 1;
+    }
+    /* Copy UWords. */
+    while (n >= WS) {
+      *(UWord *) d = *(UWord *) s;
+      s += WS;
+      d += WS;
+      n -= WS;
+    }
+    if (n == 0)
+      return dst;
+  }
+  if (((s | d) & 1) == 0) {
+    /* Both are 16-aligned; copy what we can thusly. */
+    while (n >= 2) {
+      *(UShort *) d = *(UShort *) s;
+      s += 2;
+      d += 2;
+      n -= 2;
+    }
+  }
+  /* Copy leftovers, or everything if misaligned. */
+  while (n >= 1) {
+    *(UChar *) d = *(UChar *) s;
+    s += 1;
+    d += 1;
+    n -= 1;
+  }
+
+  return dst;
+}
+
+/* { dg-final { scan-assembler-not "xxpermdi" } } */
+/* { dg-final { scan-assembler-not "xxswapd" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr65787.c b/gcc/testsuite/gcc.target/powerpc/pr65787.c
new file mode 100644 (file)
index 0000000..c819be9
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+/* { dg-final { scan-assembler "xxsldwi \[0-9\]*,\[0-9\]*,\[0-9\]*,3" } } */
+/* { dg-final { scan-assembler-not "xxpermdi" } } */
+
+/* This test verifies that a vector extract operand properly has its
+   lane changed by the swap optimization.  Element 2 of LE corresponds
+   to element 1 of BE.  When doublewords are swapped, this becomes
+   element 3 of BE, so we need to shift the vector left by 3 words
+   to be able to extract the correct value from BE element zero.  */
+
+typedef float  v4f32 __attribute__ ((__vector_size__ (16)));
+
+void foo (float);
+extern v4f32 x, y;
+
+int main() {
+  v4f32 z = x + y;
+  foo (z[2]);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-1.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-1.c
new file mode 100644 (file)
index 0000000..ab85e91
--- /dev/null
@@ -0,0 +1,35 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+/* { dg-final { scan-assembler "lxvd2x" } } */
+/* { dg-final { scan-assembler "stxvd2x" } } */
+/* { dg-final { scan-assembler-not "xxpermdi" } } */
+
+void abort();
+
+#define N 16
+
+signed char ca[N] __attribute__((aligned(16)));
+signed char cb[] __attribute__((aligned(16)))
+  = {8, 7, 6, 5, 4, 3, 2,  1,  0, -1, -2, -3, -4, -5, -6, -7};
+signed char cc[] __attribute__((aligned(16)))
+  = {1, 1, 2, 2, 3, 3, 2,  2,  1,  1,  0,  0, -1, -1, -2, -2};
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  for (i = 0; i < N; i++) {
+    ca[i] = cb[i] - cc[i];
+  }
+}
+
+int main ()
+{
+  signed char cd[] = {7, 6, 4, 3, 1, 0, 0, -1, -1, -2, -2, -3, -3, -4, -4, -5};
+  int i;
+  foo ();
+  for (i = 0; i < N; ++i)
+    if (ca[i] != cd[i])
+      abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-10.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-10.c
new file mode 100644 (file)
index 0000000..170649d
--- /dev/null
@@ -0,0 +1,42 @@
+/* { dg-do run { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+
+void abort ();
+
+#define N 4096
+int ca[N] __attribute__((aligned(16)));
+int cb[N] __attribute__((aligned(16)));
+int cc[N] __attribute__((aligned(16)));
+int cd[N] __attribute__((aligned(16)));
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  for (i = 0; i < N; i++) {
+    ca[i] = ((cb[i] + cc[i]) * cd[i]) >> 3;
+  }
+}
+
+__attribute__((noinline)) void init ()
+{
+  int i;
+  for (i = 0; i < N; ++i) {
+    cb[i] = 3 * i - 2048;
+    cc[i] = -5 * i + 93;
+    cd[i] = i % 2 ? 1 : -1;
+  }
+}
+
+int main ()
+{
+  int i;
+  init ();
+  foo ();
+  for (i = 0; i < N; ++i)
+    if (i % 2 == 1 && ca[i] != (-2 * i - 1955) >> 3)
+      abort ();
+    else if (i % 2 == 0 && ca[i] != (1955 + 2 * i) >> 3)
+      abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-11.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-11.c
new file mode 100644 (file)
index 0000000..699b5ba
--- /dev/null
@@ -0,0 +1,53 @@
+/* { dg-do run { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+
+#include <altivec.h>
+void abort ();
+
+#define N 4096
+int ca[N] __attribute__((aligned(16)));
+int cb[N] __attribute__((aligned(16)));
+int cc[N] __attribute__((aligned(16)));
+int cd[N] __attribute__((aligned(16)));
+int hey;
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  vector int va, vb, vc, vd, tmp;
+  vector unsigned int threes = vec_splat_u32(3);
+  for (i = 0; i < N; i+=4) {
+    vb = vec_vsx_ld (0, &cb[i]);
+    vc = vec_vsx_ld (0, &cc[i]);
+    vd = vec_vsx_ld (0, &cd[i]);
+    tmp = vec_add (vb, vc);
+    tmp = vec_sub (tmp, vd);
+    tmp = vec_sra (tmp, threes);
+    hey = tmp[3];
+    vec_vsx_st (tmp, 0, &ca[i]);
+  }
+}
+
+__attribute__((noinline)) void init ()
+{
+  int i;
+  for (i = 0; i < N; ++i) {
+    cb[i] = 3 * i - 2048;
+    cc[i] = -5 * i + 93;
+    cd[i] = i + 14;
+  }
+}
+
+int main ()
+{
+  int i;
+  init ();
+  foo ();
+  for (i = 0; i < N; ++i)
+    if (ca[i] != (-3 * i - 1969) >> 3)
+      abort ();
+  if (hey != ca[N-1])
+    abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-12.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-12.c
new file mode 100644 (file)
index 0000000..529d03e
--- /dev/null
@@ -0,0 +1,56 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+/* { dg-final { scan-assembler "lxvd2x" } } */
+/* { dg-final { scan-assembler "stxvd2x" } } */
+/* { dg-final { scan-assembler-not "xxpermdi" } } */
+
+#include "altivec.h"
+void abort ();
+
+#define N 4096
+int ca[N] __attribute__((aligned(16)));
+int cb[N] __attribute__((aligned(16)));
+int cc[N] __attribute__((aligned(16)));
+int cd[N] __attribute__((aligned(16)));
+int hey;
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  vector int va, vb, vc, vd, tmp;
+  vector unsigned int threes = vec_splat_u32(3);
+  for (i = 0; i < N; i+=4) {
+    vb = vec_vsx_ld (0, &cb[i]);
+    vc = vec_vsx_ld (0, &cc[i]);
+    vd = vec_vsx_ld (0, &cd[i]);
+    tmp = vec_add (vb, vc);
+    tmp = vec_sub (tmp, vd);
+    tmp = vec_sra (tmp, threes);
+    hey = tmp[3];
+    vec_vsx_st (tmp, 0, &ca[i]);
+  }
+}
+
+__attribute__((noinline)) void init ()
+{
+  int i;
+  for (i = 0; i < N; ++i) {
+    cb[i] = 3 * i - 2048;
+    cc[i] = -5 * i + 93;
+    cd[i] = i + 14;
+  }
+}
+
+int main ()
+{
+  int i;
+  init ();
+  foo ();
+  for (i = 0; i < N; ++i)
+    if (ca[i] != (-3 * i - 1969) >> 3)
+      abort ();
+  if (hey != ca[N-1])
+    abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-13.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-13.c
new file mode 100644 (file)
index 0000000..787b02e
--- /dev/null
@@ -0,0 +1,54 @@
+/* { dg-do run { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+
+#include <altivec.h>
+void abort ();
+
+#define N 4096
+long long ca[N] __attribute__((aligned(16)));
+long long cb[N] __attribute__((aligned(16)));
+long long cc[N] __attribute__((aligned(16)));
+long long cd[N] __attribute__((aligned(16)));
+long long x;
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  vector long long va, vb, vc, vd, tmp;
+  volatile unsigned long long three = 3;
+  vector unsigned long long threes = vec_splats (three);
+  for (i = 0; i < N; i+=2) {
+    vb = vec_vsx_ld (0, (vector long long *)&cb[i]);
+    vc = vec_vsx_ld (0, (vector long long *)&cc[i]);
+    vd = vec_vsx_ld (0, (vector long long *)&cd[i]);
+    tmp = vec_add (vb, vc);
+    tmp = vec_sub (tmp, vd);
+    tmp = vec_sra (tmp, threes);
+    x = vec_extract (tmp, 0);
+    vec_vsx_st (tmp, 0, (vector long long *)&ca[i]);
+  }
+}
+
+__attribute__((noinline)) void init ()
+{
+  int i;
+  for (i = 0; i < N; ++i) {
+    cb[i] = 3 * i - 2048;
+    cc[i] = -5 * i + 93;
+    cd[i] = i + 14;
+  }
+}
+
+int main ()
+{
+  int i;
+  init ();
+  foo ();
+  for (i = 0; i < N; ++i)
+    if (ca[i] != (-3 * i - 1969) >> 3)
+      abort ();
+  if (x != ca[N-1])
+    abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-14.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-14.c
new file mode 100644 (file)
index 0000000..7ca6ad5
--- /dev/null
@@ -0,0 +1,43 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+/* { dg-final { scan-assembler "lxvd2x" } } */
+/* { dg-final { scan-assembler "stxvd2x" } } */
+/* { dg-final { scan-assembler "stxsdx" } } */
+/* { dg-final { scan-assembler-times "xxpermdi" 1 } } */
+
+/* The only xxpermdi expected is for the vec_splats.  */
+
+#include <altivec.h>
+void abort ();
+
+#define N 4096
+long long ca[N] __attribute__((aligned(16)));
+long long cb[N] __attribute__((aligned(16)));
+long long cc[N] __attribute__((aligned(16)));
+long long cd[N] __attribute__((aligned(16)));
+long long x;
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  vector long long va, vb, vc, vd, tmp;
+  volatile unsigned long long three = 3;
+  vector unsigned long long threes = vec_splats (three);
+  for (i = 0; i < N; i+=2) {
+    vb = vec_vsx_ld (0, (vector long long *)&cb[i]);
+    vc = vec_vsx_ld (0, (vector long long *)&cc[i]);
+    vd = vec_vsx_ld (0, (vector long long *)&cd[i]);
+    tmp = vec_add (vb, vc);
+    tmp = vec_sub (tmp, vd);
+    tmp = vec_sra (tmp, threes);
+    x = vec_extract (tmp, 0);
+    vec_vsx_st (tmp, 0, (vector long long *)&ca[i]);
+  }
+}
+
+int main ()
+{
+  foo ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c
new file mode 100644 (file)
index 0000000..172e4bd
--- /dev/null
@@ -0,0 +1,51 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+/* { dg-final { scan-assembler "lxvd2x" } } */
+/* { dg-final { scan-assembler "stxvd2x" } } */
+/* { dg-final { scan-assembler "xxspltw" } } */
+
+/* Currently the analyze_swaps phase cannot optimize this loop because
+   of the presence of an UNSPEC_VSX_CVDPSPN.  At such time as this is 
+   handled, we need to add a 'scan-assembler-not "xxpermdi"' directive to
+   this test.  */
+#include <altivec.h>
+void abort();
+
+#define N 4096
+#define M 10000000
+vector float ca[N][4] = {0};
+vector float cb[N][4] = {0};
+vector float cc[N][4] = {0};
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  for (i = 0; i < N; i++) {
+    cc[i][0] = vec_mul(vec_splats(cb[i][0][0]), ca[i][0]);
+    cc[i][0] = vec_madd(cc[i][0],vec_splats(cb[i][0][1]), ca[i][1]);
+    cc[i][0] = vec_madd(cc[i][0],vec_splats(cb[i][0][2]), ca[i][2]);
+    cc[i][0] = vec_madd(cc[i][0],vec_splats(cb[i][0][3]), ca[i][3]);
+
+    cc[i][1] = vec_mul(vec_splats(cb[i][1][0]), ca[i][0]);
+    cc[i][1] = vec_madd(cc[i][0],vec_splats(cb[i][1][1]), ca[i][1]);
+    cc[i][1] = vec_madd(cc[i][0],vec_splats(cb[i][1][2]), ca[i][2]);
+    cc[i][1] = vec_madd(cc[i][0],vec_splats(cb[i][1][3]), ca[i][3]);
+    
+    cc[i][2] = vec_mul(vec_splats(cb[i][2][0]), ca[i][0]);
+    cc[i][2] = vec_madd(cc[i][0],vec_splats(cb[i][2][1]), ca[i][1]);
+    cc[i][2] = vec_madd(cc[i][0],vec_splats(cb[i][2][2]), ca[i][2]);
+    cc[i][2] = vec_madd(cc[i][0],vec_splats(cb[i][2][3]), ca[i][3]);
+    
+    cc[i][3] = vec_mul(vec_splats(cb[i][3][0]), ca[i][0]);
+    cc[i][3] = vec_madd(cc[i][0],vec_splats(cb[i][3][1]), ca[i][1]);
+    cc[i][3] = vec_madd(cc[i][0],vec_splats(cb[i][3][2]), ca[i][2]);
+    cc[i][3] = vec_madd(cc[i][0],vec_splats(cb[i][3][3]), ca[i][3]);
+  }
+}
+
+int main ()
+{
+  foo ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-16.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-16.c
new file mode 100644 (file)
index 0000000..2b7f73c
--- /dev/null
@@ -0,0 +1,57 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+/* { dg-final { scan-assembler "lxvd2x" } } */
+/* { dg-final { scan-assembler "stxvd2x" } } */
+/* { dg-final { scan-assembler "vspltw" } } */
+/* { dg-final { scan-assembler-not "xxpermdi" } } */
+
+#include <altivec.h>
+void abort();
+
+typedef struct xx {vector double l; vector double h;} xx;
+
+#define N 4096
+#define M 10000000
+vector float ca[N][4] = {0};
+vector float cb[N][4] = {0};
+vector float cc[N][4] = {0};
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  vector float brow;
+
+  for (i = 0; i < N; i++) {
+
+    brow = cb[i][0];
+    cc[i][0] = vec_mul(vec_splats(brow[0]), ca[i][0]);
+    cc[i][0] = vec_madd(cc[i][0],vec_splats(brow[1]), ca[i][1]);
+    cc[i][0] = vec_madd(cc[i][0],vec_splats(brow[2]), ca[i][2]);
+    cc[i][0] = vec_madd(cc[i][0],vec_splats(brow[3]), ca[i][3]);
+
+    brow = cb[i][1];
+    cc[i][1] = vec_mul(vec_splats(brow[0]), ca[i][0]);
+    cc[i][1] = vec_madd(cc[i][0],vec_splats(brow[1]), ca[i][1]);
+    cc[i][1] = vec_madd(cc[i][0],vec_splats(brow[2]), ca[i][2]);
+    cc[i][1] = vec_madd(cc[i][0],vec_splats(brow[3]), ca[i][3]);
+    
+    brow = cb[i][2];
+    cc[i][2] = vec_mul(vec_splats(brow[0]), ca[i][0]);
+    cc[i][2] = vec_madd(cc[i][0],vec_splats(brow[1]), ca[i][1]);
+    cc[i][2] = vec_madd(cc[i][0],vec_splats(brow[2]), ca[i][2]);
+    cc[i][2] = vec_madd(cc[i][0],vec_splats(brow[3]), ca[i][3]);
+    
+    brow = cb[i][3];
+    cc[i][3] = vec_mul(vec_splats(brow[0]), ca[i][0]);
+    cc[i][3] = vec_madd(cc[i][0],vec_splats(brow[1]), ca[i][1]);
+    cc[i][3] = vec_madd(cc[i][0],vec_splats(brow[2]), ca[i][2]);
+    cc[i][3] = vec_madd(cc[i][0],vec_splats(brow[3]), ca[i][3]);
+  }
+}
+
+int main ()
+{
+  foo ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-17.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-17.c
new file mode 100644 (file)
index 0000000..7a9cfbf
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O1" } */
+/* { dg-final { scan-assembler "lxvd2x" } } */
+/* { dg-final { scan-assembler "xxpermdi" } } */
+
+/* Verify that we don't try to do permute removal in the presence of
+   vec_ste.  This used to ICE.  */
+#include <altivec.h>
+
+void f (void *p)
+{
+  vector unsigned int u32 = vec_vsx_ld (1, (const unsigned int *)p);
+  vec_ste (u32, 1, (unsigned int *)p);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-18.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-18.c
new file mode 100644 (file)
index 0000000..c55f527
--- /dev/null
@@ -0,0 +1,35 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+/* { dg-final { scan-assembler-not "xxpermdi" } } */
+
+/* This is a test for a specific convert-splat permute removal.  */
+
+void compute (float*, float*, float*, int, int);
+double test (void);
+double gorp;
+
+int main (void)
+{
+  float X[10000], Y[256], Z[2000];
+  int i;
+  for (i = 0; i < 2500; i++)
+    compute (X, Y, Z, 256, 2000);
+  gorp = test ();
+}
+
+void compute(float *X, float *Y, float *Z, int m, int n)
+{
+  int i, j;
+  float w, *x, *y;
+
+  for (i = 0; i < n; i++)
+    {
+      w = 0.0;
+      x = X++;
+      y = Y;
+      for (j = 0; j < m; j++)
+       w += (*x++) * (*y++);
+      Z[i] = w;
+    }
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-2.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-2.c
new file mode 100644 (file)
index 0000000..6ce041a
--- /dev/null
@@ -0,0 +1,41 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+/* { dg-final { scan-assembler "lxvd2x" } } */
+/* { dg-final { scan-assembler "stxvd2x" } } */
+/* { dg-final { scan-assembler-not "xxpermdi" } } */
+
+void abort ();
+
+#define N 256
+signed char ca[N] __attribute__((aligned(16)));
+signed char cb[N] __attribute__((aligned(16)));
+signed char cc[N] __attribute__((aligned(16)));
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  for (i = 0; i < N; i++) {
+    ca[i] = cb[i] - cc[i];
+  }
+}
+
+__attribute__((noinline)) void init ()
+{
+  int i;
+  for (i = 0; i < N; ++i) {
+    cb[i] = i - 128;
+    cc[i] = i/2 - 64;
+  }
+}
+
+int main ()
+{
+  int i;
+  init ();
+  foo ();
+  for (i = 0; i < N; ++i)
+    if (ca[i] != i - i/2 - 64)
+      abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-3.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-3.c
new file mode 100644 (file)
index 0000000..35dacd4
--- /dev/null
@@ -0,0 +1,43 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+/* { dg-final { scan-assembler "lxvd2x" } } */
+/* { dg-final { scan-assembler "stxvd2x" } } */
+/* { dg-final { scan-assembler-not "xxpermdi" } } */
+
+void abort ();
+
+#define N 4096
+signed char ca[N] __attribute__((aligned(16)));
+signed char cb[N] __attribute__((aligned(16)));
+signed char cc[N] __attribute__((aligned(16)));
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  for (i = 0; i < N; i++) {
+    ca[i] = cb[i] - cc[i];
+  }
+}
+
+__attribute__((noinline)) void init ()
+{
+  int i, ii;
+  for (i = 0, ii = 0; i < N; ++i, ii = (ii + 1) % 128) {
+    cb[i] = ii - 128;
+    cc[i] = ii/2 - 64;
+  }
+}
+
+int main ()
+{
+  int i, ii;
+  init ();
+  foo ();
+  for (i = 0; i < N; ++i) {
+    ii = i % 128;
+    if (ca[i] != ii - ii/2 - 64)
+      abort ();
+  }
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-4.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-4.c
new file mode 100644 (file)
index 0000000..61fe99b
--- /dev/null
@@ -0,0 +1,45 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+/* { dg-final { scan-assembler "lxvd2x" } } */
+/* { dg-final { scan-assembler "stxvd2x" } } */
+/* { dg-final { scan-assembler-not "xxpermdi" } } */
+
+void abort ();
+
+#define N 4096
+int ca[N] __attribute__((aligned(16)));
+int cb[N] __attribute__((aligned(16)));
+int cc[N] __attribute__((aligned(16)));
+int cd[N] __attribute__((aligned(16)));
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  for (i = 0; i < N; i++) {
+    ca[i] = (cb[i] + cc[i]) * cd[i];
+  }
+}
+
+__attribute__((noinline)) void init ()
+{
+  int i;
+  for (i = 0; i < N; ++i) {
+    cb[i] = 3 * i - 2048;
+    cc[i] = -5 * i + 93;
+    cd[i] = i % 2 ? 1 : -1;
+  }
+}
+
+int main ()
+{
+  int i;
+  init ();
+  foo ();
+  for (i = 0; i < N; ++i)
+    if (i % 2 == 1 && ca[i] != -2 * i - 1955)
+      abort ();
+    else if (i % 2 == 0 && ca[i] != 1955 + 2 * i)
+      abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-5.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-5.c
new file mode 100644 (file)
index 0000000..b367fb6
--- /dev/null
@@ -0,0 +1,45 @@
+/* { dg-do compile { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+/* { dg-final { scan-assembler "lxvd2x" } } */
+/* { dg-final { scan-assembler "stxvd2x" } } */
+/* { dg-final { scan-assembler-not "xxpermdi" } } */
+
+void abort ();
+
+#define N 4096
+int ca[N] __attribute__((aligned(16)));
+int cb[N] __attribute__((aligned(16)));
+int cc[N] __attribute__((aligned(16)));
+int cd[N] __attribute__((aligned(16)));
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  for (i = 0; i < N; i++) {
+    ca[i] = ((cb[i] + cc[i]) * cd[i]) >> 3;
+  }
+}
+
+__attribute__((noinline)) void init ()
+{
+  int i;
+  for (i = 0; i < N; ++i) {
+    cb[i] = 3 * i - 2048;
+    cc[i] = -5 * i + 93;
+    cd[i] = i % 2 ? 1 : -1;
+  }
+}
+
+int main ()
+{
+  int i;
+  init ();
+  foo ();
+  for (i = 0; i < N; ++i)
+    if (i % 2 == 1 && ca[i] != (-2 * i - 1955) >> 3)
+      abort ();
+    else if (i % 2 == 0 && ca[i] != (1955 + 2 * i) >> 3)
+      abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-6.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-6.c
new file mode 100644 (file)
index 0000000..f708452
--- /dev/null
@@ -0,0 +1,32 @@
+/* { dg-do run { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+
+void abort();
+
+#define N 16
+
+signed char ca[N] __attribute__((aligned(16)));
+signed char cb[] __attribute__((aligned(16)))
+  = {8, 7, 6, 5, 4, 3, 2,  1,  0, -1, -2, -3, -4, -5, -6, -7};
+signed char cc[] __attribute__((aligned(16)))
+  = {1, 1, 2, 2, 3, 3, 2,  2,  1,  1,  0,  0, -1, -1, -2, -2};
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  for (i = 0; i < N; i++) {
+    ca[i] = cb[i] - cc[i];
+  }
+}
+
+int main ()
+{
+  signed char cd[] = {7, 6, 4, 3, 1, 0, 0, -1, -1, -2, -2, -3, -3, -4, -4, -5};
+  int i;
+  foo ();
+  for (i = 0; i < N; ++i)
+    if (ca[i] != cd[i])
+      abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-7.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-7.c
new file mode 100644 (file)
index 0000000..27a31b7
--- /dev/null
@@ -0,0 +1,38 @@
+/* { dg-do run { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+
+void abort ();
+
+#define N 256
+signed char ca[N] __attribute__((aligned(16)));
+signed char cb[N] __attribute__((aligned(16)));
+signed char cc[N] __attribute__((aligned(16)));
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  for (i = 0; i < N; i++) {
+    ca[i] = cb[i] - cc[i];
+  }
+}
+
+__attribute__((noinline)) void init ()
+{
+  int i;
+  for (i = 0; i < N; ++i) {
+    cb[i] = i - 128;
+    cc[i] = i/2 - 64;
+  }
+}
+
+int main ()
+{
+  int i;
+  init ();
+  foo ();
+  for (i = 0; i < N; ++i)
+    if (ca[i] != i - i/2 - 64)
+      abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-8.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-8.c
new file mode 100644 (file)
index 0000000..7264d25
--- /dev/null
@@ -0,0 +1,40 @@
+/* { dg-do run { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+
+void abort ();
+
+#define N 4096
+signed char ca[N] __attribute__((aligned(16)));
+signed char cb[N] __attribute__((aligned(16)));
+signed char cc[N] __attribute__((aligned(16)));
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  for (i = 0; i < N; i++) {
+    ca[i] = cb[i] - cc[i];
+  }
+}
+
+__attribute__((noinline)) void init ()
+{
+  int i, ii;
+  for (i = 0, ii = 0; i < N; ++i, ii = (ii + 1) % 128) {
+    cb[i] = ii - 128;
+    cc[i] = ii/2 - 64;
+  }
+}
+
+int main ()
+{
+  int i, ii;
+  init ();
+  foo ();
+  for (i = 0; i < N; ++i) {
+    ii = i % 128;
+    if (ca[i] != ii - ii/2 - 64)
+      abort ();
+  }
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-9.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-9.c
new file mode 100644 (file)
index 0000000..cdca070
--- /dev/null
@@ -0,0 +1,42 @@
+/* { dg-do run { target { powerpc64le-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O3" } */
+
+void abort ();
+
+#define N 4096
+int ca[N] __attribute__((aligned(16)));
+int cb[N] __attribute__((aligned(16)));
+int cc[N] __attribute__((aligned(16)));
+int cd[N] __attribute__((aligned(16)));
+
+__attribute__((noinline)) void foo ()
+{
+  int i;
+  for (i = 0; i < N; i++) {
+    ca[i] = (cb[i] + cc[i]) * cd[i];
+  }
+}
+
+__attribute__((noinline)) void init ()
+{
+  int i;
+  for (i = 0; i < N; ++i) {
+    cb[i] = 3 * i - 2048;
+    cc[i] = -5 * i + 93;
+    cd[i] = i % 2 ? 1 : -1;
+  }
+}
+
+int main ()
+{
+  int i;
+  init ();
+  foo ();
+  for (i = 0; i < N; ++i)
+    if (i % 2 == 1 && ca[i] != -2 * i - 1955)
+      abort ();
+    else if (i % 2 == 0 && ca[i] != 1955 + 2 * i)
+      abort ();
+  return 0;
+}
index 7bb7db0..c17fe28 100644 (file)
@@ -58,7 +58,7 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" {xfail {! vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" {xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" {xfail {! vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" {xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index ad6f8f0..952a68e 100644 (file)
@@ -54,7 +54,7 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" {xfail {! vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" {xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" {xfail {! vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" {xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 8e6e288..1538cc1 100644 (file)
@@ -58,7 +58,7 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" {xfail {! vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" {xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" {xfail {! vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" {xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index c095835..a45233b 100644 (file)
@@ -58,7 +58,7 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" {xfail {! vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" {xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" {xfail {! vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" {xfail { {! vect_hw_misalign } || powerpc*-*-* } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index f71c38f..25c7391 100644 (file)
@@ -1,5 +1,5 @@
-/* { dg-do compile } */
-/* { dg-options "-O3 -m31 -mzarch" } */
+/* { dg-do compile { target { ! lp64 } } } */
+/* { dg-options "-O3 -mzarch" } */
 
 void
 foo ()
index b9d6139..55088b8 100644 (file)
@@ -1,7 +1,7 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+/* { dg-do compile } */
+/* { dg-options "-mzarch" } */
 
 #include <stdio.h>
 
@@ -10,11 +10,10 @@ void hp1(void)
   printf("hello, world!\n");
 }
 
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
-/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
-/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler-not "post-label NOPs" } } */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
index b91b347..d2cb9a2 100644 (file)
@@ -1,21 +1,19 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mno-hotpatch --save-temps" } */
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,0" } */
 
 #include <stdio.h>
 
-__attribute__ ((hotpatch(2)))
 void hp1(void)
 {
   printf("hello, world!\n");
 }
 
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
-/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
-/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler-not "post-label NOPs" } } */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
index 4916773..cabb9d2 100644 (file)
@@ -1,7 +1,7 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch -mno-hotpatch --save-temps" } */
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=1,0" } */
 
 #include <stdio.h>
 
@@ -10,11 +10,9 @@ void hp1(void)
   printf("hello, world!\n");
 }
 
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
-/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler "pre-label.*(1 halfwords)" } } */
+/* { dg-final { scan-assembler-not "post-label NOPs" } } */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
 /* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
index b3e9427..fc9adc3 100644 (file)
@@ -1,7 +1,7 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mno-hotpatch -mhotpatch=1 --save-temps" } */
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=999,0" } */
 
 #include <stdio.h>
 
@@ -10,11 +10,9 @@ void hp1(void)
   printf("hello, world!\n");
 }
 
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
-/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
-/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler "pre-label.*(999 halfwords)" } } */
+/* { dg-final { scan-assembler-not "post-label NOPs" } } */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 999 } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-13.c b/gcc/testsuite/gcc.target/s390/hotpatch-13.c
new file mode 100644 (file)
index 0000000..b25fbd3
--- /dev/null
@@ -0,0 +1,20 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch(1,0)))
+void hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler "pre-label.*(1 halfwords)" } } */
+/* { dg-final { scan-assembler-not "post-label NOPs" } } */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler "alignment for hotpatch" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-14.c b/gcc/testsuite/gcc.target/s390/hotpatch-14.c
new file mode 100644 (file)
index 0000000..c387d6b
--- /dev/null
@@ -0,0 +1,20 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch(0,2)))
+void hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(2 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-15.c b/gcc/testsuite/gcc.target/s390/hotpatch-15.c
new file mode 100644 (file)
index 0000000..410106b
--- /dev/null
@@ -0,0 +1,19 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch(1,2)))
+void hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler "pre-label.*(1 halfwords)" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(2 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-16.c b/gcc/testsuite/gcc.target/s390/hotpatch-16.c
new file mode 100644 (file)
index 0000000..fa06fff
--- /dev/null
@@ -0,0 +1,19 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,0" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch(1,2)))
+void hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler "pre-label.*(1 halfwords)" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(2 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-17.c b/gcc/testsuite/gcc.target/s390/hotpatch-17.c
new file mode 100644 (file)
index 0000000..3ef7d69
--- /dev/null
@@ -0,0 +1,20 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=1,2" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch(0,0)))
+void hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler-not "post-label NOPs" } } */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-18.c b/gcc/testsuite/gcc.target/s390/hotpatch-18.c
new file mode 100644 (file)
index 0000000..c93af7f
--- /dev/null
@@ -0,0 +1,19 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=1,2 -mhotpatch=0,0" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler-not "post-label NOPs" } } */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-19.c b/gcc/testsuite/gcc.target/s390/hotpatch-19.c
new file mode 100644 (file)
index 0000000..bb8a137
--- /dev/null
@@ -0,0 +1,24 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=1,2" } */
+
+#include <stdio.h>
+
+__attribute__ ((always_inline))
+static inline void hp2(void)
+{
+  printf("hello, world!\n");
+}
+
+void hp1(void)
+{
+  hp2();
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler "pre-label.*(1 halfwords)" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(2 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
index 6cc2944..2a2665e 100644 (file)
@@ -1,7 +1,7 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,1" } */
 
 #include <stdio.h>
 
@@ -10,11 +10,10 @@ void hp1(void)
   printf("hello, world!\n");
 }
 
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(1 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nopr\t" } } */
 /* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
-/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-20.c b/gcc/testsuite/gcc.target/s390/hotpatch-20.c
new file mode 100644 (file)
index 0000000..222ae5a
--- /dev/null
@@ -0,0 +1,18 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch(1,2)))
+__attribute__ ((always_inline))
+static inline void hp2(void)
+{
+  printf("hello, world!\n");
+}
+
+void hp1(void)
+{
+  hp2();
+}
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-21.c b/gcc/testsuite/gcc.target/s390/hotpatch-21.c
new file mode 100644 (file)
index 0000000..f6e9099
--- /dev/null
@@ -0,0 +1,14 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,1" } */
+
+#include <stdio.h>
+
+void __attribute__ ((aligned(512))) hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-22.c b/gcc/testsuite/gcc.target/s390/hotpatch-22.c
new file mode 100644 (file)
index 0000000..21f7d7e
--- /dev/null
@@ -0,0 +1,14 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,1 -falign-functions=1024" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-23.c b/gcc/testsuite/gcc.target/s390/hotpatch-23.c
new file mode 100644 (file)
index 0000000..6e149cc
--- /dev/null
@@ -0,0 +1,14 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,1 -falign-functions=4096" } */
+
+#include <stdio.h>
+
+void __attribute__ ((aligned(2048))) hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-24.c b/gcc/testsuite/gcc.target/s390/hotpatch-24.c
new file mode 100644 (file)
index 0000000..1e47591
--- /dev/null
@@ -0,0 +1,14 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,1 -falign-functions=2048" } */
+
+#include <stdio.h>
+
+void __attribute__ ((aligned(4096))) hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-25.c b/gcc/testsuite/gcc.target/s390/hotpatch-25.c
new file mode 100644 (file)
index 0000000..e6cdbb6
--- /dev/null
@@ -0,0 +1,32 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-mzarch" } */
+
+typedef long (*fn_t)(void);
+
+__attribute__ ((hotpatch(1,2)))
+fn_t outer(void)
+{
+  __attribute__ ((hotpatch(4,8)))
+  long nested1(void)
+  {
+    __attribute__ ((hotpatch(16,32)))
+    long nested2(void)
+    {
+      return 2;
+    }
+    return (long)(void *)nested2;
+  }
+
+  return nested1;
+}
+
+/* { dg-final { scan-assembler "pre-label.*(1 halfwords)" } } */
+/* { dg-final { scan-assembler "pre-label.*(4 halfwords)" } } */
+/* { dg-final { scan-assembler "pre-label.*(16 halfwords)" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(2 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nopr\t" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(8 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*brcl\t0, 0" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(32 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*brcl\t0, 0" } } */
+/* { dg-final { scan-assembler-times "alignment for hotpatch" 3 } } */
+/* { dg-final { scan-assembler "nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr.*\n.*nopr" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-26.c b/gcc/testsuite/gcc.target/s390/hotpatch-26.c
new file mode 100644 (file)
index 0000000..eb95c26
--- /dev/null
@@ -0,0 +1,17 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=1,2" } */
+
+__attribute__ ((noreturn)) void hp1(void)
+{
+  __builtin_unreachable ();
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(2 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler "alignment for hotpatch" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-27.c b/gcc/testsuite/gcc.target/s390/hotpatch-27.c
new file mode 100644 (file)
index 0000000..cdbd4ca
--- /dev/null
@@ -0,0 +1,17 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=1,2" } */
+
+__attribute__ ((noreturn)) void hp3(void)
+{
+  __builtin_unreachable ();
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(2 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler "alignment for hotpatch" } } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-28.c b/gcc/testsuite/gcc.target/s390/hotpatch-28.c
new file mode 100644 (file)
index 0000000..9922daa
--- /dev/null
@@ -0,0 +1,18 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=1,2" } */
+
+void hp1 (volatile unsigned int *i)
+{
+  for (;;)
+    (*i)++;
+}
+
+/* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(2 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler "alignment for hotpatch" } } */
index 9f0b2b7..6718591 100644 (file)
@@ -1,7 +1,7 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch=0 --save-temps" } */
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,2" } */
 
 #include <stdio.h>
 
@@ -10,11 +10,9 @@ void hp1(void)
   printf("hello, world!\n");
 }
 
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(2 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
 /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 /* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
index c1dba20..b770d4b 100644 (file)
@@ -1,26 +1,18 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,3" } */
 
 #include <stdio.h>
 
-inline void hp1(void)
+void hp1(void)
 {
   printf("hello, world!\n");
 }
 
-__attribute__ ((always_inline))
-void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
-{
-  printf("hello, world!\n");
-} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
-
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(3 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*brcl\t0, 0" } } */
 /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 /* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-times "brcl\t0, 0" 1 } } */
index ec267d6..f1dcd89 100644 (file)
@@ -1,21 +1,18 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,4" } */
 
 #include <stdio.h>
 
-__attribute__ ((hotpatch))
 void hp1(void)
 {
   printf("hello, world!\n");
 }
 
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
-/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
-/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(4 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*brcl\t0, 0" } } */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-times "brcl\t0, 0" 1 } } */
index 5af090d..6203a72 100644 (file)
@@ -1,21 +1,18 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,5" } */
 
 #include <stdio.h>
 
-__attribute__ ((hotpatch(1)))
 void hp1(void)
 {
   printf("hello, world!\n");
 }
 
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
-/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(5 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*brcl\t0, 0" } } */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 /* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-times "brcl\t0, 0" 1 } } */
index e73a510..e201ae9 100644 (file)
@@ -1,21 +1,18 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+/* { dg-do compile } */
+/* { dg-options "-mzarch -mhotpatch=0,6" } */
 
 #include <stdio.h>
 
-__attribute__ ((hotpatch(0)))
 void hp1(void)
 {
   printf("hello, world!\n");
 }
 
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(6 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*brcl\t0, 0" } } */
 /* { dg-final { scan-assembler-not "nopr\t%r7" } } */
-/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-times "brcl\t0, 0" 2 } } */
index 399aa72..1ea3160 100644 (file)
@@ -1,28 +1,19 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
+/* { dg-do compile { target { ! lp64 } } } */
+/* { dg-options "-mesa -march=g5 -mhotpatch=0,3" } */
 
 #include <stdio.h>
 
-__attribute__ ((hotpatch))
-inline void hp1(void)
+void hp1(void)
 {
   printf("hello, world!\n");
 }
 
-__attribute__ ((hotpatch))
-__attribute__ ((always_inline))
-void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
-{
-  printf("hello, world!\n");
-} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
-
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
-/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
-/* { dg-final { scan-assembler-not "nop\t0" } } */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(3 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
index 5da6758..e30f276 100644 (file)
@@ -1,21 +1,18 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
+/* { dg-do compile { target { ! lp64 } } } */
+/* { dg-options "-mesa -march=g5 -mhotpatch=0,4" } */
 
 #include <stdio.h>
 
-__attribute__ ((hotpatch(2)))
 void hp1(void)
 {
   printf("hello, world!\n");
 }
 
-int main (void)
-{
-  return 0;
-}
-
 /* Check number of occurences of certain instructions.  */
-/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
-/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
+/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(4 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
+/* { dg-final { scan-assembler-times "nop\t0" 2 } } */
+/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
index 45a2cc5..ca47f6b 100644 (file)
@@ -1,27 +1,5 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch" } */
-
-#include <stdio.h>
-
-void hp1(void)
-{
-  printf("hello, world!\n");
-}
-
-inline void hp2(void)
-{
-  printf("hello, world!\n");
-}
-
-__attribute__ ((always_inline))
-void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
-{
-  printf("hello, world!\n");
-} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
-
-int main (void)
-{
-  return 0;
-}
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=-1,0" } */
+/* { dg-error "arguments to .-mhotpatch=n,m. should be non-negative integers" "" { target *-*-* } 1 } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-compile-10.c b/gcc/testsuite/gcc.target/s390/hotpatch-compile-10.c
new file mode 100644 (file)
index 0000000..8b6441d
--- /dev/null
@@ -0,0 +1,10 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch" } */
+
+__attribute__((hotpatch(0,0,0)))
+int main (void)
+{/* { dg-error "wrong number of arguments specified" } */
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-compile-11.c b/gcc/testsuite/gcc.target/s390/hotpatch-compile-11.c
new file mode 100644 (file)
index 0000000..36c0e22
--- /dev/null
@@ -0,0 +1,12 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch" } */
+
+int a;
+
+__attribute__((hotpatch(a,0)))
+int main (void)
+{ /* { dg-error "attribute is not a comma separated pair of non-negative integer constants or too large" } */
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-compile-12.c b/gcc/testsuite/gcc.target/s390/hotpatch-compile-12.c
new file mode 100644 (file)
index 0000000..9b5fbd3
--- /dev/null
@@ -0,0 +1,12 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch" } */
+
+int a;
+
+__attribute__((hotpatch(0,a)))
+int main (void)
+{ /* { dg-error "attribute is not a comma separated pair of non-negative integer constants or too large" } */
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-compile-13.c b/gcc/testsuite/gcc.target/s390/hotpatch-compile-13.c
new file mode 100644 (file)
index 0000000..a875241
--- /dev/null
@@ -0,0 +1,29 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=1000000,1000000" } */
+
+#include <stdio.h>
+
+void hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(1000000,1000000)))
+void hp2(void)
+{
+  printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(1000001,1000000)))
+void hp3(void)
+{ /* { dg-error " requested .hotpatch. attribute is not a comma separated pair" } */
+  printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(1000000,1000001)))
+void hp4(void)
+{ /* { dg-error " requested .hotpatch. attribute is not a comma separated pair" } */
+  printf("hello, world!\n");
+}
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-compile-14.c b/gcc/testsuite/gcc.target/s390/hotpatch-compile-14.c
new file mode 100644 (file)
index 0000000..0b5e674
--- /dev/null
@@ -0,0 +1,11 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=1000001,1000000" } */
+
+viod main(void)
+{
+  return 0;
+}
+
+/* { dg-error "argument to .-mhotpatch=n,m. is too large" "" { target *-*-* } 1 } */
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-compile-15.c b/gcc/testsuite/gcc.target/s390/hotpatch-compile-15.c
new file mode 100644 (file)
index 0000000..12e04ea
--- /dev/null
@@ -0,0 +1,40 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch" } */
+
+#include <stdio.h>
+
+__attribute__ ((hotpatch(1,2)))
+static void hp1(void)
+{
+  printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(1,2)))
+static inline void hp2(void)
+{
+  printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(0,0)))
+__attribute__ ((always_inline))
+static inline void hp3(void)
+{
+  printf("hello, world!\n");
+}
+
+__attribute__ ((hotpatch(1,2)))
+__attribute__ ((always_inline))
+static inline void hp4(void)
+{
+  printf("hello, world!\n");
+}
+
+void main(void)
+{
+  hp1();
+  hp2();
+  hp3();
+  hp4();
+}
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-compile-16.c b/gcc/testsuite/gcc.target/s390/hotpatch-compile-16.c
new file mode 100644 (file)
index 0000000..2e8291e
--- /dev/null
@@ -0,0 +1,24 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch" } */
+
+typedef int (*fn_t)(void);
+
+fn_t hp1(void)
+{
+  __attribute__((hotpatch(0,0)))
+  int nested1(void)
+  { return 1; }
+
+  return nested1;
+}
+
+fn_t hp2(void)
+{
+  __attribute__ ((hotpatch(1,2)))
+  int nested2(void)
+  { return 2; }
+
+  return nested2;
+}
index 5947f56..78253f5 100644 (file)
@@ -1,27 +1,5 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch=0" } */
-
-#include <stdio.h>
-
-void hp1(void)
-{
-  printf("hello, world!\n");
-}
-
-inline void hp2(void)
-{
-  printf("hello, world!\n");
-}
-
-__attribute__ ((always_inline))
-void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
-{
-  printf("hello, world!\n");
-} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
-
-int main (void)
-{
-  return 0;
-}
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=0,-1" } */
+/* { dg-error "arguments to .-mhotpatch=n,m. should be non-negative integers" "" { target *-*-* } 1 } */
index e0c7f6f..6dde224 100644 (file)
@@ -1,27 +1,5 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch=1" } */
-
-#include <stdio.h>
-
-void hp1(void)
-{
-  printf("hello, world!\n");
-}
-
-inline void hp2(void)
-{
-  printf("hello, world!\n");
-}
-
-__attribute__ ((always_inline))
-void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
-{
-  printf("hello, world!\n");
-} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
-
-int main (void)
-{
-  return 0;
-}
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch -mhotpatch=0" } */
+/* { dg-error "arguments to .-mhotpatch=n,m. should be non-negative integers" "" { target *-*-* } 1 } */
index d9f1342..fbb3083 100644 (file)
@@ -1,11 +1,5 @@
 /* Functional tests for the function hotpatching feature.  */
 
 /* { dg-do compile } */
-/* { dg-options "-O3 -mzarch -mhotpatch=-1" } */
-
-int main (void)
-{
-  return 0;
-}
-
-/* { dg-excess-errors "argument to '-mhotpatch=' should be a non-negative integer" } */
+/* { dg-options "-O3 -mzarch -mhotpatch=0,0,0" } */
+/* { dg-error "arguments to .-mhotpatch=n,m. should be non-negative integers" "" { target *-*-* } 1 } */
index 53f7eac..dc0ff67 100644 (file)
@@ -1,28 +1,5 @@
 /* Functional tests for the function hotpatching feature.  */
 
 /* { dg-do compile } */
-/* { dg-options "-O3 -mzarch -mhotpatch=1000000" } */
-
-#include <stdio.h>
-
-void hp1(void)
-{
-  printf("hello, world!\n");
-}
-
-__attribute__ ((hotpatch(1000000)))
-void hp2(void)
-{
-  printf("hello, world!\n");
-}
-
-__attribute__ ((hotpatch(1000001)))
-void hp3(void)
-{ /* { dg-error "requested 'hotpatch' attribute is not a non-negative integer constant or too large .max. 1000000." } */
-  printf("hello, world!\n");
-}
-
-int main (void)
-{
-  return 0;
-}
+/* { dg-options "-O3 -mzarch -mhotpatch=a,0" } */
+/* { dg-error "arguments to .-mhotpatch=n,m. should be non-negative integers" "" { target *-*-* } 1 } */
index cb10b66..d04045e 100644 (file)
@@ -1,11 +1,5 @@
 /* Functional tests for the function hotpatching feature.  */
 
 /* { dg-do compile } */
-/* { dg-options "-O3 -mzarch -mhotpatch=1000001" } */
-
-int main (void)
-{
-  return 0;
-}
-
-/* { dg-excess-errors "argument to '-mhotpatch=' is too large .max. 1000000." } */
+/* { dg-options "-O3 -mzarch -mhotpatch=0,a" } */
+/* { dg-error "arguments to .-mhotpatch=n,m. should be non-negative integers" "" { target *-*-* } 1 } */
index 98ccb42..3505703 100644 (file)
@@ -1,68 +1,10 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mno-hotpatch" } */
-
-#include <stdio.h>
-
-__attribute__ ((hotpatch))
-void hp1(void)
-{
-  printf("hello, world!\n");
-}
-
-__attribute__ ((hotpatch))
-inline void hp2(void)
-{
-  printf("hello, world!\n");
-}
-
-__attribute__ ((hotpatch))
-__attribute__ ((always_inline))
-void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
-{
-  printf("hello, world!\n");
-} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
-
-__attribute__ ((hotpatch(0)))
-void hp4(void)
-{
-  printf("hello, world!\n");
-}
-
-__attribute__ ((hotpatch(0)))
-inline void hp5(void)
-{
-  printf("hello, world!\n");
-}
-
-__attribute__ ((hotpatch(0)))
-__attribute__ ((always_inline))
-void hp6(void) /* { dg-warning "always_inline function might not be inlinable" } */
-{
-  printf("hello, world!\n");
-} /* { dg-warning "function 'hp6' with the 'always_inline' attribute is not hotpatchable" } */
-
-__attribute__ ((hotpatch(1)))
-void hp7(void)
-{
-  printf("hello, world!\n");
-}
-
-__attribute__ ((hotpatch(1)))
-inline void hp8(void)
-{
-  printf("hello, world!\n");
-}
-
-__attribute__ ((hotpatch(1)))
-__attribute__ ((always_inline))
-void hp9(void) /* { dg-warning "always_inline function might not be inlinable" } */
-{
-  printf("hello, world!\n");
-} /* { dg-warning "function 'hp9' with the 'always_inline' attribute is not hotpatchable" } */
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch" } */
 
+__attribute__((hotpatch(-1,0)))
 int main (void)
-{
+{/* { dg-error "attribute is not a comma separated pair of non-negative integer constants or too large" } */
   return 0;
 }
index 489fc5d..fd35431 100644 (file)
@@ -1,23 +1,10 @@
 /* Functional tests for the function hotpatching feature.  */
 
-/* { dg-do run } */
-/* { dg-options "-O3 -mzarch -mhotpatch" } */
-
-#include <stdio.h>
-
-int hp1(void)
-{
-  int nested1(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
-  { return 1; }
-
-  __attribute__ ((hotpatch))
-  int nested2(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
-  { return 1; }
-
-  return nested1() - nested2();
-}
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch" } */
 
+__attribute__((hotpatch(0,-1)))
 int main (void)
-{
-  return hp1();
+{/* { dg-error "attribute is not a comma separated pair of non-negative integer constants or too large" } */
+  return 0;
 }
diff --git a/gcc/testsuite/gcc.target/s390/hotpatch-compile-9.c b/gcc/testsuite/gcc.target/s390/hotpatch-compile-9.c
new file mode 100644 (file)
index 0000000..dcefbe4
--- /dev/null
@@ -0,0 +1,10 @@
+/* Functional tests for the function hotpatching feature.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -mzarch" } */
+
+__attribute__((hotpatch(0)))
+int main (void)
+{/* { dg-error "wrong number of arguments specified" } */
+  return 0;
+}
index 6022efb..62f2d68 100644 (file)
@@ -48,3 +48,4 @@ int main(void)
 /* Make sure no FPR saves/restores are emitted.  */
 /* { dg-final { scan-assembler-not "\tstd\t" } } */
 /* { dg-final { scan-assembler-not "\tld\t" } } */
+/* { dg-final { cleanup-saved-temps } } */
index 15c3878..1c62f56 100644 (file)
@@ -1,7 +1,7 @@
 /* PR rtl-optimization/57559  */
 
 /* { dg-do compile } */
-/* { dg-options "-march=z10 -m64 -mzarch  -O1" } */
+/* { dg-options "-march=z10 -mzarch  -O1" } */
 
 typedef int int32_t;
 typedef unsigned char uint8_t;
index ee751ed..03578ff 100644 (file)
@@ -1,7 +1,7 @@
 /* PR rtl-optimization/57960  */
 
 /* { dg-do compile } */
-/* { dg-options "-march=z10 -m64 -mzarch  -O1" } */
+/* { dg-options "-march=z10 -mzarch  -O1" } */
 
 typedef union
 {
index f2ba929..17f7bed 100644 (file)
@@ -46,9 +46,18 @@ if ![info exists DEFAULT_CFLAGS] then {
 # Initialize `dg'.
 dg-init
 
+set hotpatch_tests $srcdir/$subdir/hotpatch-\[0-9\]*.c
+
 # Main loop.
-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
-       "" $DEFAULT_CFLAGS
+dg-runtest [lsort [prune [glob -nocomplain $srcdir/$subdir/*.\[cS\]] \
+                        $hotpatch_tests]] "" $DEFAULT_CFLAGS
+
+# Additional hotpatch torture tests.
+torture-init
+set HOTPATCH_TEST_OPTS [list -Os -O0 -O1 -O2 -O3]
+set-torture-options $HOTPATCH_TEST_OPTS
+gcc-dg-runtest [lsort [glob -nocomplain $hotpatch_tests]] $DEFAULT_CFLAGS
+torture-finish
 
 # All done.
 dg-finish
index f2cd2de..3208f93 100644 (file)
@@ -3,12 +3,12 @@
 /* { dg-do compile }  */
 /* { dg-options "-O2" } */
 /* { dg-skip-if "" { "sh*-*-*" } { "*" } { "-m2a*" } } */
-/* { dg-final { scan-assembler-times "tst" 5 } } */
-/* { dg-final { scan-assembler-times "movt" 0 } } */
+/* { dg-final { scan-assembler-times "tst" 6 } } */
+/* { dg-final { scan-assembler-times "movt" 1 } } */
 /* { dg-final { scan-assembler-times "nott" 1 } } */
 /* { dg-final { scan-assembler-times "cmp/eq" 2 } } */
 /* { dg-final { scan-assembler-times "cmp/hi" 4 } } */
 /* { dg-final { scan-assembler-times "cmp/gt" 3 } } */
-/* { dg-final { scan-assembler-times "not\t" 1 } } */
+/* { dg-final { scan-assembler-not "not\t" } } */
 
 #include "pr51244-20.c"
index a9ded46..aad6a2f 100644 (file)
@@ -1,15 +1,15 @@
 /* Check that the SH specific sh_treg_combine RTL optimization pass works as
    expected.  On SH2A the expected insns are slightly different, see
-   pr51244-21.c.  */
+   pr51244-20-sh2a.c.  */
 /* { dg-do compile }  */
 /* { dg-options "-O2" } */
 /* { dg-skip-if "" { "sh*-*-*" } { "-m5*" "-m2a*" } { "" } } */
-/* { dg-final { scan-assembler-times "tst" 6 } } */
-/* { dg-final { scan-assembler-times "movt" 1 } } */
+/* { dg-final { scan-assembler-times "tst" 7 } } */
+/* { dg-final { scan-assembler-times "movt" 2 } } */
 /* { dg-final { scan-assembler-times "cmp/eq" 2 } } */
 /* { dg-final { scan-assembler-times "cmp/hi" 4 } } */
 /* { dg-final { scan-assembler-times "cmp/gt" 2 } } */
-/* { dg-final { scan-assembler-times "not\t" 1 } } */
+/* { dg-final { scan-assembler-not "not\t" } } */
 
 
 /* non-SH2A: 2x tst, 1x movt, 2x cmp/eq, 1x cmp/hi
@@ -81,7 +81,7 @@ get_request_2 (int* q, int rw)
 }
 
 
-/* 2x tst, 1x cmp/hi, 1x not  */
+/* 3x tst, 1x movt, 1x cmp/hi, 1x not  */
 static inline int
 blk_oversized_queue_5 (int* q)
 {
index a2e7213..926bb04 100644 (file)
@@ -5,9 +5,9 @@
 /* { dg-do compile }  */
 /* { dg-options "-O1" } */
 /* { dg-skip-if "" { "sh*-*-*" } { "-m5*"} { "" } }  */
-/* { dg-final { scan-assembler-times "tst\tr" 8 } } */
-/* { dg-final { scan-assembler-not "tst\t#255" } } */
-/* { dg-final { scan-assembler-not "exts|extu|and|movu" } } */
+/* { dg-final { scan-assembler-times "tst\tr" 8 { xfail *-*-*} } }  */
+/* { dg-final { scan-assembler-not "tst\t#255" { xfail *-*-*} } }  */
+/* { dg-final { scan-assembler-not "exts|extu|and|movu" { xfail *-*-*} } }  */
 
 int
 test00 (char* a, char* b, int c, int d)
diff --git a/gcc/testsuite/gcc.target/sh/pr64507.c b/gcc/testsuite/gcc.target/sh/pr64507.c
new file mode 100644 (file)
index 0000000..d3d9384
--- /dev/null
@@ -0,0 +1,25 @@
+/* Check that the __builtin_strnlen returns 0 with with 
+   non-constant 0 length.  */
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+extern int snprintf(char *, int, const char *, ...);
+extern void abort (void);
+
+int main()
+ {
+   int i;
+   int cmp = 0;
+   char buffer[1024];
+   const char* s = "the string";
+
+   snprintf(buffer, 4, "%s", s);
+
+   for (i = 1; i < 4; i++)
+     cmp += __builtin_strncmp(buffer, s, i - 1);
+
+  if (cmp)
+    abort();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/sh/torture/pr63783-1.c b/gcc/testsuite/gcc.target/sh/torture/pr63783-1.c
new file mode 100644 (file)
index 0000000..f18bead
--- /dev/null
@@ -0,0 +1,29 @@
+/* { dg-do run }  */
+/* { dg-additional-options "-std=c99" }  */
+
+#include <assert.h>
+
+int decision_result;
+int val;
+int truecount = 0;
+
+static void __attribute__((noinline))
+buggy (int flag)
+{
+  int condition;
+  if(flag == 0)
+    condition = val != 0;
+  else
+    condition = !decision_result;
+  if (condition)
+     truecount++;
+}
+
+int
+main (void)
+{
+  decision_result = 1;
+  buggy(1);
+  assert (truecount == 0);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/sh/torture/pr63783-2.c b/gcc/testsuite/gcc.target/sh/torture/pr63783-2.c
new file mode 100644 (file)
index 0000000..c0bc911
--- /dev/null
@@ -0,0 +1,29 @@
+/* { dg-do run }  */
+/* { dg-additional-options "-std=c99" }  */
+
+#include <assert.h>
+
+long long decision_result;
+long long val;
+int truecount = 0;
+
+static void __attribute__((noinline))
+buggy (int flag)
+{
+  int condition;
+  if(flag == 0)
+    condition = val != 0;
+  else
+    condition = !decision_result;
+  if (condition)
+     truecount++;
+}
+
+int
+main (void)
+{
+  decision_result = 1;
+  buggy(1);
+  assert (truecount == 0);
+  return 0;
+}
diff --git a/gcc/testsuite/gfortran.dg/allocate_with_mold_1.f90 b/gcc/testsuite/gfortran.dg/allocate_with_mold_1.f90
new file mode 100644 (file)
index 0000000..2ea6d22
--- /dev/null
@@ -0,0 +1,47 @@
+! { dg-do run }
+!
+! Fixes a bug that emerged from the fix of PR62044 - see the PR. When
+! there was no default initializer, code-expr3 was set null and so the
+! vpointer was set to the vtable of the declared type, rather than that
+! of the MOLD expression.
+!
+! Contributed by but based on the original PR62044 testcase by
+! Paul Thomas  <pault@gcc.gnu.org>
+!
+module GridImageSilo_Template
+  implicit none
+  type, public, abstract :: GridImageSiloTemplate
+  end type GridImageSiloTemplate
+end module GridImageSilo_Template
+
+module UnstructuredGridImageSilo_Form
+  use GridImageSilo_Template
+  implicit none
+  type, public, extends ( GridImageSiloTemplate ) :: &
+    UnstructuredGridImageSiloForm
+  end type UnstructuredGridImageSiloForm
+end module UnstructuredGridImageSilo_Form
+
+module UnstructuredGridImages
+  use UnstructuredGridImageSilo_Form
+! 5.0 branch contains    UnstructuredGridImageForm => UnstructuredGridImageSiloForm
+contains
+  subroutine foo
+    class (GridImageSiloTemplate), allocatable :: a
+    type (UnstructuredGridImageSiloForm) :: b
+    integer :: i = 0
+    allocate (a, mold = b)
+    select type (a)
+      type is (UnstructuredGridImageSiloForm)
+        i = 1
+      class default
+        i = 2
+    end select
+    if (i .ne. 1) call abort
+  end subroutine
+end module UnstructuredGridImages
+
+  use UnstructuredGridImages
+  call foo
+end
+
diff --git a/gcc/testsuite/gfortran.dg/class_allocate_17.f90 b/gcc/testsuite/gfortran.dg/class_allocate_17.f90
new file mode 100644 (file)
index 0000000..639ba80
--- /dev/null
@@ -0,0 +1,32 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+!
+! PR 60922: [4.9/5 regression] Memory leak with allocatable CLASS components
+!
+! Contributed by Salvatore Filippone <sfilippone@uniroma2.it>
+
+program test_leak
+  implicit none
+
+  type d_base_vect_type
+  end type
+
+  type d_vect_type
+    class(d_base_vect_type), allocatable :: v
+  end type
+
+  call test()
+
+contains
+
+  subroutine test()
+    class(d_vect_type), allocatable :: x
+    allocate(x)
+    allocate(x%v)
+    print *,"allocated!"
+  end subroutine
+
+end
+
+! { dg-final { scan-tree-dump-times "fini_coarray" 1 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
diff --git a/gcc/testsuite/gfortran.dg/class_allocate_18.f90 b/gcc/testsuite/gfortran.dg/class_allocate_18.f90
new file mode 100644 (file)
index 0000000..ad3f76c
--- /dev/null
@@ -0,0 +1,21 @@
+! { dg-do run }
+!
+! PR 64230: [4.9/5 Regression] Invalid memory reference in a compiler-generated finalizer for allocatable component
+!
+! Contributed by Mat Cross <mathewc@nag.co.uk>
+
+Program main
+  Implicit None
+  Type :: t1
+  End Type
+  Type, Extends (t1) :: t2
+    Integer, Allocatable :: i
+  End Type
+  Type, Extends (t2) :: t3
+    Integer, Allocatable :: j
+  End Type
+  Class (t1), Allocatable :: t
+  Allocate (t3 :: t)
+  print *,"allocated!"
+  Deallocate (t)
+End
diff --git a/gcc/testsuite/gfortran.dg/coarray_36.f b/gcc/testsuite/gfortran.dg/coarray_36.f
new file mode 100644 (file)
index 0000000..d06a01e
--- /dev/null
@@ -0,0 +1,347 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=lib" }
+!
+! PR fortran/64771
+!
+! Contributed by Alessandro Fanfarill
+!
+! Reduced version of the full NAS CG benchmark
+!
+
+!-------------------------------------------------------------------------!
+!                                                                         !
+!        N  A  S     P A R A L L E L     B E N C H M A R K S  3.3         !
+!                                                                         !
+!                                   C G                                   !
+!                                                                         !
+!-------------------------------------------------------------------------!
+!                                                                         !
+!    This benchmark is part of the NAS Parallel Benchmark 3.3 suite.      !
+!    It is described in NAS Technical Reports 95-020 and 02-007           !
+!                                                                         !
+!    Permission to use, copy, distribute and modify this software         !
+!    for any purpose with or without fee is hereby granted.  We           !
+!    request, however, that all derived work reference the NAS            !
+!    Parallel Benchmarks 3.3. This software is provided "as is"           !
+!    without express or implied warranty.                                 !
+!                                                                         !
+!    Information on NPB 3.3, including the technical report, the          !
+!    original specifications, source code, results and information        !
+!    on how to submit new results, is available at:                       !
+!                                                                         !
+!           http://www.nas.nasa.gov/Software/NPB/                         !
+!                                                                         !
+!    Send comments or suggestions to  npb@nas.nasa.gov                    !
+!                                                                         !
+!          NAS Parallel Benchmarks Group                                  !
+!          NASA Ames Research Center                                      !
+!          Mail Stop: T27A-1                                              !
+!          Moffett Field, CA   94035-1000                                 !
+!                                                                         !
+!          E-mail:  npb@nas.nasa.gov                                      !
+!          Fax:     (650) 604-3957                                        !
+!                                                                         !
+!-------------------------------------------------------------------------!
+
+
+c---------------------------------------------------------------------
+c
+c Authors: M. Yarrow
+c          C. Kuszmaul
+c          R. F. Van der Wijngaart
+c          H. Jin
+c
+c---------------------------------------------------------------------
+
+
+c---------------------------------------------------------------------
+c---------------------------------------------------------------------
+      program cg
+c---------------------------------------------------------------------
+c---------------------------------------------------------------------
+      implicit none
+
+      integer            na, nonzer, niter
+      double precision   shift, rcond
+      parameter(  na=75000,
+     >     nonzer=13,
+     >     niter=75,
+     >     shift=60.,
+     >     rcond=1.0d-1 )
+
+
+
+      integer num_proc_rows, num_proc_cols
+      parameter( num_proc_rows = 2, num_proc_cols = 2)
+      integer    num_procs
+      parameter( num_procs = num_proc_cols * num_proc_rows )
+
+      integer    nz
+      parameter( nz = na*(nonzer+1)/num_procs*(nonzer+1)+nonzer
+     >              + na*(nonzer+2+num_procs/256)/num_proc_cols )
+
+      common / partit_size  /  naa, nzz,
+     >                         npcols, nprows,
+     >                         proc_col, proc_row,
+     >                         firstrow,
+     >                         lastrow,
+     >                         firstcol,
+     >                         lastcol,
+     >                         exch_proc,
+     >                         exch_recv_length,
+     >                         send_start,
+     >                         send_len
+      integer                  naa, nzz,
+     >                         npcols, nprows,
+     >                         proc_col, proc_row,
+     >                         firstrow,
+     >                         lastrow,
+     >                         firstcol,
+     >                         lastcol,
+     >                         exch_proc,
+     >                         exch_recv_length,
+     >                         send_start,
+     >                         send_len
+
+
+      common / main_int_mem /  colidx,     rowstr,
+     >                         iv,         arow,     acol
+      integer                  colidx(nz), rowstr(na+1),
+     >                         iv(2*na+1), arow(nz), acol(nz)
+
+
+c---------------------------------
+c     Coarray Decalarations
+c---------------------------------
+      double precision         v(na+1)[0:*], aelt(nz)[0:*], a(nz)[0:*],
+     >                         x(na/num_proc_rows+2)[0:*],
+     >                         z(na/num_proc_rows+2)[0:*],
+     >                         p(na/num_proc_rows+2)[0:*],
+     >                         q(na/num_proc_rows+2)[0:*],
+     >                         r(na/num_proc_rows+2)[0:*],
+     >                         w(na/num_proc_rows+2)[0:*]
+
+
+      common /urando/          amult, tran
+      double precision         amult, tran
+
+
+
+      integer            l2npcols
+      integer            reduce_exch_proc(num_proc_cols)
+      integer            reduce_send_starts(num_proc_cols)
+      integer            reduce_send_lengths(num_proc_cols)
+      integer            reduce_recv_lengths(num_proc_cols)
+      integer            reduce_rrecv_starts(num_proc_cols)
+c---------------------------------
+c     Coarray Decalarations
+c---------------------------------
+      integer            reduce_recv_starts(num_proc_cols)[0:*]
+
+      integer            i, j, k, it, me, nprocs, root
+
+      double precision   zeta, randlc
+      external           randlc
+      double precision   rnorm
+c---------------------------------
+c     Coarray Decalarations
+c---------------------------------
+      double precision   norm_temp1(2)[0:*], norm_temp2(2)[0:*]
+
+      double precision   t, tmax, mflops
+      double precision   u(1), umax(1)
+      external           timer_read
+      double precision   timer_read
+      character          class
+      logical            verified
+      double precision   zeta_verify_value, epsilon, err
+
+c---------------------------------------------------------------------
+c  Explicit interface for conj_grad, due to coarray args
+c---------------------------------------------------------------------
+      interface
+
+      subroutine conj_grad ( colidx,
+     >                       rowstr,
+     >                       x,
+     >                       z,
+     >                       a,
+     >                       p,
+     >                       q,
+     >                       r,
+     >                       w,
+     >                       rnorm,
+     >                       l2npcols,
+     >                       reduce_exch_proc,
+     >                       reduce_send_starts,
+     >                       reduce_send_lengths,
+     >                       reduce_recv_starts,
+     >                       reduce_recv_lengths,
+     >                       reduce_rrecv_starts )
+
+      common / partit_size  /  naa, nzz,
+     >                         npcols, nprows,
+     >                         proc_col, proc_row,
+     >                         firstrow,
+     >                         lastrow,
+     >                         firstcol,
+     >                         lastcol,
+     >                         exch_proc,
+     >                         exch_recv_length,
+     >                         send_start,
+     >                         send_len
+
+      integer                  naa, nzz,
+     >                         npcols, nprows,
+     >                         proc_col, proc_row,
+     >                         firstrow,
+     >                         lastrow,
+     >                         firstcol,
+     >                         lastcol,
+     >                         exch_proc,
+     >                         exch_recv_length,
+     >                         send_start,
+     >                         send_len
+
+      double precision   x(*),
+     >                   z(*),
+     >                   a(nzz)
+      integer            colidx(nzz), rowstr(naa+1)
+
+      double precision   p(*),
+     >                   q(*)[0:*],
+     >                   r(*)[0:*],
+     >                   w(*)[0:*]        ! used as work temporary
+
+      integer   l2npcols
+      integer   reduce_exch_proc(l2npcols)
+      integer   reduce_send_starts(l2npcols)
+      integer   reduce_send_lengths(l2npcols)
+      integer   reduce_recv_starts(l2npcols)[0:*]
+      integer   reduce_recv_lengths(l2npcols)
+      integer   reduce_rrecv_starts(l2npcols)
+
+      double precision   rnorm
+
+      end subroutine
+
+      end interface
+
+c---------------------------------------------------------------------
+c  The call to the conjugate gradient routine:
+c---------------------------------------------------------------------
+         call conj_grad ( colidx,
+     >                    rowstr,
+     >                    x,
+     >                    z,
+     >                    a,
+     >                    p,
+     >                    q,
+     >                    r,
+     >                    w,
+     >                    rnorm,
+     >                    l2npcols,
+     >                    reduce_exch_proc,
+     >                    reduce_send_starts,
+     >                    reduce_send_lengths,
+     >                    reduce_recv_starts,
+     >                    reduce_recv_lengths,
+     >                    reduce_rrecv_starts ) 
+
+
+      sync all
+
+      end                              ! end main
+
+c---------------------------------------------------------------------
+c---------------------------------------------------------------------
+      subroutine conj_grad ( colidx,
+     >                       rowstr,
+     >                       x,
+     >                       z,
+     >                       a,
+     >                       p,
+     >                       q,
+     >                       r,
+     >                       w,
+     >                       rnorm,
+     >                       l2npcols,
+     >                       reduce_exch_proc,
+     >                       reduce_send_starts,
+     >                       reduce_send_lengths,
+     >                       reduce_recv_starts,
+     >                       reduce_recv_lengths,
+     >                       reduce_rrecv_starts )
+c---------------------------------------------------------------------
+c---------------------------------------------------------------------
+
+c---------------------------------------------------------------------
+c  Floaging point arrays here are named as in NPB1 spec discussion of
+c  CG algorithm
+c---------------------------------------------------------------------
+
+      implicit none
+
+c      include 'cafnpb.h'
+
+      common / partit_size  /  naa, nzz,
+     >                         npcols, nprows,
+     >                         proc_col, proc_row,
+     >                         firstrow,
+     >                         lastrow,
+     >                         firstcol,
+     >                         lastcol,
+     >                         exch_proc,
+     >                         exch_recv_length,
+     >                         send_start,
+     >                         send_len
+      integer                  naa, nzz,
+     >                         npcols, nprows,
+     >                         proc_col, proc_row,
+     >                         firstrow,
+     >                         lastrow,
+     >                         firstcol,
+     >                         lastcol,
+     >                         exch_proc,
+     >                         exch_recv_length,
+     >                         send_start,
+     >                         send_len
+
+
+
+      double precision   x(*),
+     >                   z(*),
+     >                   a(nzz)
+      integer            colidx(nzz), rowstr(naa+1)
+
+      double precision   p(*),
+     >                   q(*)[0:*],
+     >                   r(*)[0:*],
+     >                   w(*)[0:*]        ! used as work temporary
+
+      integer   l2npcols
+      integer   reduce_exch_proc(l2npcols)
+      integer   reduce_send_starts(l2npcols)
+      integer   reduce_send_lengths(l2npcols)
+      integer   reduce_recv_starts(l2npcols)[0:*]
+      integer   reduce_recv_lengths(l2npcols)
+      integer   reduce_rrecv_starts(l2npcols)
+
+      integer   recv_start_idx, recv_end_idx, send_start_idx,
+     >          send_end_idx, recv_length
+
+      integer   i, j, k, ierr
+      integer   cgit, cgitmax
+
+      double precision, save :: d[0:*], rho[0:*]
+      double precision   sum, rho0, alpha, beta, rnorm
+
+      external         timer_read
+      double precision timer_read
+
+      data      cgitmax / 25 /
+
+
+      return
+      end                       ! end of routine conj_grad
+
diff --git a/gcc/testsuite/gfortran.dg/coarray_37.f90 b/gcc/testsuite/gfortran.dg/coarray_37.f90
new file mode 100644 (file)
index 0000000..6f56c32
--- /dev/null
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=single" }
+!
+      program cg
+        implicit none
+        integer reduce_recv_starts(2)[1,0:*]
+        interface
+          subroutine conj_grad (reduce_recv_starts) ! { dg-warning "Interface mismatch in global procedure 'conj_grad' at \\(1\\): Corank mismatch in argument 'reduce_recv_starts' \\(2/1\\)" }
+            integer   reduce_recv_starts(2)[2, 2:*]
+          end subroutine
+        end interface
+        call conj_grad (reduce_recv_starts) ! Corank mismatch is okay
+      end
+
+      subroutine conj_grad (reduce_recv_starts)
+        implicit none
+        integer reduce_recv_starts(2)[2:*]
+      end
diff --git a/gcc/testsuite/gfortran.dg/dependency_45.f90 b/gcc/testsuite/gfortran.dg/dependency_45.f90
new file mode 100644 (file)
index 0000000..8b43f75
--- /dev/null
@@ -0,0 +1,12 @@
+! { dg-do run }
+! { dg-options "-Warray-temporaries" }
+! PR 56867 - substrings were not checked for dependency.
+program main
+  character(len=4) :: a
+  character(len=4) :: c(3)
+  c(1) = 'abcd'
+  c(2) = '1234'
+  c(3) = 'wxyz'
+  c(:)(1:2) = c(2)(2:3)   ! { dg-warning "array temporary" }
+  if (c(3) .ne. '23yz') call abort
+end program main
diff --git a/gcc/testsuite/gfortran.dg/entry_20.f90 b/gcc/testsuite/gfortran.dg/entry_20.f90
new file mode 100644 (file)
index 0000000..1069d1e
--- /dev/null
@@ -0,0 +1,148 @@
+! { dg-do compile }
+!
+! PR fortran/50898
+! A symbol was freed prematurely during resolution,
+! despite remaining reachable
+!
+! Original testcase from <shaojuncycle@gmail.com>
+
+MODULE MODULE_pmat2
+
+IMPLICIT NONE
+
+INTERFACE cad1b;  MODULE PROCEDURE cad1b;          END INTERFACE
+INTERFACE csb1b;  MODULE PROCEDURE csb1b;          END INTERFACE
+INTERFACE copbt;  MODULE PROCEDURE copbt;          END INTERFACE
+INTERFACE conbt;  MODULE PROCEDURE conbt;          END INTERFACE
+INTERFACE copmb;  MODULE PROCEDURE copmb;          END INTERFACE
+INTERFACE conmb;  MODULE PROCEDURE conmb;          END INTERFACE
+INTERFACE copbm;  MODULE PROCEDURE copbm;          END INTERFACE
+INTERFACE conbm;  MODULE PROCEDURE conbm;          END INTERFACE
+INTERFACE mulvb;  MODULE PROCEDURE mulvb;          END INTERFACE
+INTERFACE madvb;  MODULE PROCEDURE madvb;          END INTERFACE
+INTERFACE msbvb;  MODULE PROCEDURE msbvb;          END INTERFACE
+INTERFACE mulxb;  MODULE PROCEDURE mulxb;          END INTERFACE
+INTERFACE madxb;  MODULE PROCEDURE madxb;          END INTERFACE
+INTERFACE msbxb;  MODULE PROCEDURE msbxb;          END INTERFACE
+
+integer, parameter :: i_kind=4
+integer, parameter :: r_kind=4
+real(r_kind), parameter :: zero=0.0
+real(r_kind), parameter :: one=1.0
+real(r_kind), parameter :: two=2.0
+
+CONTAINS
+
+SUBROUTINE cad1b(a,m1,mah1,mah2,mirror2)
+implicit none
+INTEGER(i_kind),  INTENT(IN   ) :: m1,mah1,mah2,mirror2
+REAL(r_kind),     INTENT(INOUT) :: a(0:m1-1,-mah1:mah2)
+RETURN
+ENTRY     csb1b(a,m1,mah1,mah2,mirror2)
+END SUBROUTINE cad1b
+
+SUBROUTINE copbt(a,b,m1,m2,mah1,mah2)
+implicit none
+INTEGER(i_kind),  INTENT(IN   ) :: m1, m2, mah1, mah2
+REAL(r_kind),     INTENT(IN   ) :: a(m1,-mah1:mah2)
+REAL(r_kind),     INTENT(  OUT) :: b(m2,-mah2:mah1)
+RETURN
+ENTRY    conbt(a,b,m1,m2,mah1,mah2)
+END SUBROUTINE copbt
+
+SUBROUTINE copmb(afull,aband,m1,m2,mah1,mah2)
+implicit none
+INTEGER(i_kind),                           INTENT(IN   ) :: m1, m2, mah1, mah2
+REAL(r_kind),     DIMENSION(m1,m2),        INTENT(IN   ) :: afull
+REAL(r_kind),     DIMENSION(m1,-mah1:mah2),INTENT(  OUT) :: aband
+RETURN
+ENTRY      conmb(afull,aband,m1,m2,mah1,mah2)
+END SUBROUTINE copmb
+
+SUBROUTINE copbm(aband,afull,m1,m2,mah1,mah2)
+implicit none
+INTEGER(i_kind),                           INTENT(IN   ) :: m1, m2, mah1, mah2
+REAL(r_kind),     DIMENSION(m1,-mah1:mah2),INTENT(IN   ) :: aband
+REAL(r_kind),     DIMENSION(m1,m2),        INTENT(  OUT) :: afull
+RETURN
+ENTRY      conbm(aband,afull,m1,m2,mah1,mah2)
+END SUBROUTINE copbm
+
+SUBROUTINE mulbb(a,b,c,m1,m2,mah1,mah2,mbh1,mbh2,mch1,mch2)
+implicit none
+INTEGER(i_kind),  INTENT(IN   ) :: m1, m2, mah1, mah2, mbh1, mbh2, mch1, mch2
+REAL(r_kind),     INTENT(IN   ) :: a(m1,-mah1:mah2), b(m2,-mbh1:mbh2)
+REAL(r_kind),     INTENT(INOUT) :: c(m1,-mch1:mch2)
+INTEGER(i_kind)                :: nch1, nch2, j, k, jpk, i1,i2
+c=zero
+ENTRY      madbb(a,b,c,m1,m2,mah1,mah2,mbh1,mbh2,mch1,mch2)
+nch1=mah1+mbh1; nch2=mah2+mbh2
+IF(nch1 /= mch1 .OR. nch2 /= mch2)STOP 'In MULBB, dimensions inconsistent'
+DO j=-mah1,mah2
+   DO k=-mbh1,mbh2; jpk=j+k; i1=MAX(1,1-j); i2=MIN(m1,m2-j)
+      c(i1:i2,jpk)=c(i1:i2,jpk)+a(i1:i2,j)*b(j+i1:j+i2,k)
+   ENDDO
+ENDDO
+END SUBROUTINE mulbb
+
+SUBROUTINE MULVB(v1,a,v2, m1,m2,mah1,mah2)
+implicit none
+INTEGER(i_kind),  INTENT(IN   ) :: m1, m2, mah1, mah2
+REAL(r_kind),     INTENT(IN   ) :: v1(m1), a(m1,-mah1:mah2)
+REAL(r_kind),     INTENT(  OUT) :: v2(m2)
+INTEGER(i_kind)                 :: j, i1,i2
+v2=zero
+ENTRY    madvb(v1,a,v2, m1,m2,mah1,mah2)
+DO j=-mah1,mah2; i1=MAX(1,1-j); i2=MIN(m1,m2-j)
+   v2(j+i1:j+i2)=v2(j+i1:j+i2)+v1(i1:i2)*a(i1:i2,j)
+ENDDO
+RETURN
+ENTRY    msbvb(v1,a,v2, m1,m2,mah1,mah2)
+DO j=-mah1,mah2; i1=MAX(1,1-j); i2=MIN(m1,m2-j)
+   v2(j+i1:j+i2)=v2(j+i1:j+i2)-v1(i1:i2)*a(i1:i2,j)
+ENDDO
+END SUBROUTINE mulvb
+
+SUBROUTINE mulxb(v1,a,v2, m1,m2,mah1,mah2,my)
+implicit none
+INTEGER(i_kind),  INTENT(IN   ) :: m1, m2, mah1, mah2, my
+REAL(r_kind),     INTENT(IN   ) :: v1(m1,my), a(m1,-mah1:mah2)
+REAL(r_kind),     INTENT(  OUT) :: v2(m2,my)
+INTEGER(i_kind)                 :: i,j
+v2=zero
+ENTRY    madxb(v1,a,v2, m1,m2,mah1,mah2,my)
+DO j=-mah1,mah2
+   DO i=MAX(1,1-j),MIN(m1,m2-j); v2(j+i,:)=v2(j+i,:)+v1(i,:)*a(i,j); ENDDO
+ENDDO
+RETURN
+ENTRY    msbxb(v1,a,v2, m1,m2,mah1,mah2,my)
+DO j=-mah1,mah2
+   DO i=MAX(1,1-j),MIN(m1,m2-j); v2(j+i,:)=v2(j+i,:)-v1(i,:)*a(i,j); ENDDO
+ENDDO
+END SUBROUTINE mulxb
+
+SUBROUTINE mulyb(v1,a,v2, m1,m2,mah1,mah2,mx)
+implicit none
+INTEGER(i_kind),  INTENT(IN   ) :: m1, m2, mah1, mah2, mx
+REAL(r_kind),     INTENT(IN   ) :: v1(mx,m1), a(m1,-mah1:mah2)
+REAL(r_kind),     INTENT(  OUT) :: v2(mx,m2)
+INTEGER(i_kind)                 :: i,j
+v2=zero
+ENTRY    madyb(v1,a,v2, m1,m2,mah1,mah2,mx)
+DO j=-mah1,mah2
+    DO i=MAX(1,1-j),MIN(m1,m2-j)
+      v2(:,j+i)=v2(:,j+i)+v1(:,i)*a(i,j)
+    ENDDO
+ENDDO
+RETURN
+ENTRY    msbyb(v1,a,v2, m1,m2,mah1,mah2,mx)
+ DO j=-mah1,mah2
+    DO i=MAX(1,1-j),MIN(m1,m2-j)
+       v2(:,j+i)=v2(:,j+i)-v1(:,i)*a(i,j)
+    ENDDO
+ ENDDO
+RETURN
+END SUBROUTINE mulyb
+
+END MODULE MODULE_pmat2
+
diff --git a/gcc/testsuite/gfortran.dg/finalize_28.f90 b/gcc/testsuite/gfortran.dg/finalize_28.f90
new file mode 100644 (file)
index 0000000..03de5d0
--- /dev/null
@@ -0,0 +1,24 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+!
+! Test the fix for PR64932.
+!
+! Reported by Daniel Shapiro  <shapero@uw.edu>
+!
+module coo_graphs
+  implicit none
+  type :: dynamic_array
+    integer :: length, capacity, min_capacity
+    integer, allocatable :: array(:)
+  end type
+  type :: coo_graph
+    type(dynamic_array) :: edges(2)
+    integer, private :: ne
+  end type coo_graph
+contains
+  subroutine coo_dump_edges(g, edges)
+    class(coo_graph), intent(in) :: g
+    integer, intent(out) :: edges(:,:)
+  end subroutine coo_dump_edges
+end module coo_graphs
+! { dg-final { scan-tree-dump-times "__builtin_free" 3 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/internal_pack_15.f90 b/gcc/testsuite/gfortran.dg/internal_pack_15.f90
new file mode 100644 (file)
index 0000000..13e3304
--- /dev/null
@@ -0,0 +1,77 @@
+! { dg-do run }
+! { dg-options "-Warray-temporaries" }
+! PR 57023
+! This used to cause wrong packing because a(1:n,1:n) was
+! assumed to be a full array.
+module mymod
+  implicit none
+contains
+  subroutine foo1(a,n)
+    integer, dimension(n,n), intent(inout) :: a
+    integer :: n
+    n = n - 1
+    call baz(a(1:n,1:n),n)  ! { dg-warning "array temporary" }
+  end subroutine foo1
+
+  subroutine foo2(a,n)
+    integer, dimension(n,n), intent(inout) :: a
+    integer :: n
+    call decrement(n)
+    call baz(a(1:n,1:n),n)  ! { dg-warning "array temporary" }
+  end subroutine foo2
+
+  subroutine foo3(a,n)
+    integer, dimension(n,n), intent(inout) :: a
+    integer :: n, m
+    m = n - 1
+    call baz(a(1:m,1:m),m)  ! { dg-warning "array temporary" }
+  end subroutine foo3
+
+  subroutine foo4(a,n)
+    integer, dimension(n,n), intent(inout) :: a
+    integer, intent(in) :: n
+    a(1:n,1:n) = 1
+  end subroutine foo4
+
+  subroutine baz(a,n)
+    integer, dimension(n,n), intent(inout) :: a
+    integer, intent(in) :: n
+    a = 1
+  end subroutine baz
+
+  subroutine decrement(n)
+    integer, intent(inout) :: n
+    n = n - 1
+  end subroutine decrement
+
+end module mymod
+
+program main
+  use mymod
+  implicit none
+  integer, dimension(5,5) :: a, b
+  integer :: n
+
+  b = 0
+  b(1:4,1:4) = 1
+
+  n = 5
+  a = 0
+  call foo1(a,n)
+  if (any(a /= b)) call abort
+
+  n = 5
+  a = 0
+  call foo2(a,n)
+  if (any(a /= b)) call abort
+
+  n = 5
+  a = 0
+  call foo3(a,n)
+  if (any(a /= b)) call abort
+
+  n = 5
+  a = 0
+  call foo4(a,n)
+  if (any(a /= 1)) call abort
+end program main
diff --git a/gcc/testsuite/gfortran.dg/namelist_86.f90 b/gcc/testsuite/gfortran.dg/namelist_86.f90
new file mode 100644 (file)
index 0000000..88d90d2
--- /dev/null
@@ -0,0 +1,49 @@
+! { dg-do run }
+! { dg-options "-std=f2003 -fall-intrinsics" }
+! PR65596 Namelist reads too far.
+integer ,parameter :: CL=80
+integer ,parameter :: AL=4
+
+character(CL) :: mode
+character(CL) :: cats(AL)
+character(CL) :: dogs(AL)
+character(CL) :: rslt(AL)
+integer       :: ierr, k
+
+namelist / theList / cats, dogs, mode
+
+open(27,status="scratch")
+
+write(27,'(A)')  "&theList"
+write(27,'(A)')  " mode      = 'on'"
+write(27,'(A)')  " dogs      = 'Rover',"
+write(27,'(A)')  "             'Spot'"
+write(27,'(A)')  " cats      = 'Fluffy',"
+write(27,'(A)')  "             'Hairball'"
+write(27,'(A)') "/"
+rewind(27)
+
+mode    = 'off'
+cats(:) = '________'
+dogs(:) = '________'
+
+read (27, nml=theList, iostat=ierr)
+
+if (ierr .ne. 0) call abort
+
+rslt = ['Rover   ','Spot    ','________','________']
+if (any(dogs.ne.rslt)) call abort
+
+rslt = ['Fluffy  ','Hairball','________','________']
+if (any(cats.ne.rslt)) call abort
+
+close(27)
+
+contains
+
+subroutine abort()
+  close(27)
+  stop 500
+end subroutine abort
+
+end
diff --git a/gcc/testsuite/gfortran.dg/pointer_remapping_9.f90 b/gcc/testsuite/gfortran.dg/pointer_remapping_9.f90
new file mode 100644 (file)
index 0000000..7c1e232
--- /dev/null
@@ -0,0 +1,31 @@
+! { dg-do run }
+!
+! PR fortran/61138
+! Wrong code with pointer-bounds remapping
+!
+! Contributed by Tobias Burnus <burnus@net-b.de>
+
+implicit none
+integer, target :: tgt(10)
+integer, target, allocatable :: tgt2(:)
+integer, pointer :: ptr(:)
+
+tgt = [1,2,3,4,5,6,7,8,9,10]
+tgt2 = [1,2,3,4,5,6,7,8,9,10]
+
+
+ptr(-5:) => tgt(5:)  ! Okay
+
+if (size(ptr) /= 6 .or. lbound(ptr,1) /= -5) call abort()
+if (any (ptr /= [5,6,7,8,9,10])) call abort()
+
+
+ptr(-5:) => tgt2(5:)  ! wrongly associates the whole array
+
+print '(*(i4))', size(ptr), lbound(ptr)
+print '(*(i4))', ptr
+
+if (size(ptr) /= 6 .or. lbound(ptr,1) /= -5) call abort()
+if (any (ptr /= [5,6,7,8,9,10])) call abort()
+end
+
diff --git a/gcc/testsuite/gfortran.dg/pr64528.f90 b/gcc/testsuite/gfortran.dg/pr64528.f90
new file mode 100644 (file)
index 0000000..f6cca4f
--- /dev/null
@@ -0,0 +1,20 @@
+! PR fortran/64528
+! { dg-do compile }
+! { dg-options "-O -fno-tree-dce -fno-tree-ccp" }
+
+program pr64528
+  interface
+     subroutine foo(x)
+       integer, value :: x
+     end subroutine foo
+  end interface
+  integer :: x
+  x = 10
+  call foo(x)
+  if(x .ne. 10) then
+  endif
+end program pr64528
+subroutine foo(x)
+  integer, value :: x
+  x = 11
+end subroutine foo
diff --git a/gcc/testsuite/gfortran.dg/pr64530.f90 b/gcc/testsuite/gfortran.dg/pr64530.f90
new file mode 100644 (file)
index 0000000..9805f62
--- /dev/null
@@ -0,0 +1,38 @@
+! { dg-do run }
+
+program bug
+  ! Bug triggered with at least three elements
+  integer, parameter :: asize = 3
+
+  double precision,save :: ave(asize)
+  double precision,save :: old(asize)
+  double precision,save :: tmp(asize)
+
+  ave(:) = 10.d0
+  old(:) = 3.d0
+  tmp(:) = 0.d0
+
+  call buggy(2.d0,asize,ave,old,tmp)
+  if (any (tmp(:) .ne. 3.5)) call abort
+end
+
+subroutine buggy(scale_factor, asize, ave, old, tmp)
+
+  implicit none
+  ! Args
+  double precision scale_factor
+  integer asize
+  double precision ave(asize)
+  double precision old(asize)
+  double precision tmp(asize)
+
+  ! Local 
+  integer i
+
+  do i = 1, asize
+    tmp(i) = ave(i) - old(i)
+    old(i) = ave(i)
+    tmp(i) = tmp(i) / scale_factor
+  end do
+
+end subroutine buggy
diff --git a/gcc/testsuite/gfortran.dg/pr65450.f90 b/gcc/testsuite/gfortran.dg/pr65450.f90
new file mode 100644 (file)
index 0000000..700fc64
--- /dev/null
@@ -0,0 +1,35 @@
+! PR tree-optimization/65450
+! { dg-do run }
+! { dg-additional-options "-mtune=amdfam10" { target x86_64-*-* i?86-*-* } }
+
+program pr65450
+  integer :: n, m, o, i, k
+  double precision :: u(500,60,3), h(500,60,3)
+  double precision :: v(500,60)
+  u = 0
+  h = 0
+  o = 1
+  m = 2
+  n = 3
+  do k = 1, 50
+    v = foo (u(:,:,m))
+    u(2:499,1:60,n) = u(2:499,1:60,o)+16.d0
+    h(1:500,2:59,n) = h(1:500,2:59,o)-4.d0*v(1:500,2:59)-32.0d0
+    i = o
+    o = m
+    m = n
+    n = i
+  end do
+  if (abs (v(17, 23) + h(17, 23, 2) + 768.0d0) > 0.5d0) call abort
+contains
+  function foo(a)
+    double precision :: a(:,:)
+    double precision :: foo(size(a,dim=1),size(a,dim=2))
+    integer :: i, j
+    i = size(a,dim=1)
+    j = size(a,dim=2)
+    foo(2:i-1,1:j) = a(3:i,1:j)-a(1:i-2,1:j)
+    foo(1,1:j) = 2*(a(2,1:j)-a(1,1:j))
+    foo(i,1:j) = 2*(a(i,1:j)-a(i-1,1:j))
+  end function foo
+end program pr65450
diff --git a/gcc/testsuite/gfortran.dg/pr65504.f90 b/gcc/testsuite/gfortran.dg/pr65504.f90
new file mode 100644 (file)
index 0000000..3860422
--- /dev/null
@@ -0,0 +1,28 @@
+! PR target/65504
+! { dg-do run }
+
+program pr65504
+  implicit none
+  type :: T
+    character (len=256) :: a
+    character (len=256) :: b
+  end type T
+  type (T) :: c
+  type (T) :: d
+  c = foo ("test")
+  d = foo ("test")
+  if (trim(c%b) .ne. "foo") call abort
+  contains
+  type (T) function foo (x) result (v)
+    character(len=*), intent(in) :: x
+    select case (x)
+    case ("test")
+      v%b = 'foo'
+    case ("bazx")
+      v%b = 'barx'
+    case default
+      print *, "unknown"
+      stop
+    end select
+  end function foo
+end program pr65504
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_44.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_44.f90
new file mode 100644 (file)
index 0000000..15795c2
--- /dev/null
@@ -0,0 +1,71 @@
+! { dg-do compile }
+! Test the fix for PR59198, where the field for the component 'term' in
+! the derived type 'decay_gen_t' was not being built.
+!
+! Contributed by Juergen Reuter  <juergen.reuter@desy.de>
+!
+module decays
+  abstract interface
+     function obs_unary_int ()
+     end function obs_unary_int
+  end interface
+
+  type, abstract :: any_config_t
+   contains
+     procedure (any_config_final), deferred :: final
+  end type any_config_t
+
+  type :: decay_term_t
+     type(unstable_t), dimension(:), pointer :: unstable_product => null ()
+  end type decay_term_t
+
+  type, abstract :: decay_gen_t
+     type(decay_term_t), dimension(:), allocatable :: term
+     procedure(obs_unary_int),   nopass, pointer :: obs1_int  => null ()
+  end type decay_gen_t
+
+  type, extends (decay_gen_t) :: decay_root_t
+   contains
+     procedure :: final => decay_root_final
+  end type decay_root_t
+
+  type, abstract :: rng_t
+  end type rng_t
+
+  type, extends (decay_gen_t) :: decay_t
+     class(rng_t), allocatable :: rng
+   contains
+     procedure :: final => decay_final
+  end type decay_t
+
+  type, extends (any_config_t) :: unstable_config_t
+   contains
+     procedure :: final => unstable_config_final
+  end type unstable_config_t
+
+  type :: unstable_t
+     type(unstable_config_t), pointer :: config => null ()
+     type(decay_t), dimension(:), allocatable :: decay
+  end type unstable_t
+
+  interface
+     subroutine any_config_final (object)
+       import
+       class(any_config_t), intent(inout) :: object
+     end subroutine any_config_final
+  end interface
+
+contains
+  subroutine decay_root_final (object)
+    class(decay_root_t), intent(inout) :: object
+  end subroutine decay_root_final
+
+  recursive subroutine decay_final (object)
+    class(decay_t), intent(inout) :: object
+  end subroutine decay_final
+
+  recursive subroutine unstable_config_final (object)
+    class(unstable_config_t), intent(inout) :: object
+  end subroutine unstable_config_final
+
+end module decays
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_45.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_45.f90
new file mode 100644 (file)
index 0000000..3180345
--- /dev/null
@@ -0,0 +1,49 @@
+! { dg-do run }
+! Test the fix for PR59198, where the field for the component 'term' in
+! the derived type 'decay_gen_t' was not being built.
+!
+! Contributed by Paul Thomas and based on the original testcase by
+! Juergen Reuter  <juergen.reuter@desy.de>
+!
+module decays
+
+  implicit none
+
+  interface
+    real elemental function iface (arg)
+      real, intent(in) :: arg
+    end function
+  end interface
+
+  type :: decay_term_t
+     type(decay_t), pointer :: unstable_product
+     integer :: i
+  end type
+
+  type :: decay_gen_t
+     procedure(iface), nopass, pointer :: obs1_int
+     type(decay_term_t), allocatable :: term
+  end type
+
+  type :: rng_t
+    integer :: i
+  end type
+
+  type, extends (decay_gen_t) :: decay_t
+     class(rng_t), allocatable :: rng
+  end type
+
+  class(decay_t), allocatable :: object
+
+end
+
+  use decays
+  type(decay_t), pointer :: template
+  real, parameter :: arg = 1.570796327
+  allocate (template)
+  allocate (template%rng)
+  template%obs1_int => cos
+  if (abs (template%obs1_int (arg) - cos (arg)) .gt. 1e-4) call abort
+  allocate (object, source = template)
+  if (abs (object%obs1_int (arg) - cos (arg)) .gt. 1e-4) call abort
+end
diff --git a/gcc/testsuite/gfortran.dg/typebound_call_26.f90 b/gcc/testsuite/gfortran.dg/typebound_call_26.f90
new file mode 100644 (file)
index 0000000..dffbf93
--- /dev/null
@@ -0,0 +1,30 @@
+! { dg-do compile }
+!
+! PR 64244: [4.8/4.9/5 Regression] ICE at class.c:236 when using non_overridable
+!
+! Contributed by Ondřej Čertík <ondrej.certik@gmail.com>
+
+module m
+  implicit none
+
+  type :: A
+  contains
+    generic :: f => g
+    procedure, non_overridable :: g
+  end type
+
+contains
+
+  subroutine g(this)
+    class(A), intent(in) :: this
+  end subroutine
+
+end module
+
+
+program test_non_overridable
+  use m, only: A
+  implicit none
+  class(A), allocatable :: h
+  call h%f()
+end
diff --git a/gcc/testsuite/gfortran.dg/typebound_operator_20.f90 b/gcc/testsuite/gfortran.dg/typebound_operator_20.f90
new file mode 100644 (file)
index 0000000..26c49a1
--- /dev/null
@@ -0,0 +1,53 @@
+! { dg-do run }
+!
+! PR 63733: [4.8/4.9/5 Regression] [OOP] wrong resolution for OPERATOR generics
+!
+! Original test case from Alberto F. Martín Huertas <amartin@cimne.upc.edu>
+! Slightly modified by Salvatore Filippone <sfilippone@uniroma2.it>
+! Further modified by Janus Weil <janus@gcc.gnu.org>
+
+module overwrite
+  type parent
+   contains
+     procedure :: sum => sum_parent
+     generic   :: operator(+) => sum
+  end type
+
+  type, extends(parent) ::  child
+  contains
+    procedure :: sum => sum_child
+  end type
+
+contains
+
+  integer function sum_parent(op1,op2)
+    implicit none
+    class(parent), intent(in) :: op1, op2
+    sum_parent = 0
+  end function
+
+  integer function sum_child(op1,op2)
+    implicit none
+    class(child) , intent(in) :: op1
+    class(parent), intent(in) :: op2
+    sum_child = 1
+  end function
+
+end module
+
+program drive
+  use overwrite
+  implicit none
+
+  type(parent) :: m1, m2
+  class(parent), pointer :: mres
+  type(child)  :: h1, h2
+  class(parent), pointer :: hres
+
+  if (m1 + m2 /= 0) call abort()
+  if (h1 + m2 /= 1) call abort()
+  if (h1%sum(h2) /= 1) call abort()
+
+end
+
+! { dg-final { cleanup-modules "overwrite" } }
index 8e80386..73d5f25 100644 (file)
@@ -1,80 +1,80 @@
-! { dg-do compile }\r
-!\r
-! Test the most important constraints unlimited polymorphic entities\r
-!\r
-! Contributed by Paul Thomas  <pault@gcc.gnu.org>\r
-!            and Tobias Burnus <burnus@gcc.gnu.org>\r
-!\r
-  CHARACTER(:), allocatable, target :: chr ! { dg-error "TODO: Deferred character length variable" }\r
-! F2008: C5100\r
-  integer :: i(2)\r
-  logical :: flag\r
-  class(*), pointer :: u1, u2(:) ! { dg-error "cannot appear in COMMON" }\r
-  common u1\r
-  u1 => chr\r
-! F2003: C625\r
-  allocate (u1) ! { dg-error "requires either a type-spec or SOURCE tag" }\r
-  allocate (real :: u1)\r
-  Allocate (u1, source = 1.0)\r
-\r
-! F2008: C4106\r
-  u2 = [u1] ! { dg-error "shall not be unlimited polymorphic" }\r
-\r
-  i = u2 ! { dg-error "Can\\'t convert CLASS\\(\\*\\)" }\r
-\r
-! Repeats same_type_as_1.f03 for unlimited polymorphic u2\r
-  flag = same_type_as (i, u2) ! { dg-error "cannot be of type INTEGER" }\r
-  flag = extends_type_of (i, u2) ! { dg-error "cannot be of type INTEGER" }\r
-\r
-contains\r
-\r
-! C717 (R735) If data-target is unlimited polymorphic,\r
-! data-pointer-object shall be unlimited polymorphic, of a sequence\r
-! derived type, or of a type with the BIND attribute.\r
-!\r
-  subroutine bar\r
-\r
-    type sq\r
-      sequence\r
-      integer :: i\r
-    end type sq\r
-\r
-    type(sq), target :: x\r
-    class(*), pointer :: y\r
-    integer, pointer :: tgt\r
-\r
-    x%i = 42\r
-    y => x\r
-    call foo (y)\r
-\r
-    y => tgt ! This is OK, of course.\r
-    tgt => y ! { dg-error "must be unlimited polymorphic" }\r
-\r
-    select type (y) ! This is the correct way to accomplish the previous\r
-      type is (integer)\r
-        tgt => y\r
-    end select\r
-\r
-  end subroutine bar\r
-\r
-\r
-  subroutine foo(tgt)\r
-    class(*), pointer, intent(in) :: tgt\r
-    type t\r
-      sequence\r
-      integer :: k\r
-    end type t\r
-\r
-    type(t), pointer :: ptr\r
-\r
-    ptr => tgt ! C717 allows this.\r
-\r
-    select type (tgt)\r
-! F03:C815 or F08:C839\r
-      type is (t) ! { dg-error "shall not specify a sequence derived type" }\r
-        ptr => tgt ! { dg-error "Expected TYPE IS" }\r
-    end select\r
-\r
-    print *, ptr%k\r
-  end subroutine foo\r
-END\r
+! { dg-do compile }
+!
+! Test the most important constraints unlimited polymorphic entities
+!
+! Contributed by Paul Thomas  <pault@gcc.gnu.org>
+!            and Tobias Burnus <burnus@gcc.gnu.org>
+!
+  CHARACTER(:), allocatable, target :: chr
+! F2008: C5100
+  integer :: i(2)
+  logical :: flag
+  class(*), pointer :: u1, u2(:) ! { dg-error "cannot appear in COMMON" }
+  common u1
+  u1 => chr
+! F2003: C625
+  allocate (u1) ! { dg-error "requires either a type-spec or SOURCE tag" }
+  allocate (real :: u1)
+  Allocate (u1, source = 1.0)
+
+! F2008: C4106
+  u2 = [u1] ! { dg-error "shall not be unlimited polymorphic" }
+
+  i = u2 ! { dg-error "Can\\'t convert CLASS\\(\\*\\)" }
+
+! Repeats same_type_as_1.f03 for unlimited polymorphic u2
+  flag = same_type_as (i, u2) ! { dg-error "cannot be of type INTEGER" }
+  flag = extends_type_of (i, u2) ! { dg-error "cannot be of type INTEGER" }
+
+contains
+
+! C717 (R735) If data-target is unlimited polymorphic,
+! data-pointer-object shall be unlimited polymorphic, of a sequence
+! derived type, or of a type with the BIND attribute.
+!
+  subroutine bar
+
+    type sq
+      sequence
+      integer :: i
+    end type sq
+
+    type(sq), target :: x
+    class(*), pointer :: y
+    integer, pointer :: tgt
+
+    x%i = 42
+    y => x
+    call foo (y)
+
+    y => tgt ! This is OK, of course.
+    tgt => y ! { dg-error "must be unlimited polymorphic" }
+
+    select type (y) ! This is the correct way to accomplish the previous
+      type is (integer)
+        tgt => y
+    end select
+
+  end subroutine bar
+
+
+  subroutine foo(tgt)
+    class(*), pointer, intent(in) :: tgt
+    type t
+      sequence
+      integer :: k
+    end type t
+
+    type(t), pointer :: ptr
+
+    ptr => tgt ! C717 allows this.
+
+    select type (tgt)
+! F03:C815 or F08:C839
+      type is (t) ! { dg-error "shall not specify a sequence derived type" }
+        ptr => tgt ! { dg-error "Expected TYPE IS" }
+    end select
+
+    print *, ptr%k
+  end subroutine foo
+END
diff --git a/gcc/testsuite/gfortran.dg/unlimited_polymorphic_20.f03 b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_20.f03
new file mode 100644 (file)
index 0000000..c6c6d29
--- /dev/null
@@ -0,0 +1,104 @@
+! { dg-do run }
+!
+! Testing fix for PR fortran/60255
+!
+! Author: Andre Vehreschild <vehre@gmx.de>
+!
+MODULE m
+
+contains
+  subroutine bar (arg, res)
+    class(*) :: arg
+    character(100) :: res
+    select type (w => arg)
+      type is (character(*))
+        write (res, '(I2)') len(w)
+    end select
+  end subroutine
+
+END MODULE
+
+program test
+    use m;
+    implicit none
+    character(LEN=:), allocatable, target :: S
+    character(LEN=100) :: res
+    class(*), pointer :: ucp
+    call sub1 ("long test string", 16)
+    call sub2 ()
+    S = "test"
+    ucp => S
+    call sub3 (ucp)
+    call sub4 (S, 4)
+    call sub4 ("This is a longer string.", 24)
+    call bar (S, res)
+    if (trim (res) .NE. " 4") call abort ()
+    call bar(ucp, res)
+    if (trim (res) .NE. " 4") call abort ()
+
+contains
+
+    subroutine sub1(dcl, ilen)
+        character(len=*), target :: dcl
+        integer(4) :: ilen
+        character(len=:), allocatable :: hlp
+        class(*), pointer :: ucp
+
+        ucp => dcl
+
+        select type (ucp)
+        type is (character(len=*))
+            if (len(dcl) .NE. ilen) call abort ()
+            if (len(ucp) .NE. ilen) call abort ()
+            hlp = ucp
+            if (len(hlp) .NE. ilen) call abort ()
+        class default
+            call abort()
+        end select
+    end subroutine
+
+    subroutine sub2
+        character(len=:), allocatable, target :: dcl
+        class(*), pointer :: ucp
+
+        dcl = "ttt"
+        ucp => dcl
+
+        select type (ucp)
+        type is (character(len=*))
+            if (len(ucp) .ne. 3) call abort ()
+        class default
+            call abort()
+        end select
+    end subroutine
+
+    subroutine sub3(ucp)
+        character(len=:), allocatable :: hlp
+        class(*), pointer :: ucp
+
+        select type (ucp)
+        type is (character(len=*))
+            if (len(ucp) .ne. 4) call abort ()
+            hlp = ucp
+            if (len(hlp) .ne. 4) call abort ()
+        class default
+            call abort()
+        end select
+    end subroutine
+
+    subroutine sub4(ucp, ilen)
+        character(len=:), allocatable :: hlp
+        integer(4) :: ilen
+        class(*) :: ucp
+
+        select type (ucp)
+        type is (character(len=*))
+            if (len(ucp) .ne. ilen) call abort ()
+            hlp = ucp
+            if (len(hlp) .ne. ilen) call abort ()
+        class default
+            call abort()
+        end select
+    end subroutine
+end program
+
diff --git a/gcc/testsuite/gfortran.dg/unlimited_polymorphic_23.f90 b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_23.f90
new file mode 100644 (file)
index 0000000..27eff31
--- /dev/null
@@ -0,0 +1,35 @@
+! {dg-do run }
+!
+! Test the fix for PR65024, in which the structure for the 'info'
+! component of type 'T' was not being converted into TREE_SSA and
+! so caused an ICE in trans-expr.c:gfc_conv_component_ref.
+!
+! Reported by  <matt@gneilson.plus.com>
+!
+MODULE X
+  TYPE T
+    CLASS(*), pointer :: info
+  END TYPE
+END MODULE
+
+PROGRAM P
+  call bug
+CONTAINS
+  SUBROUTINE BUG
+    USE X
+    CLASS(T), pointer :: e
+    integer, target :: i = 42
+    allocate(e)
+    e%info => NULL ()      ! used to ICE
+    if (.not.associated(e%info)) e%info => i      ! used to ICE
+    select type (z => e%info)
+      type is (integer)
+        if (z .ne.i) call abort
+    end select
+  END SUBROUTINE
+
+  SUBROUTINE NEXT
+    USE X
+    CLASS (T), pointer :: e
+  END SUBROUTINE
+END
diff --git a/gcc/testsuite/gfortran.dg/use_rename_8.f90 b/gcc/testsuite/gfortran.dg/use_rename_8.f90
new file mode 100644 (file)
index 0000000..ad3ab39
--- /dev/null
@@ -0,0 +1,50 @@
+! { dg-do compile }
+!
+! PR fortran/63744
+! duplicate use rename used to be rejected when the target name
+! was that of the current program unit 
+!
+! Original testcase from Roger Ferrer Ibanez <roger.ferrer@bsc.es>
+
+MODULE MOO
+    INTEGER :: A, B, C, D, E, F, G, H, I
+END MODULE MOO
+
+SUBROUTINE S
+    USE MOO, ONLY: X => A, X => A
+END SUBROUTINE S
+
+SUBROUTINE T
+    USE MOO, ONLY: X => B
+    USE MOO, ONLY: X => B
+END SUBROUTINE T
+
+SUBROUTINE C
+    USE MOO, ONLY: C  ! { dg-error "is also the name of the current program unit" }
+END SUBROUTINE C
+
+SUBROUTINE D
+    USE MOO, ONLY: X => D
+END SUBROUTINE D
+
+SUBROUTINE E
+    USE MOO, ONLY: X => E, X => E
+END SUBROUTINE E
+
+SUBROUTINE F
+    USE MOO, ONLY: X => F
+    USE MOO, ONLY: X => F
+END SUBROUTINE F
+
+SUBROUTINE X
+    USE MOO, ONLY: X => G ! { dg-error "is also the name of the current program unit" }
+END SUBROUTINE X
+
+SUBROUTINE Y
+    USE MOO, ONLY: Y => H ! { dg-error "is also the name of the current program unit" }
+END SUBROUTINE Y
+
+SUBROUTINE Z
+    USE MOO, ONLY: Z => I, Z => I ! { dg-error "is also the name of the current program unit" }
+END SUBROUTINE Z
+
diff --git a/gcc/testsuite/gfortran.dg/used_types_27.f90 b/gcc/testsuite/gfortran.dg/used_types_27.f90
new file mode 100644 (file)
index 0000000..4797f85
--- /dev/null
@@ -0,0 +1,18 @@
+! { dg-do compile }
+!
+! PR fortran/56674
+! PR fortran/58813
+! PR fortran/59016
+! PR fortran/59024
+! The generic name 'atomic_kind_types' was keeping pointers to freed
+! symbols, leading to random error-recovery ICEs.
+!
+! Original test case from Joost VandeVondele <Joost.VandeVondele@mat.ethz.ch>.
+
+MODULE atomic_kind_types
+  PUBLIC :: atomic_kind_type
+CONTAINS
+  INTEGER FUNCTION is_hydrogen(atomic_kind)
+    TYPE(atomic_kind_type), pointer :: atomic_kind ! { dg-error "used before it is defined" }
+  END FUNCTION
+END MODULE
index 0f45a70..b4358c8 100644 (file)
@@ -15,8 +15,8 @@ END
 ! support unaligned loads).
 
 ! { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail { vect_no_align || { ! vector_alignment_reachable } } } } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { vect_no_align && { ! vector_alignment_reachable } } } } }
-! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align } } } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" {target { vect_no_align || { { ! vector_alignment_reachable  } && { ! vect_hw_misalign } } } } } } 
+! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || { ! vector_alignment_reachable } } } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { { vect_no_align && { ! vect_hw_misalign } } && { ! vector_alignment_reachable } } } } }
+! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" {target { { vect_no_align && { ! vect_hw_misalign } } || { { ! vector_alignment_reachable  } && { ! vect_hw_misalign } } } } } }
 ! { dg-final { cleanup-tree-dump "vect" } }
index 5fc4fbf..d70c6b4 100644 (file)
@@ -6,10 +6,10 @@ DIMENSION X(N), Y(N)
 Y = Y + A * X
 END
 
-! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target vect_no_align } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } }
 ! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vect_no_align} && { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } }
 ! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target { {! vect_no_align} && { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable}} } } }
-! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { { vect_no_align } || { ! vector_alignment_reachable} } } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || {! vector_alignment_reachable}} } } }
+! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || { ! vector_alignment_reachable} } } } }
 
 ! { dg-final { cleanup-tree-dump "vect" } }
index 592282f..0d29852 100644 (file)
@@ -10,8 +10,8 @@ Y = Y + A * X
 END
 
 ! { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } 
-! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align } || {! vector_alignment_reachable} } } } }
-! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { { vect_no_align } || {! vector_alignment_reachable} } } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || {! vector_alignment_reachable} } } } }
+! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || {! vector_alignment_reachable} } } } }
 ! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } }
 ! { dg-final { scan-tree-dump-times "accesses have the same alignment." 1 "vect" } }
 ! { dg-final { cleanup-tree-dump "vect" } }
index 72776a6..77ef77b 100644 (file)
@@ -36,8 +36,8 @@
         end
 
 ! { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
-! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align } } } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { vect_no_align } } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || {! vector_alignment_reachable} } } } }
+! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } }
 ! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } }
 ! { dg-final { cleanup-tree-dump "vect" } }
diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr66251.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr66251.f90
new file mode 100644 (file)
index 0000000..f5b04bc
--- /dev/null
@@ -0,0 +1,7 @@
+SUBROUTINE dbcsr_data_convert (n)
+  COMPLEX(KIND=4), DIMENSION(:), POINTER :: s_data_c
+  COMPLEX(KIND=8), DIMENSION(:), POINTER :: t_data_z
+  t_data_z(1:n) = CMPLX(s_data_c(1:n), KIND=8)
+  CALL foo()
+END SUBROUTINE dbcsr_data_convert
+
diff --git a/gcc/testsuite/gnat.dg/loop_optimization18.adb b/gcc/testsuite/gnat.dg/loop_optimization18.adb
new file mode 100644 (file)
index 0000000..eb4eeca
--- /dev/null
@@ -0,0 +1,16 @@
+-- { dg-do compile }
+-- { dg-options "-O3" }
+
+package body Loop_Optimization18 is
+
+   procedure Proc (Message : Byte_Array_Type) is
+
+      R : Rec (Conv (Message));
+
+   begin
+      for Division in 1 .. R.UB loop
+         R.L (Division) := 0;
+      end loop;
+  end;
+
+end Loop_Optimization18;
diff --git a/gcc/testsuite/gnat.dg/loop_optimization18.ads b/gcc/testsuite/gnat.dg/loop_optimization18.ads
new file mode 100644 (file)
index 0000000..c9f3e2a
--- /dev/null
@@ -0,0 +1,7 @@
+with Loop_Optimization18_Pkg; use Loop_Optimization18_Pkg;
+
+package Loop_Optimization18 is
+
+   procedure Proc (Message : Byte_Array_Type);
+
+end Loop_Optimization18;
diff --git a/gcc/testsuite/gnat.dg/loop_optimization18_pkg.ads b/gcc/testsuite/gnat.dg/loop_optimization18_pkg.ads
new file mode 100644 (file)
index 0000000..9fb3311
--- /dev/null
@@ -0,0 +1,15 @@
+with Unchecked_Conversion;
+
+package Loop_Optimization18_Pkg is
+
+   type Arr is array (Integer range <>) of Natural;
+
+   type Rec (UB : Integer) is record
+      L : Arr (1 .. UB);
+   end record;
+
+   type Byte_Array_Type is new String (1..4);
+
+   function Conv is new Unchecked_Conversion (Byte_Array_Type, Integer);
+
+end Loop_Optimization18_Pkg;
diff --git a/gcc/testsuite/gnat.dg/opt45.adb b/gcc/testsuite/gnat.dg/opt45.adb
new file mode 100644 (file)
index 0000000..f75e46e
--- /dev/null
@@ -0,0 +1,38 @@
+-- { dg-do compile }\r
+-- { dg-options "-O3" }\r
+\r
+procedure Opt45 is\r
+\r
+  type Index_T is mod 2 ** 32;\r
+  for Index_T'Size use 32;\r
+  for Index_T'Alignment use 1;\r
+\r
+  type Array_T is array (Index_T range <>) of Natural;\r
+  type Array_Ptr_T is access all Array_T;\r
+\r
+  My_Array_1 : aliased Array_T := (1, 2);\r
+  My_Array_2 : aliased Array_T := (3, 4);\r
+\r
+  Array_Ptr : Array_Ptr_T := null;\r
+  Index : Index_T := Index_T'First;\r
+\r
+  My_Value : Natural := Natural'First;\r
+\r
+  procedure Proc (Selection : Positive) is\r
+  begin\r
+    if Selection = 1 then\r
+      Array_Ptr := My_Array_1'Access;\r
+      Index := My_Array_1'First;\r
+    else\r
+      Array_Ptr := My_Array_2'Access;\r
+      Index := My_Array_2'First;\r
+    end if;\r
+\r
+    if My_Value = Natural'First then\r
+      My_Value := Array_Ptr.all (Index);\r
+    end if;\r
+  end;\r
+\r
+begin\r
+  Proc (2);\r
+end;\r
diff --git a/gcc/testsuite/gnat.dg/opt47.adb b/gcc/testsuite/gnat.dg/opt47.adb
new file mode 100644 (file)
index 0000000..cfe44eb
--- /dev/null
@@ -0,0 +1,31 @@
+-- { dg-do run { target i?86-*-* x86_64-*-* alpha*-*-* ia64-*-* } }
+-- { dg-options "-O2" }
+
+with Ada.Characters.Handling;   use Ada.Characters.Handling;
+with Interfaces;                use Interfaces;
+with Ada.Unchecked_Conversion;
+
+procedure Opt47 is
+
+   subtype String4 is String (1 .. 4);
+   function To_String4 is new Ada.Unchecked_Conversion (Unsigned_32, String4);
+   type Arr is array (Integer range <>) of Unsigned_32;
+   Leaf : Arr (1 .. 4) := (1349478766, 1948272498, 1702436946, 1702061409);
+   Value : Unsigned_32;
+   Result : String (1 .. 32);
+   Last : Integer := 0;
+
+begin
+   for I in 1 .. 4 loop
+      Value := Leaf (I);
+      for J in reverse String4'Range loop
+         if Is_Graphic (To_String4 (Value)(J)) then
+            Last := Last + 1;
+            Result (Last) := To_String4 (Value)(J);
+         end if;
+      end loop;
+   end loop;
+   if Result (1) /= 'P' then
+      raise Program_Error;
+   end if;
+end;
index eb63d59..1a02c19 100644 (file)
@@ -4,6 +4,7 @@
 with Ada.Unchecked_Conversion;
 
 procedure Unchecked_Convert1 is
+
   type Byte is mod 2**8;
 
   type Stream is array (Natural range <>) of Byte;
@@ -24,9 +25,10 @@ procedure Unchecked_Convert1 is
     return Do_Sum (To_Chunk (S(S'First ..  S'First + Rec'Size / 8 - 1)));
   end;
 
-  A : Stream (1..9);
+  A : Stream (1..9) := (others => 0);
   I : Integer;
 
 begin
+  A (9) := 1;
   I := Sum (A(1..8));
 end;
index 1bbbd87..25e38f0 100644 (file)
@@ -241,7 +241,11 @@ proc go-set-goarch { } {
            if [check_effective_target_ilp32] {
                set goarch "ppc"
            } else {
-               set goarch "ppc64"
+               if [istarget "powerpc64le-*-*"] {
+                   set goarch "ppc64le"
+               } else {
+                   set goarch "ppc64"
+               }
            }
        }
        "sparc*-*-*" {
index 52ec684..1bb6a47 100644 (file)
@@ -41,6 +41,14 @@ proc check_compile {basename type contents args} {
     global tool
     verbose "check_compile tool: $tool for $basename" 
 
+    # Save additional_sources to avoid compiling testsuite's sources
+    # against check_compile's source.
+    global additional_sources
+    if [info exists additional_sources] {
+       set tmp_additional_sources "$additional_sources"
+       set additional_sources ""
+    }
+
     if { [llength $args] > 0 } {
        set options [list "additional_flags=[lindex $args 0]"]
     } else {
@@ -86,6 +94,11 @@ proc check_compile {basename type contents args} {
        file delete $output
     }
 
+    # Restore additional_sources.
+    if [info exists additional_sources] {
+       set additional_sources "$tmp_additional_sources"
+    }
+
     return [list $lines $scan_output]
 }
 
@@ -3115,6 +3128,25 @@ proc check_effective_target_powerpc_htm_ok { } {
     }
 }
 
+# Return 1 if the target supports executing HTM hardware instructions,
+# 0 otherwise.  Cache the result.
+
+proc check_htm_hw_available { } {
+    return [check_cached_effective_target htm_hw_available {
+       # For now, disable on Darwin
+       if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] || [istarget *-*-darwin*]} {
+           expr 0
+       } else {
+           check_runtime_nocache htm_hw_available {
+               int main()
+               {
+                 __builtin_ttest ();
+                 return 0;
+               }
+           } "-mhtm"
+       }
+    }]
+}
 # Return 1 if this is a PowerPC target supporting -mcpu=cell.
 
 proc check_effective_target_powerpc_ppu_ok { } {
@@ -4006,6 +4038,7 @@ proc check_effective_target_vect_no_align { } {
             || [istarget sparc*-*-*]
             || [istarget ia64-*-*]
             || [check_effective_target_arm_vect_no_misalign]
+            || ([istarget powerpc*-*-*] && [check_p8vector_hw_available])
             || ([istarget mips*-*-*]
                 && [check_effective_target_mips_loongson]) } {
            set et_vect_no_align_saved 1
@@ -4027,8 +4060,9 @@ proc check_effective_target_vect_hw_misalign { } {
     } else {
         set et_vect_hw_misalign_saved 0
        if { ([istarget x86_64-*-*] 
-           || [istarget aarch64*-*-*]
-            || [istarget i?86-*-*]) } {
+             || ([istarget powerpc*-*-*] && [check_p8vector_hw_available])
+            || [istarget aarch64*-*-*]
+             || [istarget i?86-*-*]) } {
           set et_vect_hw_misalign_saved 1
        }
     }
@@ -4973,6 +5007,7 @@ proc is-effective-target { arg } {
          "p8vector_hw"    { set selected [check_p8vector_hw_available] }
          "ppc_recip_hw"   { set selected [check_ppc_recip_hw_available] }
          "dfp_hw"         { set selected [check_dfp_hw_available] }
+         "htm_hw"         { set selected [check_htm_hw_available] }
          "named_sections" { set selected [check_named_sections_available] }
          "gc_sections"    { set selected [check_gc_sections_available] }
          "cxa_atexit"     { set selected [check_cxa_atexit_available] }
@@ -4996,6 +5031,7 @@ proc is-effective-target-keyword { arg } {
          "p8vector_hw"    { return 1 }
          "ppc_recip_hw"   { return 1 }
          "dfp_hw"         { return 1 }
+         "htm_hw"         { return 1 }
          "named_sections" { return 1 }
          "gc_sections"    { return 1 }
          "cxa_atexit"     { return 1 }
@@ -5620,7 +5656,7 @@ proc check_vect_support_and_set_flags { } {
 
         lappend DEFAULT_VECTCFLAGS "-maltivec"
         if [check_p8vector_hw_available] {
-            lappend DEFAULT_VECTCFLAGS "-mpower8-vector" "-mno-allow-movmisalign"
+            lappend DEFAULT_VECTCFLAGS "-mpower8-vector"
         } elseif [check_vsx_hw_available] {
             lappend DEFAULT_VECTCFLAGS "-mvsx" "-mno-allow-movmisalign"
         }
index fe6dc28..73afb23 100644 (file)
@@ -164,6 +164,9 @@ static void *expand_regions (struct tm_region *,
 static tree
 get_attrs_for (const_tree x)
 {
+  if (x == NULL_TREE)
+    return NULL_TREE;
+
   switch (TREE_CODE (x))
     {
     case FUNCTION_DECL:
@@ -172,16 +175,16 @@ get_attrs_for (const_tree x)
 
     default:
       if (TYPE_P (x))
-       return NULL;
+       return NULL_TREE;
       x = TREE_TYPE (x);
       if (TREE_CODE (x) != POINTER_TYPE)
-       return NULL;
+       return NULL_TREE;
       /* FALLTHRU */
 
     case POINTER_TYPE:
       x = TREE_TYPE (x);
       if (TREE_CODE (x) != FUNCTION_TYPE && TREE_CODE (x) != METHOD_TYPE)
-       return NULL;
+       return NULL_TREE;
       /* FALLTHRU */
 
     case FUNCTION_TYPE:
index a15494a..7def7f0 100644 (file)
@@ -663,6 +663,9 @@ split_constant_offset_1 (tree type, tree op0, enum tree_code code, tree op1,
 
     case SSA_NAME:
       {
+       if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0))
+         return false;
+
        gimple def_stmt = SSA_NAME_DEF_STMT (op0);
        enum tree_code subcode;
 
@@ -970,6 +973,24 @@ dr_analyze_indices (struct data_reference *dr, loop_p nest, loop_p loop)
                                fold_convert (ssizetype, memoff));
              memoff = build_int_cst (TREE_TYPE (memoff), 0);
            }
+         /* Adjust the offset so it is a multiple of the access type
+            size and thus we separate bases that can possibly be used
+            to produce partial overlaps (which the access_fn machinery
+            cannot handle).  */
+         double_int rem;
+         if (TYPE_SIZE_UNIT (TREE_TYPE (ref))
+             && TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (ref))) == INTEGER_CST
+             && !integer_zerop (TYPE_SIZE_UNIT (TREE_TYPE (ref))))
+           rem = tree_to_double_int (off).mod
+               (tree_to_double_int (TYPE_SIZE_UNIT (TREE_TYPE (ref))), false,
+                TRUNC_MOD_EXPR);
+         else
+           /* If we can't compute the remainder simply force the initial
+              condition to zero.  */
+           rem = tree_to_double_int (off);
+         off = double_int_to_tree (ssizetype, tree_to_double_int (off) - rem);
+         memoff = double_int_to_tree (TREE_TYPE (memoff), rem);
+         /* And finally replace the initial condition.  */
          access_fn = chrec_replace_initial_condition
              (access_fn, fold_convert (orig_type, off));
          /* ???  This is still not a suitable base object for
@@ -982,6 +1003,7 @@ dr_analyze_indices (struct data_reference *dr, loop_p nest, loop_p loop)
          ref = fold_build2_loc (EXPR_LOCATION (ref),
                                 MEM_REF, TREE_TYPE (ref),
                                 base, memoff);
+         DR_UNCONSTRAINED_BASE (dr) = true;
          access_fns.safe_push (access_fn);
        }
     }
@@ -1393,7 +1415,8 @@ dr_may_alias_p (const struct data_reference *a, const struct data_reference *b,
      offset/overlap based analysis but have to rely on points-to
      information only.  */
   if (TREE_CODE (addr_a) == MEM_REF
-      && TREE_CODE (TREE_OPERAND (addr_a, 0)) == SSA_NAME)
+      && (DR_UNCONSTRAINED_BASE (a)
+         || TREE_CODE (TREE_OPERAND (addr_a, 0)) == SSA_NAME))
     {
       /* For true dependences we can apply TBAA.  */
       if (flag_strict_aliasing
@@ -1409,7 +1432,8 @@ dr_may_alias_p (const struct data_reference *a, const struct data_reference *b,
                                       build_fold_addr_expr (addr_b));
     }
   else if (TREE_CODE (addr_b) == MEM_REF
-          && TREE_CODE (TREE_OPERAND (addr_b, 0)) == SSA_NAME)
+          && (DR_UNCONSTRAINED_BASE (b)
+              || TREE_CODE (TREE_OPERAND (addr_b, 0)) == SSA_NAME))
     {
       /* For true dependences we can apply TBAA.  */
       if (flag_strict_aliasing
index f4f6832..9d819e4 100644 (file)
@@ -81,6 +81,10 @@ struct indices
 
   /* A list of chrecs.  Access functions of the indices.  */
   vec<tree> access_fns;
+
+  /* Whether BASE_OBJECT is an access representing the whole object
+     or whether the access could not be constrained.  */
+  bool unconstrained_base;
 };
 
 struct dr_alias
@@ -191,6 +195,7 @@ struct data_reference
 #define DR_STMT(DR)                (DR)->stmt
 #define DR_REF(DR)                 (DR)->ref
 #define DR_BASE_OBJECT(DR)         (DR)->indices.base_object
+#define DR_UNCONSTRAINED_BASE(DR)  (DR)->indices.unconstrained_base
 #define DR_ACCESS_FNS(DR)         (DR)->indices.access_fns
 #define DR_ACCESS_FN(DR, I)        DR_ACCESS_FNS (DR)[I]
 #define DR_NUM_DIMENSIONS(DR)      DR_ACCESS_FNS (DR).length ()
index 14ed52a..d4392ab 100644 (file)
@@ -859,10 +859,10 @@ eh_region_may_contain_throw (eh_region r)
 /* We want to transform
        try { body; } catch { stuff; }
    to
-       normal_seqence:
+       normal_sequence:
          body;
          over:
-       eh_seqence:
+       eh_sequence:
          landing_pad:
          stuff;
          goto over;
@@ -1783,6 +1783,12 @@ lower_catch (struct leh_state *state, gimple tp)
   this_state.cur_region = state->cur_region;
   this_state.ehp_region = try_region;
 
+  /* Add eh_seq from lowering EH in the cleanup sequence after the cleanup
+     itself, so that e.g. for coverage purposes the nested cleanups don't
+     appear before the cleanup body.  See PR64634 for details.  */
+  gimple_seq old_eh_seq = eh_seq;
+  eh_seq = NULL;
+
   out_label = NULL;
   cleanup = gimple_try_cleanup (tp);
   for (gsi = gsi_start (cleanup);
@@ -1819,7 +1825,11 @@ lower_catch (struct leh_state *state, gimple tp)
 
   gimple_try_set_cleanup (tp, new_seq);
 
-  return frob_into_branch_around (tp, try_region, out_label);
+  gimple_seq new_eh_seq = eh_seq;
+  eh_seq = old_eh_seq;
+  gimple_seq ret_seq = frob_into_branch_around (tp, try_region, out_label);
+  gimple_seq_add_seq (&eh_seq, new_eh_seq);
+  return ret_seq;
 }
 
 /* A subroutine of lower_eh_constructs_1.  Lower a GIMPLE_TRY with a
index 9db92db..892de14 100644 (file)
@@ -1342,6 +1342,7 @@ pg_add_dependence_edges (struct graph *rdg, vec<loop_p> loops, int dir,
   for (int ii = 0; drs1.iterate (ii, &dr1); ++ii)
     for (int jj = 0; drs2.iterate (jj, &dr2); ++jj)
       {
+       data_reference_p saved_dr1 = dr1;
        int this_dir = 1;
        ddr_p ddr;
        /* Re-shuffle data-refs to be in dominator order.  */
@@ -1387,6 +1388,8 @@ pg_add_dependence_edges (struct graph *rdg, vec<loop_p> loops, int dir,
          dir = this_dir;
        else if (dir != this_dir)
          return 2;
+       /* Shuffle "back" dr1.  */
+       dr1 = saved_dr1;
       }
   return dir;
 }
index 730bad4..8f2413d 100644 (file)
@@ -1391,8 +1391,8 @@ ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
     off = size_binop (PLUS_EXPR, off,
                      size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
   tree addr = fold_build_pointer_plus (DR_BASE_ADDRESS (dr), off);
-  addr = force_gimple_operand_1 (addr, stmts, is_gimple_mem_ref_addr,
-                                NULL_TREE);
+  addr = force_gimple_operand_1 (unshare_expr (addr), stmts,
+                                is_gimple_mem_ref_addr, NULL_TREE);
   tree alias_ptr = fold_convert (reference_alias_ptr_type (DR_REF (dr)), coff);
   /* While data-ref analysis punts on bit offsets it still handles
      bitfield accesses at byte boundaries.  Cope with that.  Note that
@@ -1715,9 +1715,8 @@ execute_pred_commoning_chain (struct loop *loop, chain_p chain,
   if (chain->combined)
     {
       /* For combined chains, just remove the statements that are used to
-        compute the values of the expression (except for the root one).  */
-      for (i = 1; chain->refs.iterate (i, &a); i++)
-       remove_stmt (a->stmt);
+        compute the values of the expression (except for the root one).
+        We delay this until after all chains are processed.  */
     }
   else
     {
@@ -1746,9 +1745,21 @@ determine_unroll_factor (vec<chain_p> chains)
 
   FOR_EACH_VEC_ELT (chains, i, chain)
     {
-      if (chain->type == CT_INVARIANT || chain->combined)
+      if (chain->type == CT_INVARIANT)
        continue;
 
+      if (chain->combined)
+       {
+         /* For combined chains, we can't handle unrolling if we replace
+            looparound PHIs.  */
+         dref a;
+         unsigned j;
+         for (j = 1; chain->refs.iterate (j, &a); j++)
+           if (gimple_code (a->stmt) == GIMPLE_PHI)
+             return 1;
+         continue;
+       }
+
       /* The best unroll factor for this chain is equal to the number of
         temporary variables that we create for it.  */
       af = chain->length;
@@ -1781,6 +1792,21 @@ execute_pred_commoning (struct loop *loop, vec<chain_p> chains,
        execute_pred_commoning_chain (loop, chain, tmp_vars);
     }
 
+  FOR_EACH_VEC_ELT (chains, i, chain)
+    {
+      if (chain->type == CT_INVARIANT)
+       ;
+      else if (chain->combined)
+       {
+         /* For combined chains, just remove the statements that are used to
+            compute the values of the expression (except for the root one).  */
+         dref a;
+         unsigned j;
+         for (j = 1; chain->refs.iterate (j, &a); j++)
+           remove_stmt (a->stmt);
+       }
+    }
+
   update_ssa (TODO_update_ssa_only_virtuals);
 }
 
index 91253dc..8ef0920 100644 (file)
@@ -2863,6 +2863,9 @@ propagate_rhs_into_lhs (gimple stmt, tree lhs, tree rhs, bitmap interesting_name
                {
                  basic_block bb = gimple_bb (use_stmt);
                  edge te = find_taken_edge (bb, val);
+                 if (!te)
+                   continue;
+
                  edge_iterator ei;
                  edge e;
                  gimple_stmt_iterator gsi, psi;
index b229429..109b44f 100644 (file)
@@ -1534,7 +1534,8 @@ simplify_builtin_call (gimple_stmt_iterator *gsi_p, tree callee2)
          use_operand_p use_p;
 
          if (!tree_fits_shwi_p (val2)
-             || !tree_fits_uhwi_p (len2))
+             || !tree_fits_uhwi_p (len2)
+             || compare_tree_int (len2, 1024) == 1)
            break;
          if (is_gimple_call (stmt1))
            {
@@ -1600,7 +1601,8 @@ simplify_builtin_call (gimple_stmt_iterator *gsi_p, tree callee2)
             is not constant, or is bigger than memcpy length, bail out.  */
          if (diff == NULL
              || !tree_fits_uhwi_p (diff)
-             || tree_int_cst_lt (len1, diff))
+             || tree_int_cst_lt (len1, diff)
+             || compare_tree_int (diff, 1024) == 1)
            break;
 
          /* Use maximum of difference plus memset length and memcpy length
@@ -3034,16 +3036,12 @@ combine_conversions (gimple_stmt_iterator *gsi)
         (for integers).  Avoid this if the final type is a pointer since
         then we sometimes need the middle conversion.  Likewise if the
         final type has a precision not equal to the size of its mode.  */
-      if (((inter_int && inside_int)
-          || (inter_float && inside_float)
-          || (inter_vec && inside_vec))
+      if (((inter_int && inside_int) || (inter_float && inside_float))
+         && (final_int || final_float)
          && inter_prec >= inside_prec
-         && (inter_float || inter_vec
-             || inter_unsignedp == inside_unsignedp)
+         && (inter_float || inter_unsignedp == inside_unsignedp)
          && ! (final_prec != GET_MODE_PRECISION (TYPE_MODE (type))
-               && TYPE_MODE (type) == TYPE_MODE (inter_type))
-         && ! final_ptr
-         && (! final_vec || inter_prec == inside_prec))
+               && TYPE_MODE (type) == TYPE_MODE (inter_type)))
        {
          gimple_assign_set_rhs1 (stmt, defop0);
          update_stmt (stmt);
@@ -3178,7 +3176,9 @@ simplify_vce (gimple_stmt_iterator *gsi)
          && (INTEGRAL_TYPE_P (TREE_TYPE (def_op))
              || POINTER_TYPE_P (TREE_TYPE (def_op)))
          && (TYPE_PRECISION (TREE_TYPE (op))
-             == TYPE_PRECISION (TREE_TYPE (def_op))))
+             == TYPE_PRECISION (TREE_TYPE (def_op)))
+         && (TYPE_SIZE (TREE_TYPE (op))
+             == TYPE_SIZE (TREE_TYPE (def_op))))
        {
          TREE_OPERAND (gimple_assign_rhs1 (stmt), 0) = def_op;
          update_stmt (stmt);
index b5b1d90..60b4dae 100644 (file)
@@ -2047,7 +2047,7 @@ range_entry_cmp (const void *a, const void *b)
              else
                return -1;
            }
-         else if (p->high != NULL_TREE)
+         else if (q->high != NULL_TREE)
            return 1;
          /* If both ranges are the same, sort below by ascending idx.  */
        }
@@ -3692,6 +3692,9 @@ acceptable_pow_call (gimple stmt, tree *base, HOST_WIDE_INT *exponent)
   switch (DECL_FUNCTION_CODE (fndecl))
     {
     CASE_FLT_FN (BUILT_IN_POW):
+      if (flag_errno_math)
+       return false;
+
       *base = gimple_call_arg (stmt, 0);
       arg1 = gimple_call_arg (stmt, 1);
 
index f55b7ee..8d99a31 100644 (file)
@@ -1856,7 +1856,7 @@ strlen_optimize_stmt (gimple_stmt_iterator *gsi)
            break;
          }
     }
-  else if (is_gimple_assign (stmt))
+  else if (is_gimple_assign (stmt) && !gimple_clobber_p (stmt))
     {
       tree lhs = gimple_assign_lhs (stmt);
 
index 1aa96a6..b5165d5 100644 (file)
@@ -314,7 +314,8 @@ stmt_local_def (gimple stmt)
 
   if (gimple_vdef (stmt) != NULL_TREE
       || gimple_has_side_effects (stmt)
-      || gimple_could_trap_p_1 (stmt, false, false))
+      || gimple_could_trap_p_1 (stmt, false, false)
+      || gimple_vuse (stmt) != NULL_TREE)
     return false;
 
   def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);
@@ -569,7 +570,7 @@ same_succ_def::equal (const value_type *e1, const compare_type *e2)
   if (!inverse_flags (e1, e2))
     {
       for (i = 0; i < e1->succ_flags.length (); ++i)
-       if (e1->succ_flags[i] != e1->succ_flags[i])
+       if (e1->succ_flags[i] != e2->succ_flags[i])
          return 0;
     }
 
@@ -1164,7 +1165,8 @@ gimple_equal_p (same_succ same_succ, gimple s1, gimple s2)
                                                 gimple_assign_rhs1 (s2)));
       else if (TREE_CODE (lhs1) == SSA_NAME
               && TREE_CODE (lhs2) == SSA_NAME)
-       return vn_valueize (lhs1) == vn_valueize (lhs2);
+       return operand_equal_p (gimple_assign_rhs1 (s1),
+                               gimple_assign_rhs1 (s2), 0);
       return false;
 
     case GIMPLE_COND:
index feb6ece..21f77c4 100644 (file)
@@ -823,21 +823,22 @@ execute_optimize_stdarg (void)
       /* For va_list_simple_ptr, we have to check PHI nodes too.  We treat
         them as assignments for the purpose of escape analysis.  This is
         not needed for non-simple va_list because virtual phis don't perform
-        any real data movement.  */
-      if (va_list_simple_ptr)
-       {
-         tree lhs, rhs;
-         use_operand_p uop;
-         ssa_op_iter soi;
+        any real data movement.  Also, check PHI nodes for taking address of
+        the va_list vars.  */
+      tree lhs, rhs;
+      use_operand_p uop;
+      ssa_op_iter soi;
 
-         for (i = gsi_start_phis (bb); !gsi_end_p (i); gsi_next (&i))
-           {
-             gimple phi = gsi_stmt (i);
-             lhs = PHI_RESULT (phi);
+      for (i = gsi_start_phis (bb); !gsi_end_p (i); gsi_next (&i))
+       {
+         gimple phi = gsi_stmt (i);
+         lhs = PHI_RESULT (phi);
 
-             if (virtual_operand_p (lhs))
-               continue;
+         if (virtual_operand_p (lhs))
+           continue;
 
+         if (va_list_simple_ptr)
+           {
              FOR_EACH_PHI_ARG (uop, phi, soi, SSA_OP_USE)
                {
                  rhs = USE_FROM_PTR (uop);
@@ -860,6 +861,22 @@ execute_optimize_stdarg (void)
                    }
                }
            }
+
+         for (unsigned j = 0; !va_list_escapes
+                              && j < gimple_phi_num_args (phi); ++j)
+           if ((!va_list_simple_ptr
+                || TREE_CODE (gimple_phi_arg_def (phi, j)) != SSA_NAME)
+               && walk_tree (gimple_phi_arg_def_ptr (phi, j),
+                             find_va_list_reference, &wi, NULL))
+             {
+               if (dump_file && (dump_flags & TDF_DETAILS))
+                 {
+                   fputs ("va_list escapes in ", dump_file);
+                   print_gimple_stmt (dump_file, phi, 0, dump_flags);
+                   fputc ('\n', dump_file);
+                 }
+               va_list_escapes = true;
+             }
        }
 
       for (i = gsi_start_bb (bb);
@@ -882,8 +899,8 @@ execute_optimize_stdarg (void)
 
          if (is_gimple_assign (stmt))
            {
-             tree lhs = gimple_assign_lhs (stmt);
-             tree rhs = gimple_assign_rhs1 (stmt);
+             lhs = gimple_assign_lhs (stmt);
+             rhs = gimple_assign_rhs1 (stmt);
 
              if (va_list_simple_ptr)
                {
index 49303b1..7e80183 100644 (file)
@@ -1126,7 +1126,6 @@ vect_peeling_hash_get_lowest_cost (_vect_peel_info **slot,
   vec<data_reference_p> datarefs = LOOP_VINFO_DATAREFS (loop_vinfo);
   struct data_reference *dr;
   stmt_vector_for_cost prologue_cost_vec, body_cost_vec, epilogue_cost_vec;
-  int single_iter_cost;
 
   prologue_cost_vec.create (2);
   body_cost_vec.create (2);
@@ -1149,11 +1148,11 @@ vect_peeling_hash_get_lowest_cost (_vect_peel_info **slot,
       SET_DR_MISALIGNMENT (dr, save_misalignment);
     }
 
-  single_iter_cost = vect_get_single_scalar_iteration_cost (loop_vinfo);
-  outside_cost += vect_get_known_peeling_cost (loop_vinfo, elem->npeel,
-                                              &dummy, single_iter_cost,
-                                              &prologue_cost_vec,
-                                              &epilogue_cost_vec);
+  auto_vec<stmt_info_for_cost> scalar_cost_vec;
+  vect_get_single_scalar_iteration_cost (loop_vinfo, &scalar_cost_vec);
+  outside_cost += vect_get_known_peeling_cost
+    (loop_vinfo, elem->npeel, &dummy,
+     &scalar_cost_vec, &prologue_cost_vec, &epilogue_cost_vec);
 
   /* Prologue and epilogue costs are added to the target model later.
      These costs depend only on the scalar iteration cost, the
@@ -3821,6 +3820,20 @@ vect_get_new_vect_var (tree type, enum vect_var_kind var_kind, const char *name)
   return new_vect_var;
 }
 
+/* Duplicate ptr info and set alignment/misaligment on NAME from DR.  */
+
+static void
+vect_duplicate_ssa_name_ptr_info (tree name, data_reference *dr,
+                                 stmt_vec_info stmt_info)
+{
+  duplicate_ssa_name_ptr_info (name, DR_PTR_INFO (dr));
+  unsigned int align = TYPE_ALIGN_UNIT (STMT_VINFO_VECTYPE (stmt_info));
+  int misalign = DR_MISALIGNMENT (dr);
+  if (misalign == -1)
+    mark_ptr_info_alignment_unknown (SSA_NAME_PTR_INFO (name));
+  else
+    set_ptr_info_alignment (SSA_NAME_PTR_INFO (name), align, misalign);
+}
 
 /* Function vect_create_addr_base_for_vector_ref.
 
@@ -3940,13 +3953,9 @@ vect_create_addr_base_for_vector_ref (gimple stmt,
   if (DR_PTR_INFO (dr)
       && TREE_CODE (addr_base) == SSA_NAME)
     {
-      duplicate_ssa_name_ptr_info (addr_base, DR_PTR_INFO (dr));
-      unsigned int align = TYPE_ALIGN_UNIT (STMT_VINFO_VECTYPE (stmt_info));
-      int misalign = DR_MISALIGNMENT (dr);
-      if (offset || byte_offset || (misalign == -1))
+      vect_duplicate_ssa_name_ptr_info (addr_base, dr, stmt_info);
+      if (offset || byte_offset)
        mark_ptr_info_alignment_unknown (SSA_NAME_PTR_INFO (addr_base));
-      else
-       set_ptr_info_alignment (SSA_NAME_PTR_INFO (addr_base), align, misalign);
     }
 
   if (dump_enabled_p ())
@@ -4186,7 +4195,7 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop,
       aggr_ptr_init = make_ssa_name (aggr_ptr, vec_stmt);
       /* Copy the points-to information if it exists. */
       if (DR_PTR_INFO (dr))
-       duplicate_ssa_name_ptr_info (aggr_ptr_init, DR_PTR_INFO (dr));
+       vect_duplicate_ssa_name_ptr_info (aggr_ptr_init, dr, stmt_info);
       gimple_assign_set_lhs (vec_stmt, aggr_ptr_init);
       if (pe)
        {
@@ -4229,8 +4238,8 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop,
       /* Copy the points-to information if it exists. */
       if (DR_PTR_INFO (dr))
        {
-         duplicate_ssa_name_ptr_info (indx_before_incr, DR_PTR_INFO (dr));
-         duplicate_ssa_name_ptr_info (indx_after_incr, DR_PTR_INFO (dr));
+         vect_duplicate_ssa_name_ptr_info (indx_before_incr, dr, stmt_info);
+         vect_duplicate_ssa_name_ptr_info (indx_after_incr, dr, stmt_info);
        }
       if (ptr_incr)
        *ptr_incr = incr;
@@ -4259,8 +4268,8 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop,
       /* Copy the points-to information if it exists. */
       if (DR_PTR_INFO (dr))
        {
-         duplicate_ssa_name_ptr_info (indx_before_incr, DR_PTR_INFO (dr));
-         duplicate_ssa_name_ptr_info (indx_after_incr, DR_PTR_INFO (dr));
+         vect_duplicate_ssa_name_ptr_info (indx_before_incr, dr, stmt_info);
+         vect_duplicate_ssa_name_ptr_info (indx_after_incr, dr, stmt_info);
        }
       if (ptr_incr)
        *ptr_incr = incr;
index 0cc83b4..252da5d 100644 (file)
@@ -1389,6 +1389,57 @@ count_type_subparts (tree type)
   return VECTOR_TYPE_P (type) ? TYPE_VECTOR_SUBPARTS (type) : 1;
 }
 
+static tree
+do_cond (gimple_stmt_iterator *gsi, tree inner_type, tree a, tree b,
+        tree bitpos, tree bitsize, enum tree_code code)
+{
+  if (TREE_CODE (TREE_TYPE (a)) == VECTOR_TYPE)
+    a = tree_vec_extract (gsi, inner_type, a, bitsize, bitpos);
+  if (TREE_CODE (TREE_TYPE (b)) == VECTOR_TYPE)
+    b = tree_vec_extract (gsi, inner_type, b, bitsize, bitpos);
+  tree cond = gimple_assign_rhs1 (gsi_stmt (*gsi));
+  return gimplify_build3 (gsi, code, inner_type, cond, a, b);
+}
+
+/* Expand a vector COND_EXPR to scalars, piecewise.  */
+static void
+expand_vector_scalar_condition (gimple_stmt_iterator *gsi)
+{
+  gimple stmt = gsi_stmt (*gsi);
+  tree type = gimple_expr_type (stmt);
+  tree compute_type = get_compute_type (COND_EXPR, mov_optab, type);
+  machine_mode compute_mode = TYPE_MODE (compute_type);
+  gcc_assert (compute_mode != BLKmode);
+  tree lhs = gimple_assign_lhs (stmt);
+  tree rhs2 = gimple_assign_rhs2 (stmt);
+  tree rhs3 = gimple_assign_rhs3 (stmt);
+  tree new_rhs;
+
+  /* If the compute mode is not a vector mode (hence we are not decomposing
+     a BLKmode vector to smaller, hardware-supported vectors), we may want
+     to expand the operations in parallel.  */
+  if (GET_MODE_CLASS (compute_mode) != MODE_VECTOR_INT
+      && GET_MODE_CLASS (compute_mode) != MODE_VECTOR_FLOAT
+      && GET_MODE_CLASS (compute_mode) != MODE_VECTOR_FRACT
+      && GET_MODE_CLASS (compute_mode) != MODE_VECTOR_UFRACT
+      && GET_MODE_CLASS (compute_mode) != MODE_VECTOR_ACCUM
+      && GET_MODE_CLASS (compute_mode) != MODE_VECTOR_UACCUM)
+    new_rhs = expand_vector_parallel (gsi, do_cond, type, rhs2, rhs3,
+                                     COND_EXPR);
+  else
+    new_rhs = expand_vector_piecewise (gsi, do_cond, type, compute_type,
+                                      rhs2, rhs3, COND_EXPR);
+  if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (new_rhs)))
+    new_rhs = gimplify_build1 (gsi, VIEW_CONVERT_EXPR, TREE_TYPE (lhs),
+                              new_rhs);
+
+  /* NOTE:  We should avoid using gimple_assign_set_rhs_from_tree. One
+     way to do it is change expand_vector_operation and its callees to
+     return a tree_code, RHS1 and RHS2 instead of a tree. */
+  gimple_assign_set_rhs_from_tree (gsi, new_rhs);
+  update_stmt (gsi_stmt (*gsi));
+}
+
 /* Process one statement.  If we identify a vector operation, expand it.  */
 
 static void
@@ -1420,6 +1471,14 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi)
       return;
     }
 
+  if (code == COND_EXPR
+      && TREE_CODE (TREE_TYPE (gimple_assign_lhs (stmt))) == VECTOR_TYPE
+      && TYPE_MODE (TREE_TYPE (gimple_assign_lhs (stmt))) == BLKmode)
+    {
+      expand_vector_scalar_condition (gsi);
+      return;
+    }
+
   if (code == CONSTRUCTOR
       && TREE_CODE (lhs) == SSA_NAME
       && VECTOR_MODE_P (TYPE_MODE (TREE_TYPE (lhs)))
index 797f24c..16bbefd 100644 (file)
@@ -1647,6 +1647,13 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo)
       return false;
     }
 
+  /* Classify all cross-iteration scalar data-flow cycles.
+     Cross-iteration cycles caused by virtual phis are analyzed separately.  */
+
+  vect_analyze_scalar_cycles (loop_vinfo);
+
+  vect_pattern_recog (loop_vinfo, NULL);
+
   /* Analyze the access patterns of the data-refs in the loop (consecutive,
      complex, etc.). FORNOW: Only handle consecutive access pattern.  */
 
@@ -1659,13 +1666,6 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo)
       return false;
     }
 
-  /* Classify all cross-iteration scalar data-flow cycles.
-     Cross-iteration cycles caused by virtual phis are analyzed separately.  */
-
-  vect_analyze_scalar_cycles (loop_vinfo);
-
-  vect_pattern_recog (loop_vinfo, NULL);
-
   /* Data-flow analysis to detect stmts that do not need to be vectorized.  */
 
   ok = vect_mark_stmts_to_be_vectorized (loop_vinfo);
@@ -2620,12 +2620,13 @@ vect_force_simple_reduction (loop_vec_info loop_info, gimple phi,
 
 /* Calculate the cost of one scalar iteration of the loop.  */
 int
-vect_get_single_scalar_iteration_cost (loop_vec_info loop_vinfo)
+vect_get_single_scalar_iteration_cost (loop_vec_info loop_vinfo,
+                                      stmt_vector_for_cost *scalar_cost_vec)
 {
   struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
   basic_block *bbs = LOOP_VINFO_BBS (loop_vinfo);
   int nbbs = loop->num_nodes, factor, scalar_single_iter_cost = 0;
-  int innerloop_iters, i, stmt_cost;
+  int innerloop_iters, i;
 
   /* Count statements in scalar loop.  Using this as scalar cost for a single
      iteration for now.
@@ -2666,17 +2667,20 @@ vect_get_single_scalar_iteration_cost (loop_vec_info loop_vinfo)
              && !STMT_VINFO_IN_PATTERN_P (stmt_info))
             continue;
 
+         vect_cost_for_stmt kind;
           if (STMT_VINFO_DATA_REF (vinfo_for_stmt (stmt)))
             {
               if (DR_IS_READ (STMT_VINFO_DATA_REF (vinfo_for_stmt (stmt))))
-               stmt_cost = vect_get_stmt_cost (scalar_load);
+               kind = scalar_load;
              else
-               stmt_cost = vect_get_stmt_cost (scalar_store);
+               kind = scalar_store;
             }
           else
-            stmt_cost = vect_get_stmt_cost (scalar_stmt);
+            kind = scalar_stmt;
 
-          scalar_single_iter_cost += stmt_cost * factor;
+         scalar_single_iter_cost
+           += record_stmt_cost (scalar_cost_vec, factor, kind,
+                                NULL, 0, vect_prologue);
         }
     }
   return scalar_single_iter_cost;
@@ -2686,7 +2690,7 @@ vect_get_single_scalar_iteration_cost (loop_vec_info loop_vinfo)
 int
 vect_get_known_peeling_cost (loop_vec_info loop_vinfo, int peel_iters_prologue,
                              int *peel_iters_epilogue,
-                             int scalar_single_iter_cost,
+                             stmt_vector_for_cost *scalar_cost_vec,
                             stmt_vector_for_cost *prologue_cost_vec,
                             stmt_vector_for_cost *epilogue_cost_vec)
 {
@@ -2703,8 +2707,10 @@ vect_get_known_peeling_cost (loop_vec_info loop_vinfo, int peel_iters_prologue,
 
       /* If peeled iterations are known but number of scalar loop
          iterations are unknown, count a taken branch per peeled loop.  */
-      retval = record_stmt_cost (prologue_cost_vec, 2, cond_branch_taken,
+      retval = record_stmt_cost (prologue_cost_vec, 1, cond_branch_taken,
                                 NULL, 0, vect_prologue);
+      retval = record_stmt_cost (prologue_cost_vec, 1, cond_branch_taken,
+                                NULL, 0, vect_epilogue);
     }
   else
     {
@@ -2718,14 +2724,21 @@ vect_get_known_peeling_cost (loop_vec_info loop_vinfo, int peel_iters_prologue,
         *peel_iters_epilogue = vf;
     }
 
+  stmt_info_for_cost *si;
+  int j;
   if (peel_iters_prologue)
-    retval += record_stmt_cost (prologue_cost_vec,
-                               peel_iters_prologue * scalar_single_iter_cost,
-                               scalar_stmt, NULL, 0, vect_prologue);
+    FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)
+      retval += record_stmt_cost (prologue_cost_vec,
+                                 si->count * peel_iters_prologue,
+                                 si->kind, NULL, si->misalign,
+                                 vect_prologue);
   if (*peel_iters_epilogue)
-    retval += record_stmt_cost (epilogue_cost_vec,
-                               *peel_iters_epilogue * scalar_single_iter_cost,
-                               scalar_stmt, NULL, 0, vect_epilogue);
+    FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)
+      retval += record_stmt_cost (epilogue_cost_vec,
+                                 si->count * *peel_iters_epilogue,
+                                 si->kind, NULL, si->misalign,
+                                 vect_epilogue);
+
   return retval;
 }
 
@@ -2800,7 +2813,9 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
      TODO: Consider assigning different costs to different scalar
      statements.  */
 
-  scalar_single_iter_cost = vect_get_single_scalar_iteration_cost (loop_vinfo);
+  auto_vec<stmt_info_for_cost> scalar_cost_vec;
+  scalar_single_iter_cost
+     = vect_get_single_scalar_iteration_cost (loop_vinfo, &scalar_cost_vec);
 
   /* Add additional cost for the peeled instructions in prologue and epilogue
      loop.
@@ -2828,18 +2843,29 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
          branch per peeled loop. Even if scalar loop iterations are known,
          vector iterations are not known since peeled prologue iterations are
          not known. Hence guards remain the same.  */
-      (void) add_stmt_cost (target_cost_data, 2, cond_branch_taken,
+      (void) add_stmt_cost (target_cost_data, 1, cond_branch_taken,
                            NULL, 0, vect_prologue);
-      (void) add_stmt_cost (target_cost_data, 2, cond_branch_not_taken,
+      (void) add_stmt_cost (target_cost_data, 1, cond_branch_not_taken,
                            NULL, 0, vect_prologue);
-      /* FORNOW: Don't attempt to pass individual scalar instructions to
-        the model; just assume linear cost for scalar iterations.  */
-      (void) add_stmt_cost (target_cost_data,
-                           peel_iters_prologue * scalar_single_iter_cost,
-                           scalar_stmt, NULL, 0, vect_prologue);
-      (void) add_stmt_cost (target_cost_data, 
-                           peel_iters_epilogue * scalar_single_iter_cost,
-                           scalar_stmt, NULL, 0, vect_epilogue);
+      (void) add_stmt_cost (target_cost_data, 1, cond_branch_taken,
+                           NULL, 0, vect_epilogue);
+      (void) add_stmt_cost (target_cost_data, 1, cond_branch_not_taken,
+                           NULL, 0, vect_epilogue);
+      stmt_info_for_cost *si;
+      int j;
+      FOR_EACH_VEC_ELT (scalar_cost_vec, j, si)
+       {
+         struct _stmt_vec_info *stmt_info
+           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;
+         (void) add_stmt_cost (target_cost_data,
+                               si->count * peel_iters_prologue,
+                               si->kind, stmt_info, si->misalign,
+                               vect_prologue);
+         (void) add_stmt_cost (target_cost_data,
+                               si->count * peel_iters_epilogue,
+                               si->kind, stmt_info, si->misalign,
+                               vect_epilogue);
+       }
     }
   else
     {
@@ -2854,7 +2880,7 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
 
       (void) vect_get_known_peeling_cost (loop_vinfo, peel_iters_prologue,
                                          &peel_iters_epilogue,
-                                         scalar_single_iter_cost,
+                                         &scalar_cost_vec,
                                          &prologue_cost_vec,
                                          &epilogue_cost_vec);
 
@@ -4521,7 +4547,10 @@ vect_finalize_reduction:
                            && !STMT_VINFO_LIVE_P (exit_phi_vinfo))
                           || double_reduc);
 
-              STMT_VINFO_VEC_STMT (exit_phi_vinfo) = epilog_stmt;
+             if (double_reduc)
+               STMT_VINFO_VEC_STMT (exit_phi_vinfo) = inner_phi;
+             else
+               STMT_VINFO_VEC_STMT (exit_phi_vinfo) = epilog_stmt;
               if (!double_reduc
                   || STMT_VINFO_DEF_TYPE (exit_phi_vinfo)
                       != vect_double_reduction_def)
@@ -4901,6 +4930,12 @@ vectorizable_reduction (gimple stmt, gimple_stmt_iterator *gsi,
   if (!vectype_in)
     vectype_in = tem;
   gcc_assert (is_simple_use);
+  if (!found_nested_cycle_def)
+    reduc_def_stmt = def_stmt;
+
+  if (reduc_def_stmt && gimple_code (reduc_def_stmt) != GIMPLE_PHI)
+    return false;
+
   if (!(dt == vect_reduction_def
        || dt == vect_nested_cycle
        || ((dt == vect_internal_def || dt == vect_external_def
@@ -4913,10 +4948,7 @@ vectorizable_reduction (gimple stmt, gimple_stmt_iterator *gsi,
       gcc_assert (orig_stmt);
       return false;
     }
-  if (!found_nested_cycle_def)
-    reduc_def_stmt = def_stmt;
 
-  gcc_assert (gimple_code (reduc_def_stmt) == GIMPLE_PHI);
   if (orig_stmt)
     gcc_assert (orig_stmt == vect_is_simple_reduction (loop_vinfo,
                                                        reduc_def_stmt,
index 5984229..7a03b2e 100644 (file)
@@ -47,6 +47,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "optabs.h"
 #include "tree-vectorizer.h"
 #include "langhooks.h"
+#include "gimple-walk.h"
 
 /* Extract the location of the basic block in the source code.
    Return the basic block location if succeed and NULL if not.  */
@@ -671,8 +672,11 @@ vect_build_slp_tree_1 (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
                 ???  We should enhance this to only disallow gaps
                 inside vectors.  */
               if ((unrolling_factor > 1
-                  && GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt)) == stmt
-                  && GROUP_GAP (vinfo_for_stmt (stmt)) != 0)
+                  && ((GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt)) == stmt
+                       && GROUP_GAP (vinfo_for_stmt (stmt)) != 0)
+                      /* If the group is split up then GROUP_GAP
+                         isn't correct here, nor is GROUP_FIRST_ELEMENT.  */
+                      || GROUP_SIZE (vinfo_for_stmt (stmt)) > group_size))
                  || (GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt)) != stmt
                      && GROUP_GAP (vinfo_for_stmt (stmt)) != 1))
                 {
@@ -1761,51 +1765,83 @@ vect_make_slp_decision (loop_vec_info loop_vinfo)
    can't be SLPed) in the tree rooted at NODE.  Mark such stmts as HYBRID.  */
 
 static void
-vect_detect_hybrid_slp_stmts (slp_tree node)
+vect_detect_hybrid_slp_stmts (slp_tree node, unsigned i, slp_vect_type stype)
 {
-  int i;
-  vec<gimple> stmts = SLP_TREE_SCALAR_STMTS (node);
-  gimple stmt = stmts[0];
+  gimple stmt = SLP_TREE_SCALAR_STMTS (node)[i];
   imm_use_iterator imm_iter;
   gimple use_stmt;
-  stmt_vec_info stmt_vinfo = vinfo_for_stmt (stmt);
+  stmt_vec_info use_vinfo, stmt_vinfo = vinfo_for_stmt (stmt);
   slp_tree child;
   loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
-  struct loop *loop = NULL;
-  bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_vinfo);
-  basic_block bb = NULL;
+  struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
+  int j;
+
+  /* Propagate hybrid down the SLP tree.  */
+  if (stype == hybrid)
+    ;
+  else if (HYBRID_SLP_STMT (stmt_vinfo))
+    stype = hybrid;
+  else
+    {
+      /* Check if a pure SLP stmt has uses in non-SLP stmts.  */
+      gcc_checking_assert (PURE_SLP_STMT (stmt_vinfo));
+      if (TREE_CODE (gimple_op (stmt, 0)) == SSA_NAME)
+       FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, gimple_op (stmt, 0))
+         if (gimple_bb (use_stmt)
+             && flow_bb_inside_loop_p (loop, gimple_bb (use_stmt))
+             && (use_vinfo = vinfo_for_stmt (use_stmt))
+             && !STMT_SLP_TYPE (use_vinfo)
+             && (STMT_VINFO_RELEVANT (use_vinfo)
+                 || VECTORIZABLE_CYCLE_DEF (STMT_VINFO_DEF_TYPE (use_vinfo))
+                 || (STMT_VINFO_IN_PATTERN_P (use_vinfo)
+                     && STMT_VINFO_RELATED_STMT (use_vinfo)
+                     && !STMT_SLP_TYPE (vinfo_for_stmt
+                           (STMT_VINFO_RELATED_STMT (use_vinfo)))))
+             && !(gimple_code (use_stmt) == GIMPLE_PHI
+                  && STMT_VINFO_DEF_TYPE (use_vinfo) == vect_reduction_def))
+           stype = hybrid;
+    }
+
+  if (stype == hybrid)
+    STMT_SLP_TYPE (stmt_vinfo) = hybrid;
+
+  FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), j, child)
+    vect_detect_hybrid_slp_stmts (child, i, stype);
+}
 
-  if (!node)
-    return;
+/* Helpers for vect_detect_hybrid_slp walking pattern stmt uses.  */
 
-  if (loop_vinfo)
-    loop = LOOP_VINFO_LOOP (loop_vinfo);
-  else
-    bb = BB_VINFO_BB (bb_vinfo);
+static tree
+vect_detect_hybrid_slp_1 (tree *tp, int *, void *data)
+{
+  walk_stmt_info *wi = (walk_stmt_info *)data;
+  struct loop *loopp = (struct loop *)wi->info;
 
-  FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (node), i, stmt)
-    if (PURE_SLP_STMT (vinfo_for_stmt (stmt))
-       && TREE_CODE (gimple_op (stmt, 0)) == SSA_NAME)
-      FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, gimple_op (stmt, 0))
-       if (gimple_bb (use_stmt)
-            && ((loop && flow_bb_inside_loop_p (loop, gimple_bb (use_stmt)))
-                || bb == gimple_bb (use_stmt))
-           && (stmt_vinfo = vinfo_for_stmt (use_stmt))
-           && !STMT_SLP_TYPE (stmt_vinfo)
-            && (STMT_VINFO_RELEVANT (stmt_vinfo)
-                || VECTORIZABLE_CYCLE_DEF (STMT_VINFO_DEF_TYPE (stmt_vinfo))
-               || (STMT_VINFO_IN_PATTERN_P (stmt_vinfo)
-                   && STMT_VINFO_RELATED_STMT (stmt_vinfo)
-                   && !STMT_SLP_TYPE (vinfo_for_stmt (STMT_VINFO_RELATED_STMT (stmt_vinfo)))))
-           && !(gimple_code (use_stmt) == GIMPLE_PHI
-                 && STMT_VINFO_DEF_TYPE (stmt_vinfo)
-                  == vect_reduction_def))
-         vect_mark_slp_stmts (node, hybrid, i);
+  if (wi->is_lhs)
+    return NULL_TREE;
 
-  FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), i, child)
-    vect_detect_hybrid_slp_stmts (child);
+  if (TREE_CODE (*tp) == SSA_NAME
+      && !SSA_NAME_IS_DEFAULT_DEF (*tp))
+    {
+      gimple def_stmt = SSA_NAME_DEF_STMT (*tp);
+      if (flow_bb_inside_loop_p (loopp, gimple_bb (def_stmt))
+         && PURE_SLP_STMT (vinfo_for_stmt (def_stmt)))
+       STMT_SLP_TYPE (vinfo_for_stmt (def_stmt)) = hybrid;
+    }
+
+  return NULL_TREE;
 }
 
+static tree
+vect_detect_hybrid_slp_2 (gimple_stmt_iterator *gsi, bool *handled,
+                         walk_stmt_info *)
+{
+  /* If the stmt is in a SLP instance then this isn't a reason
+     to mark use definitions in other SLP instances as hybrid.  */
+  if (STMT_SLP_TYPE (vinfo_for_stmt (gsi_stmt (*gsi))) != loop_vect)
+    *handled = true;
+  return NULL_TREE;
+}
 
 /* Find stmts that must be both vectorized and SLPed.  */
 
@@ -1820,8 +1856,41 @@ vect_detect_hybrid_slp (loop_vec_info loop_vinfo)
     dump_printf_loc (MSG_NOTE, vect_location, "=== vect_detect_hybrid_slp ==="
                      "\n");
 
+  /* First walk all pattern stmt in the loop and mark defs of uses as
+     hybrid because immediate uses in them are not recorded.  */
+  for (i = 0; i < LOOP_VINFO_LOOP (loop_vinfo)->num_nodes; ++i)
+    {
+      basic_block bb = LOOP_VINFO_BBS (loop_vinfo)[i];
+      for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi);
+          gsi_next (&gsi))
+       {
+         gimple stmt = gsi_stmt (gsi);
+         stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+         if (STMT_VINFO_IN_PATTERN_P (stmt_info))
+           {
+             walk_stmt_info wi;
+             memset (&wi, 0, sizeof (wi));
+             wi.info = LOOP_VINFO_LOOP (loop_vinfo);
+             gimple_stmt_iterator gsi2
+               = gsi_for_stmt (STMT_VINFO_RELATED_STMT (stmt_info));
+             walk_gimple_stmt (&gsi2, vect_detect_hybrid_slp_2,
+                               vect_detect_hybrid_slp_1, &wi);
+             walk_gimple_seq (STMT_VINFO_PATTERN_DEF_SEQ (stmt_info),
+                              vect_detect_hybrid_slp_2,
+                              vect_detect_hybrid_slp_1, &wi);
+           }
+       }
+    }
+
+  /* Then walk the SLP instance trees marking stmts with uses in
+     non-SLP stmts as hybrid, also propagating hybrid down the
+     SLP tree, collecting the above info on-the-fly.  */
   FOR_EACH_VEC_ELT (slp_instances, i, instance)
-    vect_detect_hybrid_slp_stmts (SLP_INSTANCE_TREE (instance));
+    {
+      for (unsigned i = 0; i < SLP_INSTANCE_GROUP_SIZE (instance); ++i)
+       vect_detect_hybrid_slp_stmts (SLP_INSTANCE_TREE (instance),
+                                     i, pure_slp);
+    }
 }
 
 
index eadfdfa..075c500 100644 (file)
@@ -325,7 +325,8 @@ vect_stmt_relevant_p (gimple stmt, loop_vec_info loop_vinfo,
 
   /* changing memory.  */
   if (gimple_code (stmt) != GIMPLE_PHI)
-    if (gimple_vdef (stmt))
+    if (gimple_vdef (stmt)
+       && !gimple_clobber_p (stmt))
       {
        if (dump_enabled_p ())
          dump_printf_loc (MSG_NOTE, vect_location,
@@ -3184,7 +3185,7 @@ vectorizable_simd_clone_call (gimple stmt, gimple_stmt_iterator *gsi,
   set_vinfo_for_stmt (new_stmt, stmt_info);
   set_vinfo_for_stmt (stmt, NULL);
   STMT_VINFO_STMT (stmt_info) = new_stmt;
-  gsi_replace (gsi, new_stmt, false);
+  gsi_replace (gsi, new_stmt, true);
   unlink_stmt_vdef (stmt);
 
   return true;
@@ -5714,6 +5715,22 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
       gcc_assert (! nested_in_vect_loop && !STMT_VINFO_GATHER_P (stmt_info));
 
       first_stmt = GROUP_FIRST_ELEMENT (stmt_info);
+
+      /* If this is single-element interleaving with an element distance
+         that leaves unused vector loads around punt - we at least create
+        very sub-optimal code in that case (and blow up memory,
+        see PR65518).  */
+      if (first_stmt == stmt
+         && !GROUP_NEXT_ELEMENT (stmt_info)
+         && GROUP_SIZE (stmt_info) > TYPE_VECTOR_SUBPARTS (vectype))
+       {
+         if (dump_enabled_p ())
+           dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+                            "single-element interleaving not supported "
+                            "for not adjacent vector loads\n");
+         return false;
+       }
+
       if (!slp && !PURE_SLP_STMT (stmt_info))
        {
          group_size = GROUP_SIZE (vinfo_for_stmt (first_stmt));
index b32ec46..13ee963 100644 (file)
@@ -1098,10 +1098,12 @@ extern bool vectorizable_reduction (gimple, gimple_stmt_iterator *, gimple *,
 extern bool vectorizable_induction (gimple, gimple_stmt_iterator *, gimple *);
 extern tree get_initial_def_for_reduction (gimple, tree, tree *);
 extern int vect_min_worthwhile_factor (enum tree_code);
-extern int vect_get_known_peeling_cost (loop_vec_info, int, int *, int,
+extern int vect_get_known_peeling_cost (loop_vec_info, int, int *,
+                                       stmt_vector_for_cost *,
                                        stmt_vector_for_cost *,
                                        stmt_vector_for_cost *);
-extern int vect_get_single_scalar_iteration_cost (loop_vec_info);
+extern int vect_get_single_scalar_iteration_cost (loop_vec_info,
+                                                 stmt_vector_for_cost *);
 
 /* In tree-vect-slp.c.  */
 extern void vect_free_slp_instance (slp_instance);
index 2c80135..fb3e05d 100644 (file)
@@ -7172,7 +7172,7 @@ vrp_evaluate_conditional (enum tree_code code, tree op0, tree op1, gimple stmt)
       tree type = TREE_TYPE (op0);
       value_range_t *vr0 = get_value_range (op0);
 
-      if (vr0->type != VR_VARYING
+      if (vr0->type == VR_RANGE
          && INTEGRAL_TYPE_P (type)
          && vrp_val_is_min (vr0->min)
          && vrp_val_is_max (vr0->max)
@@ -9377,8 +9377,10 @@ simplify_internal_call_using_ranges (gimple_stmt_iterator *gsi, gimple stmt)
     }
   else
     {
-      tree r1 = int_const_binop (subcode, vr0.min, vr1.min);
-      tree r2 = int_const_binop (subcode, vr0.max, vr1.max);
+      tree r1 = int_const_binop (subcode, vr0.min,
+                                subcode == MINUS_EXPR ? vr1.max : vr1.min);
+      tree r2 = int_const_binop (subcode, vr0.max,
+                                subcode == MINUS_EXPR ? vr1.min : vr1.max);
       if (r1 == NULL_TREE || TREE_OVERFLOW (r1)
          || r2 == NULL_TREE || TREE_OVERFLOW (r2))
        return false;
@@ -9728,7 +9730,7 @@ vrp_finalize (void)
   substitute_and_fold (op_with_constant_singleton_value_range,
                       vrp_fold_stmt, false);
 
-  if (warn_array_bounds)
+  if (warn_array_bounds && first_pass_instance)
     check_all_array_refs ();
 
   /* We must identify jump threading opportunities before we release
index b9f3d60..293b29f 100644 (file)
@@ -1120,7 +1120,7 @@ int_cst_hash_hash (const void *x)
   const_tree const t = (const_tree) x;
 
   return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t)
-         ^ htab_hash_pointer (TREE_TYPE (t)));
+         ^ TYPE_UID (TREE_TYPE (t)));
 }
 
 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
@@ -6215,8 +6215,11 @@ build_qualified_type (tree type, int type_quals)
       else if (TYPE_CANONICAL (type) != type)
        /* Build the underlying canonical type, since it is different
           from TYPE. */
-       TYPE_CANONICAL (t) = build_qualified_type (TYPE_CANONICAL (type),
-                                                  type_quals);
+       {
+         tree c = build_qualified_type (TYPE_CANONICAL (type),
+                                        type_quals);
+         TYPE_CANONICAL (t) = TYPE_CANONICAL (c);
+       }
       else
        /* T is its own canonical type. */
        TYPE_CANONICAL (t) = t;
index 2e32cd2..dbda9c8 100644 (file)
@@ -651,25 +651,24 @@ instrument_memory_accesses (void)
 static void
 instrument_func_entry (void)
 {
-  basic_block succ_bb;
-  gimple_stmt_iterator gsi;
   tree ret_addr, builtin_decl;
   gimple g;
-
-  succ_bb = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun));
-  gsi = gsi_after_labels (succ_bb);
+  gimple_seq seq = NULL;
 
   builtin_decl = builtin_decl_implicit (BUILT_IN_RETURN_ADDRESS);
   g = gimple_build_call (builtin_decl, 1, integer_zero_node);
   ret_addr = make_ssa_name (ptr_type_node, NULL);
   gimple_call_set_lhs (g, ret_addr);
   gimple_set_location (g, cfun->function_start_locus);
-  gsi_insert_before (&gsi, g, GSI_SAME_STMT);
+  gimple_seq_add_stmt_without_update (&seq, g);
 
-  builtin_decl =  builtin_decl_implicit (BUILT_IN_TSAN_FUNC_ENTRY);
+  builtin_decl = builtin_decl_implicit (BUILT_IN_TSAN_FUNC_ENTRY);
   g = gimple_build_call (builtin_decl, 1, ret_addr);
   gimple_set_location (g, cfun->function_start_locus);
-  gsi_insert_before (&gsi, g, GSI_SAME_STMT);
+  gimple_seq_add_stmt_without_update (&seq, g);
+
+  edge e = single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun));
+  gsi_insert_seq_on_edge_immediate (e, seq);
 }
 
 /* Instruments function exits.  */
index dc70099..106cba4 100644 (file)
@@ -47,6 +47,8 @@ along with GCC; see the file COPYING3.  If not see
 #include "asan.h"
 #include "gimplify-me.h"
 #include "intl.h"
+#include "tree-eh.h"
+#include "tree-cfg.h"
 
 /* Map from a tree to a VAR_DECL tree.  */
 
@@ -807,7 +809,9 @@ instrument_bool_enum_load (gimple_stmt_iterator *gsi)
       || TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME)
     return;
 
+  bool ends_bb = stmt_ends_bb_p (stmt);
   location_t loc = gimple_location (stmt);
+  tree lhs = gimple_assign_lhs (stmt);
   tree ptype = build_pointer_type (TREE_TYPE (rhs));
   tree atype = reference_alias_ptr_type (rhs);
   gimple g = gimple_build_assign (make_ssa_name (ptype, NULL),
@@ -817,9 +821,24 @@ instrument_bool_enum_load (gimple_stmt_iterator *gsi)
   tree mem = build2 (MEM_REF, utype, gimple_assign_lhs (g),
                     build_int_cst (atype, 0));
   tree urhs = make_ssa_name (utype, NULL);
-  g = gimple_build_assign (urhs, mem);
-  gimple_set_location (g, loc);
-  gsi_insert_before (gsi, g, GSI_SAME_STMT);
+  if (ends_bb)
+    {
+      gimple_assign_set_lhs (stmt, urhs);
+      g = gimple_build_assign_with_ops (NOP_EXPR, lhs, urhs, NULL_TREE);
+      gimple_set_location (g, loc);
+      edge e = find_fallthru_edge (gimple_bb (stmt)->succs);
+      gsi_insert_on_edge_immediate (e, g);
+      gimple_assign_set_rhs_from_tree (gsi, mem);
+      update_stmt (stmt);
+      *gsi = gsi_for_stmt (g);
+      g = stmt;
+    }
+  else
+    {
+      g = gimple_build_assign (urhs, mem);
+      gimple_set_location (g, loc);
+      gsi_insert_before (gsi, g, GSI_SAME_STMT);
+    }
   minv = fold_convert (utype, minv);
   maxv = fold_convert (utype, maxv);
   if (!integer_zerop (minv))
@@ -841,8 +860,11 @@ instrument_bool_enum_load (gimple_stmt_iterator *gsi)
   gimple_set_location (g, loc);
   gsi_insert_after (gsi, g, GSI_NEW_STMT);
 
-  gimple_assign_set_rhs_with_ops (&gsi2, NOP_EXPR, urhs, NULL_TREE);
-  update_stmt (stmt);
+  if (!ends_bb)
+    {
+      gimple_assign_set_rhs_with_ops (&gsi2, NOP_EXPR, urhs, NULL_TREE);
+      update_stmt (stmt);
+    }
 
   tree data = ubsan_create_data ("__ubsan_invalid_value_data",
                                 &loc, NULL,
index 65d8285..d2ba642 100644 (file)
@@ -700,6 +700,39 @@ static void vt_add_function_parameters (void);
 static bool vt_initialize (void);
 static void vt_finalize (void);
 
+/* Callback for stack_adjust_offset_pre_post, called via for_each_inc_dec.  */
+
+static int
+stack_adjust_offset_pre_post_cb (rtx, rtx op, rtx dest, rtx src, rtx srcoff,
+                                void *arg)
+{
+  if (dest != stack_pointer_rtx)
+    return 0;
+
+  switch (GET_CODE (op))
+    {
+    case PRE_INC:
+    case PRE_DEC:
+      ((HOST_WIDE_INT *)arg)[0] -= INTVAL (srcoff);
+      return 0;
+    case POST_INC:
+    case POST_DEC:
+      ((HOST_WIDE_INT *)arg)[1] -= INTVAL (srcoff);
+      return 0;
+    case PRE_MODIFY:
+    case POST_MODIFY:
+      /* We handle only adjustments by constant amount.  */
+      gcc_assert (GET_CODE (src) == PLUS
+                 && CONST_INT_P (XEXP (src, 1))
+                 && XEXP (src, 0) == stack_pointer_rtx);
+      ((HOST_WIDE_INT *)arg)[GET_CODE (op) == POST_MODIFY]
+       -= INTVAL (XEXP (src, 1));
+      return 0;
+    default:
+      gcc_unreachable ();
+    }
+}
+
 /* Given a SET, calculate the amount of stack adjustment it contains
    PRE- and POST-modifying stack pointer.
    This function is similar to stack_adjust_offset.  */
@@ -725,68 +758,12 @@ stack_adjust_offset_pre_post (rtx pattern, HOST_WIDE_INT *pre,
        *post += INTVAL (XEXP (src, 1));
       else
        *post -= INTVAL (XEXP (src, 1));
+      return;  
     }
-  else if (MEM_P (dest))
-    {
-      /* (set (mem (pre_dec (reg sp))) (foo)) */
-      src = XEXP (dest, 0);
-      code = GET_CODE (src);
-
-      switch (code)
-       {
-       case PRE_MODIFY:
-       case POST_MODIFY:
-         if (XEXP (src, 0) == stack_pointer_rtx)
-           {
-             rtx val = XEXP (XEXP (src, 1), 1);
-             /* We handle only adjustments by constant amount.  */
-             gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS &&
-                         CONST_INT_P (val));
-
-             if (code == PRE_MODIFY)
-               *pre -= INTVAL (val);
-             else
-               *post -= INTVAL (val);
-             break;
-           }
-         return;
-
-       case PRE_DEC:
-         if (XEXP (src, 0) == stack_pointer_rtx)
-           {
-             *pre += GET_MODE_SIZE (GET_MODE (dest));
-             break;
-           }
-         return;
-
-       case POST_DEC:
-         if (XEXP (src, 0) == stack_pointer_rtx)
-           {
-             *post += GET_MODE_SIZE (GET_MODE (dest));
-             break;
-           }
-         return;
-
-       case PRE_INC:
-         if (XEXP (src, 0) == stack_pointer_rtx)
-           {
-             *pre -= GET_MODE_SIZE (GET_MODE (dest));
-             break;
-           }
-         return;
-
-       case POST_INC:
-         if (XEXP (src, 0) == stack_pointer_rtx)
-           {
-             *post -= GET_MODE_SIZE (GET_MODE (dest));
-             break;
-           }
-         return;
-
-       default:
-         return;
-       }
-    }
+  HOST_WIDE_INT res[2] = { 0, 0 };
+  for_each_inc_dec (&pattern, stack_adjust_offset_pre_post_cb, res);
+  *pre += res[0];
+  *post += res[1];
 }
 
 /* Given an INSN, calculate the amount of stack adjustment it contains
@@ -5997,7 +5974,8 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
     {
       cselib_val *oval = cselib_lookup (oloc, GET_MODE (oloc), 0, VOIDmode);
 
-      gcc_assert (oval != v);
+      if (oval == v)
+       return;
       gcc_assert (REG_P (oloc) || MEM_P (oloc));
 
       if (oval && !cselib_preserved_value_p (oval))
index 8e8c5f6..ef75e89 100644 (file)
@@ -95,11 +95,6 @@ tree last_assemble_variable_decl;
 
 bool first_function_block_is_cold;
 
-/* We give all constants their own alias set.  Perhaps redundant with
-   MEM_READONLY_P, but pre-dates it.  */
-
-static alias_set_type const_alias_set;
-
 /* Whether we saw any functions with no_split_stack.  */
 
 static bool saw_no_split_stack;
@@ -3250,7 +3245,6 @@ build_constant_desc (tree exp)
   rtl = gen_const_mem (TYPE_MODE (TREE_TYPE (exp)), symbol);
   set_mem_attributes (rtl, exp, 1);
   set_mem_alias_set (rtl, 0);
-  set_mem_alias_set (rtl, const_alias_set);
 
   /* We cannot share RTX'es in pool entries.
      Mark this piece of RTL as required for unsharing.  */
@@ -3880,8 +3874,12 @@ output_constant_pool_1 (struct constant_descriptor_rtx *desc,
   /* Output the label.  */
   targetm.asm_out.internal_label (asm_out_file, "LC", desc->labelno);
 
-  /* Output the data.  */
-  output_constant_pool_2 (desc->mode, x, align);
+  /* Output the data.
+     Pass actual alignment value while emitting string constant to asm code
+     as function 'output_constant_pool_1' explicitly passes the alignment as 1
+     assuming that the data is already aligned which prevents the generation 
+     of fix-up table entries.  */
+  output_constant_pool_2 (desc->mode, x, desc->align);
 
   /* Make sure all constants in SECTION_MERGE and not SECTION_STRINGS
      sections have proper size.  */
@@ -5957,7 +5955,6 @@ init_varasm_once (void)
   const_desc_htab = htab_create_ggc (1009, const_desc_hash,
                                     const_desc_eq, NULL);
 
-  const_alias_set = new_alias_set ();
   shared_constant_pool = create_constant_pool ();
 
 #ifdef TEXT_SECTION_ASM_OP
@@ -6964,7 +6961,13 @@ default_file_start (void)
     fputs (ASM_APP_OFF, asm_out_file);
 
   if (targetm.asm_file_start_file_directive)
-    output_file_directive (asm_out_file, main_input_filename);
+    {
+      /* LTO produced units have no meaningful main_input_filename.  */
+      if (in_lto_p)
+       output_file_directive (asm_out_file, "<artificial>");
+      else
+       output_file_directive (asm_out_file, main_input_filename);
+    }
 }
 
 /* This is a generic routine suitable for use as TARGET_ASM_FILE_END
@@ -7227,6 +7230,8 @@ output_object_block (struct object_block *block)
       if (CONSTANT_POOL_ADDRESS_P (symbol))
        {
          desc = SYMBOL_REF_CONSTANT (symbol);
+         /* Pass 1 for align as we have already laid out everything in the block.
+            So aligning shouldn't be necessary.  */
          output_constant_pool_1 (desc, 1);
          offset += GET_MODE_SIZE (desc->mode);
        }
index d67151c..7ee39a1 100644 (file)
--- a/gcc/web.c
+++ b/gcc/web.c
@@ -53,17 +53,17 @@ along with GCC; see the file COPYING3.  If not see
 
 /* Find the root of unionfind tree (the representative of set).  */
 
-struct web_entry *
-unionfind_root (struct web_entry *element)
+web_entry_base *
+web_entry_base::unionfind_root ()
 {
-  struct web_entry *element1 = element, *element2;
+  web_entry_base *element = this, *element1 = this, *element2;
 
-  while (element->pred)
-    element = element->pred;
-  while (element1->pred)
+  while (element->pred ())
+    element = element->pred ();
+  while (element1->pred ())
     {
-      element2 = element1->pred;
-      element1->pred = element;
+      element2 = element1->pred ();
+      element1->set_pred (element);
       element1 = element2;
     }
   return element;
@@ -74,23 +74,32 @@ unionfind_root (struct web_entry *element)
    nothing is done.  Otherwise, return false.  */
 
 bool
-unionfind_union (struct web_entry *first, struct web_entry *second)
+unionfind_union (web_entry_base *first, web_entry_base *second)
 {
-  first = unionfind_root (first);
-  second = unionfind_root (second);
+  first = first->unionfind_root ();
+  second = second->unionfind_root ();
   if (first == second)
     return true;
-  second->pred = first;
+  second->set_pred (first);
   return false;
 }
 
+class web_entry : public web_entry_base
+{
+ private:
+  rtx reg_pvt;
+
+ public:
+  rtx reg () { return reg_pvt; }
+  void set_reg (rtx r) { reg_pvt = r; }
+};
+
 /* For INSN, union all defs and uses that are linked by match_dup.
    FUN is the function that does the union.  */
 
 static void
-union_match_dups (rtx insn, struct web_entry *def_entry,
-                 struct web_entry *use_entry,
-                 bool (*fun) (struct web_entry *, struct web_entry *))
+union_match_dups (rtx insn, web_entry *def_entry, web_entry *use_entry,
+                 bool (*fun) (web_entry_base *, web_entry_base *))
 {
   struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
   df_ref *use_link = DF_INSN_INFO_USES (insn_info);
@@ -167,9 +176,9 @@ union_match_dups (rtx insn, struct web_entry *def_entry,
    the values 0 and 1 are reserved for use by entry_register.  */
 
 void
-union_defs (df_ref use, struct web_entry *def_entry,
-           unsigned int *used, struct web_entry *use_entry,
-           bool (*fun) (struct web_entry *, struct web_entry *))
+union_defs (df_ref use, web_entry *def_entry,
+           unsigned int *used, web_entry *use_entry,
+           bool (*fun) (web_entry_base *, web_entry_base *))
 {
   struct df_insn_info *insn_info = DF_REF_INSN_INFO (use);
   struct df_link *link = DF_REF_CHAIN (use);
@@ -270,15 +279,15 @@ union_defs (df_ref use, struct web_entry *def_entry,
 /* Find the corresponding register for the given entry.  */
 
 static rtx
-entry_register (struct web_entry *entry, df_ref ref, unsigned int *used)
+entry_register (web_entry *entry, df_ref ref, unsigned int *used)
 {
-  struct web_entry *root;
+  web_entry *root;
   rtx reg, newreg;
 
   /* Find the corresponding web and see if it has been visited.  */
-  root = unionfind_root (entry);
-  if (root->reg)
-    return root->reg;
+  root = (web_entry *)entry->unionfind_root ();
+  if (root->reg ())
+    return root->reg ();
 
   /* We are seeing this web for the first time, do the assignment.  */
   reg = DF_REF_REAL_REG (ref);
@@ -302,7 +311,7 @@ entry_register (struct web_entry *entry, df_ref ref, unsigned int *used)
                 REGNO (newreg));
     }
 
-  root->reg = newreg;
+  root->set_reg (newreg);
   return newreg;
 }
 
@@ -336,8 +345,8 @@ gate_handle_web (void)
 static unsigned int
 web_main (void)
 {
-  struct web_entry *def_entry;
-  struct web_entry *use_entry;
+  web_entry *def_entry;
+  web_entry *use_entry;
   unsigned int max = max_reg_num ();
   unsigned int *used;
   basic_block bb;
@@ -374,9 +383,9 @@ web_main (void)
     }
 
   /* Record the number of uses and defs at the beginning of the optimization.  */
-  def_entry = XCNEWVEC (struct web_entry, DF_DEFS_TABLE_SIZE ());
+  def_entry = XCNEWVEC (web_entry, DF_DEFS_TABLE_SIZE ());
   used = XCNEWVEC (unsigned, max);
-  use_entry = XCNEWVEC (struct web_entry, uses_num);
+  use_entry = XCNEWVEC (web_entry, uses_num);
 
   /* Produce the web.  */
   FOR_ALL_BB_FN (bb, cfun)
index 4074b08..7d21403 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 9ff64a0..59839bd 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index c1a4f25..eb4589f 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 27e7258..3f0f98f 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 6be97ea..1deda88 100644 (file)
@@ -1,3 +1,12 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-01-21  Andrew Waterman <waterman@cs.berkeley.edu>
+
+       * fop_n.c (libat_fetch_op): Align address to word boundary.
+       (libat_op_fetch): Likewise.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 4a18da9..9739b9c 100644 (file)
@@ -112,9 +112,9 @@ SIZE(C2(libat_fetch_,NAME)) (UTYPE *mptr, UTYPE opval, int smodel)
 
   pre_barrier (smodel);
 
-  wptr = (UWORD *)mptr;
-  shift = 0;
-  mask = -1;
+  wptr = (UWORD *)((uintptr_t)mptr & -WORDSIZE);
+  shift = (((uintptr_t)mptr % WORDSIZE) * CHAR_BIT) ^ SIZE(INVERT_MASK);
+  mask = SIZE(MASK) << shift;
 
   wopval = (UWORD)opval << shift;
   woldval = __atomic_load_n (wptr, __ATOMIC_RELAXED);
@@ -136,9 +136,9 @@ SIZE(C3(libat_,NAME,_fetch)) (UTYPE *mptr, UTYPE opval, int smodel)
 
   pre_barrier (smodel);
 
-  wptr = (UWORD *)mptr;
-  shift = 0;
-  mask = -1;
+  wptr = (UWORD *)((uintptr_t)mptr & -WORDSIZE);
+  shift = (((uintptr_t)mptr % WORDSIZE) * CHAR_BIT) ^ SIZE(INVERT_MASK);
+  mask = SIZE(MASK) << shift;
 
   wopval = (UWORD)opval << shift;
   woldval = __atomic_load_n (wptr, __ATOMIC_RELAXED);
index f73ab03..0a0fa7a 100644 (file)
@@ -1,3 +1,12 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-01-26  Matthias Klose  <doko@ubuntu.com>
+
+       * configure.ac: Move AM_ENABLE_MULTILIB before AC_PROG_CC.
+       * configure: Regenerate.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index f4f9d05..57a0f94 100755 (executable)
@@ -614,7 +614,6 @@ PIC_FLAG
 WARN_FLAGS
 EXTRA_FLAGS
 BACKTRACE_FILE
-multi_basedir
 OTOOL64
 OTOOL
 LIPO
@@ -680,6 +679,7 @@ build_os
 build_vendor
 build_cpu
 build
+multi_basedir
 target_alias
 host_alias
 build_alias
@@ -721,6 +721,7 @@ SHELL'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_multilib
 enable_maintainer_mode
 with_target_subdir
 enable_shared
@@ -729,7 +730,6 @@ with_pic
 enable_fast_install
 with_gnu_ld
 enable_libtool_lock
-enable_multilib
 with_system_libunwind
 enable_host_shared
 '
@@ -1362,6 +1362,7 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-multilib       build many library versions (default)
   --enable-maintainer-mode  enable make rules and dependencies not useful
                          (and sometimes confusing) to the casual installer
   --enable-shared[=PKGS]  build shared libraries [default=no]
@@ -1369,7 +1370,6 @@ Optional Features:
   --enable-fast-install[=PKGS]
                           optimize for fast installation [default=yes]
   --disable-libtool-lock  avoid locking (might break parallel builds)
-  --enable-multilib       build many library versions (default)
   --enable-host-shared    build host code as shared libraries
 
 Optional Packages:
@@ -2453,6 +2453,46 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 ac_config_headers="$ac_config_headers config.h"
 
 
+if test -n "${with_target_subdir}"; then
+  # Default to --enable-multilib
+# Check whether --enable-multilib was given.
+if test "${enable_multilib+set}" = set; then :
+  enableval=$enable_multilib; case "$enableval" in
+  yes) multilib=yes ;;
+  no)  multilib=no ;;
+  *)   as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;;
+ esac
+else
+  multilib=yes
+fi
+
+
+# We may get other options which we leave undocumented:
+# --with-target-subdir, --with-multisrctop, --with-multisubdir
+# See config-ml.in if you want the gory details.
+
+if test "$srcdir" = "."; then
+  if test "$with_target_subdir" != "."; then
+    multi_basedir="$srcdir/$with_multisrctop../.."
+  else
+    multi_basedir="$srcdir/$with_multisrctop.."
+  fi
+else
+  multi_basedir="$srcdir/.."
+fi
+
+
+# Even if the default multilib is not a cross compilation,
+# it may be that some of the other multilibs are.
+if test $cross_compiling = no && test $multilib = yes \
+   && test "x${with_multisubdir}" != x ; then
+   cross_compiling=maybe
+fi
+
+ac_config_commands="$ac_config_commands default-1"
+
+fi
+
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
   for ac_t in install-sh install.sh shtool; do
@@ -11089,7 +11129,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11092 "configure"
+#line 11132 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11195,7 +11235,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11198 "configure"
+#line 11238 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11439,43 +11479,6 @@ backtrace_supported=yes
 if test -n "${with_target_subdir}"; then
   # We are compiling a GCC library.  We can assume that the unwind
   # library exists.
-  # Default to --enable-multilib
-# Check whether --enable-multilib was given.
-if test "${enable_multilib+set}" = set; then :
-  enableval=$enable_multilib; case "$enableval" in
-  yes) multilib=yes ;;
-  no)  multilib=no ;;
-  *)   as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;;
- esac
-else
-  multilib=yes
-fi
-
-
-# We may get other options which we leave undocumented:
-# --with-target-subdir, --with-multisrctop, --with-multisubdir
-# See config-ml.in if you want the gory details.
-
-if test "$srcdir" = "."; then
-  if test "$with_target_subdir" != "."; then
-    multi_basedir="$srcdir/$with_multisrctop../.."
-  else
-    multi_basedir="$srcdir/$with_multisrctop.."
-  fi
-else
-  multi_basedir="$srcdir/.."
-fi
-
-
-# Even if the default multilib is not a cross compilation,
-# it may be that some of the other multilibs are.
-if test $cross_compiling = no && test $multilib = yes \
-   && test "x${with_multisubdir}" != x ; then
-   cross_compiling=maybe
-fi
-
-ac_config_commands="$ac_config_commands default-1"
-
   BACKTRACE_FILE="backtrace.lo simple.lo"
 else
   ac_fn_c_check_header_mongrel "$LINENO" "unwind.h" "ac_cv_header_unwind_h" "$ac_includes_default"
@@ -13174,6 +13177,20 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # INIT-COMMANDS
 #
 
+srcdir="$srcdir"
+host="$host"
+target="$target"
+with_multisubdir="$with_multisubdir"
+with_multisrctop="$with_multisrctop"
+with_target_subdir="$with_target_subdir"
+ac_configure_args="${multilib_arg} ${ac_configure_args}"
+multi_basedir="$multi_basedir"
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+CC="$CC"
+CXX="$CXX"
+GFORTRAN="$GFORTRAN"
+GCJ="$GCJ"
+
 
 # The HP-UX ksh and POSIX shell print the target directory to stdout
 # if CDPATH is set.
 
 
 
-srcdir="$srcdir"
-host="$host"
-target="$target"
-with_multisubdir="$with_multisubdir"
-with_multisrctop="$with_multisrctop"
-with_target_subdir="$with_target_subdir"
-ac_configure_args="${multilib_arg} ${ac_configure_args}"
-multi_basedir="$multi_basedir"
-CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-CC="$CC"
-CXX="$CXX"
-GFORTRAN="$GFORTRAN"
-GCJ="$GCJ"
-
 GCC="$GCC"
 CC="$CC"
 acx_cv_header_stdint="$acx_cv_header_stdint"
@@ -13480,8 +13483,8 @@ for ac_config_target in $ac_config_targets
 do
   case $ac_config_target in
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "gstdint.h") CONFIG_COMMANDS="$CONFIG_COMMANDS gstdint.h" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "backtrace-supported.h") CONFIG_FILES="$CONFIG_FILES backtrace-supported.h" ;;
@@ -14070,6 +14073,14 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
 
 
   case $ac_file$ac_mode in
+    "default-1":C)
+# Only add multilib support code if we just rebuilt the top-level
+# Makefile.
+case " $CONFIG_FILES " in
+ *" Makefile "*)
+   ac_file=Makefile . ${multi_basedir}/config-ml.in
+   ;;
+esac ;;
     "libtool":C)
 
     # See if we are running on zsh, and set the options which allow our
@@ -14709,14 +14720,6 @@ _LT_EOF
   chmod +x "$ofile"
 
  ;;
-    "default-1":C)
-# Only add multilib support code if we just rebuilt the top-level
-# Makefile.
-case " $CONFIG_FILES " in
- *" Makefile "*)
-   ac_file=Makefile . ${multi_basedir}/config-ml.in
-   ;;
-esac ;;
     "gstdint.h":C)
 if test "$GCC" = yes; then
   echo "/* generated for " `$CC --version | sed 1q` "*/" > tmp-stdint.h
index 878bd2c..40b4d54 100644 (file)
@@ -34,6 +34,10 @@ AC_INIT(package-unused, version-unused,, libbacktrace)
 AC_CONFIG_SRCDIR(backtrace.h)
 AC_CONFIG_HEADER(config.h)
 
+if test -n "${with_target_subdir}"; then
+  AM_ENABLE_MULTILIB(, ..)
+fi
+
 AC_CANONICAL_SYSTEM
 target_alias=${target_alias-$host_alias}
 
@@ -83,7 +87,6 @@ backtrace_supported=yes
 if test -n "${with_target_subdir}"; then
   # We are compiling a GCC library.  We can assume that the unwind
   # library exists.
-  AM_ENABLE_MULTILIB(, ..)
   BACKTRACE_FILE="backtrace.lo simple.lo"
 else
   AC_CHECK_HEADER([unwind.h],
index 2b7bc43..96a4999 100644 (file)
@@ -1,3 +1,12 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-01-26  Matthias Klose  <doko@ubuntu.com>
+
+       * configure.ac: Move AM_ENABLE_MULTILIB before AC_PROG_CC.
+       * configure: Regenerate.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 0dadbbd..31f848e 100644 (file)
@@ -634,7 +634,6 @@ EGREP
 GREP
 CPP
 ALLOCA
-multi_basedir
 am__fastdepCXX_FALSE
 am__fastdepCXX_TRUE
 CXXDEPMODE
@@ -657,6 +656,7 @@ CPPFLAGS
 LDFLAGS
 CFLAGS
 CC
+multi_basedir
 MAINT
 MAINTAINER_MODE_FALSE
 MAINTAINER_MODE_TRUE
@@ -737,8 +737,8 @@ ac_subst_files=''
 ac_user_opts='
 enable_option_checking
 enable_maintainer_mode
-enable_dependency_tracking
 enable_multilib
+enable_dependency_tracking
 enable_version_specific_runtime_libs
 enable_shared
 enable_static
@@ -1383,9 +1383,9 @@ Optional Features:
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --enable-maintainer-mode  enable make rules and dependencies not useful
                          (and sometimes confusing) to the casual installer
+  --enable-multilib       build many library versions (default)
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
-  --enable-multilib       build many library versions (default)
   --enable-version-specific-runtime-libs
                           Specify that runtime libraries should be installed
                           in a compi ler-specific directory
@@ -2873,6 +2873,44 @@ fi
 
 
 
+# Default to --enable-multilib
+# Check whether --enable-multilib was given.
+if test "${enable_multilib+set}" = set; then :
+  enableval=$enable_multilib; case "$enableval" in
+  yes) multilib=yes ;;
+  no)  multilib=no ;;
+  *)   as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;;
+ esac
+else
+  multilib=yes
+fi
+
+
+# We may get other options which we leave undocumented:
+# --with-target-subdir, --with-multisrctop, --with-multisubdir
+# See config-ml.in if you want the gory details.
+
+if test "$srcdir" = "."; then
+  if test "$with_target_subdir" != "."; then
+    multi_basedir="$srcdir/$with_multisrctop../.."
+  else
+    multi_basedir="$srcdir/$with_multisrctop.."
+  fi
+else
+  multi_basedir="$srcdir/.."
+fi
+
+
+# Even if the default multilib is not a cross compilation,
+# it may be that some of the other multilibs are.
+if test $cross_compiling = no && test $multilib = yes \
+   && test "x${with_multisubdir}" != x ; then
+   cross_compiling=maybe
+fi
+
+ac_config_commands="$ac_config_commands default-1"
+
+
 # Build a DLL on Windows
 # AC_LIBTOOL_WIN32_DLL
 ac_ext=c
@@ -4217,43 +4255,6 @@ fi
 # AC_CONFIG_MACRO_DIR([..])
 ac_config_files="$ac_config_files Makefile libcilkrts.spec"
 
-# Default to --enable-multilib
-# Check whether --enable-multilib was given.
-if test "${enable_multilib+set}" = set; then :
-  enableval=$enable_multilib; case "$enableval" in
-  yes) multilib=yes ;;
-  no)  multilib=no ;;
-  *)   as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;;
- esac
-else
-  multilib=yes
-fi
-
-
-# We may get other options which we leave undocumented:
-# --with-target-subdir, --with-multisrctop, --with-multisubdir
-# See config-ml.in if you want the gory details.
-
-if test "$srcdir" = "."; then
-  if test "$with_target_subdir" != "."; then
-    multi_basedir="$srcdir/$with_multisrctop../.."
-  else
-    multi_basedir="$srcdir/$with_multisrctop.."
-  fi
-else
-  multi_basedir="$srcdir/.."
-fi
-
-
-# Even if the default multilib is not a cross compilation,
-# it may be that some of the other multilibs are.
-if test $cross_compiling = no && test $multilib = yes \
-   && test "x${with_multisubdir}" != x ; then
-   cross_compiling=maybe
-fi
-
-ac_config_commands="$ac_config_commands default-1"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -11057,7 +11058,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11060 "configure"
+#line 11061 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11163,7 +11164,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11166 "configure"
+#line 11167 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -15232,7 +15233,6 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 #
 # INIT-COMMANDS
 #
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 
 srcdir="$srcdir"
 host="$host"
@@ -15247,6 +15247,7 @@ CC="$CC"
 CXX="$CXX"
 GFORTRAN="$GFORTRAN"
 GCJ="$GCJ"
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 
 
 # The HP-UX ksh and POSIX shell print the target directory to stdout
@@ -15616,10 +15617,10 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 for ac_config_target in $ac_config_targets
 do
   case $ac_config_target in
+    "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "libcilkrts.spec") CONFIG_FILES="$CONFIG_FILES libcilkrts.spec" ;;
-    "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
 
   *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
@@ -16039,6 +16040,14 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
 
 
   case $ac_file$ac_mode in
+    "default-1":C)
+# Only add multilib support code if we just rebuilt the top-level
+# Makefile.
+case " $CONFIG_FILES " in
+ *" Makefile "*)
+   ac_file=Makefile . ${multi_basedir}/config-ml.in
+   ;;
+esac ;;
     "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
   # Autoconf 2.62 quotes --file arguments for eval, but not when files
   # are listed without --file.  Let's play safe and only enable the eval
@@ -16134,14 +16143,6 @@ $as_echo X"$file" |
   done
 }
  ;;
-    "default-1":C)
-# Only add multilib support code if we just rebuilt the top-level
-# Makefile.
-case " $CONFIG_FILES " in
- *" Makefile "*)
-   ac_file=Makefile . ${multi_basedir}/config-ml.in
-   ;;
-esac ;;
     "libtool":C)
 
     # See if we are running on zsh, and set the options which allow our
index fb21505..369d94a 100644 (file)
@@ -43,6 +43,8 @@ AM_INIT_AUTOMAKE(foreign no-dist)
 
 AM_MAINTAINER_MODE
 
+AM_ENABLE_MULTILIB(, ..)
+
 # Build a DLL on Windows
 # AC_LIBTOOL_WIN32_DLL
 AC_PROG_CC
@@ -50,7 +52,6 @@ AC_PROG_CXX
 # AC_PROG_LIBTOOL
 # AC_CONFIG_MACRO_DIR([..])
 AC_CONFIG_FILES([Makefile libcilkrts.spec])
-AM_ENABLE_MULTILIB(, ..)
 AC_FUNC_ALLOCA
 
 # Check whether the target supports protected visibility.
index 05dbcc6..2cb99a0 100644 (file)
@@ -1,3 +1,26 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-06-12  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-04-09  Richard Biener  <rguenther@suse.de>
+
+       PR pch/65550
+       * files.c (pch_open_file): Allow main and pre-included files
+       when trying to open a PCH.
+
+2014-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-11-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR preprocessor/60436
+       * line-map.c (linemap_line_start): If highest is above 0x60000000
+       and we are still tracking columns or highest is above 0x70000000,
+       force add_map.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 149f06d..f983495 100644 (file)
@@ -291,11 +291,13 @@ pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
 
   /* If the file is not included as first include from either the toplevel
      file or the command-line it is not a valid use of PCH.  */
-  if (pfile->all_files
-      && pfile->all_files->next_file
-      && !(pfile->all_files->implicit_preinclude
-          || pfile->all_files->next_file->implicit_preinclude))
-    return false;
+  for (_cpp_file *f = pfile->all_files; f; f = f->next_file)
+    if (f->implicit_preinclude)
+      continue;
+    else if (f->main_file)
+      break;
+    else
+      return false;
 
   flen = strlen (path);
   len = flen + sizeof (extension);
index f9a7658..78c4393 100644 (file)
@@ -527,10 +527,10 @@ linemap_line_start (struct line_maps *set, linenum_type to_line,
          && line_delta * ORDINARY_MAP_NUMBER_OF_COLUMN_BITS (map) > 1000)
       || (max_column_hint >= (1U << ORDINARY_MAP_NUMBER_OF_COLUMN_BITS (map)))
       || (max_column_hint <= 80
-         && ORDINARY_MAP_NUMBER_OF_COLUMN_BITS (map) >= 10))
-    {
-      add_map = true;
-    }
+         && ORDINARY_MAP_NUMBER_OF_COLUMN_BITS (map) >= 10)
+      || (highest > 0x60000000
+         && (set->max_column_hint || highest > 0x70000000)))
+    add_map = true;
   else
     max_column_hint = set->max_column_hint;
   if (add_map)
@@ -541,7 +541,7 @@ linemap_line_start (struct line_maps *set, linenum_type to_line,
          /* If the column number is ridiculous or we've allocated a huge
             number of source_locations, give up on column numbers. */
          max_column_hint = 0;
-         if (highest >0x70000000)
+         if (highest > 0x70000000)
            return 0;
          column_bits = 0;
        }
index fc2c861..20982da 100644 (file)
@@ -1,3 +1,11 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2014-11-07  Joseph Myers  <joseph@codesourcery.com>
+
+       * ja.po: Update.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 6359d10..d917c05 100644 (file)
Binary files a/libcpp/po/ja.gmo and b/libcpp/po/ja.gmo differ
index cb2c95e..2c48c2c 100644 (file)
@@ -4,22 +4,21 @@
 # Daisuke Yamashita <yamad@mb.infoweb.ne.jp>, 1999-2001
 #    Masahito Yamaga <yamaga@ipc.chiba-u.ac.jp>, 1999.
 #    IIDA Yosiaki <iida@secom.ne.jp>, 1999.
-# Yasuaki Taniguchi <yasuakit@gmail.com>, 2010, 2011.
 # Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2012, 2013
+# Yasuaki Taniguchi <yasuakit@gmail.com>, 2010, 2011, 2014.
 msgid ""
 msgstr ""
-"Project-Id-Version: cpplib 4.8-b20130224\n"
+"Project-Id-Version: cpplib 4.9-b20140202\n"
 "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
 "POT-Creation-Date: 2014-02-02 17:35+0000\n"
-"PO-Revision-Date: 2013-03-04 18:01+0900\n"
-"Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
+"PO-Revision-Date: 2014-11-07 08:19+0000\n"
+"Last-Translator: Yasuaki Taniguchi <yasuakit@gmail.com>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
 "Language: ja\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 1.5.4\n"
 
 #: charset.c:673
 #, c-format
@@ -456,10 +455,8 @@ msgid "invalid suffix \"%.*s\" on integer constant"
 msgstr "整数定数に無効な接尾辞 \"%.*s\" があります"
 
 #: expr.c:667
-#, fuzzy
-#| msgid "use of C++0x long long integer constant"
 msgid "use of C++11 long long integer constant"
-msgstr "C++0x の long long 整数定数を使用しています"
+msgstr "C++11 の long long 整数定数を使用しています"
 
 #: expr.c:668
 msgid "use of C99 long long integer constant"
@@ -470,10 +467,8 @@ msgid "imaginary constants are a GCC extension"
 msgstr "虚数定数は GCC 拡張です"
 
 #: expr.c:690
-#, fuzzy
-#| msgid "binary constants are a GCC extension"
 msgid "binary constants are a C++1y feature or GCC extension"
-msgstr "二進定数は GCC 拡張です"
+msgstr "二進定数は C++1y の機能または GCC 拡張です"
 
 #: expr.c:787
 msgid "integer constant is too large for its type"
@@ -703,10 +698,8 @@ msgid "raw string delimiter longer than 16 characters"
 msgstr "生の文字列区切りが 16 文字より大きいです"
 
 #: lex.c:1558
-#, fuzzy
-#| msgid "invalid character '%c' in raw string delimiter"
 msgid "invalid new-line in raw string delimiter"
-msgstr "ç\94\9fã\81®æ\96\87å­\97å\88\97å\8cºå\88\87ã\82\8aå\86\85ã\81«ç\84¡å\8a¹ã\81ªæ\96\87å­\97 '%c' があります"
+msgstr "ç\94\9fã\81®æ\96\87å­\97å\88\97å\8cºå\88\87ã\82\8aå\86\85ã\81«ç\84¡å\8a¹ã\81ªæ\94¹è¡\8cがあります"
 
 #: lex.c:1562
 #, c-format
@@ -718,10 +711,8 @@ msgid "unterminated raw string"
 msgstr "終端されていない生の文字列です"
 
 #: lex.c:1654 lex.c:1783
-#, fuzzy
-#| msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
 msgid "invalid suffix on literal; C++11 requires a space between literal and string macro"
-msgstr "リテラルの接尾辞が無効です。C++11 では、リテラルと識別子の間にスペースを入れる必要があります。"
+msgstr "リテラルの接尾辞が無効です。C++11 では、リテラルと文字列マクロの間にスペースを入れる必要があります。"
 
 #: lex.c:1765
 msgid "null character(s) preserved in literal"
@@ -762,7 +753,7 @@ msgstr "無効な組み込みマクロ \"%s\" です"
 #: macro.c:236 macro.c:333
 #, c-format
 msgid "macro \"%s\" might prevent reproducible builds"
-msgstr ""
+msgstr "マクロ \"%s\" は再生性可能なビルドを阻害するかもしれません"
 
 #: macro.c:267
 msgid "could not determine file timestamp"
index 9942f9b..b1088a1 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 4d33646..9652c6e 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index df187b1..35c2001 100644 (file)
@@ -1,3 +1,87 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-02-26  Matthew Fortune  <matthew.fortune@imgtec.com>
+
+       Backported from mainline r213870
+
+       * config/mips/mips16.S: Do not build for soft-float.
+
+2015-02-17  Sandra Loosemore  <sandra@codesourcery.com>
+
+       Backported from mainline
+       2015-02-17  Sandra Loosemore  <sandra@codesourcery.com>
+
+       * config/arm/bpabi.S (test_div_by_zero): Make label names
+       consistent between thumb2 and arm mode cases.  Separate the
+       signed comparison on the high word of the numerator from the
+       unsigned comparison on the low word.
+       * config/arm/bpabi-v6m.S (test_div_by_zero): Similarly separate
+       signed comparison.
+
+2015-02-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backported from mainline
+       2015-01-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/i386/cpuinfo.c (processor_subtypes): Add
+       INTEL_COREI7_BROADWELL.
+       (get_intel_cpu): Support new Silvermont, Haswell and Broadwell
+       model numbers.
+
+2015-01-31  John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/pa/linux-atomic.c (__kernel_cmpxchg2): Change declaration of
+       oldval and newval to const void *.  Fix typo.
+       (FETCH_AND_OP_2): Use __atomic_load_n to load value.
+       (FETCH_AND_OP_WORD): Likewise.
+       (OP_AND_FETCH_WORD): Likewise.
+       (COMPARE_AND_SWAP_2): Likewise.
+       (__sync_val_compare_and_swap_4): Likewise.
+       (__sync_lock_test_and_set_4): Likewise.
+       (SYNC_LOCK_RELEASE_2): Likewise.
+       Remove support for long long atomic operations.
+
+2015-01-20  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       Backport from mainline
+       * config/nios2/linux-unwind.h (nios2_fallback_frame_state):
+       Update rt_sigframe format and address for current Nios II
+       Linux conventions.
+
+2014-12-09  John David Anglin  <danglin@gcc.gnu.org>
+
+       Backport from mainline
+       2014-11-24  John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/pa/linux-atomic.c (ABORT_INSTRUCTION): Use __builtin_trap()
+       instead.
+
+       2014-11-21  Guy Martin  <gmsoft@tuxicoman.be>
+                   John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/pa/linux-atomic.c (__kernel_cmpxchg2): New.
+       (FETCH_AND_OP_2): New.  Use for subword and double word operations.
+       (OP_AND_FETCH_2): Likewise.
+       (COMPARE_AND_SWAP_2): Likewise.
+       (SYNC_LOCK_TEST_AND_SET_2): Likewise.
+       (SYNC_LOCK_RELEASE_2): Likewise.
+       (SUBWORD_SYNC_OP): Remove.
+       (SUBWORD_VAL_CAS): Likewise.
+       (SUBWORD_BOOL_CAS): Likewise.
+       (FETCH_AND_OP_WORD): Update.
+       Consistently use signed types.
+
+2014-12-09  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2014-11-30  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/55351
+       * config/sh/lib1funcs.S: Check value of __SHMEDIA__ instead of checking
+       whether it's defined.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 0bf2e55..e36f2a3 100644 (file)
@@ -85,19 +85,21 @@ FUNC_START aeabi_ulcmp
        cmp     yyl, #0
        bne     7f
        cmp     xxh, #0
+       .ifc    \signed, unsigned
        bne     2f
        cmp     xxl, #0
 2:
-       .ifc    \signed, unsigned
        beq     3f
        mov     xxh, #0
        mvn     xxh, xxh                @ 0xffffffff
        mov     xxl, xxh
 3:
        .else
-       beq     5f
        blt     6f
-       mov     xxl, #0
+       bgt     4f
+       cmp     xxl, #0
+       beq     5f
+4:     mov     xxl, #0
        mvn     xxl, xxl                @ 0xffffffff
        lsr     xxh, xxl, #1            @ 0x7fffffff
        b       5f
index 7772301..c47b1c4 100644 (file)
@@ -78,26 +78,29 @@ ARM_FUNC_START aeabi_ulcmp
 /* Tail-call to divide-by-zero handlers which may be overridden by the user,
    so unwinding works properly.  */
 #if defined(__thumb2__)
-       cbnz    yyh, 1f
-       cbnz    yyl, 1f
+       cbnz    yyh, 2f
+       cbnz    yyl, 2f
        cmp     xxh, #0
+       .ifc \signed, unsigned
        do_it   eq
        cmpeq   xxl, #0
-       .ifc \signed, unsigned
-       beq     2f
-       mov     xxh, #0xffffffff
-       mov     xxl, xxh
-2:
+       do_it   ne, t
+       movne   xxh, #0xffffffff
+       movne   xxl, #0xffffffff
        .else
-       do_it   lt, t
+       do_it   lt, tt
        movlt   xxl, #0
        movlt   xxh, #0x80000000
-       do_it   gt, t
-       movgt   xxh, #0x7fffffff
-       movgt   xxl, #0xffffffff
+       blt     1f
+       do_it   eq
+       cmpeq   xxl, #0
+       do_it   ne, t
+       movne   xxh, #0x7fffffff
+       movne   xxl, #0xffffffff
        .endif
+1:     
        b       SYM (__aeabi_ldiv0) __PLT__
-1:
+2:
 #else
        /* Note: Thumb-1 code calls via an ARM shim on processors which
           support ARM mode.  */
@@ -105,16 +108,19 @@ ARM_FUNC_START aeabi_ulcmp
        cmpeq   yyl, #0
        bne     2f
        cmp     xxh, #0
-       cmpeq   xxl, #0
        .ifc \signed, unsigned
+       cmpeq   xxl, #0
        movne   xxh, #0xffffffff
        movne   xxl, #0xffffffff
        .else
        movlt   xxh, #0x80000000
        movlt   xxl, #0
-       movgt   xxh, #0x7fffffff
-       movgt   xxl, #0xffffffff
+       blt     1f
+       cmpeq   xxl, #0
+       movne   xxh, #0x7fffffff
+       movne   xxl, #0xffffffff
        .endif
+1:
        b       SYM (__aeabi_ldiv0) __PLT__
 2:
 #endif
index 6ff7502..7972ced 100644 (file)
@@ -75,6 +75,7 @@ enum processor_subtypes
   AMDFAM15H_BDVER4,
   INTEL_COREI7_IVYBRIDGE,
   INTEL_COREI7_HASWELL,
+  INTEL_COREI7_BROADWELL,
   CPU_SUBTYPE_MAX
 };
 
@@ -184,7 +185,10 @@ get_intel_cpu (unsigned int family, unsigned int model, unsigned int brand_id)
              __cpu_model.__cpu_type = INTEL_BONNELL;
              break;
            case 0x37:
+           case 0x4a:
            case 0x4d:
+           case 0x5a:
+           case 0x5d:
              /* Silvermont.  */
              __cpu_model.__cpu_type = INTEL_SILVERMONT;
              break;
@@ -216,12 +220,20 @@ get_intel_cpu (unsigned int family, unsigned int model, unsigned int brand_id)
              __cpu_model.__cpu_subtype = INTEL_COREI7_IVYBRIDGE;
              break;
            case 0x3c:
+           case 0x3f:
            case 0x45:
            case 0x46:
              /* Haswell.  */
              __cpu_model.__cpu_type = INTEL_COREI7;
              __cpu_model.__cpu_subtype = INTEL_COREI7_HASWELL;
              break;
+           case 0x3d:
+           case 0x4f:
+           case 0x56:
+             /* Broadwell.  */
+             __cpu_model.__cpu_type = INTEL_COREI7;
+             __cpu_model.__cpu_subtype = INTEL_COREI7_BROADWELL;
+             break;
            case 0x17:
            case 0x1d:
              /* Penryn.  */
index 68d46d2..b445b46 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 6a43a98..dde8939 100644 (file)
@@ -21,8 +21,12 @@ a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
-#ifdef __mips_micromips
-  /* DO NOTHING */
+#if defined(__mips_micromips) || defined(__mips_soft_float)
+  /* Do nothing because this code is only needed when linking
+     against mips16 hard-float objects.  Neither micromips code
+     nor soft-float code can be linked against mips16 hard-float
+     objects so we do not need these routines when building libgcc
+     for those cases.  */
 #else
 
 /* This file contains mips16 floating point support functions.  These
@@ -749,4 +753,4 @@ CALL_STUB_RET (__mips16_call_stub_dc_10, 10, DC)
 #endif /* !__mips_single_float */
 
 #endif
-#endif /* __mips_micromips */
+#endif /* defined(__mips_micromips) || defined(__mips_soft_float) */
index 92ff1f6..ba4bd80 100644 (file)
@@ -67,10 +67,9 @@ nios2_fallback_frame_state (struct _Unwind_Context *context,
   if (pc[0] == (0x00800004 | (__NR_rt_sigreturn << 6)))
     {
       struct rt_sigframe {
-       char retcode[12];
        siginfo_t info;
        struct nios2_ucontext uc;
-      } *rt_ = context->ra;
+      } *rt_ = context->cfa;
       struct nios2_mcontext *regs = &rt_->uc.uc_mcontext;
       int i;
 
index d92d6ef..2554f46 100644 (file)
@@ -41,11 +41,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    using the kernel helper defined below.  There is no support for
    64-bit operations yet.  */
 
-/* A privileged instruction to crash a userspace program with SIGILL.  */
-#define ABORT_INSTRUCTION asm ("iitlbp %r0,(%sr0, %r0)")
-
 /* Determine kernel LWS function call (0=32-bit, 1=64-bit userspace).  */
-#define LWS_CAS (sizeof(unsigned long) == 4 ? 0 : 1)
+#define LWS_CAS (sizeof(long) == 4 ? 0 : 1)
 
 /* Kernel helper for compare-and-exchange a 32-bit value.  */
 static inline long
@@ -64,7 +61,7 @@ __kernel_cmpxchg (int oldval, int newval, int *mem)
        : "r1", "r20", "r22", "r23", "r29", "r31", "memory"
   );
   if (__builtin_expect (lws_errno == -EFAULT || lws_errno == -ENOSYS, 0))
-    ABORT_INSTRUCTION;
+    __builtin_trap ();
 
   /* If the kernel LWS call succeeded (lws_errno == 0), lws_ret contains
      the old value from memory.  If this value is equal to OLDVAL, the
@@ -75,6 +72,31 @@ __kernel_cmpxchg (int oldval, int newval, int *mem)
   return lws_errno;
 }
 
+static inline long
+__kernel_cmpxchg2 (const void *oldval, const void *newval, void *mem,
+                  int val_size)
+{
+  register unsigned long lws_mem asm("r26") = (unsigned long) (mem);
+  register long lws_ret   asm("r28");
+  register long lws_errno asm("r21");
+  register unsigned long lws_old asm("r25") = (unsigned long) oldval;
+  register unsigned long lws_new asm("r24") = (unsigned long) newval;
+  register int lws_size asm("r23") = val_size;
+  asm volatile (       "ble    0xb0(%%sr2, %%r0)       \n\t"
+                       "ldi    %2, %%r20               \n\t"
+       : "=r" (lws_ret), "=r" (lws_errno)
+       : "i" (2), "r" (lws_mem), "r" (lws_old), "r" (lws_new), "r" (lws_size)
+       : "r1", "r20", "r22", "r29", "r31", "fr4", "memory"
+  );
+  if (__builtin_expect (lws_errno == -EFAULT || lws_errno == -ENOSYS, 0))
+    __builtin_trap ();
+
+  /* If the kernel LWS call fails, return EBUSY */
+  if (!lws_errno && lws_ret)
+    lws_errno = -EBUSY;
+
+  return lws_errno;
+}
 #define HIDDEN __attribute__ ((visibility ("hidden")))
 
 /* Big endian masks  */
@@ -84,6 +106,66 @@ __kernel_cmpxchg (int oldval, int newval, int *mem)
 #define MASK_1 0xffu
 #define MASK_2 0xffffu
 
+#define FETCH_AND_OP_2(OP, PFX_OP, INF_OP, TYPE, WIDTH, INDEX)         \
+  TYPE HIDDEN                                                          \
+  __sync_fetch_and_##OP##_##WIDTH (TYPE *ptr, TYPE val)                        \
+  {                                                                    \
+    TYPE tmp, newval;                                                  \
+    int failure;                                                       \
+                                                                       \
+    do {                                                               \
+      tmp = __atomic_load_n (ptr, __ATOMIC_SEQ_CST);                   \
+      newval = PFX_OP (tmp INF_OP val);                                        \
+      failure = __kernel_cmpxchg2 (&tmp, &newval, ptr, INDEX);         \
+    } while (failure != 0);                                            \
+                                                                       \
+    return tmp;                                                                \
+  }
+
+FETCH_AND_OP_2 (add,   , +, short, 2, 1)
+FETCH_AND_OP_2 (sub,   , -, short, 2, 1)
+FETCH_AND_OP_2 (or,    , |, short, 2, 1)
+FETCH_AND_OP_2 (and,   , &, short, 2, 1)
+FETCH_AND_OP_2 (xor,   , ^, short, 2, 1)
+FETCH_AND_OP_2 (nand, ~, &, short, 2, 1)
+
+FETCH_AND_OP_2 (add,   , +, signed char, 1, 0)
+FETCH_AND_OP_2 (sub,   , -, signed char, 1, 0)
+FETCH_AND_OP_2 (or,    , |, signed char, 1, 0)
+FETCH_AND_OP_2 (and,   , &, signed char, 1, 0)
+FETCH_AND_OP_2 (xor,   , ^, signed char, 1, 0)
+FETCH_AND_OP_2 (nand, ~, &, signed char, 1, 0)
+
+#define OP_AND_FETCH_2(OP, PFX_OP, INF_OP, TYPE, WIDTH, INDEX)         \
+  TYPE HIDDEN                                                          \
+  __sync_##OP##_and_fetch_##WIDTH (TYPE *ptr, TYPE val)                        \
+  {                                                                    \
+    TYPE tmp, newval;                                                  \
+    int failure;                                                       \
+                                                                       \
+    do {                                                               \
+      tmp = __atomic_load_n (ptr, __ATOMIC_SEQ_CST);                   \
+      newval = PFX_OP (tmp INF_OP val);                                        \
+      failure = __kernel_cmpxchg2 (&tmp, &newval, ptr, INDEX);         \
+    } while (failure != 0);                                            \
+                                                                       \
+    return PFX_OP (tmp INF_OP val);                                    \
+  }
+
+OP_AND_FETCH_2 (add,   , +, short, 2, 1)
+OP_AND_FETCH_2 (sub,   , -, short, 2, 1)
+OP_AND_FETCH_2 (or,    , |, short, 2, 1)
+OP_AND_FETCH_2 (and,   , &, short, 2, 1)
+OP_AND_FETCH_2 (xor,   , ^, short, 2, 1)
+OP_AND_FETCH_2 (nand, ~, &, short, 2, 1)
+
+OP_AND_FETCH_2 (add,   , +, signed char, 1, 0)
+OP_AND_FETCH_2 (sub,   , -, signed char, 1, 0)
+OP_AND_FETCH_2 (or,    , |, signed char, 1, 0)
+OP_AND_FETCH_2 (and,   , &, signed char, 1, 0)
+OP_AND_FETCH_2 (xor,   , ^, signed char, 1, 0)
+OP_AND_FETCH_2 (nand, ~, &, signed char, 1, 0)
+
 #define FETCH_AND_OP_WORD(OP, PFX_OP, INF_OP)                          \
   int HIDDEN                                                           \
   __sync_fetch_and_##OP##_4 (int *ptr, int val)                                \
@@ -91,7 +173,7 @@ __kernel_cmpxchg (int oldval, int newval, int *mem)
     int failure, tmp;                                                  \
                                                                        \
     do {                                                               \
-      tmp = *ptr;                                                      \
+      tmp = __atomic_load_n (ptr, __ATOMIC_SEQ_CST);                   \
       failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr);  \
     } while (failure != 0);                                            \
                                                                        \
@@ -105,48 +187,6 @@ FETCH_AND_OP_WORD (and,   , &)
 FETCH_AND_OP_WORD (xor,   , ^)
 FETCH_AND_OP_WORD (nand, ~, &)
 
-#define NAME_oldval(OP, WIDTH) __sync_fetch_and_##OP##_##WIDTH
-#define NAME_newval(OP, WIDTH) __sync_##OP##_and_fetch_##WIDTH
-
-/* Implement both __sync_<op>_and_fetch and __sync_fetch_and_<op> for
-   subword-sized quantities.  */
-
-#define SUBWORD_SYNC_OP(OP, PFX_OP, INF_OP, TYPE, WIDTH, RETURN)       \
-  TYPE HIDDEN                                                          \
-  NAME##_##RETURN (OP, WIDTH) (TYPE *ptr, TYPE val)                    \
-  {                                                                    \
-    int *wordptr = (int *) ((unsigned long) ptr & ~3);                 \
-    unsigned int mask, shift, oldval, newval;                          \
-    int failure;                                                       \
-                                                                       \
-    shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH;    \
-    mask = MASK_##WIDTH << shift;                                      \
-                                                                       \
-    do {                                                               \
-      oldval = *wordptr;                                               \
-      newval = ((PFX_OP (((oldval & mask) >> shift)                    \
-                         INF_OP (unsigned int) val)) << shift) & mask; \
-      newval |= oldval & ~mask;                                                \
-      failure = __kernel_cmpxchg (oldval, newval, wordptr);            \
-    } while (failure != 0);                                            \
-                                                                       \
-    return (RETURN & mask) >> shift;                                   \
-  }
-
-SUBWORD_SYNC_OP (add,   , +, unsigned short, 2, oldval)
-SUBWORD_SYNC_OP (sub,   , -, unsigned short, 2, oldval)
-SUBWORD_SYNC_OP (or,    , |, unsigned short, 2, oldval)
-SUBWORD_SYNC_OP (and,   , &, unsigned short, 2, oldval)
-SUBWORD_SYNC_OP (xor,   , ^, unsigned short, 2, oldval)
-SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, oldval)
-
-SUBWORD_SYNC_OP (add,   , +, unsigned char, 1, oldval)
-SUBWORD_SYNC_OP (sub,   , -, unsigned char, 1, oldval)
-SUBWORD_SYNC_OP (or,    , |, unsigned char, 1, oldval)
-SUBWORD_SYNC_OP (and,   , &, unsigned char, 1, oldval)
-SUBWORD_SYNC_OP (xor,   , ^, unsigned char, 1, oldval)
-SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, oldval)
-
 #define OP_AND_FETCH_WORD(OP, PFX_OP, INF_OP)                          \
   int HIDDEN                                                           \
   __sync_##OP##_and_fetch_4 (int *ptr, int val)                                \
@@ -154,7 +194,7 @@ SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, oldval)
     int tmp, failure;                                                  \
                                                                        \
     do {                                                               \
-      tmp = *ptr;                                                      \
+      tmp = __atomic_load_n (ptr, __ATOMIC_SEQ_CST);                   \
       failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr);  \
     } while (failure != 0);                                            \
                                                                        \
@@ -168,19 +208,40 @@ OP_AND_FETCH_WORD (and,   , &)
 OP_AND_FETCH_WORD (xor,   , ^)
 OP_AND_FETCH_WORD (nand, ~, &)
 
-SUBWORD_SYNC_OP (add,   , +, unsigned short, 2, newval)
-SUBWORD_SYNC_OP (sub,   , -, unsigned short, 2, newval)
-SUBWORD_SYNC_OP (or,    , |, unsigned short, 2, newval)
-SUBWORD_SYNC_OP (and,   , &, unsigned short, 2, newval)
-SUBWORD_SYNC_OP (xor,   , ^, unsigned short, 2, newval)
-SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, newval)
+typedef unsigned char bool;
+
+#define COMPARE_AND_SWAP_2(TYPE, WIDTH, INDEX)                         \
+  TYPE HIDDEN                                                          \
+  __sync_val_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval,         \
+                                      TYPE newval)                     \
+  {                                                                    \
+    TYPE actual_oldval;                                                        \
+    int fail;                                                          \
+                                                                       \
+    while (1)                                                          \
+      {                                                                        \
+       actual_oldval = __atomic_load_n (ptr, __ATOMIC_SEQ_CST);        \
+                                                                       \
+       if (__builtin_expect (oldval != actual_oldval, 0))              \
+         return actual_oldval;                                         \
+                                                                       \
+       fail = __kernel_cmpxchg2 (&actual_oldval, &newval, ptr, INDEX); \
+                                                                       \
+       if (__builtin_expect (!fail, 1))                                \
+         return actual_oldval;                                         \
+      }                                                                        \
+  }                                                                    \
+                                                                       \
+  bool HIDDEN                                                          \
+  __sync_bool_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval,                \
+                                       TYPE newval)                    \
+  {                                                                    \
+    int failure = __kernel_cmpxchg2 (&oldval, &newval, ptr, INDEX);    \
+    return (failure != 0);                                             \
+  }
 
-SUBWORD_SYNC_OP (add,   , +, unsigned char, 1, newval)
-SUBWORD_SYNC_OP (sub,   , -, unsigned char, 1, newval)
-SUBWORD_SYNC_OP (or,    , |, unsigned char, 1, newval)
-SUBWORD_SYNC_OP (and,   , &, unsigned char, 1, newval)
-SUBWORD_SYNC_OP (xor,   , ^, unsigned char, 1, newval)
-SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, newval)
+COMPARE_AND_SWAP_2 (short, 2, 1)
+COMPARE_AND_SWAP_2 (char, 1, 0)
 
 int HIDDEN
 __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
@@ -189,7 +250,7 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
     
   while (1)
     {
-      actual_oldval = *ptr;
+      actual_oldval = __atomic_load_n (ptr, __ATOMIC_SEQ_CST);
 
       if (__builtin_expect (oldval != actual_oldval, 0))
        return actual_oldval;
@@ -201,41 +262,6 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
     }
 }
 
-#define SUBWORD_VAL_CAS(TYPE, WIDTH)                                   \
-  TYPE HIDDEN                                                          \
-  __sync_val_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval,         \
-                                      TYPE newval)                     \
-  {                                                                    \
-    int *wordptr = (int *)((unsigned long) ptr & ~3), fail;            \
-    unsigned int mask, shift, actual_oldval, actual_newval;            \
-                                                                       \
-    shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH;    \
-    mask = MASK_##WIDTH << shift;                                      \
-                                                                       \
-    while (1)                                                          \
-      {                                                                        \
-       actual_oldval = *wordptr;                                       \
-                                                                       \
-       if (__builtin_expect (((actual_oldval & mask) >> shift)         \
-                             != (unsigned int) oldval, 0))             \
-         return (actual_oldval & mask) >> shift;                       \
-                                                                       \
-       actual_newval = (actual_oldval & ~mask)                         \
-                       | (((unsigned int) newval << shift) & mask);    \
-                                                                       \
-       fail = __kernel_cmpxchg (actual_oldval, actual_newval,          \
-                                wordptr);                              \
-                                                                       \
-       if (__builtin_expect (!fail, 1))                                \
-         return (actual_oldval & mask) >> shift;                       \
-      }                                                                        \
-  }
-
-SUBWORD_VAL_CAS (unsigned short, 2)
-SUBWORD_VAL_CAS (unsigned char,  1)
-
-typedef unsigned char bool;
-
 bool HIDDEN
 __sync_bool_compare_and_swap_4 (int *ptr, int oldval, int newval)
 {
@@ -243,18 +269,23 @@ __sync_bool_compare_and_swap_4 (int *ptr, int oldval, int newval)
   return (failure == 0);
 }
 
-#define SUBWORD_BOOL_CAS(TYPE, WIDTH)                                  \
-  bool HIDDEN                                                          \
-  __sync_bool_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval,                \
-                                       TYPE newval)                    \
+#define SYNC_LOCK_TEST_AND_SET_2(TYPE, WIDTH, INDEX)                   \
+TYPE HIDDEN                                                            \
+  __sync_lock_test_and_set_##WIDTH (TYPE *ptr, TYPE val)               \
   {                                                                    \
-    TYPE actual_oldval                                                 \
-      = __sync_val_compare_and_swap_##WIDTH (ptr, oldval, newval);     \
-    return (oldval == actual_oldval);                                  \
+    TYPE oldval;                                                       \
+    int failure;                                                       \
+                                                                       \
+    do {                                                               \
+      oldval = __atomic_load_n (ptr, __ATOMIC_SEQ_CST);                        \
+      failure = __kernel_cmpxchg2 (&oldval, &val, ptr, INDEX);         \
+    } while (failure != 0);                                            \
+                                                                       \
+    return oldval;                                                     \
   }
 
-SUBWORD_BOOL_CAS (unsigned short, 2)
-SUBWORD_BOOL_CAS (unsigned char,  1)
+SYNC_LOCK_TEST_AND_SET_2 (short, 2, 1)
+SYNC_LOCK_TEST_AND_SET_2 (signed char, 1, 0)
 
 int HIDDEN
 __sync_lock_test_and_set_4 (int *ptr, int val)
@@ -262,44 +293,35 @@ __sync_lock_test_and_set_4 (int *ptr, int val)
   int failure, oldval;
 
   do {
-    oldval = *ptr;
+    oldval = __atomic_load_n (ptr, __ATOMIC_SEQ_CST);
     failure = __kernel_cmpxchg (oldval, val, ptr);
   } while (failure != 0);
 
   return oldval;
 }
 
-#define SUBWORD_TEST_AND_SET(TYPE, WIDTH)                              \
-  TYPE HIDDEN                                                          \
-  __sync_lock_test_and_set_##WIDTH (TYPE *ptr, TYPE val)               \
-  {                                                                    \
-    int failure;                                                       \
-    unsigned int oldval, newval, shift, mask;                          \
-    int *wordptr = (int *) ((unsigned long) ptr & ~3);                 \
-                                                                       \
-    shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH;    \
-    mask = MASK_##WIDTH << shift;                                      \
-                                                                       \
-    do {                                                               \
-      oldval = *wordptr;                                               \
-      newval = (oldval & ~mask)                                                \
-              | (((unsigned int) val << shift) & mask);                \
-      failure = __kernel_cmpxchg (oldval, newval, wordptr);            \
-    } while (failure != 0);                                            \
-                                                                       \
-    return (oldval & mask) >> shift;                                   \
+#define SYNC_LOCK_RELEASE_2(TYPE, WIDTH, INDEX)                        \
+  void HIDDEN                                                  \
+  __sync_lock_release_##WIDTH (TYPE *ptr)                      \
+  {                                                            \
+    TYPE failure, oldval, zero = 0;                            \
+                                                               \
+    do {                                                       \
+      oldval = __atomic_load_n (ptr, __ATOMIC_SEQ_CST);                \
+      failure = __kernel_cmpxchg2 (&oldval, &zero, ptr, INDEX);        \
+    } while (failure != 0);                                    \
   }
 
-SUBWORD_TEST_AND_SET (unsigned short, 2)
-SUBWORD_TEST_AND_SET (unsigned char,  1)
+SYNC_LOCK_RELEASE_2 (short, 2, 1)
+SYNC_LOCK_RELEASE_2 (signed char, 1, 0)
 
-#define SYNC_LOCK_RELEASE(TYPE, WIDTH)                                 \
-  void HIDDEN                                                          \
-  __sync_lock_release_##WIDTH (TYPE *ptr)                              \
-  {                                                                    \
-    *ptr = 0;                                                          \
-  }
+void HIDDEN
+__sync_lock_release_4 (int *ptr)
+{
+  int failure, oldval;
 
-SYNC_LOCK_RELEASE (int,   4)
-SYNC_LOCK_RELEASE (short, 2)
-SYNC_LOCK_RELEASE (char,  1)
+  do {
+    oldval = *ptr;
+    failure = __kernel_cmpxchg (oldval, 0, ptr);
+  } while (failure != 0);
+}
index 3410cf7..cfd6dc2 100644 (file)
@@ -1278,7 +1278,7 @@ GLOBAL(sdivsi3_2):
 #endif
        ENDFUNC(GLOBAL(sdivsi3_2))
 #endif
-#elif defined __SHMEDIA__
+#elif __SHMEDIA__
 /* m5compact-nofpu */
  // clobbered: r18,r19,r20,r21,r25,tr0,tr1,tr2
        .mode   SHmedia
@@ -1683,7 +1683,7 @@ GLOBAL(udivsi3):
  add.l r18,r25,r0
  blink tr0,r63
 #endif
-#elif defined (__SHMEDIA__)
+#elif __SHMEDIA__
 /* m5compact-nofpu - more emphasis on code size than on speed, but don't
    ignore speed altogether - div1 needs 9 cycles, subc 7 and rotcl 4.
    So use a short shmedia loop.  */
@@ -1707,7 +1707,7 @@ LOCAL(udivsi3_dontsub):
  bnei r25,-32,tr1
  add.l r20,r63,r0
  blink tr2,r63
-#else /* ! defined (__SHMEDIA__) */
+#else /* ! __SHMEDIA__ */
 LOCAL(div8):
  div1 r5,r4
 LOCAL(div7):
@@ -1773,7 +1773,7 @@ LOCAL(large_divisor):
 #endif /* L_udivsi3 */
 
 #ifdef L_udivdi3
-#ifdef __SHMEDIA__
+#if __SHMEDIA__
        .mode   SHmedia
        .section        .text..SHmedia32,"ax"
        .align  2
@@ -1901,7 +1901,7 @@ LOCAL(no_lo_adj):
 #endif /* L_udivdi3 */
 
 #ifdef L_divdi3
-#ifdef __SHMEDIA__
+#if __SHMEDIA__
        .mode   SHmedia
        .section        .text..SHmedia32,"ax"
        .align  2
@@ -1925,7 +1925,7 @@ GLOBAL(divdi3):
 #endif /* L_divdi3 */
 
 #ifdef L_umoddi3
-#ifdef __SHMEDIA__
+#if __SHMEDIA__
        .mode   SHmedia
        .section        .text..SHmedia32,"ax"
        .align  2
@@ -2054,7 +2054,7 @@ LOCAL(no_lo_adj):
 #endif /* L_umoddi3 */
 
 #ifdef L_moddi3
-#ifdef __SHMEDIA__
+#if __SHMEDIA__
        .mode   SHmedia
        .section        .text..SHmedia32,"ax"
        .align  2
@@ -3142,7 +3142,7 @@ GLOBAL(GCC_pop_shmedia_regs_nofpu):
 
 #ifdef L_div_table
 #if __SH5__
-#if defined(__pic__) && defined(__SHMEDIA__)
+#if defined(__pic__) && __SHMEDIA__
        .global GLOBAL(sdivsi3)
        FUNC(GLOBAL(sdivsi3))
 #if __SH5__ == 32
@@ -3215,7 +3215,7 @@ Defects for bias -330:
 #else /* ! __pic__ || ! __SHMEDIA__ */
        .section        .rodata
 #endif /* __pic__ */
-#if defined(TEXT_DATA_BUG) && defined(__pic__) && defined(__SHMEDIA__)
+#if defined(TEXT_DATA_BUG) && defined(__pic__) && __SHMEDIA__
        .balign 2
        .type   Local_div_table,@object
        .size   Local_div_table,128
index 6b99549..7493f84 100644 (file)
@@ -1,3 +1,36 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-03-30 Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       * io/transfer.c (data_transfer_init): Fix whitespace.
+
+2015-03-30 Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libgfortran/59513
+       * io/transfer.c (data_transfer_init): Do not error for
+       -std=legacy.
+
+2015-03-28 Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libgfortran/65596
+       * io/transfer.c (data_transfer_init): If in namelist mode and
+       delimiter is not specified, set it to DELIM_QUOTE, independent
+       of -std.
+
+2015-03-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libgfortran/60956
+       Backport from mainline
+       * io/fbuf.c (fbuf_flush_list): New function that only flushes
+       if current fbuf position exceeds a limit.
+       * io/fbuf.h: Declare the new function.
+       * io/io.h (enum unit_mode): Add two new modes.
+       * io/list_read.c (list_formatted_read_scalar): Call new function.
+       * io/write.c: Include fbuf.h. (list_formatted_write_scalar):
+       Call new function.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 170ce97..0c6ae54 100644 (file)
@@ -174,6 +174,42 @@ fbuf_flush (gfc_unit * u, unit_mode mode)
 }
 
 
+/* The mode argument is LIST_WRITING for write mode and LIST_READING for
+   read.  This should only be used for list directed  I/O.
+   Return value is 0 for success, -1 on failure.  */
+
+int
+fbuf_flush_list (gfc_unit * u, unit_mode mode)
+{
+  int nwritten;
+
+  if (!u->fbuf)
+    return 0;
+
+  if (u->fbuf->pos < 524288) /* Upper limit for list writing.  */
+    return 0;
+
+  fbuf_debug (u, "fbuf_flush_list with mode %d: ", mode);
+
+  if (mode == LIST_WRITING)
+    {
+      nwritten = swrite (u->s, u->fbuf->buf, u->fbuf->pos);
+      if (nwritten < 0)
+       return -1;
+    }
+
+  /* Salvage remaining bytes for both reading and writing.  */ 
+  if (u->fbuf->act > u->fbuf->pos)
+    memmove (u->fbuf->buf, u->fbuf->buf + u->fbuf->pos, 
+             u->fbuf->act - u->fbuf->pos);
+
+  u->fbuf->act -= u->fbuf->pos;
+  u->fbuf->pos = 0;
+
+  return 0;
+}
+
+
 int
 fbuf_seek (gfc_unit * u, int off, int whence)
 {
index 253b2ad..d9a1611 100644 (file)
@@ -59,6 +59,9 @@ internal_proto(fbuf_alloc);
 extern int fbuf_flush (gfc_unit *, unit_mode);
 internal_proto(fbuf_flush);
 
+extern int fbuf_flush_list (gfc_unit *, unit_mode);
+internal_proto(fbuf_flush_list);
+
 extern int fbuf_seek (gfc_unit *, int, int);
 internal_proto(fbuf_seek);
 
index 3481c83..a247272 100644 (file)
@@ -207,7 +207,7 @@ typedef enum
 unit_advance;
 
 typedef enum
-{READING, WRITING}
+{READING, WRITING, LIST_READING, LIST_WRITING}
 unit_mode;
 
 typedef enum
index b64189a..b957210 100644 (file)
@@ -2054,6 +2054,7 @@ cleanup:
       free_line (dtp);
       hit_eof (dtp);
     }
+  fbuf_flush_list (dtp->u.p.current_unit, LIST_READING);
   return err;
 }
 
index 60b6012..d7f1942 100644 (file)
@@ -2533,15 +2533,16 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag)
          return;
        }
 
-      if (dtp->u.p.current_unit->endfile == AFTER_ENDFILE)
-       {
+      if (compile_options.warn_std &&
+          dtp->u.p.current_unit->endfile == AFTER_ENDFILE)
+       {
          generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT,
                        "Sequential READ or WRITE not allowed after "
                        "EOF marker, possibly use REWIND or BACKSPACE");
          return;
        }
-
     }
+
   /* Process the ADVANCE option.  */
 
   dtp->u.p.advance_status
@@ -2674,8 +2675,7 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag)
   if (dtp->u.p.current_unit->delim_status == DELIM_UNSPECIFIED)
     {
       if (ionml && dtp->u.p.current_unit->flags.delim == DELIM_UNSPECIFIED)
-       dtp->u.p.current_unit->delim_status =
-         compile_options.allow_std & GFC_STD_GNU ? DELIM_QUOTE : DELIM_NONE;
+       dtp->u.p.current_unit->delim_status = DELIM_QUOTE;
       else
        dtp->u.p.current_unit->delim_status = dtp->u.p.current_unit->flags.delim;
     }
index f76ec67..a43dc03 100644 (file)
@@ -25,6 +25,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
 #include "io.h"
+#include "fbuf.h"
 #include "format.h"
 #include "unix.h"
 #include <assert.h>
@@ -1585,6 +1586,7 @@ list_formatted_write_scalar (st_parameter_dt *dtp, bt type, void *p, int kind,
       internal_error (&dtp->common, "list_formatted_write(): Bad type");
     }
 
+  fbuf_flush_list (dtp->u.p.current_unit, LIST_WRITING);
   dtp->u.p.char_flag = (type == BT_CHARACTER);
 }
 
index 1223204..6465403 100755 (executable)
@@ -631,6 +631,8 @@ LIBGO_IS_SPARC64_FALSE
 LIBGO_IS_SPARC64_TRUE
 LIBGO_IS_SPARC_FALSE
 LIBGO_IS_SPARC_TRUE
+LIBGO_IS_PPC64LE_FALSE
+LIBGO_IS_PPC64LE_TRUE
 LIBGO_IS_PPC64_FALSE
 LIBGO_IS_PPC64_TRUE
 LIBGO_IS_PPC_FALSE
@@ -11115,7 +11117,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11118 "configure"
+#line 11120 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11221,7 +11223,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11224 "configure"
+#line 11226 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -13599,6 +13601,7 @@ is_m68k=no
 mips_abi=unknown
 is_ppc=no
 is_ppc64=no
+is_ppc64le=no
 is_sparc=no
 is_sparc64=no
 is_x86_64=no
@@ -13709,13 +13712,27 @@ _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   is_ppc=yes
 else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
+#error 64be
+#endif
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  is_ppc64le=yes
+else
   is_ppc64=yes
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     if test "$is_ppc" = "yes"; then
       GOARCH=ppc
-    else
+    elif test "$is_ppc64" = "yes"; then
       GOARCH=ppc64
+    else
+      GOARCH=ppc64le
     fi
     ;;
   sparc*-*-*)
@@ -13835,6 +13852,14 @@ else
   LIBGO_IS_PPC64_FALSE=
 fi
 
+ if test $is_ppc64le = yes; then
+  LIBGO_IS_PPC64LE_TRUE=
+  LIBGO_IS_PPC64LE_FALSE='#'
+else
+  LIBGO_IS_PPC64LE_TRUE='#'
+  LIBGO_IS_PPC64LE_FALSE=
+fi
+
  if test $is_sparc = yes; then
   LIBGO_IS_SPARC_TRUE=
   LIBGO_IS_SPARC_FALSE='#'
@@ -15591,6 +15616,10 @@ if test -z "${LIBGO_IS_PPC64_TRUE}" && test -z "${LIBGO_IS_PPC64_FALSE}"; then
   as_fn_error "conditional \"LIBGO_IS_PPC64\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${LIBGO_IS_PPC64LE_TRUE}" && test -z "${LIBGO_IS_PPC64LE_FALSE}"; then
+  as_fn_error "conditional \"LIBGO_IS_PPC64LE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${LIBGO_IS_SPARC_TRUE}" && test -z "${LIBGO_IS_SPARC_FALSE}"; then
   as_fn_error "conditional \"LIBGO_IS_SPARC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
index 754e190..bf64fbd 100644 (file)
@@ -179,6 +179,7 @@ is_m68k=no
 mips_abi=unknown
 is_ppc=no
 is_ppc64=no
+is_ppc64le=no
 is_sparc=no
 is_sparc64=no
 is_x86_64=no
@@ -249,11 +250,18 @@ changequote([,])dnl
 #ifdef _ARCH_PPC64
 #error 64-bit
 #endif],
-[is_ppc=yes], [is_ppc64=yes])
+[is_ppc=yes],
+    [AC_COMPILE_IFELSE([
+#if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
+#error 64be
+#endif],
+[is_ppc64le=yes],[is_ppc64=yes])])
     if test "$is_ppc" = "yes"; then
       GOARCH=ppc
-    else
+    elif test "$is_ppc64" = "yes"; then
       GOARCH=ppc64
+    else
+      GOARCH=ppc64le
     fi
     ;;
   sparc*-*-*)
@@ -281,6 +289,7 @@ AM_CONDITIONAL(LIBGO_IS_MIPSN64, test $mips_abi = n64)
 AM_CONDITIONAL(LIBGO_IS_MIPSO64, test $mips_abi = o64)
 AM_CONDITIONAL(LIBGO_IS_PPC, test $is_ppc = yes)
 AM_CONDITIONAL(LIBGO_IS_PPC64, test $is_ppc64 = yes)
+AM_CONDITIONAL(LIBGO_IS_PPC64LE, test $is_ppc64le = yes)
 AM_CONDITIONAL(LIBGO_IS_SPARC, test $is_sparc = yes)
 AM_CONDITIONAL(LIBGO_IS_SPARC64, test $is_sparc64 = yes)
 AM_CONDITIONAL(LIBGO_IS_X86_64, test $is_x86_64 = yes)
index 6d6433d..d4c4b63 100644 (file)
@@ -1246,6 +1246,242 @@ var r386Strings = []intName{
 func (i R_386) String() string   { return stringName(uint32(i), r386Strings, false) }
 func (i R_386) GoString() string { return stringName(uint32(i), r386Strings, true) }
 
+// Relocation types for ppc64.
+type R_PPC64 int
+
+const (
+       R_PPC64_NONE                R_PPC64 = 0 /* No relocation. */
+       R_PPC64_ADDR32              R_PPC64 = 1
+       R_PPC64_ADDR24              R_PPC64 = 2
+       R_PPC64_ADDR16              R_PPC64 = 3
+       R_PPC64_ADDR16_LO           R_PPC64 = 4
+       R_PPC64_ADDR16_HI           R_PPC64 = 5
+       R_PPC64_ADDR16_HA           R_PPC64 = 6
+       R_PPC64_ADDR14              R_PPC64 = 7
+       R_PPC64_ADDR14_BRTAKEN      R_PPC64 = 8
+       R_PPC64_ADDR14_BRNTAKEN     R_PPC64 = 9
+       R_PPC64_REL24               R_PPC64 = 10
+       R_PPC64_REL14               R_PPC64 = 11
+       R_PPC64_REL14_BRTAKEN       R_PPC64 = 12
+       R_PPC64_REL14_BRNTAKEN      R_PPC64 = 13
+       R_PPC64_GOT16               R_PPC64 = 14
+       R_PPC64_GOT16_LO            R_PPC64 = 15
+       R_PPC64_GOT16_HI            R_PPC64 = 16
+       R_PPC64_GOT16_HA            R_PPC64 = 17
+                                   
+       R_PPC64_COPY                R_PPC64 = 19
+       R_PPC64_GLOB_DAT            R_PPC64 = 20
+       R_PPC64_JMP_SLOT            R_PPC64 = 21
+       R_PPC64_RELATIVE            R_PPC64 = 22
+                                   
+       R_PPC64_UADDR32             R_PPC64 = 24
+       R_PPC64_UADDR16             R_PPC64 = 25
+       R_PPC64_REL32               R_PPC64 = 26
+       R_PPC64_PLT32               R_PPC64 = 27
+       R_PPC64_PLTREL32            R_PPC64 = 28
+       R_PPC64_PLT16_LO            R_PPC64 = 29
+       R_PPC64_PLT16_HI            R_PPC64 = 30
+       R_PPC64_PLT16_HA            R_PPC64 = 31
+                                   
+       R_PPC64_SECTOFF             R_PPC64 = 33
+       R_PPC64_SECTOFF_LO          R_PPC64 = 34
+       R_PPC64_SECTOFF_HI          R_PPC64 = 35
+       R_PPC64_SECTOFF_HA          R_PPC64 = 36
+       R_PPC64_REL30               R_PPC64 = 37
+       R_PPC64_ADDR64              R_PPC64 = 38
+       R_PPC64_ADDR16_HIGHER       R_PPC64 = 39
+       R_PPC64_ADDR16_HIGHERA      R_PPC64 = 40
+       R_PPC64_ADDR16_HIGHEST      R_PPC64 = 41
+       R_PPC64_ADDR16_HIGHESTA     R_PPC64 = 42
+       R_PPC64_UADDR64             R_PPC64 = 43
+       R_PPC64_REL64               R_PPC64 = 44
+       R_PPC64_PLT64               R_PPC64 = 45
+       R_PPC64_PLTREL64            R_PPC64 = 46
+       R_PPC64_TOC16               R_PPC64 = 47
+       R_PPC64_TOC16_LO            R_PPC64 = 48
+       R_PPC64_TOC16_HI            R_PPC64 = 49
+       R_PPC64_TOC16_HA            R_PPC64 = 50
+       R_PPC64_TOC                 R_PPC64 = 51
+       R_PPC64_PLTGOT16            R_PPC64 = 52
+       R_PPC64_PLTGOT16_LO         R_PPC64 = 53
+       R_PPC64_PLTGOT16_HI         R_PPC64 = 54
+       R_PPC64_PLTGOT16_HA         R_PPC64 = 55
+                                   
+       R_PPC64_ADDR16_DS           R_PPC64 = 56
+       R_PPC64_ADDR16_LO_DS        R_PPC64 = 57
+       R_PPC64_GOT16_DS            R_PPC64 = 58
+       R_PPC64_GOT16_LO_DS         R_PPC64 = 59
+       R_PPC64_PLT16_LO_DS         R_PPC64 = 60
+       R_PPC64_SECTOFF_DS          R_PPC64 = 61
+       R_PPC64_SECTOFF_LO_DS       R_PPC64 = 62
+       R_PPC64_TOC16_DS            R_PPC64 = 63
+       R_PPC64_TOC16_LO_DS         R_PPC64 = 64
+       R_PPC64_PLTGOT16_DS         R_PPC64 = 65
+       R_PPC64_PLTGOT16_LO_DS      R_PPC64 = 66
+                                   
+       R_PPC64_TLS                 R_PPC64 = 67
+       R_PPC64_DTPMOD64            R_PPC64 = 68
+       R_PPC64_TPREL16             R_PPC64 = 69
+       R_PPC64_TPREL16_LO          R_PPC64 = 70
+       R_PPC64_TPREL16_HI          R_PPC64 = 71
+       R_PPC64_TPREL16_HA          R_PPC64 = 72
+       R_PPC64_TPREL64             R_PPC64 = 73
+       R_PPC64_DTPREL16            R_PPC64 = 74
+       R_PPC64_DTPREL16_LO         R_PPC64 = 75
+       R_PPC64_DTPREL16_HI         R_PPC64 = 76
+       R_PPC64_DTPREL16_HA         R_PPC64 = 77
+       R_PPC64_DTPREL64            R_PPC64 = 78
+       R_PPC64_GOT_TLSGD16         R_PPC64 = 79
+       R_PPC64_GOT_TLSGD16_LO      R_PPC64 = 80
+       R_PPC64_GOT_TLSGD16_HI      R_PPC64 = 81
+       R_PPC64_GOT_TLSGD16_HA      R_PPC64 = 82
+       R_PPC64_GOT_TLSLD16         R_PPC64 = 83
+       R_PPC64_GOT_TLSLD16_LO      R_PPC64 = 84
+       R_PPC64_GOT_TLSLD16_HI      R_PPC64 = 85
+       R_PPC64_GOT_TLSLD16_HA      R_PPC64 = 86
+       R_PPC64_GOT_TPREL16_DS      R_PPC64 = 87
+       R_PPC64_GOT_TPREL16_LO_DS   R_PPC64 = 88
+       R_PPC64_GOT_TPREL16_HI      R_PPC64 = 89
+       R_PPC64_GOT_TPREL16_HA      R_PPC64 = 90
+       R_PPC64_GOT_DTPREL16_DS     R_PPC64 = 91
+       R_PPC64_GOT_DTPREL16_LO_DS  R_PPC64 = 92
+       R_PPC64_GOT_DTPREL16_HI     R_PPC64 = 93
+       R_PPC64_GOT_DTPREL16_HA     R_PPC64 = 94
+       R_PPC64_TPREL16_DS          R_PPC64 = 95
+       R_PPC64_TPREL16_LO_DS       R_PPC64 = 96
+       R_PPC64_TPREL16_HIGHER      R_PPC64 = 97
+       R_PPC64_TPREL16_HIGHERA     R_PPC64 = 98
+       R_PPC64_TPREL16_HIGHEST     R_PPC64 = 99
+       R_PPC64_TPREL16_HIGHESTA    R_PPC64 = 100
+       R_PPC64_DTPREL16_DS         R_PPC64 = 101
+       R_PPC64_DTPREL16_LO_DS      R_PPC64 = 102
+       R_PPC64_DTPREL16_HIGHER     R_PPC64 = 103
+       R_PPC64_DTPREL16_HIGHERA    R_PPC64 = 104
+       R_PPC64_DTPREL16_HIGHEST    R_PPC64 = 105
+       R_PPC64_DTPREL16_HIGHESTA   R_PPC64 = 106
+
+       R_PPC64_GNU_VTINHERIT       R_PPC64 = 253
+       R_PPC64_GNU_VTENTRY         R_PPC64 = 254
+)
+
+var rppc64Strings = []intName{
+        {0, "R_PPC64_NONE"},
+       {1, "R_PPC64_ADDR32"},
+       {2, "R_PPC64_ADDR24"},
+       {3, "R_PPC64_ADDR16"},
+       {4, "R_PPC64_ADDR16_LO"},
+       {5, "R_PPC64_ADDR16_HI"},
+       {6, "R_PPC64_ADDR16_HA"},
+       {7, "R_PPC64_ADDR14"},
+       {8, "R_PPC64_ADDR14_BRTAKEN"},
+       {9, "R_PPC64_ADDR14_BRNTAKEN"},
+       {10, "R_PPC64_REL24"},
+       {11, "R_PPC64_REL14"},
+       {12, "R_PPC64_REL14_BRTAKEN"},
+       {13, "R_PPC64_REL14_BRNTAKEN"},
+       {14, "R_PPC64_GOT16"},
+       {15, "R_PPC64_GOT16_LO"},
+       {16, "R_PPC64_GOT16_HI"},
+       {17, "R_PPC64_GOT16_HA"},
+
+       {19, "R_PPC64_COPY"},
+       {20, "R_PPC64_GLOB_DAT"},
+       {21, "R_PPC64_JMP_SLOT"},
+       {22, "R_PPC64_RELATIVE"},
+
+       {24, "R_PPC64_UADDR32"},
+       {25, "R_PPC64_UADDR16"},
+       {26, "R_PPC64_REL32"},
+       {27, "R_PPC64_PLT32"},
+       {28, "R_PPC64_PLTREL32"},
+       {29, "R_PPC64_PLT16_LO"},
+       {30, "R_PPC64_PLT16_HI"},
+       {31, "R_PPC64_PLT16_HA"},
+
+       {33, "R_PPC64_SECTOFF"},
+       {34, "R_PPC64_SECTOFF_LO"},
+       {35, "R_PPC64_SECTOFF_HI"},
+       {36, "R_PPC64_SECTOFF_HA"},
+       {37, "R_PPC64_REL30"},
+       {38, "R_PPC64_ADDR64"},
+       {39, "R_PPC64_ADDR16_HIGHER"},
+       {40, "R_PPC64_ADDR16_HIGHERA"},
+       {41, "R_PPC64_ADDR16_HIGHEST"},
+       {42, "R_PPC64_ADDR16_HIGHESTA"},
+       {43, "R_PPC64_UADDR64"},
+       {44, "R_PPC64_REL64"},
+       {45, "R_PPC64_PLT64"},
+       {46, "R_PPC64_PLTREL64"},
+       {47, "R_PPC64_TOC16"},
+       {48, "R_PPC64_TOC16_LO"},
+       {49, "R_PPC64_TOC16_HI"},
+       {50, "R_PPC64_TOC16_HA"},
+       {51, "R_PPC64_TOC"},
+       {52, "R_PPC64_PLTGOT16"},
+       {53, "R_PPC64_PLTGOT16_LO"},
+       {54, "R_PPC64_PLTGOT16_HI"},
+       {55, "R_PPC64_PLTGOT16_HA"},
+
+       {56, "R_PPC64_ADDR16_DS"},
+       {57, "R_PPC64_ADDR16_LO_DS"},
+       {58, "R_PPC64_GOT16_DS"},
+       {59, "R_PPC64_GOT16_LO_DS"},
+       {60, "R_PPC64_PLT16_LO_DS"},
+       {61, "R_PPC64_SECTOFF_DS"},
+       {62, "R_PPC64_SECTOFF_LO_DS"},
+       {63, "R_PPC64_TOC16_DS"},
+       {64, "R_PPC64_TOC16_LO_DS"},
+       {65, "R_PPC64_PLTGOT16_DS"},
+       {66, "R_PPC64_PLTGOT16_LO_DS"},
+
+       {67, "R_PPC64_TLS"},
+       {68, "R_PPC64_DTPMOD64"},
+       {69, "R_PPC64_TPREL16"},
+       {70, "R_PPC64_TPREL16_LO"},
+       {71, "R_PPC64_TPREL16_HI"},
+       {72, "R_PPC64_TPREL16_HA"},
+       {73, "R_PPC64_TPREL64"},
+       {74, "R_PPC64_DTPREL16"},
+       {75, "R_PPC64_DTPREL16_LO"},
+       {76, "R_PPC64_DTPREL16_HI"},
+       {77, "R_PPC64_DTPREL16_HA"},
+       {78, "R_PPC64_DTPREL64"},
+       {79, "R_PPC64_GOT_TLSGD16"},
+       {80, "R_PPC64_GOT_TLSGD16_LO"},
+       {81, "R_PPC64_GOT_TLSGD16_HI"},
+       {82, "R_PPC64_GOT_TLSGD16_HA"},
+       {83, "R_PPC64_GOT_TLSLD16"},
+       {84, "R_PPC64_GOT_TLSLD16_LO"},
+       {85, "R_PPC64_GOT_TLSLD16_HI"},
+       {86, "R_PPC64_GOT_TLSLD16_HA"},
+       {87, "R_PPC64_GOT_TPREL16_DS"},
+       {88, "R_PPC64_GOT_TPREL16_LO_DS"},
+       {89, "R_PPC64_GOT_TPREL16_HI"},
+       {90, "R_PPC64_GOT_TPREL16_HA"},
+       {91, "R_PPC64_GOT_DTPREL16_DS"},
+       {92, "R_PPC64_GOT_DTPREL16_LO_DS"},
+       {93, "R_PPC64_GOT_DTPREL16_HI"},
+       {94, "R_PPC64_GOT_DTPREL16_HA"},
+       {95, "R_PPC64_TPREL16_DS"},
+       {96, "R_PPC64_TPREL16_LO_DS"},
+       {97, "R_PPC64_TPREL16_HIGHER"},
+       {98, "R_PPC64_TPREL16_HIGHERA"},
+       {99, "R_PPC64_TPREL16_HIGHEST"},
+       {100, "R_PPC64_TPREL16_HIGHESTA"},
+       {101, "R_PPC64_DTPREL16_DS"},
+       {102, "R_PPC64_DTPREL16_LO_DS"},
+       {103, "R_PPC64_DTPREL16_HIGHER"},
+       {104, "R_PPC64_DTPREL16_HIGHERA"},
+       {105, "R_PPC64_DTPREL16_HIGHEST"},
+       {106, "R_PPC64_DTPREL16_HIGHESTA"},
+
+       {253, "R_PPC64_GNU_VTINHERIT"},
+       {254, "R_PPC64_GNU_VTENTRY"},
+}
+
+func (i R_PPC64) String() string   { return stringName(uint32(i), rppc64Strings, false) }
+func (i R_PPC64) GoString() string { return stringName(uint32(i), rppc64Strings, true) }
+
 // Relocation types for PowerPC.
 type R_PPC int
 
index f6e7e31..6136595 100644 (file)
@@ -519,6 +519,9 @@ func (f *File) applyRelocations(dst []byte, rels []byte) error {
        if f.Class == ELFCLASS64 && f.Machine == EM_X86_64 {
                return f.applyRelocationsAMD64(dst, rels)
        }
+       if f.Class == ELFCLASS64 && f.Machine == EM_PPC64 {
+               return f.applyRelocationsPPC64(dst, rels)
+       }
        if f.Class == ELFCLASS64 && f.Machine == EM_AARCH64 {
                return f.applyRelocationsARM64(dst, rels)
        }
@@ -615,6 +618,47 @@ func (f *File) applyRelocationsARM64(dst []byte, rels []byte) error {
        return nil
 }
 
+func (f *File) applyRelocationsPPC64(dst []byte, rels []byte) error {
+       // 24 is the size of Rela64.
+       if len(rels)%24 != 0 {
+               return errors.New("length of relocation section is not a multiple of Sym64Size")
+       }
+
+       symbols, _, err := f.getSymbols(SHT_SYMTAB)
+       if err != nil {
+               return err
+       }
+
+       b := bytes.NewBuffer(rels)
+       var rela Rela64
+
+       for b.Len() > 0 {
+               binary.Read(b, f.ByteOrder, &rela)
+               symNo := rela.Info >> 32
+               t := R_PPC64(rela.Info & 0xffff)
+
+               if symNo == 0 || symNo > uint64(len(symbols)) {
+                       continue
+               }
+               sym := &symbols[symNo-1]
+
+       switch t {
+               case R_PPC64_ADDR64:
+                       if rela.Off+8 >= uint64(len(dst)) || rela.Addend < 0 {
+                               continue
+                       }
+                       f.ByteOrder.PutUint64(dst[rela.Off:rela.Off+8], uint64(rela.Addend) + uint64(sym.Value))
+               case R_PPC64_ADDR32:
+                       if rela.Off+4 >= uint64(len(dst)) || rela.Addend < 0 {
+                               continue
+                       }
+                       f.ByteOrder.PutUint32(dst[rela.Off:rela.Off+4], uint32(rela.Addend) + uint32(sym.Value))
+               }
+       }
+
+       return nil
+}
+
 func (f *File) DWARF() (*dwarf.Data, error) {
        // There are many other DWARF sections, but these
        // are the required ones, and the debug/dwarf package
@@ -637,7 +681,7 @@ func (f *File) DWARF() (*dwarf.Data, error) {
        // If there's a relocation table for .debug_info, we have to process it
        // now otherwise the data in .debug_info is invalid for x86-64 objects.
        rela := f.Section(".rela.debug_info")
-       if rela != nil && rela.Type == SHT_RELA && (f.Machine == EM_X86_64 || f.Machine == EM_AARCH64) {
+       if rela != nil && rela.Type == SHT_RELA && (f.Machine == EM_X86_64 || f.Machine == EM_AARCH64 || f.Machine == EM_PPC64) {
                data, err := rela.Data()
                if err != nil {
                        return nil, err
index 38b5f9e..9140e14 100644 (file)
@@ -261,6 +261,12 @@ var relocationTests = []relocationTest{
                },
        },
        {
+               "testdata/go-relocation-test-gcc447-ppc64.obj",
+               []relocationTestEntry{
+                       {0, &dwarf.Entry{Offset: 0xb, Tag: dwarf.TagCompileUnit, Children: true, Field: []dwarf.Field{dwarf.Field{Attr: dwarf.AttrProducer, Val: "GNU C 4.4.7 20120313 (Red Hat 4.4.7-4)"}, dwarf.Field{Attr: dwarf.AttrLanguage, Val: int64(1)}, dwarf.Field{Attr: dwarf.AttrName, Val: "t.c"}, dwarf.Field{Attr: dwarf.AttrCompDir, Val: "/tmp"}, dwarf.Field{Attr: dwarf.AttrLowpc, Val: uint64(0x0)}, dwarf.Field{Attr: dwarf.AttrHighpc, Val: uint64(0x24)}, dwarf.Field{Attr: dwarf.AttrStmtList, Val: int64(0)}}}},
+               },
+       },
+       {
                "testdata/gcc-amd64-openbsd-debug-with-rela.obj",
                []relocationTestEntry{
                        {203, &dwarf.Entry{Offset: 0xc62, Tag: dwarf.TagMember, Children: false, Field: []dwarf.Field{{Attr: dwarf.AttrName, Val: "it_interval"}, {Attr: dwarf.AttrDeclFile, Val: int64(7)}, {Attr: dwarf.AttrDeclLine, Val: int64(236)}, {Attr: dwarf.AttrType, Val: dwarf.Offset(0xb7f)}, {Attr: dwarf.AttrDataMemberLoc, Val: []byte{0x23, 0x0}}}}},
diff --git a/libgo/go/debug/elf/testdata/go-relocation-test-gcc447-ppc64.obj b/libgo/go/debug/elf/testdata/go-relocation-test-gcc447-ppc64.obj
new file mode 100644 (file)
index 0000000..8b68eef
Binary files /dev/null and b/libgo/go/debug/elf/testdata/go-relocation-test-gcc447-ppc64.obj differ
index 3580d82..17153f2 100644 (file)
@@ -5,4 +5,4 @@
 package build
 
 const goosList = "darwin dragonfly freebsd linux netbsd openbsd plan9 windows solaris "
-const goarchList = "386 amd64 arm arm64 alpha m68k mipso32 mipsn32 mipsn64 mipso64 ppc ppc64 sparc sparc64 "
+const goarchList = "386 amd64 arm arm64 alpha m68k mipso32 mipsn32 mipsn64 mipso64 ppc ppc64 ppc64le sparc sparc64 "
index bb6abfd..1e4259d 100755 (executable)
@@ -174,6 +174,9 @@ enum {
 #ifdef TIOCGWINSZ
   TIOCGWINSZ_val = TIOCGWINSZ,
 #endif
+#ifdef TIOCSWINSZ
+  TIOCSWINSZ_val = TIOCSWINSZ,
+#endif
 #ifdef TIOCNOTTY
   TIOCNOTTY_val = TIOCNOTTY,
 #endif
@@ -192,6 +195,12 @@ enum {
 #ifdef TIOCSIG
   TIOCSIG_val = TIOCSIG,
 #endif
+#ifdef TCGETS
+  TCGETS_val = TCGETS,
+#endif
+#ifdef TCSETS
+  TCSETS_val = TCSETS,
+#endif
 };
 EOF
 
@@ -780,6 +789,11 @@ if ! grep '^const TIOCGWINSZ' ${OUT} >/dev/null 2>&1; then
     echo 'const TIOCGWINSZ = _TIOCGWINSZ_val' >> ${OUT}
   fi
 fi
+if ! grep '^const TIOCSWINSZ' ${OUT} >/dev/null 2>&1; then
+  if grep '^const _TIOCSWINSZ_val' ${OUT} >/dev/null 2>&1; then
+    echo 'const TIOCSWINSZ = _TIOCSWINSZ_val' >> ${OUT}
+  fi
+fi
 if ! grep '^const TIOCNOTTY' ${OUT} >/dev/null 2>&1; then
   if grep '^const _TIOCNOTTY_val' ${OUT} >/dev/null 2>&1; then
     echo 'const TIOCNOTTY = _TIOCNOTTY_val' >> ${OUT}
@@ -812,8 +826,18 @@ if ! grep '^const TIOCSIG' ${OUT} >/dev/null 2>&1; then
 fi
 
 # The ioctl flags for terminal control
-grep '^const _TC[GS]ET' gen-sysinfo.go | \
+grep '^const _TC[GS]ET' gen-sysinfo.go | grep -v _val | \
     sed -e 's/^\(const \)_\(TC[GS]ET[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+if ! grep '^const TCGETS' ${OUT} >/dev/null 2>&1; then
+  if grep '^const _TCGETS_val' ${OUT} >/dev/null 2>&1; then
+    echo 'const TCGETS = _TCGETS_val' >> ${OUT}
+  fi
+fi
+if ! grep '^const TCSETS' ${OUT} >/dev/null 2>&1; then
+  if grep '^const _TCSETS_val' ${OUT} >/dev/null 2>&1; then
+    echo 'const TCSETS = _TCSETS_val' >> ${OUT}
+  fi
+fi
 
 # ioctl constants.  Might fall back to 0 if TIOCNXCL is missing, too, but
 # needs handling in syscalls.exec.go.
index a3e0424..f0ee4eb 100644 (file)
@@ -255,6 +255,8 @@ String runtime_funcname_go (Func *f)
 String
 runtime_funcname_go (Func *f)
 {
+  if (f == NULL)
+    return runtime_gostringnocopy ((const byte *) "");
   return f->name;
 }
 
index 29d9297..924fedd 100644 (file)
@@ -1,3 +1,69 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-06-03  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-05-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/66133
+       * testsuite/libgomp.c/pr66133.c: New test.
+
+       2015-03-30  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/65597
+       * testsuite/libgomp.fortran/pr65597.f90: New test.
+
+       2015-03-19  Jakub Jelinek  <jakub@redhat.com>
+
+       * testsuite/libgomp.c/target-10.c: New test.
+       * testsuite/libgomp.c++/target-4.C: New test.
+
+2015-04-02  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       Backported from mainline
+       2015-03-13  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       * configure.tgt (*-*-rtems*): Use local-exec TLS model.
+       * configure.ac (*-*-rtems*): Assume Pthread is supported.
+       (pthread.h): Check for this header file.
+       * configure: Regenerate.
+
+2015-02-11  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/64824
+       * testsuite/libgomp.c/atomic-18.c: New test.
+       * testsuite/libgomp.c++/atomic-16.C: New test.
+
+       Backported from mainline
+       2015-02-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/64824
+       PR c/64868
+       * testsuite/libgomp.c/pr64824.c: New test.
+       * testsuite/libgomp.c/pr64868.c: New test.
+       * testsuite/libgomp.c++/pr64824.C: New test.
+       * testsuite/libgomp.c++/pr64868.C: New test.
+
+2015-01-23  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/64734
+       * libgomp.c/pr64734.c: New test.
+
+2014-12-03  Uros Bizjak  <ubizjak@gmail.com>
+
+       * configure.tgt (x86_64-*-linux*): Tune -m32 multilib to generic.
+
+2014-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2014-11-24  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/63938
+       * libgomp.fortran/pr63938-1.f90: New test.
+       * libgomp.fortran/pr63938-2.f90: New test.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 766eb09..32d9325 100755 (executable)
@@ -14587,7 +14587,7 @@ $as_echo "#define STRING_WITH_STRINGS 1" >>confdefs.h
 
 fi
 
-for ac_header in unistd.h semaphore.h sys/loadavg.h sys/time.h sys/time.h
+for ac_header in pthread.h unistd.h semaphore.h sys/loadavg.h sys/time.h sys/time.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -15009,14 +15009,19 @@ ac_config_commands="$ac_config_commands gstdint.h"
 
 
 
-# Check to see if -pthread or -lpthread is needed.  Prefer the former.
-# In case the pthread.h system header is not found, this test will fail.
 XPCFLAGS=""
-CFLAGS="$CFLAGS -pthread"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+case "$host" in
+  *-*-rtems*)
+    # RTEMS supports Pthreads, but the library is not available at GCC build time.
+    ;;
+  *)
+    # Check to see if -pthread or -lpthread is needed.  Prefer the former.
+    # In case the pthread.h system header is not found, this test will fail.
+    CFLAGS="$CFLAGS -pthread"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
-   void *g(void *d) { return NULL; }
+       void *g(void *d) { return NULL; }
 int
 main ()
 {
@@ -15029,10 +15034,10 @@ if ac_fn_c_try_link "$LINENO"; then :
   XPCFLAGS=" -Wc,-pthread"
 else
   CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
-     void *g(void *d) { return NULL; }
+         void *g(void *d) { return NULL; }
 int
 main ()
 {
@@ -15051,6 +15056,7 @@ rm -f core conftest.err conftest.$ac_objext \
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
+esac
 
 # Check for functions needed.
 for ac_func in getloadavg clock_gettime strtoull
index 84d250f..03fc930 100644 (file)
@@ -170,28 +170,34 @@ AC_SUBST(libtool_VERSION)
 AC_STDC_HEADERS
 AC_HEADER_TIME
 ACX_HEADER_STRING
-AC_CHECK_HEADERS(unistd.h semaphore.h sys/loadavg.h sys/time.h sys/time.h)
+AC_CHECK_HEADERS(pthread.h unistd.h semaphore.h sys/loadavg.h sys/time.h sys/time.h)
 
 GCC_HEADER_STDINT(gstdint.h)
 
-# Check to see if -pthread or -lpthread is needed.  Prefer the former.
-# In case the pthread.h system header is not found, this test will fail.
 XPCFLAGS=""
-CFLAGS="$CFLAGS -pthread"
-AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
-  [#include <pthread.h>
-   void *g(void *d) { return NULL; }],
-  [pthread_t t; pthread_create(&t,NULL,g,NULL);])],
- [XPCFLAGS=" -Wc,-pthread"],
- [CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS"
-  AC_LINK_IFELSE(
-   [AC_LANG_PROGRAM(
-    [#include <pthread.h>
-     void *g(void *d) { return NULL; }],
-    [pthread_t t; pthread_create(&t,NULL,g,NULL);])],
-   [],
-   [AC_MSG_ERROR([Pthreads are required to build libgomp])])])
+case "$host" in
+  *-*-rtems*)
+    # RTEMS supports Pthreads, but the library is not available at GCC build time.
+    ;;
+  *)
+    # Check to see if -pthread or -lpthread is needed.  Prefer the former.
+    # In case the pthread.h system header is not found, this test will fail.
+    CFLAGS="$CFLAGS -pthread"
+    AC_LINK_IFELSE(
+     [AC_LANG_PROGRAM(
+      [#include <pthread.h>
+       void *g(void *d) { return NULL; }],
+      [pthread_t t; pthread_create(&t,NULL,g,NULL);])],
+     [XPCFLAGS=" -Wc,-pthread"],
+     [CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS"
+      AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+        [#include <pthread.h>
+         void *g(void *d) { return NULL; }],
+        [pthread_t t; pthread_create(&t,NULL,g,NULL);])],
+       [],
+       [AC_MSG_ERROR([Pthreads are required to build libgomp])])])
+esac
 
 # Check for functions needed.
 AC_CHECK_FUNCS(getloadavg clock_gettime strtoull)
index 8b18417..e8cd14b 100644 (file)
@@ -20,6 +20,10 @@ if test $gcc_cv_have_tls = yes ; then
     *-*-linux* | *-*-gnu*)
        XCFLAGS="${XCFLAGS} -ftls-model=initial-exec"
        ;;
+
+    *-*-rtems*)
+       XCFLAGS="${XCFLAGS} -ftls-model=local-exec"
+       ;;
   esac
 fi
 
@@ -82,7 +86,7 @@ if test $enable_linux_futex = yes; then
        config_path="linux/x86 linux posix"
        case " ${CC} ${CFLAGS} " in
          *" -m32 "*)
-           XCFLAGS="${XCFLAGS} -march=i486 -mtune=i686"
+           XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
            ;;
        esac
        ;;
diff --git a/libgomp/testsuite/libgomp.c++/atomic-16.C b/libgomp/testsuite/libgomp.c++/atomic-16.C
new file mode 100644 (file)
index 0000000..afccd52
--- /dev/null
@@ -0,0 +1,5 @@
+// PR c/64824
+// { dg-do run }
+// { dg-options "-O2 -fopenmp" }
+
+#include "../libgomp.c/atomic-18.c"
diff --git a/libgomp/testsuite/libgomp.c++/pr64824.C b/libgomp/testsuite/libgomp.c++/pr64824.C
new file mode 100644 (file)
index 0000000..348f6d6
--- /dev/null
@@ -0,0 +1,5 @@
+// PR c/64824
+// { dg-do run }
+// { dg-options "-O2 -fopenmp" }
+
+#include "../libgomp.c/pr64824.c"
diff --git a/libgomp/testsuite/libgomp.c++/pr64868.C b/libgomp/testsuite/libgomp.c++/pr64868.C
new file mode 100644 (file)
index 0000000..2d730ac
--- /dev/null
@@ -0,0 +1,5 @@
+// PR c/64868
+// { dg-do run }
+// { dg-options "-O2 -fopenmp" }
+
+#include "../libgomp.c/pr64868.c"
diff --git a/libgomp/testsuite/libgomp.c++/target-4.C b/libgomp/testsuite/libgomp.c++/target-4.C
new file mode 100644 (file)
index 0000000..9d1b576
--- /dev/null
@@ -0,0 +1,3 @@
+// { dg-do run }
+
+#include "../libgomp.c/target-10.c"
diff --git a/libgomp/testsuite/libgomp.c/atomic-18.c b/libgomp/testsuite/libgomp.c/atomic-18.c
new file mode 100644 (file)
index 0000000..bd048c1
--- /dev/null
@@ -0,0 +1,61 @@
+/* PR c/64824 */
+/* { dg-do run } */
+/* { dg-options "-O2 -fopenmp" } */
+
+void
+f1 (void)
+{
+  short a;
+  short b = 1;
+  int c = 3;
+#pragma omp atomic capture
+  a = b = c << b;
+  if (b != 6 || a != 6)
+    __builtin_abort ();
+}
+
+void
+f2 (void)
+{
+  short a;
+  short b = 1;
+  int c = 3;
+#pragma omp atomic capture
+  a = b = c + b;
+  if (b != 4 || a != 4)
+    __builtin_abort ();
+}
+
+void
+f3 (void)
+{
+  short a;
+  short b = 1;
+  long long int c = 3;
+#pragma omp atomic capture
+  a = b = c + b;
+  if (b != 4 || a != 4)
+    __builtin_abort ();
+}
+
+void
+f4 (void)
+{
+  char a;
+  char b = 1;
+  long long int c = 3LL;
+#pragma omp atomic capture
+  a = b = c << b;
+  if (b != 6 || a != 6)
+    __builtin_abort ();
+}
+
+int
+main ()
+{
+  f1 ();
+  f2 ();
+  f3 ();
+  f4 ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr64734.c b/libgomp/testsuite/libgomp.c/pr64734.c
new file mode 100644 (file)
index 0000000..457f481
--- /dev/null
@@ -0,0 +1,55 @@
+/* PR middle-end/64734 */
+
+#include <stdlib.h>
+
+void
+foo (int *x, int *y)
+{
+  #pragma omp target map (alloc:x[0]) map (alloc:y[0:8])
+  {
+    int i;
+    for (i = 0; i < 8; i++)
+      if (y[i] != 2 + i)
+       break;
+    if (i != 8 || *x != 1)
+      *x = 6;
+    else
+      {
+       *x = 8;
+       for (i = 0; i < 8; i++)
+         y[i] = 9 + i;
+      }
+  }
+  #pragma omp target update from (y[0:8]) from (x[0])
+}
+
+void
+bar (void)
+{
+  int x = 1, y[32] = { 0 };
+  #pragma omp target data map (to:y[0:32]) map (to:x)
+    ;
+}
+
+int
+main ()
+{
+  int x = 1, y[8] = { 2, 3, 4, 5, 6, 7, 8, 9 }, i;
+  #pragma omp target data map (to:y[0:8]) map (to:x)
+    ;
+  #pragma omp target data map (to:y[0:8]) map (to:x)
+    {
+      #pragma omp target update from (y[0:8]) from (x)
+    }
+
+  #pragma omp target data map (to:y[0:8]) map (to:x)
+    foo (&x, &y[0]);
+
+  if (x != 8)
+    abort ();
+  for (i = 0; i < 8; i++)
+    if (y[i] != 9 + i)
+      abort ();
+
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr64824.c b/libgomp/testsuite/libgomp.c/pr64824.c
new file mode 100644 (file)
index 0000000..544d0b0
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR c/64824 */
+/* { dg-do run } */
+/* { dg-options "-O2 -fopenmp" } */
+
+int
+main ()
+{
+  long long a;
+  long long b = 1LL;
+  int c = 3;
+#pragma omp atomic capture
+  a = b = c << b;
+  if (b != 6LL || a != 6LL)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr64868.c b/libgomp/testsuite/libgomp.c/pr64868.c
new file mode 100644 (file)
index 0000000..acdf998
--- /dev/null
@@ -0,0 +1,87 @@
+/* PR c/64868 */
+/* { dg-do run } */
+/* { dg-options "-O2 -fopenmp" } */
+
+float f = 2.0f;
+double d = 4.0;
+long double ld = 8.0L;
+
+void
+foo ()
+{
+#pragma omp atomic
+  f = 1.0f / f;
+#pragma omp atomic
+  f = 1 / f;
+#pragma omp atomic
+  f = f / 2.0f;
+#pragma omp atomic
+  f = f / 2;
+#pragma omp atomic
+  f /= 2.0f;
+#pragma omp atomic
+  f /= 2;
+#pragma omp atomic
+  d = 1.0 / d;
+#pragma omp atomic
+  d = 1 / d;
+#pragma omp atomic
+  d = d / 2.0;
+#pragma omp atomic
+  d = d / 2;
+#pragma omp atomic
+  d /= 2.0;
+#pragma omp atomic
+  d /= 2;
+#pragma omp atomic
+  ld = 1.0L / ld;
+#pragma omp atomic
+  ld = 1 / ld;
+#pragma omp atomic
+  ld = ld / 2.0L;
+#pragma omp atomic
+  ld = ld / 2;
+#pragma omp atomic
+  ld /= 2.0L;
+#pragma omp atomic
+  ld /= 2;
+  if (f != 0.125f || d != 0.25 || ld != 0.5L)
+    __builtin_abort ();
+}
+
+#ifdef __cplusplus
+template <typename T, int N1, int N2>
+void
+bar ()
+{
+  T v = ::d;
+#pragma omp atomic
+  v *= 16;
+#pragma omp atomic
+  v = 1.0 / v;
+#pragma omp atomic
+  v = N1 / v;
+#pragma omp atomic
+  v = v / 2.0;
+#pragma omp atomic
+  v = v / N2;
+#pragma omp atomic
+  v /= 2.0;
+#pragma omp atomic
+  v /= N2;
+  if (v != 0.25)
+    __builtin_abort ();
+}
+#endif
+
+int
+main ()
+{
+  foo ();
+#ifdef __cplusplus
+  bar<float, 1, 2> ();
+  bar<double, 1, 2> ();
+  bar<long double, 1, 2> ();
+#endif
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr66133.c b/libgomp/testsuite/libgomp.c/pr66133.c
new file mode 100644 (file)
index 0000000..e98e5aa
--- /dev/null
@@ -0,0 +1,35 @@
+/* PR middle-end/66133 */
+/* { dg-do run } */
+/* { dg-options "-O2 -fopenmp" } */
+
+#include <stdlib.h>
+#include <unistd.h>
+
+volatile int x;
+
+__attribute__((noinline)) void
+foo (void)
+{
+  if (x == 0)
+    {
+      #pragma omp task
+       {
+         usleep (2000);
+         exit (0);
+       }
+    }
+  else
+    abort ();
+}
+
+int
+main ()
+{
+  #pragma omp parallel num_threads (2)
+    {
+      #pragma omp barrier
+      #pragma omp single
+       foo ();
+    }
+  exit (0);
+}
diff --git a/libgomp/testsuite/libgomp.c/target-10.c b/libgomp/testsuite/libgomp.c/target-10.c
new file mode 100644 (file)
index 0000000..bc66880
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+
+#pragma omp declare target
+extern int v;
+#pragma omp end declare target
+
+int v;
+
+int
+main ()
+{
+  #pragma omp target update to(v)
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.fortran/pr63938-1.f90 b/libgomp/testsuite/libgomp.fortran/pr63938-1.f90
new file mode 100644 (file)
index 0000000..27501b2
--- /dev/null
@@ -0,0 +1,14 @@
+! PR fortran/63938
+! { dg-do run }
+
+program pr63938_1
+  integer :: i, x(1)
+  x(1) = 0
+!$omp parallel do
+  do i = 1, 1000
+    !$omp atomic
+    x(1) = x(1) + 1
+  end do
+!$omp end parallel do
+  if (x(1) .ne. 1000) call abort
+end program pr63938_1
diff --git a/libgomp/testsuite/libgomp.fortran/pr63938-2.f90 b/libgomp/testsuite/libgomp.fortran/pr63938-2.f90
new file mode 100644 (file)
index 0000000..e5f37ba
--- /dev/null
@@ -0,0 +1,18 @@
+! PR fortran/63938
+! { dg-do run }
+
+program pr63938_2
+  type t
+    integer :: x
+  end type
+  integer :: i
+  type(t) :: x
+  x%x = 0
+!$omp parallel do
+  do i = 1, 1000
+    !$omp atomic
+    x%x = x%x + 1
+  end do
+!$omp end parallel do
+  if (x%x .ne. 1000) call abort
+end program pr63938_2
diff --git a/libgomp/testsuite/libgomp.fortran/pr65597.f90 b/libgomp/testsuite/libgomp.fortran/pr65597.f90
new file mode 100644 (file)
index 0000000..c19f077
--- /dev/null
@@ -0,0 +1,21 @@
+! PR fortran/65597
+! { dg-do run }
+
+  integer :: i, a(151)
+  a(:) = 0
+  !$omp do simd
+    do i = 1, 151, 31
+      a(i) = a(i) + 1
+    end do
+  !$omp do simd linear (i: 31)
+    do i = 1, 151, 31
+      a(i) = a(i) + 1
+    end do
+  do i = 1, 151
+    if (mod (i, 31) .eq. 1) then
+      if (a(i) .ne. 2) call abort
+    else
+      if (a(i) .ne. 0) call abort
+    end if
+  end do
+end
index 2c84de1..df722b3 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 0cac303..ca4dfc7 100644 (file)
@@ -1,3 +1,11 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2014-12-03  Uros Bizjak  <ubizjak@gmail.com>
+
+       * configure.tgt (x86_64): Tune -m32 multilib to generic.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 44c1a14..bd95509 100644 (file)
@@ -102,7 +102,7 @@ case "${target_cpu}" in
   x86_64)
        case " ${CC} ${CFLAGS} " in
          *" -m32 "*)
-           XCFLAGS="${XCFLAGS} -march=i486 -mtune=i686"
+           XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
            XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
            ;;
        esac
index 5463094..d384acc 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 0204306..13c31aa 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index ce769e1..93731b7 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GAPPLETVIEWER 1"
-.TH GAPPLETVIEWER 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GAPPLETVIEWER 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 0b99627..a4eef66 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GJAR 1"
-.TH GJAR 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GJAR 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index ca7d87c..015ded8 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GJARSIGNER 1"
-.TH GJARSIGNER 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GJARSIGNER 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 8c5827b..2673ba7 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GJAVAH 1"
-.TH GJAVAH 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GJAVAH 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 9597d90..9f45d1c 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GJDOC 1"
-.TH GJDOC 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GJDOC 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index f2a58da..46a979e 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GKEYTOOL 1"
-.TH GKEYTOOL 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GKEYTOOL 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index af35da8..cabf9c7 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GNATIVE2ASCII 1"
-.TH GNATIVE2ASCII 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GNATIVE2ASCII 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 3ea90c5..43e0d0b 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GORBD 1"
-.TH GORBD 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GORBD 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index f488edc..e4bf220 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GRMID 1"
-.TH GRMID 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GRMID 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index c4d2139..04a8f4c 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GRMIREGISTRY 1"
-.TH GRMIREGISTRY 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GRMIREGISTRY 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 55c1ec2..d685f67 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GSERIALVER 1"
-.TH GSERIALVER 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GSERIALVER 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index be47424..ace5c74 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "GTNAMESERV 1"
-.TH GTNAMESERV 1 "2014-10-30" "0.99.1-pre" "GNU"
+.TH GTNAMESERV 1 "2015-06-26" "0.99.1-pre" "GNU"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 8bb04bc..79a238d 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 62f7cda..caa7160 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 2722ed3..01000d6 100644 (file)
@@ -1,3 +1,12 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-01-26  Matthias Klose  <doko@ubuntu.com>
+
+       * configure.ac: Move AM_ENABLE_MULTILIB before AC_PROG_CC.
+       * configure: Regenerate.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 907e0cf..8b8ca49 100755 (executable)
@@ -613,7 +613,6 @@ LIBQUAD_USE_SYMVER_FALSE
 LIBQUAD_USE_SYMVER_TRUE
 toolexeclibdir
 toolexecdir
-multi_basedir
 MAINT
 MAINTAINER_MODE_FALSE
 MAINTAINER_MODE_TRUE
@@ -682,6 +681,7 @@ am__isrc
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+multi_basedir
 target_noncanonical
 target_os
 target_vendor
@@ -736,6 +736,7 @@ SHELL'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_multilib
 enable_version_specific_runtime_libs
 enable_dependency_tracking
 with_bugurl
@@ -746,7 +747,6 @@ enable_fast_install
 with_gnu_ld
 enable_libtool_lock
 enable_maintainer_mode
-enable_multilib
 enable_symvers
 enable_generated_files_in_srcdir
 '
@@ -1379,6 +1379,7 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-multilib       build many library versions (default)
   --enable-version-specific-runtime-libs
                           specify that runtime libraries should be installed
                           in a compiler-specific directory
@@ -1391,7 +1392,6 @@ Optional Features:
   --disable-libtool-lock  avoid locking (might break parallel builds)
   --enable-maintainer-mode  enable make rules and dependencies not useful
                          (and sometimes confusing) to the casual installer
-  --enable-multilib       build many library versions (default)
   --disable-symvers       disable symbol versioning for libquadmath
   --enable-generated-files-in-srcdir
                           put copies of generated files in source dir intended
@@ -2370,6 +2370,44 @@ esac
 
 
 
+# Default to --enable-multilib
+# Check whether --enable-multilib was given.
+if test "${enable_multilib+set}" = set; then :
+  enableval=$enable_multilib; case "$enableval" in
+  yes) multilib=yes ;;
+  no)  multilib=no ;;
+  *)   as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;;
+ esac
+else
+  multilib=yes
+fi
+
+
+# We may get other options which we leave undocumented:
+# --with-target-subdir, --with-multisrctop, --with-multisubdir
+# See config-ml.in if you want the gory details.
+
+if test "$srcdir" = "."; then
+  if test "$with_target_subdir" != "."; then
+    multi_basedir="$srcdir/$with_multisrctop../.."
+  else
+    multi_basedir="$srcdir/$with_multisrctop.."
+  fi
+else
+  multi_basedir="$srcdir/.."
+fi
+
+
+# Even if the default multilib is not a cross compilation,
+# it may be that some of the other multilibs are.
+if test $cross_compiling = no && test $multilib = yes \
+   && test "x${with_multisubdir}" != x ; then
+   cross_compiling=maybe
+fi
+
+ac_config_commands="$ac_config_commands default-1"
+
+
 target_alias=${target_alias-$host_alias}
 
 
@@ -10527,7 +10565,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10530 "configure"
+#line 10568 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -10633,7 +10671,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10636 "configure"
+#line 10674 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
   MAINT=$MAINTAINER_MODE_TRUE
 
 
-# Default to --enable-multilib
-# Check whether --enable-multilib was given.
-if test "${enable_multilib+set}" = set; then :
-  enableval=$enable_multilib; case "$enableval" in
-  yes) multilib=yes ;;
-  no)  multilib=no ;;
-  *)   as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;;
- esac
-else
-  multilib=yes
-fi
-
-
-# We may get other options which we leave undocumented:
-# --with-target-subdir, --with-multisrctop, --with-multisubdir
-# See config-ml.in if you want the gory details.
-
-if test "$srcdir" = "."; then
-  if test "$with_target_subdir" != "."; then
-    multi_basedir="$srcdir/$with_multisrctop../.."
-  else
-    multi_basedir="$srcdir/$with_multisrctop.."
-  fi
-else
-  multi_basedir="$srcdir/.."
-fi
-
-
-# Even if the default multilib is not a cross compilation,
-# it may be that some of the other multilibs are.
-if test $cross_compiling = no && test $multilib = yes \
-   && test "x${with_multisubdir}" != x ; then
-   cross_compiling=maybe
-fi
-
-ac_config_commands="$ac_config_commands default-1"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -13644,6 +13645,20 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 #
 # INIT-COMMANDS
 #
+
+srcdir="$srcdir"
+host="$host"
+target="$target"
+with_multisubdir="$with_multisubdir"
+with_multisrctop="$with_multisrctop"
+with_target_subdir="$with_target_subdir"
+ac_configure_args="${multilib_arg} ${ac_configure_args}"
+multi_basedir="$multi_basedir"
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+CC="$CC"
+CXX="$CXX"
+GFORTRAN="$GFORTRAN"
+GCJ="$GCJ"
 AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 
 
 
 
 
-srcdir="$srcdir"
-host="$host"
-target="$target"
-with_multisubdir="$with_multisubdir"
-with_multisrctop="$with_multisrctop"
-with_target_subdir="$with_target_subdir"
-ac_configure_args="${multilib_arg} ${ac_configure_args}"
-multi_basedir="$multi_basedir"
-CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-CC="$CC"
-CXX="$CXX"
-GFORTRAN="$GFORTRAN"
-GCJ="$GCJ"
-
 _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -13929,9 +13930,9 @@ for ac_config_target in $ac_config_targets
 do
   case $ac_config_target in
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
-    "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
 
   *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
@@ -14517,6 +14518,14 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
 
 
   case $ac_file$ac_mode in
+    "default-1":C)
+# Only add multilib support code if we just rebuilt the top-level
+# Makefile.
+case " $CONFIG_FILES " in
+ *" Makefile "*)
+   ac_file=Makefile . ${multi_basedir}/config-ml.in
+   ;;
+esac ;;
     "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
   # Autoconf 2.62 quotes --file arguments for eval, but not when files
   # are listed without --file.  Let's play safe and only enable the eval
@@ -15251,14 +15260,6 @@ _LT_EOF
   chmod +x "$ofile"
 
  ;;
-    "default-1":C)
-# Only add multilib support code if we just rebuilt the top-level
-# Makefile.
-case " $CONFIG_FILES " in
- *" Makefile "*)
-   ac_file=Makefile . ${multi_basedir}/config-ml.in
-   ;;
-esac ;;
 
   esac
 done # for ac_tag
index c547da8..eb4fe8c 100644 (file)
@@ -23,6 +23,8 @@ AC_CONFIG_HEADER(config.h)
 AC_CANONICAL_SYSTEM
 ACX_NONCANONICAL_TARGET
 
+AM_ENABLE_MULTILIB(, ..)
+
 target_alias=${target_alias-$host_alias}
 AC_SUBST(target_alias)
 
@@ -60,7 +62,6 @@ AC_SUBST(enable_shared)
 AC_SUBST(enable_static)
 
 AM_MAINTAINER_MODE
-AM_ENABLE_MULTILIB(, ..)
 
 AC_LANG_C
 # The same as in boehm-gc and libstdc++. Have to borrow it from there.
index 23bcabe..2352e94 100644 (file)
@@ -1,3 +1,12 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-01-27  Matthias Klose  <doko@ubuntu.com>
+
+       * configure.ac: Move AM_ENABLE_MULTILIB before AC_PROG_CC.
+       * configure: Regenerate.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 5e4840f..c550ad6 100755 (executable)
@@ -659,7 +659,6 @@ toolexecdir
 MAINT
 MAINTAINER_MODE_FALSE
 MAINTAINER_MODE_TRUE
-multi_basedir
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
@@ -717,6 +716,7 @@ CPPFLAGS
 LDFLAGS
 CFLAGS
 CC
+multi_basedir
 target_alias
 host_alias
 build_alias
@@ -758,9 +758,9 @@ SHELL'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_multilib
 enable_version_specific_runtime_libs
 enable_dependency_tracking
-enable_multilib
 enable_maintainer_mode
 enable_shared
 enable_static
@@ -1404,10 +1404,10 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-multilib       build many library versions (default)
   --enable-version-specific-runtime-libs    Specify that runtime libraries should be installed in a compiler-specific directory
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
-  --enable-multilib       build many library versions (default)
   --enable-maintainer-mode  enable make rules and dependencies not useful
                          (and sometimes confusing) to the casual installer
   --enable-shared[=PKGS]  build shared libraries [default=yes]
@@ -2625,6 +2625,44 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+# Default to --enable-multilib
+# Check whether --enable-multilib was given.
+if test "${enable_multilib+set}" = set; then :
+  enableval=$enable_multilib; case "$enableval" in
+  yes) multilib=yes ;;
+  no)  multilib=no ;;
+  *)   as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;;
+ esac
+else
+  multilib=yes
+fi
+
+
+# We may get other options which we leave undocumented:
+# --with-target-subdir, --with-multisrctop, --with-multisubdir
+# See config-ml.in if you want the gory details.
+
+if test "$srcdir" = "."; then
+  if test "$with_target_subdir" != "."; then
+    multi_basedir="$srcdir/$with_multisrctop../.."
+  else
+    multi_basedir="$srcdir/$with_multisrctop.."
+  fi
+else
+  multi_basedir="$srcdir/.."
+fi
+
+
+# Even if the default multilib is not a cross compilation,
+# it may be that some of the other multilibs are.
+if test $cross_compiling = no && test $multilib = yes \
+   && test "x${with_multisubdir}" != x ; then
+   cross_compiling=maybe
+fi
+
+ac_config_commands="$ac_config_commands default-1"
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-version-specific-runtime-libs" >&5
 $as_echo_n "checking for --enable-version-specific-runtime-libs... " >&6; }
 # Check whether --enable-version-specific-runtime-libs was given.
@@ -4701,43 +4739,6 @@ fi
 
 
 
-# Default to --enable-multilib
-# Check whether --enable-multilib was given.
-if test "${enable_multilib+set}" = set; then :
-  enableval=$enable_multilib; case "$enableval" in
-  yes) multilib=yes ;;
-  no)  multilib=no ;;
-  *)   as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;;
- esac
-else
-  multilib=yes
-fi
-
-
-# We may get other options which we leave undocumented:
-# --with-target-subdir, --with-multisrctop, --with-multisubdir
-# See config-ml.in if you want the gory details.
-
-if test "$srcdir" = "."; then
-  if test "$with_target_subdir" != "."; then
-    multi_basedir="$srcdir/$with_multisrctop../.."
-  else
-    multi_basedir="$srcdir/$with_multisrctop.."
-  fi
-else
-  multi_basedir="$srcdir/.."
-fi
-
-
-# Even if the default multilib is not a cross compilation,
-# it may be that some of the other multilibs are.
-if test $cross_compiling = no && test $multilib = yes \
-   && test "x${with_multisubdir}" != x ; then
-   cross_compiling=maybe
-fi
-
-ac_config_commands="$ac_config_commands default-1"
-
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
@@ -12019,7 +12020,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12022 "configure"
+#line 12023 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12125,7 +12126,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12128 "configure"
+#line 12129 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -17090,7 +17091,6 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 #
 # INIT-COMMANDS
 #
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 
 srcdir="$srcdir"
 host="$host"
@@ -17105,6 +17105,7 @@ CC="$CC"
 CXX="$CXX"
 GFORTRAN="$GFORTRAN"
 GCJ="$GCJ"
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 
 
 # The HP-UX ksh and POSIX shell print the target directory to stdout
@@ -17492,8 +17493,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 for ac_config_target in $ac_config_targets
 do
   case $ac_config_target in
-    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "gstdint.h") CONFIG_COMMANDS="$CONFIG_COMMANDS gstdint.h" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
@@ -18091,6 +18092,14 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
 
 
   case $ac_file$ac_mode in
+    "default-1":C)
+# Only add multilib support code if we just rebuilt the top-level
+# Makefile.
+case " $CONFIG_FILES " in
+ *" Makefile "*)
+   ac_file=Makefile . ${multi_basedir}/config-ml.in
+   ;;
+esac ;;
     "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
   # Autoconf 2.62 quotes --file arguments for eval, but not when files
   # are listed without --file.  Let's play safe and only enable the eval
@@ -18186,14 +18195,6 @@ $as_echo X"$file" |
   done
 }
  ;;
-    "default-1":C)
-# Only add multilib support code if we just rebuilt the top-level
-# Makefile.
-case " $CONFIG_FILES " in
- *" Makefile "*)
-   ac_file=Makefile . ${multi_basedir}/config-ml.in
-   ;;
-esac ;;
     "libtool":C)
 
     # See if we are running on zsh, and set the options which allow our
index e672131..eb8b3ba 100644 (file)
@@ -5,6 +5,8 @@ AC_PREREQ([2.64])
 AC_INIT(package-unused, version-unused, libsanitizer)
 AC_CONFIG_SRCDIR([include/sanitizer/common_interface_defs.h])
 
+AM_ENABLE_MULTILIB(, ..)
+
 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
 AC_ARG_ENABLE(version-specific-runtime-libs,
 [  --enable-version-specific-runtime-libs    Specify that runtime libraries should be installed in a compiler-specific directory ],
@@ -26,7 +28,6 @@ AC_SUBST(target_alias)
 GCC_LIBSTDCXX_RAW_CXX_FLAGS
 
 AM_INIT_AUTOMAKE(foreign no-dist)
-AM_ENABLE_MULTILIB(, ..)
 AM_MAINTAINER_MODE
 
 # Calculate toolexeclibdir
index dbf3753..290978c 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 3656410..c7b8731 100644 (file)
@@ -1,3 +1,354 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
+2015-06-16  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+       PR target/66200
+       * configure.host (host_cpu): Add aarch64 case.
+       * config/cpu/aarch64/atomic_word.h: New file.
+
+2015-06-10  Jonathan Wakely  <jwakely@redhat.com>
+
+       Backport from mainline
+       2015-01-20  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/64650
+       * include/experimental/optional (bad_optional_access): Add default
+       constructor.
+       * testsuite/experimental/optional/requirements.cc: Test for default
+       constructor.
+
+2015-06-08  Jonathan Wakely  <jwakely@redhat.com>
+
+       Backported from mainline
+       2015-06-01  Jonathan Wakely  <jwakely@redhat.com>
+
+       * testsuite/lib/libstdc++.exp (libstdc++_init): Unset LANGUAGE
+       environment variable.
+
+       PR libstdc++/66354
+       * include/bits/stl_algobase.h (__fill_a): Check length before calling
+       memset.
+
+       PR libstdc++/66327
+       * include/bits/stl_algobase.h (__equal<true>::equal): Do not call
+       memcmp for empty ranges.
+       (__lexicographical_compare<true>::__lc): Likewise.
+
+       Backport from mainline
+       2015-04-13  Jonathan Wakely  <jwakely@redhat.com>
+
+       * doc/xml/manual/evolution.xml: Document changes since 4.5 release.
+       * doc/html/*: Regenerate.
+
+2015-06-05  Tim Shen  <timshen@google.com>
+
+       PR libstdc++/66359
+       Backport from mainline
+       2014-11-13  Tim Shen  <timshen@google.com>
+
+       PR libstdc++/63775
+       * include/bits/regex_compiler.h (_Compiler<>::_M_expression_term,
+       _BracketMatcher<>::_M_make_range): Throw regex_erorr on invalid range
+       like [z-a]. Change _M_expression_term interface.
+       * include/bits/regex_compiler.tcc (
+       _Compiler<>::_M_insert_bracket_matcher,
+       _Compiler<>::_M_expression_term): Rewrite bracket expression parsing.
+       * testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc:
+       Add testcases and move file out of extended.
+
+2015-06-04  Renlin Li  <renlin.li@arm.com>
+
+       Backported from mainline
+       2015-06-02  Renlin Li  <renlin.li@arm.com>
+
+       * testsuite/27_io/fpos/14775.cc: Add _GLIBCXX_HAVE_LIMIT_FSIZE check.
+
+2015-05-28  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/65352
+       * include/profile/array (array::data): Use __array_traits::_S_ptr.
+       * include/debug/array (array::data): Likewise.
+       * include/std/array (__array_traits::_S_ptr): New function.
+       (array::data): Use _S_ptr to avoid creating invalid reference.
+       * testsuite/23_containers/array/tuple_interface/get_neg.cc: Adjust
+       dg-error line numbers.
+       * testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc:
+       likewise.
+
+       Backport from mainline
+       2015-01-20  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/64658
+       * include/std/atomic (atomic_init): Define.
+       * testsuite/29_atomics/atomic/64658.cc: New.
+
+       Backport from mainline
+       2014-12-22  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/37522
+       * include/bits/basic_string.h (stod, stof, stoi, stol, stold, stoll,
+       stoul, stoull, to_string): Only use _GLIBCXX_HAVE_BROKEN_VSWPRINTF
+       to guard definition of to_wstring.
+
+2015-05-22  David Edelsohn  <dje.gcc@gmail.com>
+
+       Backport from mainline
+       2015-05-21  David Edelsohn  <dje.gcc@gmail.com>
+
+       PR target/66224
+       * config/cpu/powerpc/atomic_word.h (_GLIBCXX_READ_MEM_BARRIER):
+       Don't use isync. Use lwsync if available.
+
+2015-05-07  Renlin Li  <renlin.li@arm.com>
+
+       Backported from mainline
+       2015-04-22  Renlin Li  <renlin.li@arm.com>
+
+       * testsuite/lib/dg-options.exp (dg-require-thread-fence): New.
+       * testsuite/lib/libstdc++.exp (check_v3_target_thread_fence): New.
+       * testsuite/29_atomics/atomic_flag/clear/1.cc: Use it.
+       * testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc: Likewise.
+       * testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc: Likewise.
+
+2015-04-11  Jonathan Wakely  <jwakely@redhat.com>
+
+       * testsuite/30_threads/shared_lock/cons/5.cc: Remove
+       dg-require-gthreads-timed.
+       * testsuite/30_threads/shared_lock/cons/6.cc: Likewise.
+       * testsuite/30_threads/shared_lock/locking/3.cc: Likewise.
+       * testsuite/30_threads/shared_lock/locking/4.cc: Likewise.
+
+       Backport from mainline
+       2015-04-10  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/std/shared_mutex (shared_timed_mutex): Add comments to
+       explain the logic in the non-pthread_rwlock_t version.
+       (_Mutex): Remove redundant type.
+       (_M_n_readers): Rename to _S_max_readers.
+       (_M_write_entered, _M_readers): New convenience functions.
+       (lock, lock_shared, try_lock_shared, unlock_shared): Use convenience
+       functions. Use predicates with condition variables. Simplify bitwise
+       operations.
+       (try_lock_for, try_shared_lock_for): Convert duration to time_point
+       and call try_lock_until or try_shared_lock_until respectively.
+       (try_lock_until, try_shared_lock_until): Wait on the condition
+       variables until the specified time passes.
+       (unlock): Add Debug Mode assertion.
+       (unlock_shared): Add Debug Mode assertion.
+       * testsuite/30_threads/shared_timed_mutex/try_lock/3.cc: New.
+
+       Backport from mainline
+       2015-03-27  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/65499
+       * include/std/chrono: Add using-directive for literals to std::chrono.
+       * testsuite/20_util/duration/literals/65499.cc: New.
+
+       Backport from mainline
+       2015-03-26  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/58038
+       * include/std/thread (this_thread::sleep_for): Check for negative
+       durations.
+       (this_thread::sleep_until): Check for times in the past.
+       * testsuite/30_threads/this_thread/58038.cc: New.
+       * testsuite/30_threads/this_thread/60421.cc: New.
+
+2015-03-25  Jonathan Wakely  <jwakely@redhat.com>
+
+       Backport from mainline
+       2015-03-02  Jonathan Wakely  <jwakely@redhat.com>
+       PR libstdc++/65279
+       * include/std/scoped_allocator (__inner_type_impl,
+       scoped_allocator_adaptor): Add defaulted copy assignment and move
+       assignment operators.
+       * testsuite/20_util/scoped_allocator/65279.cc: New.
+
+2015-03-25  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR libstdc++/65543
+       * include/std/istream (operator>>(basic_istream<>&&, _Tp&): Revert
+       thinko in r150387.
+       * include/std/ostream (operator<<(basic_ostream<>&&, const _Tp&):
+       Likewise.
+       * testsuite/27_io/rvalue_streams-2.cc: New.
+
+2015-02-03  Tim Shen  <timshen@google.com>
+
+       PR libstdc++/64680
+       Backported from mainline
+       2015-01-22  Tim Shen  <timshen@google.com>
+
+       * include/bits/regex.h (basic_regex<>::basic_regex,
+       basic_regex<>::operator=, basic_regex<>::imbue): Conform to the
+       standard interface.
+       * testsuite/28_regex/basic_regex/assign/char/cstring.cc: New testcase.
+
+2015-02-03  Tim Shen  <timshen@google.com>
+
+       PR libstdc++/64649
+       Backported from mainline
+       2015-01-22  Tim Shen  <timshen@google.com>
+
+       * include/bits/regex.tcc (regex_traits<>::lookup_collatename,
+       regex_traits<>::lookup_classname): Correctly narrow input chars.
+       * testsuite/28_regex/traits/wchar_t/user_defined.cc: New testcase.
+
+2015-01-19  Tim Shen  <timshen@google.com>
+
+       PR libstdc++/64649
+       Backported from mainline
+       2015-01-19  Tim Shen  <timshen@google.com>
+
+       * include/bits/regex.tcc (regex_traits<>::lookup_collatename,
+       regex_traits<>::lookup_classname): Support forward iterators.
+       * testsuite/28_regex/traits/char/lookup_classname.cc: New testcases.
+       * testsuite/28_regex/traits/char/lookup_collatename.cc: New testcase.
+
+2015-01-19  Tim Shen  <timshen@google.com>
+
+       PR libstdc++/64584
+       PR libstdc++/64585
+       * include/bits/regex.h (basic_regex<>::basic_regex,
+       basic_regex<>::assign, basic_regex<>::imbue,
+       basic_regex<>::swap, basic_regex<>::mark_count): Drop NFA after
+       imbuing basic_regex; Make assign() transactional against exception.
+       * testsuite/28_regex/basic_regex/assign/char/string.cc: New testcase.
+       * testsuite/28_regex/basic_regex/imbue/string.cc: New testcase.
+
+2015-01-18  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/64646
+       * include/bits/stl_algo.h (__is_permutation): Also test for reaching
+       end of the second range.
+       * testsuite/25_algorithms/is_permutation/64646.cc: New.
+
+2015-01-09  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/64476
+       * include/bits/stl_uninitialized.h (uninitialized_copy): Fix
+       is_assignable arguments.
+       * testsuite/20_util/specialized_algorithms/uninitialized_copy/64476.cc:
+       New.
+
+2015-01-09  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/60966
+       * include/std/future (packaged_task::operator()): Increment the
+       reference count on the shared state until the function returns.
+
+2015-01-09  Tim Shen  <timshen@google.com>
+
+       PR libstdc++/64239
+       Backported form mainline
+       2015-01-09  Tim Shen  <timshen@google.com>
+
+       * include/bits/regex.h (match_results<>::swap): Use std::swap
+       instead of swap.
+       * include/bits/regex_compiler.tcc (_Compiler<>::_M_quantifier):
+       Likewise.
+       * testsuite/28_regex/match_results/swap.cc: New testcase.
+
+2014-12-17  Tim Shen  <timshen@google.com>
+
+       PR libstdc++/64302
+       PR libstdc++/64303
+       Backported form mainline
+       2014-12-17  Tim Shen  <timshen@google.com>
+
+       * include/bits/regex.h (match_results::cbegin, match_results::cend,
+       regex_token_iterator::regex_token_iterator,
+       regex_token_iterator::_M_normalize_result): Fix match_results cbegin
+       and cend and regex_token_iterator::_M_result invariant.
+       * include/bits/regex.tcc: Fix regex_token_iterator::_M_result invariant.
+       * testsuite/28_regex/iterators/regex_token_iterator/64303.cc: Testcase.
+
+2014-12-13  Tim Shen  <timshen@google.com>
+
+       PR libstdc++/64239
+       * include/bits/regex.h (match_results<>::match_results,
+       match_results<>::operator=, match_results<>::position,
+       match_results<>::swap): Fix ctor/assign/swap.
+       * include/bits/regex.tcc: (__regex_algo_impl<>,
+       regex_iterator<>::operator++): Set match_results::_M_begin as
+       "start position".
+       * testsuite/28_regex/iterators/regex_iterator/char/
+       string_position_01.cc: Test cases.
+
+2014-12-09  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/64203
+       * include/std/shared_mutex: Fix preprocessor conditions.
+       * testsuite/experimental/feat-cxx14.cc: Check conditions.
+
+2014-12-06  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/63840
+       * include/std/functional (function::function(const function&)): Set
+       _M_manager after operations that might throw.
+       * include/tr1/functional (function::function(const function&),
+       function::function(_Functor, _Useless)): Likewise.
+       * testsuite/20_util/function/63840.cc: New.
+       * testsuite/tr1/3_function_objects/function/63840.cc: New.
+
+       PR libstdc++/61947
+       * include/std/tuple (_Head_base): Use allocator_arg_t parameters to
+       disambiguate unary constructors.
+       (_Tuple_impl): Pass allocator_arg_t arguments.
+       * testsuite/20_util/tuple/61947.cc: New.
+       * testsuite/20_util/uses_allocator/cons_neg.cc: Adjust dg-error line.
+
+2014-12-06  Tim Shen  <timshen@google.com>
+
+       PR libstdc++/64140
+       Backport form mainline
+       2014-12-04  Tim Shen  <timshen@google.com>
+
+       * include/bits/regex.tcc (regex_iterator<>::operator++): Update
+       prefix.matched after modifying prefix.first.
+       * testsuite/28_regex/iterators/regex_iterator/char/64140.cc: New
+       testcase.
+
+2014-12-02  Matthias Klose  <doko@ubuntu.com>
+
+       PR libstdc++/64103
+       Backport from mainline
+       2014-11-03  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * include/parallel/algo.h: Do not use default arguments in function
+       template redeclarations (definitions).
+
+       2014-11-04  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/parallel/numeric.h: Do not use default arguments in function
+       template redeclarations (definitions).
+
+2014-11-28  Tim Shen  <timshen@google.com>
+
+       PR libstdc++/63497
+       * include/bits/regex_executor.tcc (_Executor::_M_dfs,
+       _Executor::_M_word_boundary): Avoid dereferecing _M_current at _M_end
+       or other invalid position.
+
+2014-11-13  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       Backport from mainline
+       2014-09-10  Tony Wang  <tony.wang@arm.com>
+
+       PR target/56846
+       * libsupc++/eh_personality.cc (PERSONALITY_FUNCTION):
+       Return with CONTINUE_UNWINDING when the state pattern
+       contains: _US_VIRTUAL_UNWIND_FRAME | _US_FORCE_UNWIND
+
+2014-10-30  David Edelsohn  <dje.gcc@gmail.com>
+
+       Backported from mainline.
+       2014-10-30  David Edelsohn  <dje.gcc@gmail.com>
+
+       * configure.host (aix4.3+, 5+): Do not use -G in link command.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
diff --git a/libstdc++-v3/config/cpu/aarch64/atomic_word.h b/libstdc++-v3/config/cpu/aarch64/atomic_word.h
new file mode 100644 (file)
index 0000000..4dbfb30
--- /dev/null
@@ -0,0 +1,44 @@
+// Low-level type for atomic operations -*- C++ -*-
+
+// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file atomic_word.h
+ *  This file is a GNU extension to the Standard C++ Library.
+ */
+
+#ifndef _GLIBCXX_ATOMIC_WORD_H
+#define _GLIBCXX_ATOMIC_WORD_H 1
+
+
+typedef int _Atomic_word;
+
+// This one prevents loads from being hoisted across the barrier;
+// in other words, this is a Load-Load acquire barrier.
+// This is necessary iff TARGET_RELAXED_ORDERING is defined in tm.h.
+#define _GLIBCXX_READ_MEM_BARRIER __atomic_thread_fence (__ATOMIC_ACQUIRE)
+
+// This one prevents stores from being sunk across the barrier; in other
+// words, a Store-Store release barrier.
+#define _GLIBCXX_WRITE_MEM_BARRIER __atomic_thread_fence (__ATOMIC_RELEASE)
+
+#endif
index 12eafd8..1ceb02c 100644 (file)
@@ -1,6 +1,6 @@
 // Low-level type for atomic operations -*- C++ -*-
 
-// Copyright (C) 2004-2014 Free Software Foundation, Inc.
+// Copyright (C) 2004-2015 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 
 typedef int _Atomic_word;
 
-#define _GLIBCXX_READ_MEM_BARRIER __asm __volatile ("isync":::"memory")
 #ifdef __NO_LWSYNC__
+#define _GLIBCXX_READ_MEM_BARRIER __asm __volatile ("sync":::"memory")
 #define _GLIBCXX_WRITE_MEM_BARRIER __asm __volatile ("sync":::"memory")
 #else
+#define _GLIBCXX_READ_MEM_BARRIER __asm __volatile ("lwsync":::"memory")
 #define _GLIBCXX_WRITE_MEM_BARRIER __asm __volatile ("lwsync":::"memory")
 #endif
 
index c168454..1328ccc 100644 (file)
@@ -153,6 +153,9 @@ esac
 # Most can just use generic.
 # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
 case "${host_cpu}" in
+  aarch64*)
+    atomic_word_dir=cpu/aarch64
+    ;;
   alpha*)
     atomic_word_dir=cpu/alpha
     ;;
@@ -219,7 +222,6 @@ case "${host_os}" in
     os_include_dir="os/aix"
     atomicity_dir="os/aix"
     atomic_word_dir="os/aix"
-    OPT_LDFLAGS="-Wl,-G"
     ;;
   aix4.*)
     os_include_dir="os/generic"
index ce28ec9..c2fdb57 100644 (file)
@@ -6,7 +6,7 @@
      
       <a class="link" href="http://www.fsf.org/" target="_top">FSF
       </a>
-    </p></div><div><div class="legalnotice"><a id="idm269907336032"></a><p>
+    </p></div><div><div class="legalnotice"><a id="idm270880683488"></a><p>
       <a class="link" href="manual/license.html" title="License">License
       </a>
     </p></div></div></div><hr /></div><p>
index 81b295f..491c79b 100644 (file)
@@ -3,7 +3,7 @@
       2008, 2010
      
       <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
-    </p></div></div><hr /></div><div class="qandaset"><a id="idm269899593232"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
+    </p></div></div><hr /></div><div class="qandaset"><a id="idm270879457456"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
       What is libstdc++?
     </a></dt><dt>1.2. <a href="faq.html#faq.why">
       Why should I use libstdc++?
index 53b7500..5f03e6e 100644 (file)
 </a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/utilities.html">6. 
   Utilities
   
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm269891950848">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269891947296">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269891934000">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm269891814224">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269891791712">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269891784416">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269891769792">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm269891753440">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269891749856">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7. 
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm270864947328">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270864943776">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270864930480">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm270864810704">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270864788176">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270864780880">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270864766240">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm270864749888">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270864746304">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7. 
   Strings
   
 </a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/localization.html">8. 
   Localization
   
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#idm269891548288">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9. 
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#idm270864544672">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9. 
   Containers
   
 </a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="manual/associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="manual/associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/unordered_associative.html#containers.unordered.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="manual/unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="manual/unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/iterators.html">10. 
     Existing tests
 </a></span></dt><dt><span class="section"><a href="manual/test.html#test.exception.safety.containers">
 C++11 Requirements Test Sequence Descriptions
-</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="manual/abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="manual/api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
+</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="manual/abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="manual/abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="manual/abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="manual/abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="manual/abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="manual/api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="manual/api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="manual/backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
   </a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.eof">No <code class="code">std::char_traits&lt;char&gt;::eof</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="manual/backwards.html#backwards.second.ostreamform_istreamscan">
   Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
   extensions
index af4237d..de16fb5 100644 (file)
@@ -493,39 +493,39 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
        <a class="link" href="http://www.codesourcery.com/cxx-abi/" target="_top">
          C++ ABI Summary
        </a>
-      </em>. </span></p></div><div class="biblioentry"><a id="idm269884322000"></a><p><span class="title"><em>
+      </em>. </span></p></div><div class="biblioentry"><a id="idm270857326352"></a><p><span class="title"><em>
        <a class="link" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
        Intel Compilers for Linux Compatibility with the GNU Compilers
        </a>
-      </em>. </span></p></div><div class="biblioentry"><a id="idm269884320144"></a><p><span class="title"><em>
+      </em>. </span></p></div><div class="biblioentry"><a id="idm270857324496"></a><p><span class="title"><em>
        <a class="link" href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html" target="_top">
        Linker and Libraries Guide (document 819-0690)
        </a>
-      </em>. </span></p></div><div class="biblioentry"><a id="idm269884318304"></a><p><span class="title"><em>
+      </em>. </span></p></div><div class="biblioentry"><a id="idm270857322656"></a><p><span class="title"><em>
        <a class="link" href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html" target="_top">
       Sun Studio 11: C++ Migration Guide (document 819-3689)
        </a>
-      </em>. </span></p></div><div class="biblioentry"><a id="idm269884316448"></a><p><span class="title"><em>
+      </em>. </span></p></div><div class="biblioentry"><a id="idm270857320800"></a><p><span class="title"><em>
        <a class="link" href="http://www.akkadia.org/drepper/dsohowto.pdf" target="_top">
       How to Write Shared Libraries
        </a>
-      </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idm269884313008"></a><p><span class="title"><em>
+      </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idm270857317360"></a><p><span class="title"><em>
        <a class="link" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
       C++ ABI for the ARM Architecture
        </a>
-      </em>. </span></p></div><div class="biblioentry"><a id="idm269884311200"></a><p><span class="title"><em>
+      </em>. </span></p></div><div class="biblioentry"><a id="idm270857315552"></a><p><span class="title"><em>
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
       Dynamic Shared Objects: Survey and Issues
        </a>
       </em>. </span><span class="subtitle">
       ISO C++ J16/06-0046
-    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269884307904"></a><p><span class="title"><em>
+    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm270857312256"></a><p><span class="title"><em>
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
        Versioning With Namespaces
        </a>
       </em>. </span><span class="subtitle">
       ISO C++ J16/06-0083
-    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269884304624"></a><p><span class="title"><em>
+    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm270857308976"></a><p><span class="title"><em>
        <a class="link" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
       Binary Compatibility of Shared Libraries Implemented in C++
       on GNU/Linux Systems
index a336433..e98ea07 100644 (file)
@@ -6,7 +6,7 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"></a>Chapter 11. 
   Algorithms
-  <a id="idm269891098416" class="indexterm"></a>
+  <a id="idm270864102816" class="indexterm"></a>
 </h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div><p>
   The neatest accomplishment of the algorithms section is that all the
   work is done via iterators, not containers directly.  This means two
index 9dc90a7..0cc49d5 100644 (file)
@@ -77,11 +77,11 @@ _Alloc_traits</code> have been removed.
    <span class="type">__alloc</span> to select an underlying allocator that
    satisfied memory allocation requests. The selection of this
    underlying allocator was not user-configurable.
-   </p><div class="table"><a id="idm269884237408"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
+   </p><div class="table"><a id="idm270857241760"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
    of available allocators. All of these new allocators are
    standard-style. The following table includes details, along with
    the first released version of GCC that included the extension allocator.
-   </p><div class="table"><a id="idm269884209776"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
+   </p><div class="table"><a id="idm270857214128"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
 Debug mode first appears.
 </p><p>
 Precompiled header support <acronym class="acronym">PCH</acronym> support.
@@ -233,10 +233,34 @@ Support for decimal floating-point arithmetic, including <code class="classname"
 </p><p>
 Python pretty-printers are added for use with appropriately-advanced versions of <span class="command"><strong>gdb</strong></span>.
 </p><p>
-Audit for application of function attributes notrow, const, pure, and noreturn.
+Audit for application of function attributes nothrow, const, pure, and noreturn.
 </p><p>
 The default behavior for comparing typeinfo names changed, so
 in <code class="filename">typeinfo</code>, <code class="literal">__GXX_MERGED_TYPEINFO_NAMES</code>
 now defaults to zero.
 </p><p> Extensions modified: <code class="filename">ext/throw_allocator.h</code>.
-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
\ No newline at end of file
+</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_460"></a><code class="constant">4.6</code></h3></div></div></div><p>
+  Use constexpr and nullptr where appropriate throughout the library.
+</p><p>
+  The library was updated to avoid including
+  <code class="filename">stddef.h</code> in order
+  to reduce namespace pollution.
+</p><p>Reference-count annotations to assist data race detectors.
+</p><p>
+  Added <code class="function">make_exception_ptr</code> as an alias of
+  <code class="function">copy_exception</code>.
+</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_470"></a><code class="constant">4.7</code></h3></div></div></div><p>Use of noexcept throughout library.</p><p>Partial support for C++11 allocators first appears.</p><p>
+  <code class="classname">monotonic_clock</code> renamed to
+  <code class="classname">steady_clock</code> as required by the final C++11
+  standard.
+</p><p>A new clocale model for newlib is available.</p><p>
+  The library was updated to avoid including
+  <code class="filename">unistd.h</code> in order
+  to reduce namespace pollution.
+</p><p>Debug Mode was improved for unordered containers. </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_480"></a><code class="constant">4.8</code></h3></div></div></div><p>
+  New random number engines and distributions.
+  Optimisations for random.
+</p><p>New --enable-libstdcxx-verbose configure option</p><p>
+  The --enable-libstdcxx-time configure option becomes unnecessary given a
+  sufficiently recent glibc.
+</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_490"></a><code class="constant">4.9</code></h3></div></div></div><p> Implementation of <code class="classname">regex</code> completed. </p><p> C++14 library and TS implementations are added. </p><p> <code class="function">copy_exception</code> deprecated. </p><p> <code class="classname">__gnu_cxx::array_allocator</code> deprecated. </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
\ No newline at end of file
index 58dd937..69a2f28 100644 (file)
@@ -16,7 +16,7 @@
     Existing tests
 </a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.containers">
 C++11 Requirements Test Sequence Descriptions
-</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
+</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
   </a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.eof">No <code class="code">std::char_traits&lt;char&gt;::eof</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.ostreamform_istreamscan">
   Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
   extensions
index a4efa23..7bce0cb 100644 (file)
@@ -6,7 +6,7 @@
   Appendices
 </th><td width="20%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.contrib"></a>
   Contributing
-  <a id="idm269885393840" class="indexterm"></a>
+  <a id="idm270858398320" class="indexterm"></a>
 </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
   The GNU C++ Library is part of GCC and follows the same development model,
   so the general rules for
index 66d4dd3..91d23a6 100644 (file)
@@ -6,7 +6,7 @@
   Appendices
 </th><td width="20%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.free"></a>
   Free Software Needs Free Documentation
-  <a id="idm269883840592" class="indexterm"></a>
+  <a id="idm270856826352" class="indexterm"></a>
 </h1></div></div></div><p>
 The biggest deficiency in free operating systems is not in the
 software--it is the lack of good free manuals that we can include in
index 21a45a9..f933dd8 100644 (file)
@@ -77,7 +77,7 @@
   </p><p>
     The precise terms and conditions for copying, distribution and modification
     follow.
-  </p><h2><a id="idm269883800400"></a>
+  </p><h2><a id="idm270856786160"></a>
     TERMS AND CONDITIONS
   </h2><h2><a id="gpl-3-definitions"></a>
     0. Definitions.
     waiver of all civil liability in connection with the Program, unless a
     warranty or assumption of liability accompanies a copy of the Program in
     return for a fee.
-  </p><h2><a id="idm269883701536"></a>
+  </p><h2><a id="idm270856687232"></a>
     END OF TERMS AND CONDITIONS
   </h2><h2><a id="HowToApply"></a>
     How to Apply These Terms to Your New Programs
index d460e59..9b84494 100644 (file)
@@ -6,7 +6,7 @@
   Appendices
 </th><td width="20%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.porting"></a>
   Porting and Maintenance
-  <a id="idm269885262032" class="indexterm"></a>
+  <a id="idm270858266384" class="indexterm"></a>
 </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
   Qualifying Exception Safety Guarantees
   
@@ -14,7 +14,7 @@
     Existing tests
 </a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.containers">
 C++11 Requirements Test Sequence Descriptions
-</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
+</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
   </a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.eof">No <code class="code">std::char_traits&lt;char&gt;::eof</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.ostreamform_istreamscan">
   Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
   extensions
@@ -61,7 +61,7 @@ make all
 in the build directory starts the build process. The <code class="literal">all</code> target comes from the <code class="filename">Makefile</code> file, which is  generated via <span class="command"><strong>configure</strong></span> from the <code class="filename">Makefile.in</code> file, which is in turn generated (via
 <span class="command"><strong>automake</strong></span>) from the file
 <code class="filename">Makefile.am</code>.
-</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><div class="figure"><a id="idm269885235184"></a><p class="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/confdeps.png" align="middle" alt="Dependency Graph for Configure and Build Files" /></div></div></div><br class="figure-break" /><p>
+</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><div class="figure"><a id="idm270858239600"></a><p class="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/confdeps.png" align="middle" alt="Dependency Graph for Configure and Build Files" /></div></div></div><br class="figure-break" /><p>
     Regenerate all generated files by using the command 
     <code class="code">autoreconf</code> at the top level of the libstdc++ source
     directory.
index 0181643..5d64945 100644 (file)
@@ -6,7 +6,7 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"></a>Chapter 14. 
   Atomics
-  <a id="idm269890877488" class="indexterm"></a>
+  <a id="idm270863881952" class="indexterm"></a>
 </h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
   Facilities for atomic operations.
 </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.atomics.api"></a>API Reference</h2></div></div></div><p>
index ab42ec4..27a351f 100644 (file)
@@ -947,19 +947,19 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
   This is a change in behavior from older versions. Now, most
   <span class="type">iterator_type</span> typedefs in container classes are POD
   objects, not <span class="type">value_type</span> pointers.
-</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm269883851680"></a><p><span class="title"><em>
+</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm270856837440"></a><p><span class="title"><em>
        <a class="link" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
       Migrating to GCC 4.1
        </a>
-      </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idm269883848896"></a><p><span class="title"><em>
+      </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idm270856834656"></a><p><span class="title"><em>
        <a class="link" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
       Building the Whole Debian Archive with GCC 4.1: A Summary
        </a>
-      </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idm269883846048"></a><p><span class="title"><em>
+      </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idm270856831808"></a><p><span class="title"><em>
        <a class="link" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
       Migration guide for GCC-3.2
        </a>
       </em>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">API Evolution and Deprecation History </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix C. 
   Free Software Needs Free Documentation
   
-</td></tr></table></div></body></html>
+</td></tr></table></div></body></html>
\ No newline at end of file
index f87bda1..590598f 100644 (file)
@@ -75,7 +75,7 @@ else return false.</p></li></ol></div><p>
   </p><p>
     Consider a block of size 64 ints. In memory, it would look like this:
     (assume a 32-bit system where, size_t is a 32-bit entity).
-  </p><div class="table"><a id="idm269889767120"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
+  </p><div class="table"><a id="idm270862771408"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
     The first Column(268) represents the size of the Block in bytes as
     seen by the Bitmap Allocator. Internally, a global free list is
     used to keep track of the free blocks used and given back by the
index e6dec7a..218534f 100644 (file)
@@ -6,7 +6,7 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"></a>Chapter 15. 
   Concurrency
-  <a id="idm269890863664" class="indexterm"></a>
+  <a id="idm270863868128" class="indexterm"></a>
 </h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
   Facilities for concurrent operation, and control thereof.
 </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.concurrency.api"></a>API Reference</h2></div></div></div><p>
index c36bd0e..c844da1 100644 (file)
@@ -6,7 +6,7 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"></a>Chapter 9. 
   Containers
-  <a id="idm269891262400" class="indexterm"></a>
+  <a id="idm270864258848" class="indexterm"></a>
 </h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
      Yes it is, and that was okay until the 2011 edition of the C++ standard.
      In future GCC will change it to O(1) but O(N) was a decision that we
index 0a23688..a077479 100644 (file)
@@ -18,6 +18,6 @@
   mode or with debug mode. The
   following table provides the names and headers of the debugging
   containers:
-</p><div class="table"><a id="idm269890777616"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
+</p><div class="table"><a id="idm270863782160"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
 containers have additional debug capability.
-</p><div class="table"><a id="idm269890732720"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
\ No newline at end of file
+</p><div class="table"><a id="idm270863737264"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
\ No newline at end of file
index e2d091e..fe3f053 100644 (file)
@@ -6,7 +6,7 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="concept_checking.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"></a>Chapter 5. 
   Diagnostics
-  <a id="idm269892036656" class="indexterm"></a>
+  <a id="idm270865032864" class="indexterm"></a>
 </h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
       All exception objects are defined in one of the standard header
       files: <code class="filename">exception</code>,
index 3819a89..f55e1d2 100644 (file)
       supported, and are always aliased to dummy rules. These
       unsupported formats are: <span class="emphasis"><em>info</em></span>,
       <span class="emphasis"><em>ps</em></span>, and <span class="emphasis"><em>dvi</em></span>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm269885108336"></a><p class="title"><strong>Table B.1. Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">coreutils</td><td align="center">8.5</td><td align="center">all</td></tr><tr><td align="center">bash</td><td align="center">4.1</td><td align="center">all</td></tr><tr><td align="center">doxygen</td><td align="center">1.7.6.1</td><td align="center">all</td></tr><tr><td align="center">graphviz</td><td align="center">2.26</td><td align="center">graphical hierarchies</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr></tbody></table></div></div><br class="table-break" /><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm270858112688"></a><p class="title"><strong>Table B.1. Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">coreutils</td><td align="center">8.5</td><td align="center">all</td></tr><tr><td align="center">bash</td><td align="center">4.1</td><td align="center">all</td></tr><tr><td align="center">doxygen</td><td align="center">1.7.6.1</td><td align="center">all</td></tr><tr><td align="center">graphviz</td><td align="center">2.26</td><td align="center">graphical hierarchies</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr></tbody></table></div></div><br class="table-break" /><p>
        Prerequisite tools are Bash 2.0 or later,
        <a class="link" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
        the <a class="link" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
        writing Doxygen comments. Single and double quotes, and
        separators in filenames are two common trouble spots. When in
        doubt, consult the following table.
-      </p><div class="table"><a id="idm269885032656"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm269885013280"></a><p class="title"><strong>Table B.3. Docbook Prerequisites</strong></p><div class="table-contents"><table summary="Docbook Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">docbook5-style-xsl</td><td align="center">1.76.1</td><td align="center">all</td></tr><tr><td align="center">xsltproc</td><td align="center">1.1.26</td><td align="center">all</td></tr><tr><td align="center">xmllint</td><td align="center">2.7.7</td><td align="center">validation</td></tr><tr><td align="center">dblatex</td><td align="center">0.3</td><td align="center">pdf output</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr><tr><td align="center">docbook2X</td><td align="center">0.8.8</td><td align="center">info output</td></tr><tr><td align="center">epub3 stylesheets</td><td align="center">b3</td><td align="center">epub output</td></tr></tbody></table></div></div><br class="table-break" /><p>
+      </p><div class="table"><a id="idm270858037008"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm270858017568"></a><p class="title"><strong>Table B.3. Docbook Prerequisites</strong></p><div class="table-contents"><table summary="Docbook Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">docbook5-style-xsl</td><td align="center">1.76.1</td><td align="center">all</td></tr><tr><td align="center">xsltproc</td><td align="center">1.1.26</td><td align="center">all</td></tr><tr><td align="center">xmllint</td><td align="center">2.7.7</td><td align="center">validation</td></tr><tr><td align="center">dblatex</td><td align="center">0.3</td><td align="center">pdf output</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr><tr><td align="center">docbook2X</td><td align="center">0.8.8</td><td align="center">info output</td></tr><tr><td align="center">epub3 stylesheets</td><td align="center">b3</td><td align="center">epub output</td></tr></tbody></table></div></div><br class="table-break" /><p>
        Editing the DocBook sources requires an XML editor. Many
        exist: some notable options
        include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
@@ -519,11 +519,11 @@ make <code class="literal">XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwal
        <a class="link" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
        An incomplete reference for HTML to Docbook conversion is
        detailed in the table below.
-      </p><div class="table"><a id="idm269884935712"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
+      </p><div class="table"><a id="idm270857940000"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
        &lt;literallayout&gt;</td></tr><tr><td align="left">&lt;ul&gt;</td><td align="left">&lt;itemizedlist&gt;</td></tr><tr><td align="left">&lt;ol&gt;</td><td align="left">&lt;orderedlist&gt;</td></tr><tr><td align="left">&lt;il&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;dl&gt;</td><td align="left">&lt;variablelist&gt;</td></tr><tr><td align="left">&lt;dt&gt;</td><td align="left">&lt;term&gt;</td></tr><tr><td align="left">&lt;dd&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;a href=""&gt;</td><td align="left">&lt;ulink url=""&gt;</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">&lt;literal&gt;, &lt;programlisting&gt;</td></tr><tr><td align="left">&lt;strong&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">"</td><td align="left">&lt;quote&gt;</td></tr></tbody></table></div></div><br class="table-break" /><p>
   And examples of detailed markup for which there are no real HTML
   equivalents are listed in the table below.
-</p><div class="table"><a id="idm269884911568"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
+</p><div class="table"><a id="idm270857915856"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
        <p>&lt;function&gt;clear()&lt;/function&gt;</p>
        <p>&lt;function&gt;fs.clear()&lt;/function&gt;</p>
       </td></tr><tr><td align="left">&lt;type&gt;</td><td align="left">&lt;type&gt;long long&lt;/type&gt;</td></tr><tr><td align="left">&lt;varname&gt;</td><td align="left">&lt;varname&gt;fs&lt;/varname&gt;</td></tr><tr><td align="left">&lt;literal&gt;</td><td align="left">
index d760c54..84db3da 100644 (file)
@@ -41,4 +41,4 @@ use this layer. More detail as to the specific interface can be found in the sou
 functions, and usage found in the usual &lt;pthread.h&gt; file,
 including <code class="code">pthread_t</code>, <code class="code">pthread_once_t</code>, <code class="code">pthread_create</code>,
 etc.
-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 30. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
+</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 30. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
\ No newline at end of file
index aa6418e..14360fe 100644 (file)
@@ -2,7 +2,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="extensions.html" title="Part III.  Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III. 
   Extensions
   
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idm269890842080"></a></h1></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idm270863846608"></a></h1></div></div></div><p>
   Here we will make an attempt at describing the non-Standard
   extensions to the library.  Some of these are from older versions of
   standard library components, namely SGI's STL, and some of these are
index 4d68bc5..85a0dab 100644 (file)
@@ -4,7 +4,7 @@
   
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="ext_preface.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"></a>Part III. 
   Extensions
-  <a id="idm269890844320" class="indexterm"></a>
+  <a id="idm270863848848" class="indexterm"></a>
 </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="preface"><a href="ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
     debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
            Configuring via Template Parameters
index 6cb0a94..d41981f 100644 (file)
@@ -2,7 +2,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="localization.html" title="Chapter 8.  Localization" /><link rel="prev" href="localization.html" title="Chapter 8.  Localization" /><link rel="next" href="containers.html" title="Chapter 9.  Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8. 
   Localization
   
-</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269891548288"></a>Specializations</h5></div></div></div><p>
+</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270864544672"></a>Specializations</h5></div></div></div><p>
 For the required specialization <code class="classname">codecvt&lt;wchar_t, char, mbstate_t&gt;</code>,
 conversions are made between the internal character set (always UCS4
 on GNU/Linux) and whatever the currently selected locale for the
@@ -53,24 +53,24 @@ characters.
    </p></li><li class="listitem"><p>
        Rename abstract base class. See if just smash-overriding is a
        better approach. Clarify, add sanity to naming.
-     </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269891525936"></a><p><span class="citetitle"><em class="citetitle">
+     </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm270864522384"></a><p><span class="citetitle"><em class="citetitle">
       The GNU C Library
-    </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6  Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="idm269891521184"></a><p><span class="citetitle"><em class="citetitle">
+    </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6  Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="idm270864517632"></a><p><span class="citetitle"><em class="citetitle">
       Correspondence
-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269891518096"></a><p><span class="citetitle"><em class="citetitle">
+    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm270864514544"></a><p><span class="citetitle"><em class="citetitle">
       ISO/IEC 14882:1998 Programming languages - C++
-    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269891515808"></a><p><span class="citetitle"><em class="citetitle">
+    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm270864512256"></a><p><span class="citetitle"><em class="citetitle">
       ISO/IEC 9899:1999 Programming languages - C
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269891513536"></a><p><span class="title"><em>
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm270864509984"></a><p><span class="title"><em>
        <a class="link" href="http://www.unix.org/version3/ieee_std.html" target="_top">
        The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
        </a>
       </em>. </span><span class="copyright">Copyright © 1999 
-      The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idm269891510288"></a><p><span class="citetitle"><em class="citetitle">
+      The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idm270864506736"></a><p><span class="citetitle"><em class="citetitle">
       The C++ Programming Language, Special Edition
     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
        Addison Wesley
-      . </span></span></p></div><div class="biblioentry"><a id="idm269891505664"></a><p><span class="citetitle"><em class="citetitle">
+      . </span></span></p></div><div class="biblioentry"><a id="idm270864502112"></a><p><span class="citetitle"><em class="citetitle">
       Standard C++ IOStreams and Locales
     </em>. </span><span class="subtitle">
       Advanced Programmer's Guide and Reference
@@ -424,42 +424,42 @@ codecvt usage.
       </p></li><li class="listitem"><p>
       wchar_t/char internal buffers and conversions between
       internal/external buffers?
-      </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269891409072"></a><p><span class="citetitle"><em class="citetitle">
+      </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm270864405520"></a><p><span class="citetitle"><em class="citetitle">
       The GNU C Library
     </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
       Chapters 6 Character Set Handling and 7 Locales and Internationalization
-    . </span></p></div><div class="biblioentry"><a id="idm269891404320"></a><p><span class="citetitle"><em class="citetitle">
+    . </span></p></div><div class="biblioentry"><a id="idm270864400768"></a><p><span class="citetitle"><em class="citetitle">
       Correspondence
-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269891401232"></a><p><span class="citetitle"><em class="citetitle">
+    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm270864397680"></a><p><span class="citetitle"><em class="citetitle">
       ISO/IEC 14882:1998 Programming languages - C++
-    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269891398944"></a><p><span class="citetitle"><em class="citetitle">
+    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm270864395392"></a><p><span class="citetitle"><em class="citetitle">
       ISO/IEC 9899:1999 Programming languages - C
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269891396672"></a><p><span class="title"><em>
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm270864393120"></a><p><span class="title"><em>
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
        </a>
       </em>. </span><span class="copyright">Copyright © 2008 
        The Open Group/The Institute of Electrical and Electronics
        Engineers, Inc.
-      . </span></p></div><div class="biblioentry"><a id="idm269891393440"></a><p><span class="citetitle"><em class="citetitle">
+      . </span></p></div><div class="biblioentry"><a id="idm270864389888"></a><p><span class="citetitle"><em class="citetitle">
       The C++ Programming Language, Special Edition
     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
        Addison Wesley
-      . </span></span></p></div><div class="biblioentry"><a id="idm269891388816"></a><p><span class="citetitle"><em class="citetitle">
+      . </span></span></p></div><div class="biblioentry"><a id="idm270864385264"></a><p><span class="citetitle"><em class="citetitle">
       Standard C++ IOStreams and Locales
     </em>. </span><span class="subtitle">
       Advanced Programmer's Guide and Reference
     . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
        Addison Wesley Longman
-      . </span></span></p></div><div class="biblioentry"><a id="idm269891383152"></a><p><span class="title"><em>
+      . </span></span></p></div><div class="biblioentry"><a id="idm270864379600"></a><p><span class="title"><em>
        <a class="link" href="http://www.lysator.liu.se/c/na1.html" target="_top">
       A brief description of Normative Addendum 1
        </a>
-      </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="idm269891379904"></a><p><span class="title"><em>
+      </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="idm270864376352"></a><p><span class="title"><em>
        <a class="link" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
          The Unicode HOWTO
        </a>
-      </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idm269891377120"></a><p><span class="title"><em>
+      </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idm270864373568"></a><p><span class="title"><em>
        <a class="link" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
       UTF-8 and Unicode FAQ for Unix/Linux
        </a>
@@ -705,39 +705,39 @@ void test01()
    model. As of this writing, it is unknown how to query to see
    if a specified message catalog exists using the gettext
    package.
-   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269891296640"></a><p><span class="citetitle"><em class="citetitle">
+   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm270864293088"></a><p><span class="citetitle"><em class="citetitle">
       The GNU C Library
     </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling, and 7 Locales and Internationalization
-    . </span></p></div><div class="biblioentry"><a id="idm269891291888"></a><p><span class="citetitle"><em class="citetitle">
+    . </span></p></div><div class="biblioentry"><a id="idm270864288336"></a><p><span class="citetitle"><em class="citetitle">
       Correspondence
-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269891288800"></a><p><span class="citetitle"><em class="citetitle">
+    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm270864285248"></a><p><span class="citetitle"><em class="citetitle">
       ISO/IEC 14882:1998 Programming languages - C++
-    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269891286512"></a><p><span class="citetitle"><em class="citetitle">
+    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm270864282960"></a><p><span class="citetitle"><em class="citetitle">
       ISO/IEC 9899:1999 Programming languages - C
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269891284240"></a><p><span class="title"><em>
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm270864280688"></a><p><span class="title"><em>
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
        </a>
       </em>. </span><span class="copyright">Copyright © 2008 
        The Open Group/The Institute of Electrical and Electronics
        Engineers, Inc.
-      . </span></p></div><div class="biblioentry"><a id="idm269891281008"></a><p><span class="citetitle"><em class="citetitle">
+      . </span></p></div><div class="biblioentry"><a id="idm270864277456"></a><p><span class="citetitle"><em class="citetitle">
       The C++ Programming Language, Special Edition
     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
        Addison Wesley
-      . </span></span></p></div><div class="biblioentry"><a id="idm269891276384"></a><p><span class="citetitle"><em class="citetitle">
+      . </span></span></p></div><div class="biblioentry"><a id="idm270864272832"></a><p><span class="citetitle"><em class="citetitle">
       Standard C++ IOStreams and Locales
     </em>. </span><span class="subtitle">
       Advanced Programmer's Guide and Reference
     . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
        Addison Wesley Longman
-      . </span></span></p></div><div class="biblioentry"><a id="idm269891270720"></a><p><span class="title"><em>
+      . </span></span></p></div><div class="biblioentry"><a id="idm270864267168"></a><p><span class="title"><em>
        <a class="link" href="http://www.oracle.com/technetwork/java/api/index.html" target="_top">
        API Specifications, Java Platform
        </a>
       </em>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
 java.util.Locale, java.util.ResourceBundle
-    . </span></p></div><div class="biblioentry"><a id="idm269891268384"></a><p><span class="title"><em>
+    . </span></p></div><div class="biblioentry"><a id="idm270864264832"></a><p><span class="title"><em>
        <a class="link" href="https://www.gnu.org/software/gettext/" target="_top">
       GNU gettext tools, version 0.10.38, Native Language Support
       Library and Tools.
index 69553eb..c558c47 100644 (file)
 </a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6. 
   Utilities
   
-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269891950848">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm269891947296">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269891934000">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269891814224">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269891791712">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269891784416">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269891769792">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269891753440">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269891749856">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270864947328">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270864943776">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270864930480">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270864810704">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm270864788176">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm270864780880">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270864766240">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270864749888">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm270864746304">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
   Strings
   
 </a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8. 
   Localization
   
-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269891548288">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm270864544672">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
   Containers
   
 </a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10. 
     Existing tests
 </a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.containers">
 C++11 Requirements Test Sequence Descriptions
-</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
+</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.versioning.goals">Goals</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.history">History</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.config">Configuring</a></span></dt><dt><span class="section"><a href="abi.html#abi.versioning.active">Checking Active</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="section"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="abi.html#abi.testing.single">Single ABI Testing</a></span></dt><dt><span class="section"><a href="abi.html#abi.testing.multi">Multiple ABI Testing</a></span></dt></dl></dd><dt><span class="section"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="section"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="section"><a href="api.html#api.rel_300"><code class="constant">3.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_310"><code class="constant">3.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_320"><code class="constant">3.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_330"><code class="constant">3.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_340"><code class="constant">3.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_400"><code class="constant">4.0</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_410"><code class="constant">4.1</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_420"><code class="constant">4.2</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_430"><code class="constant">4.3</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_440"><code class="constant">4.4</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_450"><code class="constant">4.5</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_460"><code class="constant">4.6</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_470"><code class="constant">4.7</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_480"><code class="constant">4.8</code></a></span></dt><dt><span class="section"><a href="api.html#api.rel_490"><code class="constant">4.9</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first">First</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.first.ios_base">No <code class="code">ios_base</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.first.cout_cin">No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></a></span></dt></dl></dd><dt><span class="section"><a href="backwards.html#backwards.second">Second</a></span></dt><dd><dl><dt><span class="section"><a href="backwards.html#backwards.second.std">Namespace <code class="code">std::</code> not supported</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.iterators">Illegal iterator usage</a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.isspace"><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
   </a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.at">No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.eof">No <code class="code">std::char_traits&lt;char&gt;::eof</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.stringclear">No <code class="code">string::clear</code></a></span></dt><dt><span class="section"><a href="backwards.html#backwards.second.ostreamform_istreamscan">
   Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
   extensions
@@ -143,19 +143,19 @@ Support for C++11 dialect.
   
 </a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D. 
     <acronym class="acronym">GNU</acronym> General Public License version 3
-  </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#idm269889654480">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idm269889647760">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idm269889616064">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idm269889601152">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idm269889591888">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idm269889524368">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idm269889461728">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269889267280">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
+  </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#idm270862658832">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idm270862652112">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idm270862620480">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idm270862605568">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idm270862596304">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idm270862528720">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idm270862466016">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm270862271376">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
            Effect of embedded lists in
            <code class="classname">std::multimap</code>
-         </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idm269889243776">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idm269889223968">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idm269889210688">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idm269889180448">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idm269889140368">Hash functions, ranged-hash functions, and
-             range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idm269889075936">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idm269889068880">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idm269889052112">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idm269889033008">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idm269889002224">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idm269888994448">Standard resize policy trigger sequence
-               diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idm269888990288">Standard resize policy size sequence
-               diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idm269888912192">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idm269888902752">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idm269888889584">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idm269888877920">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idm269888869744">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idm269888847488">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idm269888802800">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idm269888792304">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idm269888761664">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idm269888756080">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idm269888692256">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idm269888657216">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idm269885235184">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#idm269898483568">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idm269898526464">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idm269905296208">C++ 2014 Implementation Status</a></dt><dt>1.4. <a href="status.html#idm269905233696">C++ Technical Specifications Implementation Status</a></dt><dt>1.5. <a href="status.html#idm269905166704">C++ TR1 Implementation Status</a></dt><dt>1.6. <a href="status.html#idm269894775952">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idm269894279056">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idm269894251568">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idm269894215088">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idm269894190352">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idm269894138912">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idm269894109024">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idm269894092096">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idm269894071024">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idm269894065504">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idm269894059104">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idm269894023376">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idm269894008608">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idm269893995232">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#idm269890777616">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#idm269890732720">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#idm269890541808">Parallel Algorithms</a></dt><dt>19.1. <a href="profile_mode_design.html#idm269890286720">Profile Code Location</a></dt><dt>19.2. <a href="profile_mode_diagnostics.html#idm269890179248">Profile Diagnostics</a></dt><dt>21.1. <a href="bitmap_allocator_impl.html#idm269889767120">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idm269885108336">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idm269885032656">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idm269885013280">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idm269884935712">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idm269884911568">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idm269884237408">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idm269884209776">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#idm269889126560">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idm269889120672">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idm269889116160">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idm269889114336">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idm269889104704">
+         </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idm270862247872">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idm270862228000">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idm270862214656">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idm270862184496">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idm270862144480">Hash functions, ranged-hash functions, and
+             range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idm270862080160">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idm270862073104">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idm270862056352">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idm270862037312">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idm270862006592">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idm270861998816">Standard resize policy trigger sequence
+               diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idm270861994656">Standard resize policy size sequence
+               diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idm270861916624">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idm270861907184">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idm270861894016">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idm270861882352">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idm270861874176">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idm270861851920">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idm270861807152">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idm270861796656">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idm270861766080">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idm270861760496">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idm270861696864">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idm270861661824">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idm270858239600">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#idm270880253808">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idm270872949792">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idm270878257824">C++ 2014 Implementation Status</a></dt><dt>1.4. <a href="status.html#idm270878195312">C++ Technical Specifications Implementation Status</a></dt><dt>1.5. <a href="status.html#idm270878127920">C++ TR1 Implementation Status</a></dt><dt>1.6. <a href="status.html#idm270867770352">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idm270867273952">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idm270867246528">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idm270867210048">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idm270867185312">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idm270867133872">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idm270867103984">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idm270867087056">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idm270867065984">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idm270867060464">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idm270867054064">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idm270867018336">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idm270867003568">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idm270866990192">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#idm270863782160">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#idm270863737264">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#idm270863546416">Parallel Algorithms</a></dt><dt>19.1. <a href="profile_mode_design.html#idm270863291008">Profile Code Location</a></dt><dt>19.2. <a href="profile_mode_diagnostics.html#idm270863183488">Profile Diagnostics</a></dt><dt>21.1. <a href="bitmap_allocator_impl.html#idm270862771408">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idm270858112688">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idm270858037008">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idm270858017568">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idm270857940000">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idm270857915856">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idm270857241760">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idm270857214128">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#idm270862130672">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idm270862124848">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idm270862120336">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idm270862118512">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idm270862108880">
                A Standard String Hash Function
-             </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idm269889098560">
+             </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idm270862102720">
                Only k String DNA Hash
-             </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idm269889027504">
+             </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idm270862031808">
                Probability of Probe Sequence of Length k
-             </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269889020736">
+             </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm270862025040">
                Probability Probe Sequence in Some Bin
              </a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part I. 
   Introduction
index 58e906a..1468b9e 100644 (file)
@@ -4,5 +4,5 @@
   
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>Part I. 
   Introduction
-  <a id="idm269898634240" class="indexterm"></a>
+  <a id="idm270873450608" class="indexterm"></a>
 </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2014">C++ 2014</a></span></dt><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html>
\ No newline at end of file
index 42cb034..b27053c 100644 (file)
@@ -6,7 +6,7 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"></a>Chapter 13. 
   Input and Output
-  <a id="idm269891032720" class="indexterm"></a>
+  <a id="idm270864037312" class="indexterm"></a>
 </h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
       only include the headers you really need.  Many people simply include
       <code class="filename">&lt;iostream&gt;</code> when they don't
index 3653820..fb1b577 100644 (file)
@@ -6,7 +6,7 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"></a>Chapter 10. 
   Iterators
-  <a id="idm269891133328" class="indexterm"></a>
+  <a id="idm270864137872" class="indexterm"></a>
 </h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
      The following
 FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
index 19ba126..dfc7670 100644 (file)
@@ -6,8 +6,8 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"></a>Chapter 8. 
   Localization
-  <a id="idm269891625280" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269891548288">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
+  <a id="idm270864621728" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm270864544672">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
 Describes the basic locale object, including nested
 classes id, facet, and the reference-counted implementation object,
 class _Impl.
@@ -402,29 +402,29 @@ global locale" (emphasis Paolo), that is:
        What should non-required facet instantiations do?  If the
        generic implementation is provided, then how to end-users
        provide specializations?
-   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269891582432"></a><p><span class="citetitle"><em class="citetitle">
+   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm270864578880"></a><p><span class="citetitle"><em class="citetitle">
       The GNU C Library
     </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
       Chapters 6 Character Set Handling and 7 Locales and
       Internationalization
-    . </span></p></div><div class="biblioentry"><a id="idm269891577664"></a><p><span class="citetitle"><em class="citetitle">
+    . </span></p></div><div class="biblioentry"><a id="idm270864574112"></a><p><span class="citetitle"><em class="citetitle">
       Correspondence
-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269891574576"></a><p><span class="citetitle"><em class="citetitle">
+    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm270864571024"></a><p><span class="citetitle"><em class="citetitle">
       ISO/IEC 14882:1998 Programming languages - C++
-    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269891572288"></a><p><span class="citetitle"><em class="citetitle">
+    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm270864568736"></a><p><span class="citetitle"><em class="citetitle">
       ISO/IEC 9899:1999 Programming languages - C
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269891570016"></a><p><span class="title"><em>
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm270864566464"></a><p><span class="title"><em>
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
        </a>
       </em>. </span><span class="copyright">Copyright © 2008 
        The Open Group/The Institute of Electrical and Electronics
        Engineers, Inc.
-      . </span></p></div><div class="biblioentry"><a id="idm269891566784"></a><p><span class="citetitle"><em class="citetitle">
+      . </span></p></div><div class="biblioentry"><a id="idm270864563232"></a><p><span class="citetitle"><em class="citetitle">
       The C++ Programming Language, Special Edition
     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
        Addison Wesley
-      . </span></span></p></div><div class="biblioentry"><a id="idm269891562160"></a><p><span class="citetitle"><em class="citetitle">
+      . </span></span></p></div><div class="biblioentry"><a id="idm270864558608"></a><p><span class="citetitle"><em class="citetitle">
       Standard C++ IOStreams and Locales
     </em>. </span><span class="subtitle">
       Advanced Programmer's Guide and Reference
index 9c0ca23..0787188 100644 (file)
@@ -92,7 +92,7 @@
     or loading and unloading shared objects in memory. As such, using
     caching allocators on systems that do not support
     <code class="function">abi::__cxa_atexit</code> is not recommended.
-  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269891950848"></a>Interface Design</h5></div></div></div><p>
+  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270864947328"></a>Interface Design</h5></div></div></div><p>
      The only allocator interface that
      is supported is the standard C++ interface. As such, all STL
      containers have been adjusted, and all external allocators have
    </p><p>
      The base class that <code class="classname">allocator</code> is derived from
      may not be user-configurable.
-</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269891947296"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
+</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270864943776"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
      It's difficult to pick an allocation strategy that will provide
    maximum utility, without excessively penalizing some behavior. In
    fact, it's difficult just deciding which typical actions to measure
      The current default choice for
      <code class="classname">allocator</code> is
      <code class="classname">__gnu_cxx::new_allocator</code>.
-   </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269891934000"></a>Disabling Memory Caching</h5></div></div></div><p>
+   </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270864930480"></a>Disabling Memory Caching</h5></div></div></div><p>
       In use, <code class="classname">allocator</code> may allocate and
       deallocate using implementation-specific strategies and
       heuristics. Because of this, a given call to an allocator object's
         of the used and unused memory locations. It has its own
         <a class="link" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator">chapter</a>
          in the documentation.
-       </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269891879104"></a><p><span class="citetitle"><em class="citetitle">
+       </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm270864875520"></a><p><span class="citetitle"><em class="citetitle">
     ISO/IEC 14882:1998 Programming languages - C++
     </em>. </span>
       isoc++_1998
-    <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idm269891877264"></a><p><span class="title"><em>
+    <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idm270864873680"></a><p><span class="title"><em>
        <a class="link" href="http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759" target="_top">
       The Standard Librarian: What Are Allocators Good For?
        </a>
       </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
        C/C++ Users Journal
-      . </span></span></p></div><div class="biblioentry"><a id="idm269891873488"></a><p><span class="title"><em>
+      . </span></span></p></div><div class="biblioentry"><a id="idm270864869904"></a><p><span class="title"><em>
        <a class="link" href="http://www.hoard.org/" target="_top">
       The Hoard Memory Allocator
        </a>
-      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idm269891870720"></a><p><span class="title"><em>
+      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idm270864867136"></a><p><span class="title"><em>
        <a class="link" href="http://people.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
       Reconsidering Custom Memory Allocation
        </a>
-      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="idm269891864560"></a><p><span class="title"><em>
+      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="idm270864860976"></a><p><span class="title"><em>
        <a class="link" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
       Allocator Types
        </a>
       </em>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername">
        C/C++ Users Journal
-      . </span></span></p></div><div class="biblioentry"><a id="idm269891859824"></a><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
+      . </span></span></p></div><div class="biblioentry"><a id="idm270864856240"></a><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
        Addison Wesley
-      . </span></span></p></div><div class="biblioentry"><a id="idm269891855392"></a><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
+      . </span></span></p></div><div class="biblioentry"><a id="idm270864851808"></a><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
    happen with misuse of the <code class="classname">auto_ptr</code> class
    template (called <acronym class="acronym">AP</acronym> here) would take some
    time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
@@ -445,7 +445,7 @@ drops to zero.
 Derived classes override those functions to destroy resources in a context
 where the correct dynamic type is known. This is an application of the
 technique known as type erasure.
-  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269891814224"></a>Class Hierarchy</h5></div></div></div><p>
+  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270864810704"></a>Class Hierarchy</h5></div></div></div><p>
 A <code class="classname">shared_ptr&lt;T&gt;</code> contains a pointer of
 type <span class="type">T*</span> and an object of type
 <code class="classname">__shared_count</code>. The shared_count contains a
@@ -492,7 +492,7 @@ C++11-only features are: rvalue-ref/move support, allocator support,
 aliasing constructor, make_shared &amp; allocate_shared. Additionally,
 the constructors taking <code class="classname">auto_ptr</code> parameters are
 deprecated in C++11 mode.
-    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269891791712"></a>Thread Safety</h5></div></div></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270864788176"></a>Thread Safety</h5></div></div></div><p>
 The
 <a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
 Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
@@ -537,7 +537,7 @@ compiler, standard library, platform etc. For the version of
 shared_ptr in libstdc++ the compiler and library are fixed, which
 makes things much simpler: we have an atomic CAS or we don't, see Lock
 Policy below for details.
-</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269891784416"></a>Selecting Lock Policy</h5></div></div></div><p>
+</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270864780880"></a>Selecting Lock Policy</h5></div></div></div><p>
     </p><p>
 There is a single <code class="classname">_Sp_counted_base</code> class,
 which is a template parameterized on the enum
@@ -578,7 +578,7 @@ used when libstdc++ is built without <code class="literal">--enable-threads</cod
        <code class="filename">ext/atomicity.h</code>, which detect if the program
        is multi-threaded.  If only one thread of execution exists in
        the program then less expensive non-atomic operations are used.
-     </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269891769792"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
+     </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270864766240"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
 <code class="code">const_pointer_cast</code></span></dt><dd><p>
 As noted in N2351, these functions can be implemented non-intrusively using
 the alias constructor.  However the aliasing constructor is only available
@@ -611,13 +611,13 @@ is called.  Users should not try to use this.
 As well as the extra constructors, this implementation also needs some
 members of _Sp_counted_deleter to be protected where they could otherwise
 be private.
-    </p></dd></dl></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269891753440"></a>Examples</h5></div></div></div><p>
+    </p></dd></dl></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270864749888"></a>Examples</h5></div></div></div><p>
       Examples of use can be found in the testsuite, under
       <code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
       <code class="filename">testsuite/20_util/shared_ptr</code>
       and
       <code class="filename">testsuite/20_util/weak_ptr</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269891749856"></a>Unresolved Issues</h5></div></div></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270864746304"></a>Unresolved Issues</h5></div></div></div><p>
       The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
       clause in the C++11 standard is not implemented in GCC.
     </p><p>
@@ -658,28 +658,28 @@ be private.
     code to work with, Peter Dimov in particular for his help and
     invaluable advice on thread safety.  Phillip Jordan and Paolo
     Carlini for the lock policy implementation.
-  </p></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269891738624"></a><p><span class="title"><em>
+  </p></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm270864735008"></a><p><span class="title"><em>
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
       Improving shared_ptr for C++0x, Revision 2
        </a>
       </em>. </span><span class="subtitle">
       N2351
-    . </span></p></div><div class="biblioentry"><a id="idm269891736336"></a><p><span class="title"><em>
+    . </span></p></div><div class="biblioentry"><a id="idm270864732720"></a><p><span class="title"><em>
        <a class="link" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
       C++ Standard Library Active Issues List
        </a>
       </em>. </span><span class="subtitle">
       N2456
-    . </span></p></div><div class="biblioentry"><a id="idm269891734048"></a><p><span class="title"><em>
+    . </span></p></div><div class="biblioentry"><a id="idm270864730432"></a><p><span class="title"><em>
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
       Working Draft, Standard for Programming Language C++
        </a>
       </em>. </span><span class="subtitle">
       N2461
-    . </span></p></div><div class="biblioentry"><a id="idm269891731744"></a><p><span class="title"><em>
+    . </span></p></div><div class="biblioentry"><a id="idm270864728128"></a><p><span class="title"><em>
        <a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">
       Boost C++ Libraries documentation, shared_ptr
        </a>
       </em>. </span><span class="subtitle">
       N2461
-    . </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Pairs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Traits</td></tr></table></div></body></html>
+    . </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Pairs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Traits</td></tr></table></div></body></html>
\ No newline at end of file
index edcc89c..710f5d1 100644 (file)
@@ -6,7 +6,7 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"></a>Chapter 12. 
   Numerics
-  <a id="idm269891075744" class="indexterm"></a>
+  <a id="idm270864080144" class="indexterm"></a>
 </h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
   </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"></a>complex Processing</h3></div></div></div><p>
     </p><p>Using <code class="code">complex&lt;&gt;</code> becomes even more comple- er, sorry,
index 4391923..f2b08c4 100644 (file)
@@ -12,11 +12,11 @@ explicit source declaration or by compiling existing sources with a
 specific compiler flag.
 </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.intro"></a>Intro</h2></div></div></div><p>The following library components in the include
 <code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::accumulate</code></p></li><li class="listitem"><p><code class="function">std::adjacent_difference</code></p></li><li class="listitem"><p><code class="function">std::inner_product</code></p></li><li class="listitem"><p><code class="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include
-<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm269890341120"></a><p><span class="citetitle"><em class="citetitle">
+<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm270863345408"></a><p><span class="citetitle"><em class="citetitle">
       Parallelization of Bulk Operations for STL Dictionaries
     </em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Leonor</span> <span class="surname">Frias</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
        Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
-      . </span></span></p></div><div class="biblioentry"><a id="idm269890336048"></a><p><span class="citetitle"><em class="citetitle">
+      . </span></span></p></div><div class="biblioentry"><a id="idm270863340336"></a><p><span class="citetitle"><em class="citetitle">
       The Multi-Core Standard Template Library
     </em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Peter</span> <span class="surname">Sanders</span>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Putze</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
         Euro-Par 2007: Parallel Processing. (LNCS 4641)
index fb9e240..01c5d1b 100644 (file)
@@ -62,4 +62,4 @@ Then compile this code with the prerequisite compiler flags
 flags for atomic operations.)
 </p><p> The following table provides the names and headers of all the
   parallel algorithms that can be used in a similar manner:
-</p><div class="table"><a id="idm269890541808"></a><p class="title"><strong>Table 18.1. Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
\ No newline at end of file
+</p><div class="table"><a id="idm270863546416"></a><p class="title"><strong>Table 18.1. Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
\ No newline at end of file
index 302d1b8..86cf2e8 100644 (file)
                these invariants, one must supply some policy that is aware
                of these changes.  Without this, it would be better to use a
                linked list (in itself very efficient for these purposes).
-             </p></li></ol></div><div class="figure"><a id="idm269889654480"></a><p class="title"><strong>Figure 22.1. Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
+             </p></li></ol></div><div class="figure"><a id="idm270862658832"></a><p class="title"><strong>Figure 22.1. Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
            The standard C++ library contains associative containers based on
            red-black trees and collision-chaining hash tables. These are
            very useful, but they are not ideal for all types of
          </p><p>
            The figure below shows the different underlying data structures
            currently supported in this library.
-         </p><div class="figure"><a id="idm269889647760"></a><p class="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p>
+         </p><div class="figure"><a id="idm270862652112"></a><p class="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p>
            A shows a collision-chaining hash-table, B shows a probing
            hash-table, C shows a red-black tree, D shows a splay tree, E shows
            a tree based on an ordered vector(implicit in the order of the
              no guarantee that the elements traversed will coincide with the
              <span class="emphasis"><em>logical</em></span> elements between 1 and 5, as in
              label B.
-           </p><div class="figure"><a id="idm269889616064"></a><p class="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p>
+           </p><div class="figure"><a id="idm270862620480"></a><p class="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p>
              In our opinion, this problem is not caused just because
              red-black trees are order preserving while
              collision-chaining hash tables are (generally) not - it
              list, as in the graphic below, label B.  Here the iterators are as
              light as can be, but the hash-table's operations are more
              complicated.
-           </p><div class="figure"><a id="idm269889601152"></a><p class="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p>
+           </p><div class="figure"><a id="idm270862605568"></a><p class="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p>
              It should be noted that containers based on collision-chaining
              hash-tables are not the only ones with this type of behavior;
              many other self-organizing data structures display it as well.
              container. The graphic below shows three cases: A1 and A2 show
              a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
              show a collision-chaining hash table.
-           </p><div class="figure"><a id="idm269889591888"></a><p class="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+           </p><div class="figure"><a id="idm270862596304"></a><p class="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
                  Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
                  be de-referenced and incremented. The sequence of iterators
                  changed, but in a way that is well-defined by the interface.
            typically less structured than an associative container's tree;
            the third simply uses an associative container. These are
            shown in the figure below with labels A1 and A2, B, and C.
-         </p><div class="figure"><a id="idm269889524368"></a><p class="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p>
+         </p><div class="figure"><a id="idm270862528720"></a><p class="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p>
            No single implementation can completely replace any of the
            others. Some have better <code class="function">push</code>
            and <code class="function">pop</code> amortized performance, some have
            Wickland
          </span>. </span><span class="publisher"><span class="publishername">
          National Psychological Institute
-       . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
+       . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
\ No newline at end of file
index 601eb56..2452753 100644 (file)
          naturally; collision-chaining hash tables (label B) store
          equivalent-key values in the same bucket, the bucket can be
          arranged so that equivalent-key values are consecutive.
-       </p><div class="figure"><a id="idm269889267280"></a><p class="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p>
+       </p><div class="figure"><a id="idm270862271376"></a><p class="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p>
          Put differently, the standards' non-unique mapping
          associative-containers are associative containers that map
          primary keys to linked lists that are embedded into the
          first graphic above. Labels A and B, respectively. Each shaded
          box represents some size-type or secondary
          associative-container.
-       </p><div class="figure"><a id="idm269889243776"></a><p class="title"><strong>Figure 22.10. Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p>
+       </p><div class="figure"><a id="idm270862247872"></a><p class="title"><strong>Figure 22.10. Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p>
          In the first example above, then, one would use an associative
          container mapping each user to an associative container which
          maps each application id to a start time (see
        shows invariants for order-preserving containers: point-type
        iterators are synonymous with range-type iterators.
        Orthogonally,  <span class="emphasis"><em>C</em></span>shows invariants for "set"
-       containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idm269889223968"></a><p class="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers
+       containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idm270862228000"></a><p class="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers
        (hash-based associative containers) lack movement
        operators, such as <code class="literal">operator++</code> - in fact, this
        is the reason why this library differentiates from the standard C++ librarys
          to the question of whether point-type iterators and range-type
          iterators are valid. The graphic below shows tags corresponding to
          different types of invalidation guarantees.
-       </p><div class="figure"><a id="idm269889210688"></a><p class="title"><strong>Figure 22.12. Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+       </p><div class="figure"><a id="idm270862214656"></a><p class="title"><strong>Figure 22.12. Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              <code class="classname">basic_invalidation_guarantee</code>
              corresponds to a basic guarantee that a point-type iterator,
              a found pointer, or a found reference, remains valid as long
        </p><p>
          This library contains a container tag hierarchy corresponding to the
          diagram below.
-       </p><div class="figure"><a id="idm269889180448"></a><p class="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p>
+       </p><div class="figure"><a id="idm270862184496"></a><p class="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p>
          Given any container <span class="type">Cntnr</span>, the tag of
          the underlying data structure can be found via <code class="literal">typename
          Cntnr::container_category</code>.
        collision-chaining container, except for the following.</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">Comb_Probe_Fn</code> describes how to transform a probe
          sequence into a sequence of positions within the table.</p></li><li class="listitem"><p><code class="classname">Probe_Fn</code> describes a probe sequence policy.</p></li></ol></div><p>Some of the default template values depend on the values of
        other parameters, and are explained below.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.hash_policies"></a>Hash Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.general"></a>General</h6></div></div></div><p>Following is an explanation of some functions which hashing
-           involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idm269889140368"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
+           involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idm270862144480"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
              range-hashing functions</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_ranged_hash_range_hashing_fns.png" align="middle" alt="Hash functions, ranged-hash functions, and range-hashing functions" /></div></div></div><br class="figure-break" /><p>Let U be a domain (e.g., the integers, or the
            strings of 3 characters). A hash-table algorithm needs to map
            elements of U "uniformly" into the range [0,..., m -
            Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative
            range upper-bound into a non-negative integral in the range
            between 0 (inclusive) and the range upper bound (exclusive),
-           i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="idm269889126560"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
+           i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="idm270862130672"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
                f(u , m) = g(h(u), m)
              </span></div></div><br class="equation-break" /><p>From the above, it is obvious that given g and
            h, f can always be composed (however the converse
            transforming the sequence of hash values into a sequence of
            positions.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.range"></a>Range Hashing</h6></div></div></div><p>Some common choices for range-hashing functions are the
            division, multiplication, and middle-square methods (<a class="xref" href="policy_data_structures.html#biblio.knuth98sorting" title="The Art of Computer Programming - Sorting and Searching">[biblio.knuth98sorting]</a>), defined
-           as</p><div class="equation"><a id="idm269889120672"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
+           as</p><div class="equation"><a id="idm270862124848"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
                g(r, m) = r mod m
              </span></div></div><br class="equation-break" /><p>g(r, m) = ⌈ u/v ( a r mod v ) ⌉</p><p>and</p><p>g(r, m) = ⌈ u/v ( r<sup>2</sup> mod v ) ⌉</p><p>respectively, for some positive integrals u and
            v (typically powers of 2), and some a. Each of
            implement using the low
            level % (modulo) operation (for any m), or the
            low level &amp; (bit-mask) operation (for the case where
-           m is a power of 2), i.e.,</p><div class="equation"><a id="idm269889116160"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
+           m is a power of 2), i.e.,</p><div class="equation"><a id="idm270862120336"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
                g(r, m) = r % m
-             </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idm269889114336"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
+             </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idm270862118512"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
                g(r, m) = r &amp; m - 1, (with m =
                2<sup>k</sup> for some k)
              </span></div></div><br class="equation-break" /><p>respectively.</p><p>The % (modulo) implementation has the advantage that for
              s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]
            </p><p>be a string of t characters, each of which is from
            domain S. Consider the following ranged-hash
-           function:</p><div class="equation"><a id="idm269889104704"></a><p class="title"><strong>Equation 22.5. 
+           function:</p><div class="equation"><a id="idm270862108880"></a><p class="title"><strong>Equation 22.5. 
                A Standard String Hash Function
              </strong></p><div class="equation-contents"><span class="mathphrase">
                f<sub>1</sub>(s, m) = ∑ <sub>i =
            of a long DNA sequence (and so S = {'A', 'C', 'G',
            'T'}). In this case, scanning the entire string might be
            prohibitively expensive. A possible alternative might be to use
-           only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="idm269889098560"></a><p class="title"><strong>Equation 22.6. 
+           only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="idm270862102720"></a><p class="title"><strong>Equation 22.6. 
                Only k String DNA Hash
              </strong></p><div class="equation-contents"><span class="mathphrase">
                f<sub>2</sub>(s, m) = ∑ <sub>i
              the container transforms the key into a non-negative integral
              using the hash functor (points B and C), and transforms the
              result into a position using the combining functor (points D
-             and E).</p><div class="figure"><a id="idm269889075936"></a><p class="title"><strong>Figure 22.15. Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s
+             and E).</p><div class="figure"><a id="idm270862080160"></a><p class="title"><strong>Figure 22.15. Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s
              hash-functor, <code class="classname">Hash_Fn</code> is instantiated by <code class="classname">null_type</code> , then <code class="classname">Comb_Hash_Fn</code> is taken to be
              a ranged-hash function. The graphic below shows an <code class="function">insert</code> sequence
              diagram. The user inserts an element (point A), the container
              transforms the key into a position using the combining functor
-             (points B and C).</p><div class="figure"><a id="idm269889068880"></a><p class="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
+             (points B and C).</p><div class="figure"><a id="idm270862073104"></a><p class="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
                Probing tables
              </h6></div></div></div><p><code class="classname">gp_hash_table</code> is parametrized by
              <code class="classname">Hash_Fn</code>, <code class="classname">Probe_Fn</code>,
                a linear probe and a quadratic probe function,
                respectively.</p></li></ol></div><p>
                The graphic below shows the relationships.
-             </p><div class="figure"><a id="idm269889052112"></a><p class="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
+             </p><div class="figure"><a id="idm270862056352"></a><p class="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
            shrink. It is necessary to specify policies to determine how
            and when a hash table should change its size. Usually, resize
            policies can be decomposed into orthogonal policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A size policy indicating how a hash table
            and some load factor be denoted by Α. We would like to
            calculate the minimal length of k, such that if there were Α
            m elements in the hash table, a probe sequence of length k would
-           be found with probability at most 1/m.</p><div class="figure"><a id="idm269889033008"></a><p class="title"><strong>Figure 22.18. Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length
+           be found with probability at most 1/m.</p><div class="figure"><a id="idm270862037312"></a><p class="title"><strong>Figure 22.18. Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length
            k appears in bin i by p<sub>i</sub>, the
            length of the probe sequence of bin i by
-           l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idm269889027504"></a><p class="title"><strong>Equation 22.7. 
+           l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idm270862031808"></a><p class="title"><strong>Equation 22.7. 
                Probability of Probe Sequence of Length k
              </strong></p><div class="equation-contents"><span class="mathphrase">
                p<sub>1</sub> = 
            l<sub>i</sub> are negatively-dependent
            (<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>)
            . Let
-           I(.) denote the indicator function. Then</p><div class="equation"><a id="idm269889020736"></a><p class="title"><strong>Equation 22.8. 
+           I(.) denote the indicator function. Then</p><div class="equation"><a id="idm270862025040"></a><p class="title"><strong>Equation 22.8. 
                Probability Probe Sequence in Some Bin
              </strong></p><div class="equation-contents"><span class="mathphrase">
                P( exists<sub>i</sub> l<sub>i</sub> ≥ k ) = 
              a resize is needed, and if so, what is the new size (points D
              to G); following the resize, it notifies the policy that a
              resize has completed (point H); finally, the element is
-             inserted, and the policy notified (point I).</p><div class="figure"><a id="idm269889002224"></a><p class="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally
+             inserted, and the policy notified (point I).</p><div class="figure"><a id="idm270862006592"></a><p class="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally
              decomposed to a size policy and a trigger policy. Consequently,
              the library contains a single class for instantiating a resize
              policy: <code class="classname">hash_standard_resize_policy</code>
              both, and acts as a standard delegate (<a class="xref" href="policy_data_structures.html#biblio.gof" title="Design Patterns - Elements of Reusable Object-Oriented Software">[biblio.gof]</a>)
              to these policies.</p><p>The two graphics immediately below show sequence diagrams
              illustrating the interaction between the standard resize policy
-             and its trigger and size policies, respectively.</p><div class="figure"><a id="idm269888994448"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
-               diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idm269888990288"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
+             and its trigger and size policies, respectively.</p><div class="figure"><a id="idm270861998816"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
+               diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idm270861994656"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
                diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram3.png" align="middle" alt="Standard resize policy size sequence diagram" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.predefined"></a>Predefined Policies</h6></div></div></div><p>The library includes the following
              instantiations of size and trigger policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">hash_load_check_resize_trigger</code>
                implements a load check trigger policy.</p></li><li class="listitem"><p><code class="classname">cc_hash_max_collision_check_resize_trigger</code>
          each node, and maintains node invariants (see <a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>.) The first stores in
          each node the size of the sub-tree rooted at the node; the
          second stores at each node the maximal endpoint of the
-         intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idm269888912192"></a><p class="title"><strong>Figure 22.22. Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of
+         intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idm270861916624"></a><p class="title"><strong>Figure 22.22. Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of
          reasons:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>There must be a way to specify what a node's metadata
            should be (if any).</p></li><li class="listitem"><p>Various operations can invalidate node
            invariants.  The graphic below shows how a right rotation,
            metadata.</p></li><li class="listitem"><p>It is not feasible to know in advance which methods trees
            can support. Besides the usual <code class="classname">find</code> method, the
            first tree can support a <code class="classname">find_by_order</code> method, while
-           the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idm269888902752"></a><p class="title"><strong>Figure 22.23. Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means:
+           the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idm270861907184"></a><p class="title"><strong>Figure 22.23. Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means:
          node iterators, and template-template node updater
          parameters.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.iterators"></a>Node Iterators</h6></div></div></div><p>Each tree-based container defines two additional iterator
            types, <code class="classname">const_node_iterator</code>
            <code class="classname">node_update</code> class, and publicly subclasses
            <code class="classname">node_update</code>. The graphic below shows this
            scheme, as well as some predefined policies (which are explained
-           below).</p><div class="figure"><a id="idm269888889584"></a><p class="title"><strong>Figure 22.24. A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of
+           below).</p><div class="figure"><a id="idm270861894016"></a><p class="title"><strong>Figure 22.24. A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of
            <code class="classname">Node_Update</code>) must define <code class="classname">metadata_type</code> as
            the type of metadata it requires. For order statistics,
            e.g., <code class="classname">metadata_type</code> might be <code class="classname">size_t</code>.
            <code class="classname">nd_it</code>. For example, say node x in the
            graphic below label A has an invalid invariant, but its' children,
            y and z have valid invariants. After the invocation, all three
-           nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idm269888877920"></a><p class="title"><strong>Figure 22.25. Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant,
+           nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idm270861882352"></a><p class="title"><strong>Figure 22.25. Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant,
            it invokes this method in its <code class="classname">node_update</code> base to
            restore the invariant. For example, the graphic below shows
            an <code class="function">insert</code> operation (point A); the tree performs some
            C, and D). (It is well known that any <code class="function">insert</code>,
            <code class="function">erase</code>, <code class="function">split</code> or <code class="function">join</code>, can restore
            all node invariants by a small number of node invariant updates (<a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>)
-           .</p><div class="figure"><a id="idm269888869744"></a><p class="title"><strong>Figure 22.26. Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions
+           .</p><div class="figure"><a id="idm270861874176"></a><p class="title"><strong>Figure 22.26. Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions
            need to be answered:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>How can a tree which supports order statistics define a
              method such as <code class="classname">find_by_order</code>?</p></li><li class="listitem"><p>How can the node updater base access methods of the
              tree?</p></li><li class="listitem"><p>How can the following cyclic dependency be resolved?
              node's metadata (this is halting reducible). In the graphic
              below, assume the shaded node is inserted. The tree would have
              to traverse the useless path shown to the root, applying
-             redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idm269888847488"></a><p class="title"><strong>Figure 22.27. Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code>
+             redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idm270861851920"></a><p class="title"><strong>Figure 22.27. Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code>
            solves both these problems. The tree detects that node
            invariants are irrelevant, and defines all accordingly.</p></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.details.split"></a>Split and Join</h6></div></div></div><p>Tree-based containers support split and join methods.
          It is possible to split a tree so that it passes
          sub-tree with leafs "a" and "as". The maximal common prefix is
          "a". The internal node contains, consequently, to const
          iterators, one pointing to <code class="varname">'a'</code>, and the other to
-         <code class="varname">'s'</code>.</p><div class="figure"><a id="idm269888802800"></a><p class="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
+         <code class="varname">'s'</code>.</p><div class="figure"><a id="idm270861807152"></a><p class="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
          tree-based containers. There are two minor
          differences, though, which, unfortunately, thwart sharing them
          sharing the same node-updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A trie's <code class="classname">Node_Update</code> template-template
            parametrized by <code class="classname">Cmp_Fn</code>.</p></li><li class="listitem"><p>Tree-based containers store values in all nodes, while
            trie-based containers (at least in this implementation) store
            values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined
-         policies (which are explained below).</p><div class="figure"><a id="idm269888792304"></a><p class="title"><strong>Figure 22.29. A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node
+         policies (which are explained below).</p><div class="figure"><a id="idm270861796656"></a><p class="title"><strong>Figure 22.29. A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node
          updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
                <code class="classname">trie_order_statistics_node_update</code>
                supports order statistics.
          simple list of integer keys. If we search for the integer 6, we
          are paying an overhead: the link with key 6 is only the fifth
          link; if it were the first link, it could be accessed
-         faster.</p><div class="figure"><a id="idm269888761664"></a><p class="title"><strong>Figure 22.30. A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are
+         faster.</p><div class="figure"><a id="idm270861766080"></a><p class="title"><strong>Figure 22.30. A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are
          accessed. They try to determine, by the access history, which
          keys to move to the front of the list. Some of these algorithms
          require adding some metadata alongside each entry.</p><p>For example, in the graphic below label A shows the counter
          predetermined value, say 10, as shown in label C, the count is set
          to 0 and the node is moved to the front of the list, as in label
          D.
-         </p><div class="figure"><a id="idm269888756080"></a><p class="title"><strong>Figure 22.31. The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
+         </p><div class="figure"><a id="idm270861760496"></a><p class="title"><strong>Figure 22.31. The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
          implementing any algorithm moving nodes to the front of the
          list (policies implementing algorithms interchanging nodes are
          unsupported).</p><p>Associative containers based on lists are parametrized by a
          sequence; the second uses a tree (or forest of trees), which is
          typically less structured than an associative container's tree;
          the third simply uses an associative container. These are
-         shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idm269888692256"></a><p class="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped
+         shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idm270861696864"></a><p class="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped
          from a priority queue must incur a logarithmic expense (in the
          amortized sense). Any priority queue implementation that would
          avoid this, would violate known bounds on comparison-based
          container <code class="classname">Cntnr</code>, the tag of the underlying
          data structure can be found via <code class="classname">typename 
          Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below.
-         </p><div class="figure"><a id="idm269888657216"></a><p class="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a
+         </p><div class="figure"><a id="idm270861661824"></a><p class="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a
          container type for its attributes. Given any container
          <code class="classname">Cntnr</code>, then </p><pre class="programlisting">__gnu_pbds::container_traits&lt;Cntnr&gt;</pre><p>
          is a traits class identifying the properties of the
index 311f47c..e0d0e9a 100644 (file)
@@ -61,7 +61,7 @@
        In addition, there are the following diagnostics classes,
        used to report errors specific to this library's data
        structures.
-      </p><div class="figure"><a id="idm269889461728"></a><p class="title"><strong>Figure 22.7. Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
+      </p><div class="figure"><a id="idm270862466016"></a><p class="title"><strong>Figure 22.7. Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
          For the most part, the policy-based containers containers in
          namespace <code class="literal">__gnu_pbds</code> have the same interface as
          the equivalent containers in the standard C++ library, except for
index c98b492..599baa9 100644 (file)
@@ -137,7 +137,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
    call context.
    (Environment variable not supported.)
    </p></li></ul></div><p>
-  </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm269889872512"></a><p><span class="citetitle"><em class="citetitle">
+  </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm270862876688"></a><p><span class="citetitle"><em class="citetitle">
       Perflint: A Context Sensitive Performance Advisor for C++ Programs
     </em>. </span><span class="author"><span class="firstname">Lixia</span> <span class="surname">Liu</span>. </span><span class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span>. </span><span class="copyright">Copyright © 2009 . </span><span class="publisher"><span class="publishername">
        Proceedings of the 2009 International Symposium on Code Generation
index ffe5ae7..c851d4e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="next" href="profile_mode_api.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
-</p><div class="table"><a id="idm269890286720"></a><p class="title"><strong>Table 19.1. Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals.  Implementation files are
+</p><div class="table"><a id="idm270863291008"></a><p class="title"><strong>Table 19.1. Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals.  Implementation files are
      only included from <code class="code">impl/profiler.h</code>, which is the only
      file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
 </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"></a>Wrapper Model</h3></div></div></div><p>
index 68b24db..36fb5d1 100644 (file)
@@ -17,7 +17,7 @@
   A high accuracy means that the diagnostic is unlikely to be wrong.
   These grades are not perfect.  They are just meant to guide users with
   specific needs or time budgets.
-  </p><div class="table"><a id="idm269890179248"></a><p class="title"><strong>Table 19.2. Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers" title="Containers">
+  </p><div class="table"><a id="idm270863183488"></a><p class="title"><strong>Table 19.2. Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers" title="Containers">
     CONTAINERS</a></td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small" title="Hashtable Too Small">
     HASHTABLE_TOO_SMALL</a></td><td align="left">10</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large" title="Hashtable Too Large">
     HASHTABLE_TOO_LARGE</a></td><td align="left">5</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash" title="Inefficient Hash">
index ee41f66..1e55a62 100644 (file)
@@ -7,7 +7,7 @@ This status table is based on the table of contents of ISO/IEC 14882:2003.
 </p><p>
 This page describes the C++ support in mainline GCC SVN, not in any
 particular release.
-</p><div class="table"><a id="idm269898483568"></a><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+</p><div class="table"><a id="idm270880253808"></a><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
        <span class="emphasis"><em>18</em></span>
       </td><td colspan="3" align="left">
        <span class="emphasis"><em>Language support</em></span>
@@ -158,7 +158,7 @@ presence of the required flag.
 </p><p>
 This page describes the C++11 support in mainline GCC SVN, not in any
 particular release.
-</p><div class="table"><a id="idm269898526464"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+</p><div class="table"><a id="idm270872949792"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
        <span class="emphasis"><em>18</em></span>
       </td><td colspan="3" align="left">
        <span class="emphasis"><em>Language support</em></span>
@@ -296,7 +296,7 @@ presence of the required flag.
 </p><p>
 This page describes the C++14 and library TS support in mainline GCC SVN,
 not in any particular release.
-</p><div class="table"><a id="idm269905296208"></a><p class="title"><strong>Table 1.3. C++ 2014 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2014 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Paper</th><th align="left">Title</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+</p><div class="table"><a id="idm270878257824"></a><p class="title"><strong>Table 1.3. C++ 2014 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2014 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Paper</th><th align="left">Title</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
        <a class="link" href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3669.pdf" target="_top">
          N3669
        </a>
@@ -368,7 +368,7 @@ not in any particular release.
        <a class="link" href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3644.pdf" target="_top">
          N3644
        </a>
-      </td><td align="left">Null Forward Iterators</td><td align="left">N</td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idm269905233696"></a><p class="title"><strong>Table 1.4. C++ Technical Specifications Implementation Status</strong></p><div class="table-contents"><table summary="C++ Technical Specifications Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Paper</th><th align="left">Title</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr bgcolor="#C8B0B0"><td align="left">
+      </td><td align="left">Null Forward Iterators</td><td align="left">N</td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idm270878195312"></a><p class="title"><strong>Table 1.4. C++ Technical Specifications Implementation Status</strong></p><div class="table-contents"><table summary="C++ Technical Specifications Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Paper</th><th align="left">Title</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr bgcolor="#C8B0B0"><td align="left">
        <a class="link" href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3662.html" target="_top">
          N3662
        </a>
@@ -439,7 +439,7 @@ In this implementation the header names are prefixed by
 </p><p>
 This page describes the TR1 support in mainline GCC SVN, not in any particular
 release.
-</p><div class="table"><a id="idm269905166704"></a><p class="title"><strong>Table 1.5. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
+</p><div class="table"><a id="idm270878127920"></a><p class="title"><strong>Table 1.5. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
        <p>
          Uses code from
          <a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
@@ -460,7 +460,7 @@ decimal floating-point arithmetic
 </p><p>
 This page describes the TR 24733 support in mainline GCC SVN, not in any
 particular release.
-</p><div class="table"><a id="idm269894775952"></a><p class="title"><strong>Table 1.6. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+</p><div class="table"><a id="idm270867770352"></a><p class="title"><strong>Table 1.6. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
        <span class="emphasis"><em>0</em></span>
       </td><td colspan="3" align="left">
        <span class="emphasis"><em>Introduction</em></span>
index 8e84f2a..30f3fb7 100644 (file)
 </a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6. 
   Utilities
   
-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269891950848">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm269891947296">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269891934000">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269891814224">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269891791712">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269891784416">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269891769792">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269891753440">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269891749856">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270864947328">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270864943776">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270864930480">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270864810704">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm270864788176">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm270864780880">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270864766240">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270864749888">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm270864746304">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
   Strings
   
 </a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8. 
   Localization
   
-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269891548288">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm270864544672">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
   Containers
   
 </a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10. 
index 3c075d5..d163f8d 100644 (file)
@@ -6,7 +6,7 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"></a>Chapter 7. 
   Strings
-  <a id="idm269891723120" class="indexterm"></a>
+  <a id="idm270864719568" class="indexterm"></a>
 </h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
       Here are Standard, simple, and portable ways to perform common
       transformations on a <code class="code">string</code> instance, such as
index 52ca626..b906386 100644 (file)
@@ -6,7 +6,7 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"></a>Chapter 4. 
   Support
-  <a id="idm269893583920" class="indexterm"></a>
+  <a id="idm270866578560" class="indexterm"></a>
 </h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
     This part deals with the functions called and objects created
     automatically during the course of a program's existence.
index 3106b93..07a429c 100644 (file)
@@ -492,7 +492,7 @@ only default variables.
        reporting functions including:
        </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>time_counter</p></li><li class="listitem"><p>resource_counter</p></li><li class="listitem"><p>report_performance</p></li></ul></div></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"></a>Special Topics</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"></a>
   Qualifying Exception Safety Guarantees
-  <a id="idm269884641824" class="indexterm"></a>
+  <a id="idm270857646112" class="indexterm"></a>
 </h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"></a>Overview</h5></div></div></div><p>
         Testing is composed of running a particular test sequence,
         and looking at what happens to the surrounding code when
index 3684e1a..41e8767 100644 (file)
@@ -10,5 +10,5 @@
       enumerated and detailed in the table below.
     </p><p>
       By default, <span class="command"><strong>g++</strong></span> is equivalent to  <span class="command"><strong>g++ -std=gnu++98</strong></span>. The standard library also defaults to this dialect.
-    </p><div class="table"><a id="idm269894279056"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
+    </p><div class="table"><a id="idm270867273952"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
       &lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html>
\ No newline at end of file
index cd54e06..0abdcb7 100644 (file)
@@ -265,7 +265,7 @@ is called.
   }
   catch(...)
   { this-&gt;_M_setstate(ios_base::badbit); }
-</pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm269893686864"></a><p><span class="title"><em>
+</pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm270866681504"></a><p><span class="title"><em>
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
        System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
        </a>
@@ -274,40 +274,40 @@ is called.
     . </span><span class="copyright">Copyright © 2008 
        The Open Group/The Institute of Electrical and Electronics
        Engineers, Inc.
-      . </span></p></div><div class="biblioentry"><a id="idm269893683168"></a><p><span class="title"><em>
+      . </span></p></div><div class="biblioentry"><a id="idm270866677808"></a><p><span class="title"><em>
        <a class="link" href="http://www.boost.org/community/error_handling.html" target="_top">
        Error and Exception Handling
        </a>
       </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
        Boost
-      . </span></span></p></div><div class="biblioentry"><a id="idm269893679472"></a><p><span class="title"><em>
+      . </span></span></p></div><div class="biblioentry"><a id="idm270866674112"></a><p><span class="title"><em>
        <a class="link" href="http://www.boost.org/community/exception_safety.html" target="_top">
        Exception-Safety in Generic Components
        </a>
       </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
        Boost
-      . </span></span></p></div><div class="biblioentry"><a id="idm269893675760"></a><p><span class="title"><em>
+      . </span></span></p></div><div class="biblioentry"><a id="idm270866670400"></a><p><span class="title"><em>
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
        Standard Library Exception Policy
        </a>
       </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
        WG21 N1077
-      . </span></span></p></div><div class="biblioentry"><a id="idm269893672048"></a><p><span class="title"><em>
+      . </span></span></p></div><div class="biblioentry"><a id="idm270866666688"></a><p><span class="title"><em>
        <a class="link" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
        ia64 c++ abi exception handling
        </a>
       </em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
        GNU
-      . </span></span></p></div><div class="biblioentry"><a id="idm269893668352"></a><p><span class="title"><em>
+      . </span></span></p></div><div class="biblioentry"><a id="idm270866662992"></a><p><span class="title"><em>
        <a class="link" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
        Appendix E: Standard-Library Exception Safety
        </a>
-      </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idm269893665536"></a><p><span class="citetitle"><em class="citetitle">
+      </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idm270866660176"></a><p><span class="citetitle"><em class="citetitle">
       Exceptional C++
     </em>. </span><span class="pagenums">
       Exception-Safety Issues and Techniques
-    . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idm269893663152"></a><p><span class="title"><em>
+    . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idm270866657792"></a><p><span class="title"><em>
        <a class="link" href="http://gcc.gnu.org/PR25191" target="_top">
       GCC Bug 25191: exception_defines.h #defines try/catch
        </a>
-      </em>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Debugging Support</td></tr></table></div></body></html>
+      </em>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Debugging Support</td></tr></table></div></body></html>
\ No newline at end of file
index dddebae..32cbea3 100644 (file)
      the 1998 standard as updated for 2003, and the current 2011 standard.
    </p><p>
      C++98/03 include files. These are available in the default compilation mode, i.e. <code class="code">-std=c++98</code> or <code class="code">-std=gnu++98</code>.
-   </p><div class="table"><a id="idm269894251568"></a><p class="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm269894215088"></a><p class="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
+   </p><div class="table"><a id="idm270867246528"></a><p class="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270867210048"></a><p class="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
 C++11 include files. These are only available in C++11 compilation
 mode, i.e. <code class="literal">-std=c++11</code> or <code class="literal">-std=gnu++11</code>.
-</p><p></p><div class="table"><a id="idm269894190352"></a><p class="title"><strong>Table 3.4. C++ 2011 Library Headers</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm269894138912"></a><p class="title"><strong>Table 3.5. C++ 2011 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
+</p><p></p><div class="table"><a id="idm270867185312"></a><p class="title"><strong>Table 3.4. C++ 2011 Library Headers</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270867133872"></a><p class="title"><strong>Table 3.5. C++ 2011 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
   In addition, TR1 includes as:
-</p><div class="table"><a id="idm269894109024"></a><p class="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm269894092096"></a><p class="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
+</p><div class="table"><a id="idm270867103984"></a><p class="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270867087056"></a><p class="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
 compiler supports scalar decimal floating-point types defined via
 <code class="code">__attribute__((mode(SD|DD|LD)))</code>.
-</p><div class="table"><a id="idm269894071024"></a><p class="title"><strong>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
+</p><div class="table"><a id="idm270867065984"></a><p class="title"><strong>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
   Also included are files for the C++ ABI interface:
-</p><div class="table"><a id="idm269894065504"></a><p class="title"><strong>Table 3.9. C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
+</p><div class="table"><a id="idm270867060464"></a><p class="title"><strong>Table 3.9. C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
   And a large variety of extensions.
-</p><div class="table"><a id="idm269894059104"></a><p class="title"><strong>Table 3.10. Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm269894023376"></a><p class="title"><strong>Table 3.11. Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm269894008608"></a><p class="title"><strong>Table 3.12. Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm269893995232"></a><p class="title"><strong>Table 3.13. Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
+</p><div class="table"><a id="idm270867054064"></a><p class="title"><strong>Table 3.10. Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270867018336"></a><p class="title"><strong>Table 3.11. Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270867003568"></a><p class="title"><strong>Table 3.12. Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270866990192"></a><p class="title"><strong>Table 3.13. Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
 </p><p>First, mixing different dialects of the standard headers is not
 possible. It's an all-or-nothing affair. Thus, code like
 </p><pre class="programlisting">
index 7a37907..dcc1f27 100644 (file)
@@ -6,8 +6,8 @@
     Standard Contents
   </th><td width="20%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"></a>Chapter 6. 
   Utilities
-  <a id="idm269892009344" class="indexterm"></a>
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269891950848">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm269891947296">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269891934000">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269891814224">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269891791712">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269891784416">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269891769792">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269891753440">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269891749856">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone.  Many people
+  <a id="idm270865005760" class="indexterm"></a>
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270864947328">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270864943776">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270864930480">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270864810704">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm270864788176">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm270864780880">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270864766240">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270864749888">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm270864746304">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone.  Many people
       get slightly the wrong idea.  In the interest of not reinventing
       the wheel, we will refer you to the introduction to the functor
       concept written by SGI as part of their STL, in
index ce8c14e..f27ceab 100644 (file)
@@ -618,7 +618,7 @@ Python pretty-printers are added for use with appropriately-advanced versions of
 </para>
 
 <para>
-Audit for application of function attributes notrow, const, pure, and noreturn.
+Audit for application of function attributes nothrow, const, pure, and noreturn.
 </para>
 
 <para>
@@ -631,4 +631,77 @@ now defaults to zero.
 </para>
 </section>
 
+<section xml:id="api.rel_460"><info><title><constant>4.6</constant></title></info>
+
+<para>
+  Use constexpr and nullptr where appropriate throughout the library.
+</para>
+
+<para>
+  The library was updated to avoid including
+  <filename class="headerfile">stddef.h</filename> in order
+  to reduce namespace pollution.
+</para>
+
+<para>Reference-count annotations to assist data race detectors.
+</para>
+
+<para>
+  Added <function>make_exception_ptr</function> as an alias of
+  <function>copy_exception</function>.
+</para>
+
+</section>
+
+<section xml:id="api.rel_470"><info><title><constant>4.7</constant></title></info>
+
+<para>Use of noexcept throughout library.</para>
+
+<para>Partial support for C++11 allocators first appears.</para>
+
+<para>
+  <classname>monotonic_clock</classname> renamed to
+  <classname>steady_clock</classname> as required by the final C++11
+  standard.
+</para>
+
+<para>A new clocale model for newlib is available.</para>
+
+<para>
+  The library was updated to avoid including
+  <filename class="headerfile">unistd.h</filename> in order
+  to reduce namespace pollution.
+</para>
+
+<para>Debug Mode was improved for unordered containers. </para>
+
+</section>
+
+<section xml:id="api.rel_480"><info><title><constant>4.8</constant></title></info>
+
+<para>
+  New random number engines and distributions.
+  Optimisations for random.
+</para>
+
+<para>New --enable-libstdcxx-verbose configure option</para>
+
+<para>
+  The --enable-libstdcxx-time configure option becomes unnecessary given a
+  sufficiently recent glibc.
+</para>
+
+</section>
+
+<section xml:id="api.rel_490"><info><title><constant>4.9</constant></title></info>
+
+<para> Implementation of <classname>regex</classname> completed. </para>
+
+<para> C++14 library and TS implementations are added. </para>
+
+<para> <function>copy_exception</function> deprecated. </para>
+
+<para> <classname>__gnu_cxx::array_allocator</classname> deprecated. </para>
+
+</section>
 </section>
index 8918965..a629390 100644 (file)
@@ -2844,8 +2844,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace
 
-#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
-     && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
+#if __cplusplus >= 201103L && defined(_GLIBCXX_USE_C99)
 
 #include <ext/string_conversions.h>
 
@@ -2995,6 +2994,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   stold(const wstring& __str, size_t* __idx = 0)
   { return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); }
 
+#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF
   // DR 1261.
   inline wstring
   to_wstring(int __val)
@@ -3056,6 +3056,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
                                            L"%Lf", __val);
   }
+#endif // _GLIBCXX_HAVE_BROKEN_VSWPRINTF
 #endif
 
 _GLIBCXX_END_NAMESPACE_VERSION
index fe10ceb..ea70679 100644 (file)
@@ -449,7 +449,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        */
       explicit
       basic_regex(const _Ch_type* __p, flag_type __f = ECMAScript)
-      : basic_regex(__p, __p + _Rx_traits::length(__p), __f)
+      : basic_regex(__p, __p + char_traits<_Ch_type>::length(__p), __f)
       { }
 
       /**
@@ -476,7 +476,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        */
       basic_regex(const basic_regex& __rhs)
       : _M_flags(__rhs._M_flags), _M_original_str(__rhs._M_original_str)
-      { this->imbue(__rhs.getloc()); }
+      {
+       _M_traits.imbue(__rhs.getloc());
+       this->assign(_M_original_str, _M_flags);
+      }
 
       /**
        * @brief Move-constructs a basic regular expression.
@@ -490,7 +493,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       : _M_flags(__rhs._M_flags),
       _M_original_str(std::move(__rhs._M_original_str))
       {
-       this->imbue(__rhs.getloc());
+       _M_traits.imbue(__rhs.getloc());
+       this->assign(_M_original_str, _M_flags);
        __rhs._M_automaton.reset();
       }
 
@@ -580,7 +584,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        */
       basic_regex&
       operator=(const _Ch_type* __p)
-      { return this->assign(__p, flags()); }
+      { return this->assign(__p); }
+
+      /**
+       * @brief Replaces a regular expression with a new one constructed from
+       * an initializer list.
+       *
+       * @param __l  The initializer list.
+       *
+       * @throws regex_error if @p __l is not a valid regular expression.
+       */
+      basic_regex&
+      operator=(initializer_list<_Ch_type> __l)
+      { return this->assign(__l.begin(), __l.end()); }
 
       /**
        * @brief Replaces a regular expression with a new one constructed from
@@ -591,7 +607,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       template<typename _Ch_typeraits, typename _Alloc>
        basic_regex&
        operator=(const basic_string<_Ch_type, _Ch_typeraits, _Alloc>& __s)
-       { return this->assign(__s, flags()); }
+       { return this->assign(__s); }
 
       // [7.8.3] assign
       /**
@@ -604,7 +620,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       {
        _M_flags = __rhs._M_flags;
        _M_original_str = __rhs._M_original_str;
-       this->imbue(__rhs.getloc());
+       _M_traits.imbue(__rhs.getloc());
+       this->assign(_M_original_str, _M_flags);
        return *this;
       }
 
@@ -622,7 +639,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        _M_flags = __rhs._M_flags;
        _M_original_str = std::move(__rhs._M_original_str);
        __rhs._M_automaton.reset();
-       this->imbue(__rhs.getloc());
+       _M_traits.imbue(__rhs.getloc());
+       this->assign(_M_original_str, _M_flags);
+       return *this;
       }
 
       /**
@@ -675,12 +694,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        assign(const basic_string<_Ch_type, _Ch_typeraits, _Alloc>& __s,
               flag_type __flags = ECMAScript)
        {
+         _M_automaton = __detail::__compile_nfa(
+           __s.data(), __s.data() + __s.size(), _M_traits, __flags);
+         _M_original_str = __s;
          _M_flags = __flags;
-         _M_original_str.assign(__s.begin(), __s.end());
-         auto __p = _M_original_str.c_str();
-         _M_automaton = __detail::__compile_nfa(__p,
-                                                __p + _M_original_str.size(),
-                                                _M_traits, _M_flags);
          return *this;
        }
 
@@ -725,7 +742,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        */
       unsigned int
       mark_count() const
-      { return _M_automaton->_M_sub_count() - 1; }
+      {
+       if (_M_automaton)
+         return _M_automaton->_M_sub_count() - 1;
+       return 0;
+      }
 
       /**
        * @brief Gets the flags used to construct the regular expression
@@ -744,9 +765,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       locale_type
       imbue(locale_type __loc)
       {
-       auto __ret = _M_traits.imbue(__loc);
-       this->assign(_M_original_str, _M_flags);
-       return __ret;
+       _M_automaton.reset();
+       return _M_traits.imbue(__loc);
       }
 
       /**
@@ -767,8 +787,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       swap(basic_regex& __rhs)
       {
        std::swap(_M_flags, __rhs._M_flags);
-       std::swap(_M_original_str, __rhs._M_original_str);
-       this->imbue(__rhs.imbue(this->getloc()));
+       std::swap(_M_traits, __rhs._M_traits);
+       auto __tmp = std::move(_M_original_str);
+       this->assign(__rhs._M_original_str, _M_flags);
+       __rhs.assign(__tmp, __rhs._M_flags);
       }
 
 #ifdef _GLIBCXX_DEBUG
@@ -777,7 +799,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       { _M_automaton->_M_dot(__ostr); }
 #endif
 
-    protected:
+    private:
       typedef std::shared_ptr<__detail::_NFA<_Rx_traits>> _AutomatonPtr;
 
       template<typename _Bp, typename _Ap, typename _Cp, typename _Rp,
@@ -1568,42 +1590,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        */
       explicit
       match_results(const _Alloc& __a = _Alloc())
-      : _Base_type(__a), _M_in_iterator(false)
+      : _Base_type(__a)
       { }
 
       /**
        * @brief Copy constructs a %match_results.
        */
-      match_results(const match_results& __rhs)
-      : _Base_type(__rhs), _M_in_iterator(false)
-      { }
+      match_results(const match_results& __rhs) = default;
 
       /**
        * @brief Move constructs a %match_results.
        */
-      match_results(match_results&& __rhs) noexcept
-      : _Base_type(std::move(__rhs)), _M_in_iterator(false)
-      { }
+      match_results(match_results&& __rhs) noexcept = default;
 
       /**
        * @brief Assigns rhs to *this.
        */
       match_results&
-      operator=(const match_results& __rhs)
-      {
-       match_results(__rhs).swap(*this);
-       return *this;
-      }
+      operator=(const match_results& __rhs) = default;
 
       /**
        * @brief Move-assigns rhs to *this.
        */
       match_results&
-      operator=(match_results&& __rhs)
-      {
-       match_results(std::move(__rhs)).swap(*this);
-       return *this;
-      }
+      operator=(match_results&& __rhs) = default;
 
       /**
        * @brief Destroys a %match_results object.
@@ -1690,13 +1700,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       difference_type
       position(size_type __sub = 0) const
       {
-       // [28.12.1.4.5]
-       if (_M_in_iterator)
-         return __sub < size() ? std::distance(_M_begin,
-                                               (*this)[__sub].first) : -1;
-       else
-         return __sub < size() ? std::distance(this->prefix().first,
-                                               (*this)[__sub].first) : -1;
+       return __sub < size() ? std::distance(_M_begin,
+                                             (*this)[__sub].first) : -1;
       }
 
       /**
@@ -1778,7 +1783,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        */
       const_iterator
       cbegin() const
-      { return _Base_type::cbegin() + 2; }
+      { return this->begin(); }
 
       /**
        * @brief Gets an iterator to one-past-the-end of the collection.
@@ -1792,7 +1797,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        */
       const_iterator
       cend() const
-      { return _Base_type::cend(); }
+      { return this->end(); }
 
       //@}
 
@@ -1881,7 +1886,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        */
       void
       swap(match_results& __that)
-      { _Base_type::swap(__that); }
+      {
+       using std::swap;
+       _Base_type::swap(__that);
+       swap(_M_begin, __that._M_begin);
+      }
       //@}
 
     private:
@@ -2620,7 +2629,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                             regex_constants::match_flag_type __m
                             = regex_constants::match_default)
       : _M_position(__a, __b, __re, __m),
-      _M_subs(__submatches, *(&__submatches+1)), _M_n(0)
+      _M_subs(__submatches, __submatches + _Nm), _M_n(0)
       { _M_init(__a, __b); }
 
       /**
@@ -2629,12 +2638,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        */
       regex_token_iterator(const regex_token_iterator& __rhs)
       : _M_position(__rhs._M_position), _M_subs(__rhs._M_subs),
-      _M_suffix(__rhs._M_suffix), _M_n(__rhs._M_n), _M_result(__rhs._M_result),
-      _M_has_m1(__rhs._M_has_m1)
-      {
-       if (__rhs._M_result == &__rhs._M_suffix)
-         _M_result = &_M_suffix;
-      }
+      _M_suffix(__rhs._M_suffix), _M_n(__rhs._M_n), _M_has_m1(__rhs._M_has_m1)
+      { _M_normalize_result(); }
 
       /**
        * @brief Assigns a %regex_token_iterator to another.
@@ -2706,6 +2711,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       _M_end_of_seq() const
       { return _M_result == nullptr; }
 
+      // [28.12.2.2.4]
+      void
+      _M_normalize_result()
+      {
+       if (_M_position != _Position())
+         _M_result = &_M_current_match();
+       else if (_M_has_m1)
+         _M_result = &_M_suffix;
+       else
+         _M_result = nullptr;
+      }
+
       _Position         _M_position;
       std::vector<int>  _M_subs;
       value_type        _M_suffix;
index 5fa1f01..792ed92 100644 (file)
@@ -62,6 +62,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        return false;
 
       typename match_results<_BiIter, _Alloc>::_Base_type& __res = __m;
+      __m._M_begin = __s;
       __res.resize(__re._M_automaton->_M_sub_count() + 2);
       for (auto& __it : __res)
        __it.matched = false;
@@ -274,53 +275,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          "right-curly-bracket",
          "tilde",
          "DEL",
-         ""
        };
 
-      // same as boost
-      //static const char* __digraphs[] =
-      //  {
-      //    "ae",
-      //    "Ae",
-      //    "AE",
-      //    "ch",
-      //    "Ch",
-      //    "CH",
-      //    "ll",
-      //    "Ll",
-      //    "LL",
-      //    "ss",
-      //    "Ss",
-      //    "SS",
-      //    "nj",
-      //    "Nj",
-      //    "NJ",
-      //    "dz",
-      //    "Dz",
-      //    "DZ",
-      //    "lj",
-      //    "Lj",
-      //    "LJ",
-      //    ""
-      //  };
-
-      std::string __s(__last - __first, '?');
-      __fctyp.narrow(__first, __last, '?', &*__s.begin());
-
-      for (unsigned int __i = 0; *__collatenames[__i]; __i++)
-       if (__s == __collatenames[__i])
-         return string_type(1, __fctyp.widen(static_cast<char>(__i)));
-
-      //for (unsigned int __i = 0; *__digraphs[__i]; __i++)
-      //  {
-      //    const char* __now = __digraphs[__i];
-      //    if (__s == __now)
-      //      {
-      //       string_type ret(__s.size(), __fctyp.widen('?'));
-      //       __fctyp.widen(__now, __now + 2/* ouch */, &*ret.begin());
-      //       return ret;
-      //      }
-      //  }
+      string __s;
+      for (; __first != __last; ++__first)
+       __s += __fctyp.narrow(*__first, 0);
+
+      for (const auto& __it : __collatenames)
+       if (__s == __it)
+         return string_type(1, __fctyp.widen(
+           static_cast<char>(&__it - __collatenames)));
+
+      // TODO Add digraph support:
+      // http://boost.sourceforge.net/libs/regex/doc/collating_names.html
+
       return string_type();
     }
 
@@ -331,12 +299,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     lookup_classname(_Fwd_iter __first, _Fwd_iter __last, bool __icase) const
     {
       typedef std::ctype<char_type> __ctype_type;
-      typedef std::ctype<char> __cctype_type;
-      typedef const pair<const char*, char_class_type> _ClassnameEntry;
       const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
-      const __cctype_type& __cctyp(use_facet<__cctype_type>(_M_locale));
 
-      static _ClassnameEntry __classnames[] =
+      // Mappings from class name to class mask.
+      static const pair<const char*, char_class_type> __classnames[] =
       {
        {"d", ctype_base::digit},
        {"w", {ctype_base::alnum, _RegexMask::_S_under}},
@@ -355,22 +321,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        {"xdigit", ctype_base::xdigit},
       };
 
-      std::string __s(__last - __first, '?');
-      __fctyp.narrow(__first, __last, '?', &__s[0]);
-      __cctyp.tolower(&*__s.begin(), &*__s.begin() + __s.size());
-      for (_ClassnameEntry* __it = __classnames;
-          __it < *(&__classnames + 1);
-          ++__it)
-       {
-         if (__s == __it->first)
-           {
-             if (__icase
-                 && ((__it->second
-                      & (ctype_base::lower | ctype_base::upper)) != 0))
-               return ctype_base::alpha;
-             return __it->second;
-           }
-       }
+      string __s;
+      for (; __first != __last; ++__first)
+       __s += __fctyp.narrow(__fctyp.tolower(*__first), 0);
+
+      for (const auto& __it : __classnames)
+       if (__s == __it.first)
+         {
+           if (__icase
+               && ((__it.second
+                    & (ctype_base::lower | ctype_base::upper)) != 0))
+             return ctype_base::alpha;
+           return __it.second;
+         }
       return 0;
     }
 
@@ -581,8 +544,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                                   | regex_constants::match_continuous))
                    {
                      _GLIBCXX_DEBUG_ASSERT(_M_match[0].matched);
-                     _M_match.at(_M_match.size()).first = __prefix_first;
-                     _M_match._M_in_iterator = true;
+                     auto& __prefix = _M_match.at(_M_match.size());
+                     __prefix.first = __prefix_first;
+                     __prefix.matched = __prefix.first != __prefix.second;
+                     // [28.12.1.4.5]
                      _M_match._M_begin = _M_begin;
                      return *this;
                    }
@@ -594,8 +559,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          if (regex_search(__start, _M_end, _M_match, *_M_pregex, _M_flags))
            {
              _GLIBCXX_DEBUG_ASSERT(_M_match[0].matched);
-             _M_match.at(_M_match.size()).first = __prefix_first;
-             _M_match._M_in_iterator = true;
+             auto& __prefix = _M_match.at(_M_match.size());
+             __prefix.first = __prefix_first;
+             __prefix.matched = __prefix.first != __prefix.second;
+             // [28.12.1.4.5]
              _M_match._M_begin = _M_begin;
            }
          else
@@ -614,11 +581,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       _M_position = __rhs._M_position;
       _M_subs = __rhs._M_subs;
       _M_n = __rhs._M_n;
-      _M_result = __rhs._M_result;
       _M_suffix = __rhs._M_suffix;
       _M_has_m1 = __rhs._M_has_m1;
-      if (__rhs._M_result == &__rhs._M_suffix)
-       _M_result = &_M_suffix;
+      _M_normalize_result();
       return *this;
     }
 
index af76f55..bcbe117 100644 (file)
@@ -118,7 +118,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       template<bool __icase, bool __collate>
        void
-       _M_expression_term(_BracketMatcher<_TraitsT, __icase, __collate>&
+       _M_expression_term(pair<bool, _CharT>& __last_char,
+                          _BracketMatcher<_TraitsT, __icase, __collate>&
                           __matcher);
 
       int
@@ -390,6 +391,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       void
       _M_make_range(_CharT __l, _CharT __r)
       {
+       if (__l > __r)
+         __throw_regex_error(regex_constants::error_range);
        _M_range_set.push_back(make_pair(_M_translator._M_transform(__l),
                                         _M_translator._M_transform(__r)));
 #ifdef _GLIBCXX_DEBUG
index 14e40c0..8551e0d 100644 (file)
@@ -271,7 +271,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                {
                  auto& __tmp = _M_nfa[__stack.top()];
                  __stack.pop();
-                 swap(__tmp._M_next, __tmp._M_alt);
+                 std::swap(__tmp._M_next, __tmp._M_alt);
                }
            }
          _M_stack.push(__e);
@@ -410,18 +410,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     _M_insert_bracket_matcher(bool __neg)
     {
       _BracketMatcher<_TraitsT, __icase, __collate> __matcher(__neg, _M_traits);
+      pair<bool, _CharT> __last_char; // Optional<_CharT>
+      __last_char.first = false;
+      if (!(_M_flags & regex_constants::ECMAScript))
+       if (_M_try_char())
+         {
+           __matcher._M_add_char(_M_value[0]);
+           __last_char.first = true;
+           __last_char.second = _M_value[0];
+         }
       while (!_M_match_token(_ScannerT::_S_token_bracket_end))
-       _M_expression_term(__matcher);
+       _M_expression_term(__last_char, __matcher);
       __matcher._M_ready();
-      _M_stack.push(_StateSeqT(_M_nfa,
-                              _M_nfa._M_insert_matcher(std::move(__matcher))));
+      _M_stack.push(_StateSeqT(
+                     _M_nfa,
+                     _M_nfa._M_insert_matcher(std::move(__matcher))));
     }
 
   template<typename _TraitsT>
   template<bool __icase, bool __collate>
     void
     _Compiler<_TraitsT>::
-    _M_expression_term(_BracketMatcher<_TraitsT, __icase, __collate>& __matcher)
+    _M_expression_term(pair<bool, _CharT>& __last_char,
+                      _BracketMatcher<_TraitsT, __icase, __collate>& __matcher)
+
     {
       if (_M_match_token(_ScannerT::_S_token_collsymbol))
        __matcher._M_add_collating_element(_M_value);
@@ -429,27 +441,50 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        __matcher._M_add_equivalence_class(_M_value);
       else if (_M_match_token(_ScannerT::_S_token_char_class_name))
        __matcher._M_add_character_class(_M_value, false);
-      else if (_M_try_char()) // [a
+      // POSIX doesn't permit '-' as a start-range char (say [a-z--0]),
+      // except when the '-' is the first character in the bracket expression
+      // ([--0]). ECMAScript treats all '-' after a range as a normal character.
+      // Also see above, where _M_expression_term gets called.
+      //
+      // As a result, POSIX rejects [-----], but ECMAScript doesn't.
+      // Boost (1.57.0) always uses POSIX style even in its ECMAScript syntax.
+      // Clang (3.5) always uses ECMAScript style even in its POSIX syntax.
+      //
+      // It turns out that no one reads BNFs ;)
+      else if (_M_try_char())
        {
-         auto __ch = _M_value[0];
-         if (_M_try_char())
+         if (!__last_char.first)
+           {
+             if (_M_value[0] == '-'
+                 && !(_M_flags & regex_constants::ECMAScript))
+               __throw_regex_error(regex_constants::error_range);
+             __matcher._M_add_char(_M_value[0]);
+             __last_char.first = true;
+             __last_char.second = _M_value[0];
+           }
+         else
            {
-             if (_M_value[0] == '-') // [a-
+             if (_M_value[0] == '-')
                {
-                 if (_M_try_char()) // [a-z]
+                 if (_M_try_char())
+                   {
+                     __matcher._M_make_range(__last_char.second , _M_value[0]);
+                     __last_char.first = false;
+                   }
+                 else
                    {
-                     __matcher._M_make_range(__ch, _M_value[0]);
-                     return;
+                     if (_M_scanner._M_get_token()
+                         != _ScannerT::_S_token_bracket_end)
+                       __throw_regex_error(regex_constants::error_range);
+                     __matcher._M_add_char(_M_value[0]);
                    }
-                 // If the dash is the last character in the bracket
-                 // expression, it is not special.
-                 if (_M_scanner._M_get_token()
-                     != _ScannerT::_S_token_bracket_end)
-                   __throw_regex_error(regex_constants::error_range);
                }
-             __matcher._M_add_char(_M_value[0]);
+             else
+               {
+                 __matcher._M_add_char(_M_value[0]);
+                 __last_char.second = _M_value[0];
+               }
            }
-         __matcher._M_add_char(__ch);
        }
       else if (_M_match_token(_ScannerT::_S_token_quoted_class))
        __matcher._M_add_character_class(_M_value,
index 052302b..1dc6543 100644 (file)
@@ -267,9 +267,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
            _M_dfs<__match_mode>(__state._M_next);
          break;
        case _S_opcode_match:
+         if (_M_current == _M_end)
+           break;
          if (__dfs_mode)
            {
-             if (_M_current != _M_end && __state._M_matches(*_M_current))
+             if (__state._M_matches(*_M_current))
                {
                  ++_M_current;
                  _M_dfs<__match_mode>(__state._M_next);
@@ -350,23 +352,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     bool _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
     _M_word_boundary(_State<_TraitsT> __state) const
     {
-      // By definition.
-      bool __ans = false;
-      auto __pre = _M_current;
-      --__pre;
-      if (!(_M_at_begin() && _M_at_end()))
+      bool __left_is_word = false;
+      if (_M_current != _M_begin
+         || (_M_flags & regex_constants::match_prev_avail))
        {
-         if (_M_at_begin())
-           __ans = _M_is_word(*_M_current)
-             && !(_M_flags & regex_constants::match_not_bow);
-         else if (_M_at_end())
-           __ans = _M_is_word(*__pre)
-             && !(_M_flags & regex_constants::match_not_eow);
-         else
-           __ans = _M_is_word(*_M_current)
-             != _M_is_word(*__pre);
+         auto __prev = _M_current;
+         if (_M_is_word(*std::prev(__prev)))
+           __left_is_word = true;
        }
-      return __ans;
+      bool __right_is_word =
+       _M_current != _M_end && _M_is_word(*_M_current);
+
+      if (__left_is_word == __right_is_word)
+       return false;
+      if (__left_is_word && !(_M_flags & regex_constants::match_not_eow))
+       return true;
+      if (__right_is_word && !(_M_flags & regex_constants::match_not_bow))
+       return true;
+      return false;
     }
 
 _GLIBCXX_END_NAMESPACE_VERSION
index cfb50a9..c9980e5 100644 (file)
@@ -3595,7 +3595,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       // Efficiently compare identical prefixes:  O(N) if sequences
       // have the same elements in the same order.
-      for (; __first1 != __last1; ++__first1, ++__first2)
+      for (; __first1 != __last1 && __first2 != __last2;
+         ++__first1, ++__first2)
        if (!__pred(__first1, __first2))
          break;
 
index f7c11e9..a8d3cc8 100644 (file)
@@ -711,8 +711,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     __fill_a(_Tp* __first, _Tp* __last, const _Tp& __c)
     {
       const _Tp __tmp = __c;
-      __builtin_memset(__first, static_cast<unsigned char>(__tmp),
-                      __last - __first);
+      if (const size_t __len = __last - __first)
+       __builtin_memset(__first, static_cast<unsigned char>(__tmp), __len);
     }
 
   /**
@@ -818,8 +818,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
         static bool
         equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2)
         {
-         return !__builtin_memcmp(__first1, __first2, sizeof(_Tp)
-                                  * (__last1 - __first1));
+         if (const size_t __len = (__last1 - __first1))
+           return !__builtin_memcmp(__first1, __first2, sizeof(_Tp) * __len);
+         return true;
        }
     };
 
@@ -923,9 +924,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        {
          const size_t __len1 = __last1 - __first1;
          const size_t __len2 = __last2 - __first2;
-         const int __result = __builtin_memcmp(__first1, __first2,
-                                               std::min(__len1, __len2));
-         return __result != 0 ? __result < 0 : __len1 < __len2;
+         if (const size_t __len = std::min(__len1, __len2))
+           if (int __result = __builtin_memcmp(__first1, __first2, __len))
+             return __result < 0;
+         return __len1 < __len2;
        }
     };
 
index cd2a482..42b4026 100644 (file)
@@ -115,8 +115,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       const bool __assignable = true;
 #else
       // trivial types can have deleted assignment
-      typedef typename iterator_traits<_InputIterator>::reference _RefType;
-      const bool __assignable = is_assignable<_ValueType1, _RefType>::value;
+      typedef typename iterator_traits<_InputIterator>::reference _RefType1;
+      typedef typename iterator_traits<_ForwardIterator>::reference _RefType2;
+      const bool __assignable = is_assignable<_RefType2, _RefType1>::value;
 #endif
 
       return std::__uninitialized_copy<__is_trivial(_ValueType1)
index ef01c98..e8c7142 100644 (file)
@@ -216,11 +216,11 @@ namespace __debug
 
       pointer
       data() noexcept
-      { return std::__addressof(_AT_Type::_S_ref(_M_elems, 0)); }
+      { return _AT_Type::_S_ptr(_M_elems); }
 
       const_pointer
       data() const noexcept
-      { return std::__addressof(_AT_Type::_S_ref(_M_elems, 0)); }
+      { return _AT_Type::_S_ptr(_M_elems); }
     };
 
   // Array comparisons.
index 2a3f29d..3e73f84 100644 (file)
@@ -106,9 +106,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   class bad_optional_access : public logic_error
   {
   public:
-    // XXX Should not be inline
-    explicit bad_optional_access(const string& __arg) : logic_error(__arg) { }
+    bad_optional_access() : logic_error("bad optional access") { }
 
+    // XXX This constructor is non-standard. Should not be inline
     explicit bad_optional_access(const char* __arg) : logic_error(__arg) { }
 
     virtual ~bad_optional_access() noexcept = default;
index 2c1f9eb..4608487 100644 (file)
@@ -81,9 +81,8 @@ namespace __parallel
   template<typename _RAIter, typename _Function>
     _Function
     __for_each_switch(_RAIter __begin, _RAIter __end, 
-                    _Function __f, random_access_iterator_tag, 
-                    __gnu_parallel::_Parallelism __parallelism_tag
-                    = __gnu_parallel::parallel_balanced)
+                    _Function __f, random_access_iterator_tag,
+                    __gnu_parallel::_Parallelism __parallelism_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
@@ -896,8 +895,7 @@ namespace __parallel
     typename iterator_traits<_RAIter>::difference_type
     __count_switch(_RAIter __begin, _RAIter __end, 
                  const _Tp& __value, random_access_iterator_tag, 
-                 __gnu_parallel::_Parallelism __parallelism_tag 
-                 = __gnu_parallel::parallel_unbalanced)
+                 __gnu_parallel::_Parallelism __parallelism_tag)
     {
       typedef iterator_traits<_RAIter> _TraitsType;
       typedef typename _TraitsType::value_type _ValueType;
@@ -966,8 +964,7 @@ namespace __parallel
     typename iterator_traits<_RAIter>::difference_type
     __count_if_switch(_RAIter __begin, _RAIter __end, 
                     _Predicate __pred, random_access_iterator_tag,
-                    __gnu_parallel::_Parallelism __parallelism_tag
-                    = __gnu_parallel::parallel_unbalanced)
+                    __gnu_parallel::_Parallelism __parallelism_tag)
     {
       typedef iterator_traits<_RAIter> _TraitsType;
       typedef typename _TraitsType::value_type _ValueType;
@@ -1225,8 +1222,7 @@ namespace __parallel
     __transform1_switch(_RAIter1 __begin, _RAIter1 __end,
                       _RAIter2 __result, _UnaryOperation __unary_op,
                       random_access_iterator_tag, random_access_iterator_tag,
-                      __gnu_parallel::_Parallelism __parallelism_tag
-                      = __gnu_parallel::parallel_balanced)
+                      __gnu_parallel::_Parallelism __parallelism_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
@@ -1315,8 +1311,7 @@ namespace __parallel
                       _RAIter3 __result, _BinaryOperation __binary_op,
                       random_access_iterator_tag, random_access_iterator_tag,
                       random_access_iterator_tag,
-                      __gnu_parallel::_Parallelism __parallelism_tag 
-                      = __gnu_parallel::parallel_balanced)
+                      __gnu_parallel::_Parallelism __parallelism_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION(
             (__end1 - __begin1) >=
@@ -1422,8 +1417,7 @@ namespace __parallel
     __replace_switch(_RAIter __begin, _RAIter __end, 
                    const _Tp& __old_value, const _Tp& __new_value, 
                    random_access_iterator_tag, 
-                   __gnu_parallel::_Parallelism __parallelism_tag
-                   = __gnu_parallel::parallel_balanced)
+                   __gnu_parallel::_Parallelism __parallelism_tag)
     {
       // XXX parallel version is where?
       replace(__begin, __end, __old_value, __new_value, 
@@ -1478,8 +1472,7 @@ namespace __parallel
     __replace_if_switch(_RAIter __begin, _RAIter __end,
                       _Predicate __pred, const _Tp& __new_value,
                       random_access_iterator_tag,
-                      __gnu_parallel::_Parallelism __parallelism_tag
-                      = __gnu_parallel::parallel_balanced)
+                      __gnu_parallel::_Parallelism __parallelism_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
@@ -1544,8 +1537,7 @@ namespace __parallel
     void
     __generate_switch(_RAIter __begin, _RAIter __end,
                     _Generator __gen, random_access_iterator_tag, 
-                    __gnu_parallel::_Parallelism __parallelism_tag
-                    = __gnu_parallel::parallel_balanced)
+                    __gnu_parallel::_Parallelism __parallelism_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
@@ -1608,8 +1600,7 @@ namespace __parallel
     inline _RAIter
     __generate_n_switch(_RAIter __begin, _Size __n, _Generator __gen, 
                       random_access_iterator_tag, 
-                      __gnu_parallel::_Parallelism __parallelism_tag
-                      = __gnu_parallel::parallel_balanced)
+                      __gnu_parallel::_Parallelism __parallelism_tag)
     {
       // XXX parallel version is where?
       return generate_n(__begin, __n, __gen, __gnu_parallel::sequential_tag());
@@ -2204,8 +2195,7 @@ namespace __parallel
     _RAIter
     __max_element_switch(_RAIter __begin, _RAIter __end, 
                        _Compare __comp, random_access_iterator_tag, 
-                       __gnu_parallel::_Parallelism __parallelism_tag
-                       = __gnu_parallel::parallel_balanced)
+                        __gnu_parallel::_Parallelism __parallelism_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
@@ -2296,8 +2286,7 @@ namespace __parallel
     _RAIter
     __min_element_switch(_RAIter __begin, _RAIter __end, 
                        _Compare __comp, random_access_iterator_tag, 
-                       __gnu_parallel::_Parallelism __parallelism_tag
-                       = __gnu_parallel::parallel_balanced)
+                       __gnu_parallel::_Parallelism __parallelism_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
index 8254635..e89f27e 100644 (file)
@@ -85,8 +85,7 @@ namespace __parallel
     __accumulate_switch(__RAIter __begin, __RAIter __end, 
                       _Tp __init, _BinaryOperation __binary_op, 
                       random_access_iterator_tag, 
-                      __gnu_parallel::_Parallelism __parallelism_tag  
-                      = __gnu_parallel::parallel_unbalanced)
+                      __gnu_parallel::_Parallelism __parallelism_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
@@ -193,8 +192,7 @@ namespace __parallel
                           _BinaryFunction2 __binary_op2,
                           random_access_iterator_tag,
                           random_access_iterator_tag,
-                          __gnu_parallel::_Parallelism __parallelism_tag
-                          = __gnu_parallel::parallel_unbalanced)
+                          __gnu_parallel::_Parallelism __parallelism_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION((__last1 - __first1)
                                       >= __gnu_parallel::_Settings::get().
@@ -419,8 +417,7 @@ namespace __parallel
                                 random_access_iterator_tag,
                                 random_access_iterator_tag,
                                 __gnu_parallel::_Parallelism
-                                __parallelism_tag
-                                = __gnu_parallel::parallel_balanced)
+                                __parallelism_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
index 1c38b05..eeea9a4 100644 (file)
@@ -178,11 +178,11 @@ namespace __profile
 
       pointer
       data() noexcept
-      { return std::__addressof(_AT_Type::_S_ref(_M_elems, 0)); }
+      { return _AT_Type::_S_ptr(_M_elems); }
 
       const_pointer
       data() const noexcept
-      { return std::__addressof(_AT_Type::_S_ref(_M_elems, 0)); }
+      { return _AT_Type::_S_ptr(_M_elems); }
     };
 
   // Array comparisons.
index 67680d6..b32f510 100644 (file)
@@ -51,6 +51,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       static constexpr _Tp&
       _S_ref(const _Type& __t, std::size_t __n) noexcept
       { return const_cast<_Tp&>(__t[__n]); }
+
+      static constexpr _Tp*
+      _S_ptr(const _Type& __t) noexcept
+      { return const_cast<_Tp*>(__t); }
     };
 
  template<typename _Tp>
@@ -61,6 +65,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
      static constexpr _Tp&
      _S_ref(const _Type&, std::size_t) noexcept
      { return *static_cast<_Tp*>(nullptr); }
+
+     static constexpr _Tp*
+     _S_ptr(const _Type&) noexcept
+     { return nullptr; }
    };
 
   /**
@@ -219,11 +227,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
 
       pointer
       data() noexcept
-      { return std::__addressof(_AT_Type::_S_ref(_M_elems, 0)); }
+      { return _AT_Type::_S_ptr(_M_elems); }
 
       const_pointer
       data() const noexcept
-      { return std::__addressof(_AT_Type::_S_ref(_M_elems, 0)); }
+      { return _AT_Type::_S_ptr(_M_elems); }
     };
 
   // Array comparisons.
index ece75a4..d7ab751 100644 (file)
@@ -815,11 +815,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   template<typename _ITp>
     inline void
-    atomic_init(atomic<_ITp>* __a, _ITp __i) noexcept;
+    atomic_init(atomic<_ITp>* __a, _ITp __i) noexcept
+    { __a->store(__i, memory_order_relaxed); }
 
   template<typename _ITp>
     inline void
-    atomic_init(volatile atomic<_ITp>* __a, _ITp __i) noexcept;
+    atomic_init(volatile atomic<_ITp>* __a, _ITp __i) noexcept
+    { __a->store(__i, memory_order_relaxed); }
 
   template<typename _ITp>
     inline void
index 6e9c7dc..e546ab9 100644 (file)
@@ -904,6 +904,15 @@ _GLIBCXX_END_NAMESPACE_VERSION
   } // inline namespace chrono_literals
   } // inline namespace literals
 
+  namespace chrono
+  {
+  _GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+  using namespace literals::chrono_literals;
+
+  _GLIBCXX_END_NAMESPACE_VERSION
+  } // namespace chrono
+
 #endif // __cplusplus > 201103L
 
   // @} group chrono
index 0e80fa3..fac1c67 100644 (file)
@@ -2407,9 +2407,9 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
     {
       if (static_cast<bool>(__x))
        {
+         __x._M_manager(_M_functor, __x._M_functor, __clone_functor);
          _M_invoker = __x._M_invoker;
          _M_manager = __x._M_manager;
-         __x._M_manager(_M_functor, __x._M_functor, __clone_functor);
        }
     }
 
index d446b9d..6523cea 100644 (file)
@@ -1450,7 +1450,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       operator()(_ArgTypes... __args)
       {
        __future_base::_State_base::_S_check(_M_state);
-       _M_state->_M_run(std::forward<_ArgTypes>(__args)...);
+       auto __state = _M_state;
+       __state->_M_run(std::forward<_ArgTypes>(__args)...);
       }
 
       void
index f063768..2b157f5 100644 (file)
@@ -870,7 +870,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   template<typename _CharT, typename _Traits, typename _Tp>
     inline basic_istream<_CharT, _Traits>&
     operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)
-    { return (__is >> __x); }
+    { 
+      __is >> __x;
+      return __is;
+    }
 #endif // C++11
 
 _GLIBCXX_END_NAMESPACE_VERSION
index 18a56ae..2f89a21 100644 (file)
@@ -600,7 +600,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   template<typename _CharT, typename _Traits, typename _Tp>
     inline basic_ostream<_CharT, _Traits>&
     operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
-    { return (__os << __x); }
+    {
+      __os << __x;
+      return __os;
+    }
 #endif // C++11
 
 _GLIBCXX_END_NAMESPACE_VERSION
index 33d8779..07a192c 100644 (file)
@@ -105,6 +105,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       __inner_type_impl() = default;
       __inner_type_impl(const __inner_type_impl&) = default;
       __inner_type_impl(__inner_type_impl&&) = default;
+      __inner_type_impl& operator=(const __inner_type_impl&) = default;
+      __inner_type_impl& operator=(__inner_type_impl&&) = default;
       
       template<typename _Alloc>
       __inner_type_impl(const __inner_type_impl<_Alloc>& __other)
@@ -136,6 +138,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       __inner_type_impl() = default;
       __inner_type_impl(const __inner_type_impl&) = default;
       __inner_type_impl(__inner_type_impl&&) = default;
+      __inner_type_impl& operator=(const __inner_type_impl&) = default;
+      __inner_type_impl& operator=(__inner_type_impl&&) = default;
       
       template<typename... _Allocs>
       __inner_type_impl(const __inner_type_impl<_Allocs...>& __other)
@@ -310,6 +314,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
           _M_inner(std::move(__other._M_inner))
         { }
 
+      scoped_allocator_adaptor&
+      operator=(const scoped_allocator_adaptor&) = default;
+
+      scoped_allocator_adaptor&
+      operator=(scoped_allocator_adaptor&&) = default;
+
       inner_allocator_type& inner_allocator() noexcept
       { return _M_inner._M_get(this); }
 
index 6405f10..7be6d84 100644 (file)
 #else
 
 #include <bits/c++config.h>
-#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
-# include <mutex>
-# include <condition_variable>
-#endif
+#include <mutex>
+#include <condition_variable>
 #include <bits/functexcept.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
@@ -51,40 +49,60 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    * @{
    */
 
-#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+#ifdef _GLIBCXX_USE_C99_STDINT_TR1
+#ifdef _GLIBCXX_HAS_GTHREADS
 
 #define __cpp_lib_shared_timed_mutex 201402
 
   /// shared_timed_mutex
   class shared_timed_mutex
   {
-#if _GTHREAD_USE_MUTEX_TIMEDLOCK
-    struct _Mutex : mutex, __timed_mutex_impl<_Mutex>
-    {
-      template<typename _Rep, typename _Period>
-       bool
-       try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
-       { return _M_try_lock_for(__rtime); }
-
-      template<typename _Clock, typename _Duration>
-       bool
-       try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
-       { return _M_try_lock_until(__atime); }
-    };
-#else
-    typedef mutex _Mutex;
-#endif
-
-    // Based on Howard Hinnant's reference implementation from N2406
-
-    _Mutex             _M_mut;
+    // Must use the same clock as condition_variable
+    typedef chrono::system_clock       __clock_t;
+
+    // Based on Howard Hinnant's reference implementation from N2406.
+
+    // The high bit of _M_state is the write-entered flag which is set to
+    // indicate a writer has taken the lock or is queuing to take the lock.
+    // The remaining bits are the count of reader locks.
+    //
+    // To take a reader lock, block on gate1 while the write-entered flag is
+    // set or the maximum number of reader locks is held, then increment the
+    // reader lock count.
+    // To release, decrement the count, then if the write-entered flag is set
+    // and the count is zero then signal gate2 to wake a queued writer,
+    // otherwise if the maximum number of reader locks was held signal gate1
+    // to wake a reader.
+    //
+    // To take a writer lock, block on gate1 while the write-entered flag is
+    // set, then set the write-entered flag to start queueing, then block on
+    // gate2 while the number of reader locks is non-zero.
+    // To release, unset the write-entered flag and signal gate1 to wake all
+    // blocked readers and writers.
+    //
+    // This means that when no reader locks are held readers and writers get
+    // equal priority. When one or more reader locks is held a writer gets
+    // priority and no more reader locks can be taken while the writer is
+    // queued.
+
+    // Only locked when accessing _M_state or waiting on condition variables.
+    mutex              _M_mut;
+    // Used to block while write-entered is set or reader count at maximum.
     condition_variable _M_gate1;
+    // Used to block queued writers while reader count is non-zero.
     condition_variable _M_gate2;
+    // The write-entered flag and reader count.
     unsigned           _M_state;
 
     static constexpr unsigned _S_write_entered
       = 1U << (sizeof(unsigned)*__CHAR_BIT__ - 1);
-    static constexpr unsigned _M_n_readers = ~_S_write_entered;
+    static constexpr unsigned _S_max_readers = ~_S_write_entered;
+
+    // Test whether the write-entered flag is set. _M_mut must be locked.
+    bool _M_write_entered() const { return _M_state & _S_write_entered; }
+
+    // The number of reader locks currently held. _M_mut must be locked.
+    unsigned _M_readers() const { return _M_state & _S_max_readers; }
 
   public:
     shared_timed_mutex() : _M_state(0) {}
@@ -103,11 +121,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     lock()
     {
       unique_lock<mutex> __lk(_M_mut);
-      while (_M_state & _S_write_entered)
-       _M_gate1.wait(__lk);
+      // Wait until we can set the write-entered flag.
+      _M_gate1.wait(__lk, [=]{ return !_M_write_entered(); });
       _M_state |= _S_write_entered;
-      while (_M_state & _M_n_readers)
-       _M_gate2.wait(__lk);
+      // Then wait until there are no more readers.
+      _M_gate2.wait(__lk, [=]{ return _M_readers() == 0; });
     }
 
     bool
@@ -122,41 +140,43 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       return false;
     }
 
-#if _GTHREAD_USE_MUTEX_TIMEDLOCK
     template<typename _Rep, typename _Period>
       bool
       try_lock_for(const chrono::duration<_Rep, _Period>& __rel_time)
       {
-       unique_lock<_Mutex> __lk(_M_mut, __rel_time);
-       if (__lk.owns_lock() && _M_state == 0)
-         {
-           _M_state = _S_write_entered;
-           return true;
-         }
-       return false;
+       return try_lock_until(__clock_t::now() + __rel_time);
       }
 
     template<typename _Clock, typename _Duration>
       bool
       try_lock_until(const chrono::time_point<_Clock, _Duration>& __abs_time)
       {
-       unique_lock<_Mutex> __lk(_M_mut, __abs_time);
-       if (__lk.owns_lock() && _M_state == 0)
+       unique_lock<mutex> __lk(_M_mut);
+       if (!_M_gate1.wait_until(__lk, __abs_time,
+                                [=]{ return !_M_write_entered(); }))
          {
-           _M_state = _S_write_entered;
-           return true;
+           return false;
          }
-       return false;
+       _M_state |= _S_write_entered;
+       if (!_M_gate2.wait_until(__lk, __abs_time,
+                                [=]{ return _M_readers() == 0; }))
+         {
+           _M_state ^= _S_write_entered;
+           // Wake all threads blocked while the write-entered flag was set.
+           _M_gate1.notify_all();
+           return false;
+         }
+       return true;
       }
-#endif
 
     void
     unlock()
     {
-      {
-       lock_guard<_Mutex> __lk(_M_mut);
-       _M_state = 0;
-      }
+      lock_guard<mutex> __lk(_M_mut);
+      _GLIBCXX_DEBUG_ASSERT( _M_write_entered() );
+      _M_state = 0;
+      // call notify_all() while mutex is held so that another thread can't
+      // lock and unlock the mutex then destroy *this before we make the call.
       _M_gate1.notify_all();
     }
 
@@ -166,51 +186,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     lock_shared()
     {
       unique_lock<mutex> __lk(_M_mut);
-      while ((_M_state & _S_write_entered)
-         || (_M_state & _M_n_readers) == _M_n_readers)
-       {
-         _M_gate1.wait(__lk);
-       }
-      unsigned __num_readers = (_M_state & _M_n_readers) + 1;
-      _M_state &= ~_M_n_readers;
-      _M_state |= __num_readers;
+      _M_gate1.wait(__lk, [=]{ return _M_state < _S_max_readers; });
+      ++_M_state;
     }
 
     bool
     try_lock_shared()
     {
-      unique_lock<_Mutex> __lk(_M_mut, try_to_lock);
-      unsigned __num_readers = _M_state & _M_n_readers;
-      if (__lk.owns_lock() && !(_M_state & _S_write_entered)
-         && __num_readers != _M_n_readers)
+      unique_lock<mutex> __lk(_M_mut, try_to_lock);
+      if (!__lk.owns_lock())
+       return false;
+      if (_M_state < _S_max_readers)
        {
-         ++__num_readers;
-         _M_state &= ~_M_n_readers;
-         _M_state |= __num_readers;
+         ++_M_state;
          return true;
        }
       return false;
     }
 
-#if _GTHREAD_USE_MUTEX_TIMEDLOCK
     template<typename _Rep, typename _Period>
       bool
       try_lock_shared_for(const chrono::duration<_Rep, _Period>& __rel_time)
       {
-       unique_lock<_Mutex> __lk(_M_mut, __rel_time);
-       if (__lk.owns_lock())
-         {
-           unsigned __num_readers = _M_state & _M_n_readers;
-           if (!(_M_state & _S_write_entered)
-               && __num_readers != _M_n_readers)
-             {
-               ++__num_readers;
-               _M_state &= ~_M_n_readers;
-               _M_state |= __num_readers;
-               return true;
-             }
-         }
-       return false;
+       return try_lock_shared_until(__clock_t::now() + __rel_time);
       }
 
     template <typename _Clock, typename _Duration>
@@ -218,43 +216,40 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       try_lock_shared_until(const chrono::time_point<_Clock,
                                                     _Duration>& __abs_time)
       {
-       unique_lock<_Mutex> __lk(_M_mut, __abs_time);
-       if (__lk.owns_lock())
+       unique_lock<mutex> __lk(_M_mut);
+       if (!_M_gate1.wait_until(__lk, __abs_time,
+                                [=]{ return _M_state < _S_max_readers; }))
          {
-           unsigned __num_readers = _M_state & _M_n_readers;
-           if (!(_M_state & _S_write_entered)
-               && __num_readers != _M_n_readers)
-             {
-               ++__num_readers;
-               _M_state &= ~_M_n_readers;
-               _M_state |= __num_readers;
-               return true;
-             }
+           return false;
          }
-       return false;
+       ++_M_state;
+       return true;
       }
-#endif
 
     void
     unlock_shared()
     {
-      lock_guard<_Mutex> __lk(_M_mut);
-      unsigned __num_readers = (_M_state & _M_n_readers) - 1;
-      _M_state &= ~_M_n_readers;
-      _M_state |= __num_readers;
-      if (_M_state & _S_write_entered)
+      lock_guard<mutex> __lk(_M_mut);
+      _GLIBCXX_DEBUG_ASSERT( _M_readers() > 0 );
+      auto __prev = _M_state--;
+      if (_M_write_entered())
        {
-         if (__num_readers == 0)
+         // Wake the queued writer if there are no more readers.
+         if (_M_readers() == 0)
            _M_gate2.notify_one();
+         // No need to notify gate1 because we give priority to the queued
+         // writer, and that writer will eventually notify gate1 after it
+         // clears the write-entered flag.
        }
       else
        {
-         if (__num_readers == _M_n_readers - 1)
+         // Wake any thread that was blocked on reader overflow.
+         if (__prev == _S_max_readers)
            _M_gate1.notify_one();
        }
     }
   };
-#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
+#endif // _GLIBCXX_HAS_GTHREADS
 
   /// shared_lock
   template<typename _Mutex>
@@ -393,6 +388,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     swap(shared_lock<_Mutex>& __x, shared_lock<_Mutex>& __y) noexcept
     { __x.swap(__y); }
 
+#endif // _GLIBCXX_USE_C99_STDINT_TR1
+
   // @} group mutexes
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace
index efcb101..67011de 100644 (file)
@@ -268,6 +268,8 @@ _GLIBCXX_END_NAMESPACE_VERSION
       inline void
       sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
       {
+       if (__rtime <= __rtime.zero())
+         return;
        auto __s = chrono::duration_cast<chrono::seconds>(__rtime);
        auto __ns = chrono::duration_cast<chrono::nanoseconds>(__rtime - __s);
 #ifdef _GLIBCXX_USE_NANOSLEEP
@@ -286,7 +288,11 @@ _GLIBCXX_END_NAMESPACE_VERSION
     template<typename _Clock, typename _Duration>
       inline void
       sleep_until(const chrono::time_point<_Clock, _Duration>& __atime)
-      { sleep_for(__atime - _Clock::now()); }
+      {
+       auto __now = _Clock::now();
+       if (__now < __atime)
+         sleep_for(__atime - __now);
+      }
 
   _GLIBCXX_END_NAMESPACE_VERSION
   }
index 9b9cf6b..6e0577d 100644 (file)
@@ -88,21 +88,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       constexpr _Head_base(const _Head& __h)
       : _Head(__h) { }
 
-      template<typename _UHead, typename = typename
-              enable_if<!is_convertible<_UHead,
-                                        __uses_alloc_base>::value>::type>
+      constexpr _Head_base(const _Head_base&) = default;
+      constexpr _Head_base(_Head_base&&) = default;
+
+      template<typename _UHead>
         constexpr _Head_base(_UHead&& __h)
        : _Head(std::forward<_UHead>(__h)) { }
 
-      _Head_base(__uses_alloc0)
+      _Head_base(allocator_arg_t, __uses_alloc0)
       : _Head() { }
 
       template<typename _Alloc>
-       _Head_base(__uses_alloc1<_Alloc> __a)
+       _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a)
        : _Head(allocator_arg, *__a._M_a) { }
 
       template<typename _Alloc>
-       _Head_base(__uses_alloc2<_Alloc> __a)
+       _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a)
        : _Head(*__a._M_a) { }
 
       template<typename _UHead>
@@ -133,21 +134,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       constexpr _Head_base(const _Head& __h)
       : _M_head_impl(__h) { }
 
-      template<typename _UHead, typename = typename
-              enable_if<!is_convertible<_UHead,
-                                        __uses_alloc_base>::value>::type>
+      constexpr _Head_base(const _Head_base&) = default;
+      constexpr _Head_base(_Head_base&&) = default;
+
+      template<typename _UHead>
         constexpr _Head_base(_UHead&& __h)
        : _M_head_impl(std::forward<_UHead>(__h)) { }
 
-      _Head_base(__uses_alloc0)
+      _Head_base(allocator_arg_t, __uses_alloc0)
       : _M_head_impl() { }
 
       template<typename _Alloc>
-       _Head_base(__uses_alloc1<_Alloc> __a)
+       _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a)
        : _M_head_impl(allocator_arg, *__a._M_a) { }
 
       template<typename _Alloc>
-       _Head_base(__uses_alloc2<_Alloc> __a)
+       _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a)
        : _M_head_impl(*__a._M_a) { }
 
       template<typename _UHead>
@@ -285,7 +287,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       template<typename _Alloc>
        _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a)
        : _Inherited(__tag, __a),
-          _Base(__use_alloc<_Head>(__a)) { }
+          _Base(__tag, __use_alloc<_Head>(__a)) { }
 
       template<typename _Alloc>
        _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
index 20785ff..58af910 100644 (file)
@@ -2112,9 +2112,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     {
       if (static_cast<bool>(__x))
        {
+         __x._M_manager(_M_functor, __x._M_functor, __clone_functor);
          _M_invoker = __x._M_invoker;
          _M_manager = __x._M_manager;
-         __x._M_manager(_M_functor, __x._M_functor, __clone_functor);
        }
     }
 
@@ -2130,9 +2130,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
        if (_My_handler::_M_not_empty_function(__f))
          {
+           _My_handler::_M_init_functor(_M_functor, __f);
            _M_invoker = &_My_handler::_M_invoke;
            _M_manager = &_My_handler::_M_manager;
-           _My_handler::_M_init_functor(_M_functor, __f);
          }
       }
 
index f315a83..cb4467a 100644 (file)
@@ -378,6 +378,12 @@ PERSONALITY_FUNCTION (int version,
   switch (state & _US_ACTION_MASK)
     {
     case _US_VIRTUAL_UNWIND_FRAME:
+      // If the unwind state pattern is
+      // _US_VIRTUAL_UNWIND_FRAME | _US_FORCE_UNWIND
+      // then we don't need to search for any handler as it is not a real
+      // exception. Just unwind the stack.
+      if (state & _US_FORCE_UNWIND)
+       CONTINUE_UNWINDING;
       actions = _UA_SEARCH_PHASE;
       break;
 
diff --git a/libstdc++-v3/testsuite/20_util/duration/literals/65499.cc b/libstdc++-v3/testsuite/20_util/duration/literals/65499.cc
new file mode 100644 (file)
index 0000000..62c4f5a
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++14" }
+// { dg-do compile }
+
+// PR libstdc++/65499
+
+#include <chrono>
+
+using namespace std::chrono;
+minutes min = 36min;
diff --git a/libstdc++-v3/testsuite/20_util/function/63840.cc b/libstdc++-v3/testsuite/20_util/function/63840.cc
new file mode 100644 (file)
index 0000000..cf80aa1
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright (C) 2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11" }
+
+#include <functional>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+struct functor
+{
+  functor() = default;
+
+  functor(const functor&)
+  {
+    throw std::runtime_error("test");
+  }
+
+  functor(functor&& f) = default;
+
+  void operator()() const { }
+};
+
+
+void
+test01()
+{
+  std::function<void()> f = functor{};
+  try {
+    auto g = f;
+  } catch (const std::runtime_error& e) {
+    return;
+  }
+  VERIFY(false);
+}
+
+int
+main()
+{
+  test01();
+}
diff --git a/libstdc++-v3/testsuite/20_util/scoped_allocator/65279.cc b/libstdc++-v3/testsuite/20_util/scoped_allocator/65279.cc
new file mode 100644 (file)
index 0000000..786d403
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+#include <memory>
+#include <type_traits>
+#include <scoped_allocator>
+
+template<typename T>
+  struct Allocator : std::allocator<T>
+  {
+    template<typename U>
+      struct rebind { using other = Allocator<U>; };
+
+    using propagate_on_container_copy_assignment = std::true_type;
+    using propagate_on_container_move_assignment = std::true_type;
+  };
+
+template<typename... T>
+  using alloc = std::scoped_allocator_adaptor<Allocator<T>...>;
+
+void
+test01()
+{
+  // Test partial specialization for sizeof...(InnerAlloc) == 0
+  alloc<int> a;
+  a = a;
+  a = std::move(a);
+}
+
+void
+test02()
+{
+  // Test partial specialization for sizeof...(InnerAlloc) >= 1
+  alloc<int, char> a;
+  a = a;
+  a = std::move(a);
+}
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/64476.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/64476.cc
new file mode 100644 (file)
index 0000000..6369b17
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11" }
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct X
+{
+  X() = default;
+  X(X const &) = default;
+  X& operator=(X const&) = delete;
+};
+
+static_assert(__is_trivial(X), "X is trivial");
+
+int constructed = 0;
+int assigned = 0;
+
+struct Y
+{
+  Y() = default;
+  Y(Y const &) = default;
+  Y& operator=(Y const&) = default;
+
+  Y(const X&) { ++constructed; }
+  Y& operator=(const X&)& { ++assigned; return *this; }
+  Y& operator=(const X&)&& = delete;
+  Y& operator=(X&&) = delete;
+};
+
+static_assert(__is_trivial(Y), "Y is trivial");
+
+void
+test01()
+{
+  X a[100];
+  Y b[100];
+
+  std::uninitialized_copy(a, a+10, b);
+
+  VERIFY(constructed == 0);
+  VERIFY(assigned == 10);
+}
+
+int
+main()
+{
+  test01();
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/61947.cc b/libstdc++-v3/testsuite/20_util/tuple/61947.cc
new file mode 100644 (file)
index 0000000..7e77de6
--- /dev/null
@@ -0,0 +1,29 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tuple>
+
+struct ConvertibleToAny {
+  template <class T> operator T() const { return T(); }
+};
+
+int main() {
+  std::tuple<ConvertibleToAny&&> t(ConvertibleToAny{});
+}
index 5ce344c..898406f 100644 (file)
@@ -44,4 +44,4 @@ void test01()
 
   tuple<Type> t(allocator_arg, a, 1);
 }
-// { dg-error "no matching function" "" { target *-*-* } 118 }
+// { dg-error "no matching function" "" { target *-*-* } 119 }
index 979d7f6..0b18228 100644 (file)
@@ -28,6 +28,6 @@ int n1 = std::get<1>(a);
 int n2 = std::get<1>(std::move(a));
 int n3 = std::get<1>(ca);
 
-// { dg-error "static assertion failed" "" { target *-*-* } 274 }
-// { dg-error "static assertion failed" "" { target *-*-* } 283 }
+// { dg-error "static assertion failed" "" { target *-*-* } 282 }
 // { dg-error "static assertion failed" "" { target *-*-* } 291 }
+// { dg-error "static assertion failed" "" { target *-*-* } 299 }
index f80798c..6eeeb86 100644 (file)
@@ -23,4 +23,4 @@
 
 typedef std::tuple_element<1, std::array<int, 1>>::type type;
 
-// { dg-error "static assertion failed" "" { target *-*-* } 320 }
+// { dg-error "static assertion failed" "" { target *-*-* } 328 }
diff --git a/libstdc++-v3/testsuite/25_algorithms/is_permutation/64646.cc b/libstdc++-v3/testsuite/25_algorithms/is_permutation/64646.cc
new file mode 100644 (file)
index 0000000..799a18c
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++14" }
+
+#include <algorithm>
+#include <forward_list>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  std::forward_list<int> l1{0}, l2;
+  VERIFY( !std::is_permutation(l1.begin(), l1.end(), l2.begin(), l2.end()) );
+}
+
+int
+main()
+{
+  test01();
+}
index fecd5a6..5cd6651 100644 (file)
@@ -27,7 +27,7 @@
 // Basic test for LFS support.
 void test01()
 {
-#ifdef _GLIBCXX_USE_LFS
+#if defined (_GLIBCXX_USE_LFS) && defined (_GLIBCXX_HAVE_LIMIT_FSIZE)
   using namespace std;
   bool test __attribute__((unused)) = true;
 
diff --git a/libstdc++-v3/testsuite/27_io/rvalue_streams-2.cc b/libstdc++-v3/testsuite/27_io/rvalue_streams-2.cc
new file mode 100644 (file)
index 0000000..d9b6146
--- /dev/null
@@ -0,0 +1,35 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <sstream>
+
+struct A {};
+
+void operator<<(std::ostream&, const A&) { }
+void operator>>(std::istream&, A&) { }
+
+// PR libstdc++/65543
+int main()
+{
+  A a;
+
+  std::ostringstream() << a;
+  std::istringstream() >> a;
+}
@@ -3,7 +3,7 @@
 //
 // 2013-08-01  Tim Shen <timshen91@gmail.com>
 //
-// Copyright (C) 2013-2014 Free Software Foundation, Inc.
+// Copyright (C) 2013-2015 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -67,9 +67,60 @@ test01()
   }
 }
 
+void
+test02()
+{
+  bool test __attribute__((unused)) = true;
+
+  try
+  {
+    std::regex re("[-----]", std::regex::extended);
+    VERIFY(false);
+  }
+  catch (const std::regex_error& e)
+  {
+    VERIFY(e.code() == std::regex_constants::error_range);
+  }
+  std::regex re("[-----]", std::regex::ECMAScript);
+}
+
+void
+test03()
+{
+  bool test __attribute__((unused)) = true;
+
+  try
+  {
+    std::regex re("[z-a]", std::regex::extended);
+    VERIFY(false);
+  }
+  catch (const std::regex_error& e)
+  {
+    VERIFY(e.code() == std::regex_constants::error_range);
+  }
+}
+
+void
+test04()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::regex re("[-0-9a-z]");
+  VERIFY(regex_match_debug("-", re));
+  VERIFY(regex_match_debug("1", re));
+  VERIFY(regex_match_debug("w", re));
+  re.assign("[-0-9a-z]", regex_constants::basic);
+  VERIFY(regex_match_debug("-", re));
+  VERIFY(regex_match_debug("1", re));
+  VERIFY(regex_match_debug("w", re));
+}
+
 int
 main()
 {
   test01();
+  test02();
+  test03();
+  test04();
   return 0;
 }
index 16dae9a..7011d1c 100644 (file)
@@ -1,5 +1,4 @@
-// { dg-do compile }
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++11" }
 
 // 2009-06-05  Stephen M. Webb  <stephen.webb@bregmasoft.ca>
 //
@@ -36,9 +35,19 @@ void test01()
   re.assign(cs);
 }
 
+// basic_regex::operator=() resets flags. libstdc++/64680
+void test02()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::regex re("[[:alnum:]]", std::regex_constants::basic);
+  re = "\\w+";
+}
+
 int
 main()
 { 
   test01();
+  test02();
   return 0;
 }
index 0a32ab5..7d4db8f 100644 (file)
@@ -1,4 +1,3 @@
-// { dg-do compile }
 // { dg-options "-std=gnu++0x" }
 
 // 2007-03-12  Stephen M. Webb  <stephen.webb@bregmasoft.com>
@@ -29,6 +28,7 @@
 // Tests C++ string assignment of the basic_regex class.  
 void test01()
 {
+  bool test __attribute__((unused)) = true;
   typedef std::basic_regex<char> test_type;
 
   std::string s("a*b");
@@ -36,9 +36,27 @@ void test01()
   re.assign(s);
 }
 
+// libstdc++/64584
+void test02()
+{
+  bool test __attribute__((unused)) = true;
+  std::regex re("", std::regex_constants::extended);
+  auto flags = re.flags();
+  try
+    {
+      re.assign("(", std::regex_constants::icase);
+      VERIFY(false);
+    }
+  catch (const std::regex_error& e)
+    {
+      VERIFY(flags == re.flags());
+    }
+}
+
 int
 main()
 { 
   test01();
+  test02();
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/28_regex/basic_regex/imbue/string.cc b/libstdc++-v3/testsuite/28_regex/basic_regex/imbue/string.cc
new file mode 100644 (file)
index 0000000..d4d4f47
--- /dev/null
@@ -0,0 +1,44 @@
+// { dg-options "-std=gnu++11" }
+
+// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// [28.8.5] class template basic_regex locale
+
+#include <string>
+#include <regex>
+#include <testsuite_hooks.h>
+
+// libstdc++/64585
+void test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  static const char s[] = "a";
+  std::regex re("a");
+  VERIFY(std::regex_search(s, re));
+
+  auto loc = re.imbue(re.getloc());
+  VERIFY(!std::regex_search(s, re));
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/64140.cc b/libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/64140.cc
new file mode 100644 (file)
index 0000000..32b7e24
--- /dev/null
@@ -0,0 +1,53 @@
+// { dg-options "-std=gnu++11" }
+
+//
+// Copyright (C) 2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+//
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/64140
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  const std::regex e("z*");
+  const std::string s("ab");
+
+  auto it = std::sregex_iterator(s.begin(), s.end(), e);
+  auto end = std::sregex_iterator();
+  VERIFY(it != end);
+  VERIFY(!it->prefix().matched);
+  ++it;
+  VERIFY(it != end);
+  VERIFY(it->prefix().matched);
+  ++it;
+  VERIFY(it != end);
+  VERIFY(it->prefix().matched);
+  ++it;
+  VERIFY(it == end);
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}
index 5fa4ea7..91aa061 100644 (file)
@@ -24,6 +24,7 @@
 // Tests iter->position() behavior
 
 #include <regex>
+#include <tuple>
 #include <testsuite_hooks.h>
 
 void
@@ -41,9 +42,53 @@ test01()
   }
 }
 
+// PR libstdc++/64239
+void
+test02()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::regex re("\\w+");
+  std::string s("-a-b-c-");
+
+  std::tuple<int, int, const char*> expected[] =
+  {
+    std::make_tuple(1, 1, "a"),
+    std::make_tuple(3, 1, "b"),
+    std::make_tuple(5, 1, "c"),
+  };
+
+  int i = 0;
+  for (auto it1 = std::sregex_iterator(s.begin(), s.end(), re),
+       end = std::sregex_iterator(); it1 != end; ++it1, i++)
+    {
+      auto it2 = it1;
+      VERIFY(it1->position() == std::get<0>(expected[i]));
+      VERIFY(it1->length() == std::get<1>(expected[i]));
+      VERIFY(it1->str() == std::get<2>(expected[i]));
+      VERIFY(it2->position() == std::get<0>(expected[i]));
+      VERIFY(it2->length() == std::get<1>(expected[i]));
+      VERIFY(it2->str() == std::get<2>(expected[i]));
+    }
+}
+
+void
+test03()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::smatch m;
+  std::string s = "abcde";
+  std::regex_search(s, m, std::regex("bcd"));
+  VERIFY(m.position() == 1);
+  VERIFY(m.position() == m.prefix().length());
+}
+
 int
 main()
 {
   test01();
+  test02();
+  test03();
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/64303.cc b/libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/64303.cc
new file mode 100644 (file)
index 0000000..f09bbe1
--- /dev/null
@@ -0,0 +1,49 @@
+// { dg-do run }
+// { dg-options "-std=gnu++11" }
+
+//
+// Copyright (C) 2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+//
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.12.2 Class template regex_token_iterator
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  const std::string s("  111  222  ");
+  const std::regex re("\\w+");
+
+  std::sregex_token_iterator it1(s.begin(), s.end(), re), it2(it1), end;
+
+  for (; it1 != end; ++it1, ++it2) {
+    VERIFY(it1 == it2);
+    VERIFY(*it1 == *it2);
+  }
+  VERIFY(it2 == end);
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/28_regex/match_results/swap.cc b/libstdc++-v3/testsuite/28_regex/match_results/swap.cc
new file mode 100644 (file)
index 0000000..18248c1
--- /dev/null
@@ -0,0 +1,43 @@
+// { dg-options "-std=gnu++11" }
+
+//
+// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+//
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::cmatch m;
+  std::regex_match("a", m, std::regex("a"));
+  std::cmatch mm1 = m, mm2;
+  mm1.swap(mm2);
+  VERIFY(m == mm2);
+  std::swap(mm1, mm2);
+  VERIFY(m == mm1);
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}
index 48ab043..f2a99ab 100644 (file)
@@ -26,6 +26,7 @@
 // 28.7(9) Class template regex_traits [re.traits]
 
 #include <regex>
+#include <forward_list>
 #include <testsuite_hooks.h>
 
 void
@@ -47,8 +48,29 @@ test01()
        VERIFY( c2 == c3 );
 }
 
+// Test forward iterator
+void
+test02()
+{
+  const char strlit[] = "upper";
+  std::forward_list<char> s(strlit, strlit + strlen(strlit));
+  std::regex_traits<char> traits;
+  VERIFY(traits.isctype('C', traits.lookup_classname(s.begin(), s.end(), false)));
+}
+
+// icase
+void
+test03()
+{
+  std::string s("lower");
+  std::regex_traits<char> traits;
+  VERIFY(traits.isctype('C', traits.lookup_classname(s.begin(), s.end(), true)));
+}
+
 int main()
 {
        test01();
+       test02();
+       test03();
        return 0;
 }
index 825f2ba..698c18d 100644 (file)
@@ -26,6 +26,7 @@
 // 28.7 (8) Class template regex_traits [re.traits]
 
 #include <regex>
+#include <forward_list>
 #include <testsuite_hooks.h>
 
 void
@@ -40,8 +41,19 @@ test01()
   VERIFY(t.lookup_collatename(name, name+sizeof(name)-1) == "~");
 }
 
+// Test forward iterator.
+void
+test02()
+{
+  const char strlit[] = "tilde";
+  std::forward_list<char> s(strlit, strlit + strlen(strlit));
+  std::regex_traits<char> traits;
+  VERIFY(traits.lookup_collatename(s.begin(), s.end()) == "~");
+}
+
 int main()
 {
        test01();
+       test02();
        return 0;
 }
index 7eca2d5..975a943 100644 (file)
@@ -55,8 +55,32 @@ test01()
   VERIFY(!regex_match(L"\u2029", re));
 }
 
+struct MyCtype : std::ctype<wchar_t>
+{
+  char
+  do_narrow(wchar_t c, char dflt) const override
+  {
+    if (c >= 256)
+      return dflt;
+    return ((char)c)+1;
+  }
+};
+
+void
+test02()
+{
+  std::locale loc(std::locale(), new MyCtype);
+  std::regex_traits<wchar_t> traits;
+  traits.imbue(loc);
+  wchar_t wch = L'p';
+  VERIFY(traits.lookup_collatename(&wch, &wch+1) == L"q");
+  std::wstring ws = L"chfhs"; // chars of "digit" shifted by 1.
+  VERIFY(traits.lookup_classname(ws.begin(), ws.end()) != 0);
+}
+
 int main()
 {
   test01();
+  test02();
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/64658.cc b/libstdc++-v3/testsuite/29_atomics/atomic/64658.cc
new file mode 100644 (file)
index 0000000..0b2ff43
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-require-atomic-builtins "" }
+// { dg-options "-std=gnu++11" }
+
+#include <atomic>
+#include <testsuite_hooks.h>
+
+int
+main()
+{
+  std::atomic<int> i;
+  atomic_init(&i, 5);
+  VERIFY( i == 5 );
+}
index 7c03a3c..14bd606 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-thread-fence "" }
 
 // Copyright (C) 2009-2014 Free Software Foundation, Inc.
 //
index 580309e..09394eb 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-thread-fence "" }
 
 // Copyright (C) 2008-2014 Free Software Foundation, Inc.
 //
index c5dbd16..02d0ae5 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-thread-fence "" }
 
 // Copyright (C) 2008-2014 Free Software Foundation, Inc.
 //
index 712e68c..6b9da98 100644 (file)
@@ -3,7 +3,6 @@
 // { dg-options " -std=gnu++1y -pthreads" { target *-*-solaris* } }
 // { dg-options " -std=gnu++1y " { target *-*-cygwin *-*-darwin* } }
 // { dg-require-cstdint "" }
-// { dg-require-gthreads-timed "" }
 
 // Copyright (C) 2013-2014 Free Software Foundation, Inc.
 //
index bb1f902..2c7b4e1 100644 (file)
@@ -3,7 +3,6 @@
 // { dg-options " -std=gnu++1y -pthreads" { target *-*-solaris* } }
 // { dg-options " -std=gnu++1y " { target *-*-cygwin *-*-darwin* } }
 // { dg-require-cstdint "" }
-// { dg-require-gthreads-timed "" }
 
 // Copyright (C) 2013-2014 Free Software Foundation, Inc.
 //
index 2770a75..45c197b 100644 (file)
@@ -3,7 +3,6 @@
 // { dg-options " -std=gnu++1y -pthreads" { target *-*-solaris* } }
 // { dg-options " -std=gnu++1y " { target *-*-cygwin *-*-darwin* } }
 // { dg-require-cstdint "" }
-// { dg-require-gthreads-timed "" }
 
 // Copyright (C) 2013-2014 Free Software Foundation, Inc.
 //
index 8d11de9..1c8f7ea 100644 (file)
@@ -3,7 +3,6 @@
 // { dg-options " -std=gnu++1y -pthreads" { target *-*-solaris* } }
 // { dg-options " -std=gnu++1y " { target *-*-cygwin *-*-darwin* } }
 // { dg-require-cstdint "" }
-// { dg-require-gthreads-timed "" }
 
 // Copyright (C) 2013-2014 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/3.cc b/libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/3.cc
new file mode 100644 (file)
index 0000000..e9f728e
--- /dev/null
@@ -0,0 +1,75 @@
+// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++14 -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* powerpc-ibm-aix* } }
+// { dg-options " -std=gnu++14 -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++14 " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+
+// Copyright (C) 2013-2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <shared_mutex>
+#include <thread>
+#include <system_error>
+#include <testsuite_hooks.h>
+
+int main()
+{
+  bool test __attribute__((unused)) = true;
+  typedef std::shared_timed_mutex mutex_type;
+
+  try
+    {
+      mutex_type m;
+      m.lock();
+      bool b;
+
+      std::thread t([&] {
+        try
+          {
+            using namespace std::chrono;
+            auto timeout = 100ms;
+            auto start = system_clock::now();
+            b = m.try_lock_for(timeout);
+            auto t = system_clock::now() - start;
+            VERIFY( !b );
+            VERIFY( t >= timeout );
+
+            start = system_clock::now();
+            b = m.try_lock_until(start + timeout);
+            t = system_clock::now() - start;
+            VERIFY( !b );
+            VERIFY( t >= timeout );
+          }
+        catch (const std::system_error& e)
+          {
+            VERIFY( false );
+          }
+      });
+      t.join();
+      m.unlock();
+    }
+  catch (const std::system_error& e)
+    {
+      VERIFY( false );
+    }
+  catch (...)
+    {
+      VERIFY( false );
+    }
+}
diff --git a/libstdc++-v3/testsuite/30_threads/this_thread/58038.cc b/libstdc++-v3/testsuite/30_threads/this_thread/58038.cc
new file mode 100644 (file)
index 0000000..afa861c
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11" }
+// { dg-require-cstdint "" }
+// { dg-require-time "" }
+
+#include <thread>
+#include <chrono>
+
+void
+test01()
+{
+  auto now = std::chrono::system_clock::now();
+  std::this_thread::sleep_until(now  - 1ul * std::chrono::seconds(1));
+}
+
+void
+test02()
+{
+  auto now = std::chrono::steady_clock::now();
+  std::this_thread::sleep_until(now  - 1ul * std::chrono::seconds(1));
+}
+
+int
+main()
+{
+  test01();
+  test02();
+}
diff --git a/libstdc++-v3/testsuite/30_threads/this_thread/60421.cc b/libstdc++-v3/testsuite/30_threads/this_thread/60421.cc
new file mode 100644 (file)
index 0000000..ecc4deb
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11" }
+// { dg-require-cstdint "" }
+// { dg-require-time "" }
+
+#include <thread>
+#include <chrono>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  std::this_thread::sleep_for(std::chrono::seconds(0));
+  std::this_thread::sleep_for(std::chrono::seconds(-1));
+  std::this_thread::sleep_for(std::chrono::duration<uint64_t>::zero());
+}
+
+int
+main()
+{
+  test01();
+}
index 1c590dd..2cc31ca 100644 (file)
 #  error "<shared_mutex>"
 #endif
 
-#ifndef  __cpp_lib_shared_timed_mutex
-#  error "__cpp_lib_shared_timed_mutex"
-#elif  __cpp_lib_shared_timed_mutex != 201402
-#  error "__cpp_lib_shared_timed_mutex != 201402"
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
+#  ifndef  __cpp_lib_shared_timed_mutex
+#    error "__cpp_lib_shared_timed_mutex"
+#  elif  __cpp_lib_shared_timed_mutex != 201402
+#    error "__cpp_lib_shared_timed_mutex != 201402"
+#  endif
 #endif
 
 #ifndef  __cpp_lib_is_final
index 4b0535b..0ba8e97 100644 (file)
@@ -23,6 +23,9 @@
 
 #include <tuple>
 
+using std::experimental::bad_optional_access;
+static_assert( std::is_default_constructible<bad_optional_access>::value, "" );
+
 struct trivially_destructible
 {
   trivially_destructible() = delete;
index d01bb91..5cdc7f3 100644 (file)
@@ -115,6 +115,15 @@ proc dg-require-cmath { args } {
     return
 }
 
+proc dg-require-thread-fence { args } {
+    if { ![ check_v3_target_thread_fence ] } {
+       upvar dg-do-what dg-do-what
+       set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+       return
+    }
+    return
+}
+
 proc dg-require-atomic-builtins { args } {
     if { ![ check_v3_target_atomic_builtins ] } {
        upvar dg-do-what dg-do-what
index 95954d8..79eec1c 100644 (file)
@@ -99,6 +99,10 @@ proc libstdc++_init { testfile } {
     setenv LC_ALL C
     setenv LANG C
 
+    # LANGUAGE changes the behavior of GNU gettext(3) and causes
+    # std::messages tests to fail.
+    array unset env LANGUAGE
+
     # Many hosts now default to a non-ASCII C locale, however, so
     # they can set a charset encoding here if they need.
     if { [ishost "*-*-cygwin*"] } {
@@ -1200,6 +1204,62 @@ proc check_v3_target_cmath { } {
     return $et_c99_math
 }
 
+proc check_v3_target_thread_fence { } {
+    global cxxflags
+    global DEFAULT_CXXFLAGS
+    global et_thread_fence
+
+    global tool
+
+    if { ![info exists et_thread_fence_target_name] } {
+       set et_thread_fence_target_name ""
+    }
+
+    # If the target has changed since we set the cached value, clear it.
+    set current_target [current_target_name]
+    if { $current_target != $et_thread_fence_target_name } {
+       verbose "check_v3_target_thread_fence: `$et_thread_fence_target_name'" 2
+       set et_thread_fence_target_name $current_target
+       if [info exists et_thread_fence] {
+           verbose "check_v3_target_thread_fence: removing cached result" 2
+           unset et_thread_fence
+       }
+    }
+
+    if [info exists et_thread_fence] {
+       verbose "check_v3_target_thread_fence: using cached result" 2
+    } else {
+       set et_thread_fence 0
+
+       # Set up and preprocess a C++11 test program that depends
+       # on the thread fence to be available.
+       set src thread_fence[pid].cc
+
+       set f [open $src "w"]
+       puts $f "int main() {"
+       puts $f "__atomic_thread_fence (__ATOMIC_SEQ_CST);"
+       puts $f "return 0;"
+       puts $f "}"
+       close $f
+
+       set cxxflags_saved $cxxflags
+       set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror -std=gnu++11"
+
+       set lines [v3_target_compile $src /dev/null executable ""]
+       set cxxflags $cxxflags_saved
+       file delete $src
+
+       if [string match "" $lines] {
+           # No error message, linking succeeded.
+           set et_thread_fence 1
+       } else {
+           verbose "check_v3_target_thread_fence: compilation failed" 2
+       }
+    }
+    verbose "check_v3_target_thread_fence: $et_thread_fence" 2
+    return $et_thread_fence
+}
+
 proc check_v3_target_atomic_builtins { } {
     global cxxflags
     global DEFAULT_CXXFLAGS
diff --git a/libstdc++-v3/testsuite/tr1/3_function_objects/function/63840.cc b/libstdc++-v3/testsuite/tr1/3_function_objects/function/63840.cc
new file mode 100644 (file)
index 0000000..760d490
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright (C) 2014 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library 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.
+
+// This library 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 this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <tr1/functional>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+struct functor
+{
+  functor() : copies(0) { }
+
+  functor(const functor& f)
+  : copies(f.copies + 1)
+  {
+    if (copies > 1)
+      throw std::runtime_error("functor");
+  }
+
+  void operator()() const { }
+
+  int copies;
+};
+
+
+void
+test01()
+{
+  std::tr1::function<void()> f = functor();
+  try {
+    std::tr1::function<void()> g = f;
+  } catch (const std::runtime_error& e) {
+    return;
+  }
+  VERIFY(false);
+}
+
+int
+main()
+{
+  test01();
+}
index 56bab50..76198a8 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index c316c97..3558b37 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index c25c092..c209b5c 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index 6b6068b..b1c429b 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Release Manager
+
+       * GCC 4.9.3 released.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.