+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.
<!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
<!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
<!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
<!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
<!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
<!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
<!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
<hr />
<p><p><a href="./index.html">Return to the GCC Installation page</a>
</p>
-<p>Copyright © 1988-2014 Free Software Foundation, Inc.
+<p>Copyright © 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
<!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
<!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
<!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
<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>
<!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
-Obtained from SVN: tags/gcc_4_9_2_release revision 216910
+Obtained from SVN: tags/gcc_4_9_3_release revision 225078
# 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
// 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; };
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
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
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
-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
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
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
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
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
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
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
* 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
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
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
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
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
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
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
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
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,
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.
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++
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
* 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,
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
* 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
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(*)).
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*)
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).
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
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
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>,
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.
* 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
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
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
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
*-mingw*)
host_makefile_frag="config/mh-mingw"
;;
- alpha*-*-linux*)
+ alpha*-linux*)
host_makefile_frag="config/mh-alpha-linux"
;;
hppa*-hp-hpux10*)
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
*-mingw*)
host_makefile_frag="config/mh-mingw"
;;
- alpha*-*-linux*)
+ alpha*-linux*)
host_makefile_frag="config/mh-alpha-linux"
;;
hppa*-hp-hpux10*)
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.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+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.
+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.
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;
# 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
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;
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)
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--)
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
{
/* 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);
|| (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);
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
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;
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
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;
|| 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)
{
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
&& 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)
bool mem_canonicalized, bool x_canonicalized, bool writep)
{
rtx mem_addr;
+ rtx true_mem_addr, true_x_addr;
rtx base;
int ret;
|| 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
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
&& 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)
|| 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
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;
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);
}
= 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)
+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.
pp_underscore (buffer);
- if (DECL_NAME (t1))
+ if (DECL_NAME (t2))
pp_ada_tree_identifier (buffer, DECL_NAME (t2), t2, false);
else
{
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. */
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,
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
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;
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;
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,
}
/* 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,
+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.
{
/* 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
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));
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 \
{
case MULT_EXPR:
case TRUNC_DIV_EXPR:
+ case RDIV_EXPR:
case PLUS_EXPR:
case MINUS_EXPR:
case LSHIFT_EXPR:
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)
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);
&& (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. */
gimple call;
gimple ret;
+ bool alias_is_noreturn = TREE_THIS_VOLATILE (alias);
if (in_lto_p)
cgraph_get_body (node);
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");
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))
fork_execute ("ld", lto_ld_argv);
post_ld_pass (false);
}
+ else
+ post_ld_pass (true);
}
\f
/* Main program. */
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. */
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
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
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
;;
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"
*-leon[3-9]*)
with_cpu=leon3
;;
+ *-leon[3-9]v7*)
+ with_cpu=leon3v7
+ ;;
*)
with_cpu="`echo ${target} | sed 's/-.*$//'`"
;;
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 \
#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
#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 */
%{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 \
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);
[(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"
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;
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:
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
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. */
rtx offset;
split_const (x, &x, &offset);
- return aarch64_classify_symbol (x, context);
+ return aarch64_classify_symbol (x, offset, context);
}
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)
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;
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)
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;
#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"
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")
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
[(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)
;; 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")])
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));
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
(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)
fputc ('\n', dump_file);
}
- switch (mp->fix_size)
+ switch (GET_MODE_SIZE (mp->mode))
{
#ifdef HAVE_consttable_1
case 1:
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. */
/* 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. */
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
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;
}
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
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);
/* 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;
}
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); \
? 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)
; 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
%{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
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
{
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());
(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;
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;
#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))
}
+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
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. */
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;
}
}
+/* 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 " "
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"
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. */
#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
#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
cpu = "bonnell";
break;
case 0x37:
+ case 0x4a:
case 0x4d:
+ case 0x5a:
+ case 0x5d:
/* Silvermont. */
cpu = "silvermont";
break;
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)
{
#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);
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) \
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"))
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));
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;
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. */
{
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);
ix86_function_arg_regno_p (int regno)
{
int i;
+ enum calling_abi call_abi;
const int *parm_regs;
if (!TARGET_64BIT)
/* 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;
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;
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:
/* 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;
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)));
}
}
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)));
}
}
if (mode == CCmode)
suffix = "b";
else if (mode == CCCmode)
- suffix = "c";
+ suffix = fp ? "b" : "c";
else
gcc_unreachable ();
break;
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;
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;
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);
}
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);
}
}
*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);
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. */
*noalign = alg_noalign;
return alg;
}
- break;
+ else if (!any_alg_usable_p)
+ break;
}
else if (alg_usable_p (candidate, memset))
{
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)
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
{"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},
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
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)
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)
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
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))
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))
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))
{
{
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;
}
(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"
;; 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")
;; 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;
(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.
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;
#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
#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} \
%{mfp32} %{mfp64} %{mnan=*} \
%{mshared} %{mno-shared} \
%{msym32} %{mno-sym32} \
-%{mtune=*} \
+%{mtune=*}" \
+FP_ASM_SPEC "\
%(subtarget_asm_spec)"
/* Extra switches sometimes passed to the linker. */
} \
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
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)
#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
(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)"))
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 \
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)
#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
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
{
}
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;
&& 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";
}
}
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);
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);
{
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
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)
{
;; 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.
;; 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 "" ""))
[(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); "
[(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); "
;; 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.
#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
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"))
;; 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
(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")])
(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")])
"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. */
/* 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.
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
/* 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.
case 0x4000:
return "power6";
+ case 0x8000:
+ return "power7";
+
+ case 0x10000:
+ return "power8";
+
default:
return "powerpc";
}
;; 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")
__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;
}
/* 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.
#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. */
{ \
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) \
{ \
| 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 */
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)
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. */
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,
{ 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 },
{ 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 },
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,
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,
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,
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,
{ 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 },
{ 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 },
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,
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,
{ 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 },
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,
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,
{ 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,
{ 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,
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,
{ 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 },
/* 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.
| 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 \
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)
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[]);
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)
/* 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.
#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
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. */
= ((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;
}
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;
}
& 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;
}
}
+ /* 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);
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
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;
{
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;
return 3;
case unaligned_load:
+ if (TARGET_EFFICIENT_UNALIGNED_VSX)
+ return 1;
+
if (TARGET_VSX && TARGET_ALLOW_MOVMISALIGN)
{
elements = TYPE_VECTOR_SUBPARTS (vectype);
return 2;
case unaligned_store:
+ if (TARGET_EFFICIENT_UNALIGNED_VSX)
+ return 1;
+
if (TARGET_VSX && TARGET_ALLOW_MOVMISALIGN)
{
elements = TYPE_VECTOR_SUBPARTS (vectype);
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
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
{
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)
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.
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;
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];
/* 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
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);
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;
}
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)
{
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;
: (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;
}
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. */
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;
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;
}
}
- /* 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);
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
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;
}
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);
}
}
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);
}
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. */
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);
}
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))
{
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. */
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
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));
}
}
}
}
-/* 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 ();
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. */
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));
}
}
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));
}
}
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
{ "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
{ "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
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;
size_t j = rs6000_opt_vars[i].global_offset;
*((int *) ((char *)&global_options + j)) = !invert;
error_p = false;
+ not_valid_p = false;
break;
}
}
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));
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;
|| (((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. */
/* 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. */
(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;
}
; 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.
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
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
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)
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.
%{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 \
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}
# 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
# 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
# (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
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>")
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
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':
/* 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) \
(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")
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. */
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 }
/* 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;
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
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. */
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 a 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
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;
}
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. */
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. */
{
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:
#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
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).
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)
/* 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.
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);
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);
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. */
/* 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);
}
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);
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.
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. */
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);
struct ashl_lshr_sequence
{
char insn_count;
- char amount[6];
+ signed char amount[6];
char clobbers_t;
};
}
}
-/* 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)
{
"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. */
(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))
(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))
"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))
})
(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")
""
{
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];
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],
// 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;
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 ());
// 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 ");
gcc_unreachable ();
}
-void
+bool
sh_optimize_sett_clrt
::find_last_ccreg_values (rtx start_insn, basic_block bb,
std::vector<ccreg_value>& values_out,
log_msg ("\n");
values_out.push_back (v);
- return;
+ return true;
}
if (any_condjump_p (i) && onlyjump_p (i) && !prev_visited_bb.empty ())
log_msg ("\n");
values_out.push_back (v);
- return;
+ return true;
}
}
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 ();
values_out.push_back (v);
}
+
+ return true;
}
bool
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]
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
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.
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;
}
// 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)
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) \
;; 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")
PROCESSOR_HYPERSPARC,
PROCESSOR_LEON,
PROCESSOR_LEON3,
+ PROCESSOR_LEON3V7,
PROCESSOR_SPARCLITE,
PROCESSOR_F930,
PROCESSOR_F934,
{ 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 },
{ "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 },
sparc_costs = &leon_costs;
break;
case PROCESSOR_LEON3:
+ case PROCESSOR_LEON3V7:
sparc_costs = &leon3_costs;
break;
case PROCESSOR_SPARCLET:
#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;
}
/* 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;
}
|| (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)
|| (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)
#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 \
#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)
%{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__} \
%{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}} \
#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. */
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"
"#"
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
# <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
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
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
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
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
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.
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; }
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 :
$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 :
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.
[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],,
[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],,
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])],
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) */
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.
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)),
+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.
/* 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;
#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. */
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;
}
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)
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
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
}
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%>");
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. */
/* 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
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))
--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. */
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.
&& 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
{
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
/* 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;
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);
}
}
+ if (REFERENCE_REF_P (node))
+ node = TREE_OPERAND (node, 0);
if (TREE_CODE (node) == NOP_EXPR
&& TREE_CODE (TREE_TYPE (node)) == REFERENCE_TYPE)
{
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;
}
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;
{
case MULT_EXPR:
case TRUNC_DIV_EXPR:
+ case RDIV_EXPR:
case PLUS_EXPR:
case MINUS_EXPR:
case LSHIFT_EXPR:
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
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));
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;
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)". */
/* 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;
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));
exp2 = RECUR (TREE_OPERAND (t, 2));
--c_inhibit_evaluation_warnings;
}
+ cond = folded_cond;
}
else
{
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)
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:
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);
}
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)
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;
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%>",
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))
{
/* 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);
}
}
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;
}
}
}
{
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++)
{
&& 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
;
/* 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);
}
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
}
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
/* 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 */
-.\" 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
-.\" 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
\&\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
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
* 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
@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
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
@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
@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
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
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);
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);
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 *);
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);
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);
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);
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);
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);
@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)
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)
while (1)
@{
- if (__TM_begin (TM_buff))
+ if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
@{
/* Transaction State Initiated. */
if (is_locked (lock))
-.\" 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
-.\" 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
\&\-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
\&\-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
.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
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
\&\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
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,
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.
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
.RS 4
.IP "v7" 4
.IX Item "v7"
-cypress
+cypress, leon3v7
.IP "v8" 4
.IX Item "v8"
supersparc, hypersparc, leon, leon3
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
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
-.\" 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
-.\" 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
\&\-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
\&\-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
.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
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
\&\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
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,
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.
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
.RS 4
.IP "v7" 4
.IX Item "v7"
-cypress
+cypress, leon3v7
.IP "v8" 4
.IX Item "v8"
supersparc, hypersparc, leon, leon3
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
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
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
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
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.
-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_
-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
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
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
'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
'-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,
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.
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
implementations.
v7
- cypress
+ cypress, leon3v7
v8
supersparc, hypersparc, leon, leon3
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'
"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
'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.
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);
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);
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 *);
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);
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);
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);
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);
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);
'-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)
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)
while (1)
{
- if (__TM_begin (TM_buff))
+ if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
{
/* Transaction State Initiated. */
if (is_locked (lock))
(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)
* 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)
* 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)
(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)
(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)
(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)
(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)
(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)
* 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)
* 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)
(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)
* 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)
* 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.
* 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)
* 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.
* 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)
* 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)
* 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.
* 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)
* 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)
* 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.
* 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)
* 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)
* 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)
(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.
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
(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)
* 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)
* 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)
* 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)
* 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)
(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.
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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.
* 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)
* 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)
* 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.
* 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)
* 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)
* 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)
(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)
* 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)
* 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.
(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.
(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)
(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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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.
* 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)
* 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)
* 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)
* 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)
* '#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)
* '+' 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)
* '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.
* 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.
* 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)
* 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.
* 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)
* 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.
* 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.
* 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)
* 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.
* 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.
* 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)
* 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)
* 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.
(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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
* 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)
(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)
* 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)
* 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)
* 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)
* 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.
* 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)
* '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.
(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)
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
@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
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
* 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
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*
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
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
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
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
'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.
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
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
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
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
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) \
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
* 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)
* 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)
* 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)
* 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)
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
@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
-.\" 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
-.\" 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
-.\" 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
\&\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
@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
-.\" 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
-.\" 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
-.\" 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
-.\" 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
@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
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* -->
-@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.
@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
-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}
-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
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
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
@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
@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
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.
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}.
@table @asis
@item v7
-cypress
+cypress, leon3v7
@item v8
supersparc, hypersparc, leon, leon3
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
-.\" 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
-.\" 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
@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.
@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
-.\" 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
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
@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
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
@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
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
@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
@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
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
@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
@hook TARGET_CC_MODES_COMPATIBLE
+@hook TARGET_FLAGS_REGNUM
+
@node Costs
@section Describing Relative Costs of Operations
@cindex costs of instructions
= 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);
}
= 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);
}
/* 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);
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,
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)
{
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;
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;
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;
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)
case OPT__sysroot_:
case OPT_nostdinc:
case OPT_nostdinc__:
+ case OPT_fpreprocessed:
+ case OPT_fltrans_output_list_:
+ case OPT_fresolution_:
/* Ignore these. */
continue;
default:
!= 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
&& 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)
{
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)
/* 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
/* 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;
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))
{
&& 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
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
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 */
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
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)
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
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:
(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
}
}
- tem = fold_convert_const (code, type, op0);
+ tem = fold_convert_const (code, type, arg0);
return tem ? tem : NULL_TREE;
case ADDR_SPACE_CONVERT_EXPR:
&& 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,
/* 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;
/* 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)
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))
{
+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.
(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.
}
+/* 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,
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)
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;
/* 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)
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
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);
}
}
{
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;
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;
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;
}
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)
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))
sym->generic = intr;
sym->attr.if_source = IFSRC_DECL;
}
+ else
+ gfc_save_symbol_data (dt_sym);
gfc_set_sym_referenced (dt_sym);
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)
&& (!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]
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 **);
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 *);
============================================
_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.
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'.
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\
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]));
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:
gfc_user_op *uop;
gfc_intrinsic_op i;
const char *gname;
+ gfc_typebound_proc* tbo;
+ gfc_expr* tb_base;
sym = NULL;
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)
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;
}
@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}:
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
/* 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;
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;
&& 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;
}
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;
if (sym->attr.if_source != IFSRC_IFBODY)
gfc_procedure_use (def_sym, actual, where);
}
-
+
done:
gfc_errors_to_warnings (0);
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);
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;
}
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;
/* 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;
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))
/* Get the CLASS declared type. */
declared = get_declared_from_expr (&class_ref, &new_ref, e, true);
-
+
if (!resolve_fl_derived (declared))
return false;
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. */
}
if (st == NULL)
- return resolve_typebound_call (code, NULL);
+ return resolve_typebound_call (code, NULL, NULL);
if (!resolve_ref (code->expr1))
return false;
|| (!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;
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;
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;
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;
}
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;
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)
{
/* 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))
/* 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
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;
&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;
&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;
"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;
}
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;
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;
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;
}
&& !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. */
&& !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. */
&& !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. */
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
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;
}
&& !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;
&& 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;
|| 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;
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;
|| !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;
{
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;
{
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;
+ }
}
}
&& 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;
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;
}
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;
}
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;
}
/* 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;
p->mark = 1;
/* Copy in case this symbol is changed. */
- save_symbol_data (p);
+ gfc_save_symbol_data (p);
}
*result = st;
if (st != NULL)
{
- save_symbol_data (st->n.sym);
+ gfc_save_symbol_data (st->n.sym);
*result = st;
return i;
}
&& 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;
}
/* 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))
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
}
+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)
{
}
}
+ /* 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);
}
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
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
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,
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
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);
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);
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;
/* 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);
}
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)
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)
{
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);
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;
}
}
+/* 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
tree offset;
tree dim;
int n;
+ tree charlen;
+ bool need_len_assign;
gcc_assert (sym->assoc);
e = sym->assoc->target;
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. */
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);
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
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);
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));
+ }
}
}
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)
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;
&& !(!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);
}
/* 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;
}
/* 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);
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)
{
/* 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)
{
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"),
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");
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"
#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.
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
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;
(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;
(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;
(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;
(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;
(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;
(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;
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:
(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:
*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;
(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:
(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:
(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:
(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:
(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:
(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:
(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:
(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:
(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:
(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;
*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;
(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;
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;
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;
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;
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);
}
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:
(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:
(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");
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"
#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"
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
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,
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.
// 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,
// 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())
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;
// 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 =
// 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;
}
// 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()
// 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)
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.
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);
// 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.
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.
{ 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
// 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.
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)
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());
}
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());
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)
#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"
#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"
#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"
{
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;
#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"
#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"
}
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;
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.
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);
}
}
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;
&& 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
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;
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);
/* 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;
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);
}
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;
}
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);
}
}
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)
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;
/* 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;
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). */
#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)
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;
}
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
{
+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.
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);
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;
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;
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. */
&& ! 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);
{
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)
}
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++)
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
/* 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;
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
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)))
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
&& (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. */
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,
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
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);
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;
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,
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;
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)
/* 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;
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 ();
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;
}
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);
}
}
/* 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
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
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
#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))
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;
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;
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);
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))
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);
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;
}
break;
+ case GIMPLE_OMP_TASK:
+ fallthru = true;
+ break;
+
default:
gcc_unreachable ();
}
}
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
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;
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)
{
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)
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
break;
win = 1;
}
- /* Before reload, accept what reload can turn into mem. */
+ /* Before reload, accept what reload can turn into a 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)
/* 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))
/* Every memory operand can be reloaded to fit. */
&& ((strict < 0 && MEM_P (op))
/* Before reload, accept what reload can turn
- into mem. */
+ into a 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)))
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 = ®_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
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);
{
/* 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);
}
/* 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)
{
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)
{
!= 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)
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];
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)
{
}
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. */
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. */
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)
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;
}
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
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;
/* 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;
+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.
--- /dev/null
+/* 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"
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* { dg-do preprocess } */
+/* { dg-options "-imacros ${srcdir}/c-c++-common/pr57653-2.h" } */
+
+/* Empty. */
--- /dev/null
+/* { 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" } } */
--- /dev/null
+#define F __FILE__
--- /dev/null
+/* PR c/61553 */
+/* { dg-do compile } */
+
+void
+foo (char *s)
+{
+ __atomic_store (s, (void *) 0, __ATOMIC_SEQ_CST); /* { dg-error "size mismatch" } */
+}
/* { 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);
/* { 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" } */
/* { 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);
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);
/* { 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);
/* { 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;
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);
}
int main() {
+ barrier_init(&barrier, 2);
pthread_t t[2];
pthread_create(&t[0], NULL, Thread1, NULL);
pthread_create(&t[1], NULL, Thread2, NULL);
/* { 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) .*" } */
/* { 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;
/* { 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 () {
extern int main_1();
int main() {
+ barrier_init(&barrier, 2);
int i;
for (i = 0; i < MAX_ITERATIONS_NUMBER; i++) {
main_1();
int Global;
void *Thread1(void *x) {
+ barrier_wait(&barrier);
delay();
Global = 42;
return NULL;
void *Thread2(void *x) {
Global = 43;
+ barrier_wait(&barrier);
return NULL;
}
/* { 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() {
}
void *Thread1(void *x) {
- sleep(1);
+ barrier_wait(&barrier);
bar1();
return NULL;
}
void *Thread2(void *x) {
bar2();
+ barrier_wait(&barrier);
return NULL;
}
}
int main() {
+ barrier_init(&barrier, 2);
pthread_t t[2];
StartThread(&t[0], Thread1);
StartThread(&t[1], Thread2);
/* { 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) (.*)" } */
/* { 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() {
}
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;
}
/* { 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;
}
/* { 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);
}
--- /dev/null
+/* 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);
+}
/* { 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;
(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;
volatile int x = GLOB;
(void)x;
pthread_rwlock_unlock(&rwlock);
+ barrier_wait(&barrier);
pthread_join(t, 0);
pthread_rwlock_destroy(&rwlock);
return 0;
--- /dev/null
+/* { 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'" } */
--- /dev/null
+/* 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" } */
--- /dev/null
+/* 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];
+}
--- /dev/null
+/* { 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)" } */
}
// { dg-final { scan-assembler _ZGVZ3foovE1x,8,8 } }
-// { dg-final { scan-tree-dump "_ZGVZ3foovE1x & 1" "original" } }
// { dg-final { cleanup-tree-dump "original" } }
--- /dev/null
+// 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;
+}
--- /dev/null
+// 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);
+}
--- /dev/null
+// 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");
--- /dev/null
+// 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;
--- /dev/null
+// 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, "" );
+}
--- /dev/null
+// PR c++/64029
+// { dg-do compile { target c++11 } }
+
+const int (&in)[]{1,2,3,4,5};
--- /dev/null
+// 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();}}};
class Klass
{
- unsigned int local;
+ unsigned int local; // { dg-message "" }
public:
bool dostuff();
};
bool Klass::dostuff()
{
auto f = []() -> bool {
- if (local & 1) { return true; } // { dg-error "not captured" }
+ if (local & 1) { return true; } // { dg-error "" }
return false;
};
}
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() {}
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
--- /dev/null
+// 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>);
--- /dev/null
+// 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;
+}
--- /dev/null
+// PR c++/64514
+// { dg-do compile { target c++11 } }
+
+template<typename... T>
+struct Functor
+{
+ template <T...>
+ struct Inner
+ {};
+};
+
+template struct Functor<>::Inner<>;
+
+int main()
+{
+
+}
--- /dev/null
+// PR c++/59766
+// { dg-do compile { target c++1y } }
+
+struct T {
+ friend auto f() { }
+};
--- /dev/null
+// 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 } }
--- /dev/null
+// { 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);
+}
--- /dev/null
+// 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;
+}
--- /dev/null
+// { 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 ();
+}
--- /dev/null
+// 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];
+}
--- /dev/null
+// 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);
+}
--- /dev/null
+// 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)
+ {
+ }
+}
--- /dev/null
+/* { 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(); }
--- /dev/null
+// 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 ();
+ }
+};
--- /dev/null
+// 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;
+}
--- /dev/null
+/* { 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 ());
+ }
+}
--- /dev/null
+// { 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([] {});
+ });
+}
--- /dev/null
+// { 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();
+}
--- /dev/null
+// PR c++/65879
+
+static struct
+{
+ void f();
+ struct Inner
+ {
+ void g();
+ };
+} x;
--- /dev/null
+// { dg-do compile }
+
+int lValue;
+int main()
+{
+ switch (lValue)
+ {
+ case -(int)((2U << (8 * sizeof(int) - 2)) - 1) - 1:;
+ }
+}
--- /dev/null
+/* { 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 } } */
--- /dev/null
+/* { 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;
--- /dev/null
+// { 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;
+}
--- /dev/null
+// { 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);
+}
--- /dev/null
+// 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();
--- /dev/null
+// PR c++/64251
+
+class DictionaryValue {};
+template <typename T> void CreateValue(T) {
+ DictionaryValue(0);
+ CreateValue(0);
+}
--- /dev/null
+// 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() { }
--- /dev/null
+// 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;
--- /dev/null
+// PR c++/63658
+
+struct Descriptor {};
+
+template <Descriptor & D>
+struct foo
+{
+ void size ();
+};
+
+Descriptor g_descriptor = {};
+
+template<> void foo<g_descriptor>::size()
+{
+}
--- /dev/null
+// 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); }
--- /dev/null
+/* { 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 ();
+}
/* { 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);
}
/* { 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);
}
/* { 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;
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);
while (!c->done)
pthread_cond_wait(&c->c, &c->m);
pthread_mutex_unlock(&c->m);
+ barrier_wait(&barrier);
delete c;
pthread_join(th, 0);
}
--- /dev/null
+/* 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);
+}
--- /dev/null
+// 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;
+}
--- /dev/null
+// { 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;
+ }
+}
--- /dev/null
+// PR c++/63657
+// { dg-options "-Wunused-variable" }
+
+class Bar
+{
+ virtual ~Bar() {}
+};
+Bar& getbar();
+void bar()
+{
+ Bar& b = getbar(); // { dg-warning "unused" }
+}
--- /dev/null
+// 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* PR middle-end/64067 */
+
+struct S { int s; };
+int *const v[1] = { &((struct S) { .s = 42 }).s };
+
+int *
+foo (void)
+{
+ return v[0];
+}
--- /dev/null
+/* PR tree-optimization/64269 */
+
+void
+foo (char *p)
+{
+ __SIZE_TYPE__ s = ~(__SIZE_TYPE__)0;
+ *p = 0;
+ __builtin_memset (p + 1, 0, s);
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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));
+}
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" } } */
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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 ();
+}
--- /dev/null
+/* { 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);
+}
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* { 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;
+ }
+}
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* PR c/64766 */
+/* { dg-do compile } */
+
+void
+foo ()
+{
+}
+
+void foo () = 0; /* { dg-error "is initialized like a variable|invalid initializer" } */
--- /dev/null
+/* PR c/64778 */
+/* { dg-do compile } */
+
+int
+foo (int p)
+{
+ int a;
+ a ^= foo (,); /* { dg-error "expected expression before|too many arguments" } */
+ return a;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* 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" } */
+}
--- /dev/null
+/* 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
--- /dev/null
+/* PR middle-end/64391 */
+/* { dg-do compile } */
+/* { dg-options "-fgnu-tm" } */
+
+void
+foo (void)
+{
+#pragma GCC ivdep
+ while (1);
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-ffast-math -frounding-math" } */
+
+float
+foo (void)
+{
+ return 1.1f + 2.2f + 2.2f;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { dg-do compile } */
+
+int
+test (int foo)
+{
+ static void *dummy[] = { &&a, &&b };
+ goto *((char *) &&b - 2 * (foo < 0));
+a:
+b:
+ return 0;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* 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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
--- /dev/null
+/* { 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? " } } */
/* { dg-require-effective-target vect_int } */
-#include <stdarg.h>
#include "../../tree-vect.h"
#define N 16
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++;
*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;
}
{
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" } } */
}
/* { 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" } } */
}
/* { 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" } } */
}
/* 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} } } } } */
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" } } */
--- /dev/null
+/* { 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" } } */
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" } } */
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" } } */
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" } } */
}
/* { 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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
}
/* { 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" } } */
/* 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" } } */
}
}
-/* { 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" } } */
}
}
-/* { 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" } } */
}
}
-/* { 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" } } */
}
/* { 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" } } */
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* { 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
--- /dev/null
+/* { 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" } } */
/* { 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" } } */
}
/* { 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" } } */
}
/* { 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" } } */
}
/* 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" } } */
/* 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" } } */
/* { 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" } } */
}
/* { 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 } } } */
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" } } */
(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" } } */
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" } } */
(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" } } */
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 } } } } */
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 } } } } */
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" } } */
/* { 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" } } */
/* { 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" } } */
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" } } */
/* 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" } } */
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" } } */
(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" } } */
/* 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" } } */
/* { 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" } } */
/* { 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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
}
/* { 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" } } */
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 } } } } */
}
/* { 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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
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" } } */
--- /dev/null
+/* { 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;
+}
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" } } */
--- /dev/null
+/* { 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){};
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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 } } */
--- /dev/null
+/* { 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 ();
+}
--- /dev/null
+/* { 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;
+}
+
--- /dev/null
+/* { 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 } } */
--- /dev/null
+/* { 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 } } */
--- /dev/null
+/* { 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);
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* { 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];
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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));
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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);
+}
# 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
{
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 ();
-}
{
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;
-}
--- /dev/null
+/* 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 ();
+}
cp = mp;
dp = lp;
- for (i = N; i >= 0; i--)
+ for (i = N; i > 0; i--)
{
*cp++ = str;
*dp++ = str;
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 ();
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 ();
--- /dev/null
+/* 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
+}
/* 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:
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. */
--- /dev/null
+/* 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);
+}
--- /dev/null
+/* 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);
+}
+
/* PR rtl-optimization/57003 */
-/* { dg-do run } */
+/* { dg-do run { target { ! x32 } } } */
/* { dg-options "-O2" } */
#define N 2001
/* PR target/59927 */
-/* { dg-do compile } */
+/* { dg-do compile { target { ! x32 } } } */
/* { dg-options "-O2 -g" } */
extern void baz (int) __attribute__ ((__ms_abi__));
/* PR target/60516 */
-/* { dg-do compile } */
+/* { dg-do compile { target { ! x32 } } } */
/* { dg-options "-O2" } */
struct S { char c[65536]; };
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -flive-range-shrinkage -mtune=bdver4 -mdispatch-scheduler" } */
+
+long double ld (char c)
+{
+ return c;
+}
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* 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 } } */
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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" } */
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* { 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
+ }
+ };
+}
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* 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];
+}
/* 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)
#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)
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)
--- /dev/null
+/* 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"
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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]);
+}
--- /dev/null
+/* { 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;
+}
-/* { 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 } } */
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 ();
__builtin_set_tfhar (a[22]);
__builtin_set_tfiar (a[23]);
}
+/* { dg-final { cleanup-saved-temps } } */
/* { 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
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)
{
}
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);
}
--- /dev/null
+/* { 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 { \} } } */
--- /dev/null
+/* { 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);
+}
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* { 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]);
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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);
+}
--- /dev/null
+/* { 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;
+ }
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
}
/* { 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" } } */
}
/* { 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" } } */
}
/* { 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" } } */
}
/* { 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" } } */
-/* { dg-do compile } */
-/* { dg-options "-O3 -m31 -mzarch" } */
+/* { dg-do compile { target { ! lp64 } } } */
+/* { dg-options "-O3 -mzarch" } */
void
foo ()
/* 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>
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" } } */
/* 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" } } */
/* 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>
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" } } */
/* 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>
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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
/* 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>
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" } } */
--- /dev/null
+/* 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();
+}
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
--- /dev/null
+/* 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" } } */
/* 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>
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" } } */
/* 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 } } */
/* 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 } } */
/* 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 } } */
/* 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 } } */
/* 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" } } */
/* 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" } } */
/* 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 } */
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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");
+}
--- /dev/null
+/* 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 } */
--- /dev/null
+/* 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();
+}
--- /dev/null
+/* 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;
+}
/* 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 } */
/* 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 } */
/* 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 } */
/* 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 } */
/* 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 } */
/* 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;
}
/* 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;
}
--- /dev/null
+/* 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;
+}
/* 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 } } */
/* 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;
/* PR rtl-optimization/57960 */
/* { dg-do compile } */
-/* { dg-options "-march=z10 -m64 -mzarch -O1" } */
+/* { dg-options "-march=z10 -mzarch -O1" } */
typedef union
{
# 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
/* { 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"
/* 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
}
-/* 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)
{
/* { 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)
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+! { 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
+
--- /dev/null
+! { 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" } }
--- /dev/null
+! { 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
--- /dev/null
+! { 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
+
--- /dev/null
+! { 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
--- /dev/null
+! { 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
--- /dev/null
+! { 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
+
--- /dev/null
+! { 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" } }
--- /dev/null
+! { 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
--- /dev/null
+! { 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
--- /dev/null
+! { 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
+
--- /dev/null
+! 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
--- /dev/null
+! { 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
--- /dev/null
+! 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
--- /dev/null
+! 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
--- /dev/null
+! { 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
--- /dev/null
+! { 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
--- /dev/null
+! { 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
--- /dev/null
+! { 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" } }
-! { 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
--- /dev/null
+! { 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
+
--- /dev/null
+! {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
--- /dev/null
+! { 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
+
--- /dev/null
+! { 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
! 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" } }
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" } }
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" } }
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" } }
--- /dev/null
+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
+
--- /dev/null
+-- { 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;
--- /dev/null
+with Loop_Optimization18_Pkg; use Loop_Optimization18_Pkg;
+
+package Loop_Optimization18 is
+
+ procedure Proc (Message : Byte_Array_Type);
+
+end Loop_Optimization18;
--- /dev/null
+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;
--- /dev/null
+-- { 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
--- /dev/null
+-- { 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;
with Ada.Unchecked_Conversion;
procedure Unchecked_Convert1 is
+
type Byte is mod 2**8;
type Stream is array (Natural range <>) of Byte;
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;
if [check_effective_target_ilp32] {
set goarch "ppc"
} else {
- set goarch "ppc64"
+ if [istarget "powerpc64le-*-*"] {
+ set goarch "ppc64le"
+ } else {
+ set goarch "ppc64"
+ }
}
}
"sparc*-*-*" {
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 {
file delete $output
}
+ # Restore additional_sources.
+ if [info exists additional_sources] {
+ set additional_sources "$tmp_additional_sources"
+ }
+
return [list $lines $scan_output]
}
}
}
+# 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 { } {
|| [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
} 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
}
}
"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] }
"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 }
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"
}
static tree
get_attrs_for (const_tree x)
{
+ if (x == NULL_TREE)
+ return NULL_TREE;
+
switch (TREE_CODE (x))
{
case FUNCTION_DECL:
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:
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;
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
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);
}
}
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
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
/* 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
#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 ()
/* We want to transform
try { body; } catch { stuff; }
to
- normal_seqence:
+ normal_sequence:
body;
over:
- eh_seqence:
+ eh_sequence:
landing_pad:
stuff;
goto over;
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);
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
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. */
dir = this_dir;
else if (dir != this_dir)
return 2;
+ /* Shuffle "back" dr1. */
+ dr1 = saved_dr1;
}
return dir;
}
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
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
{
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;
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);
}
{
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;
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))
{
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
(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);
&& (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);
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. */
}
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);
break;
}
}
- else if (is_gimple_assign (stmt))
+ else if (is_gimple_assign (stmt) && !gimple_clobber_p (stmt))
{
tree lhs = gimple_assign_lhs (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);
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;
}
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:
/* 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);
}
}
}
+
+ 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);
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)
{
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);
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
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.
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 ())
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)
{
/* 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;
/* 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;
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
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)))
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. */
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);
/* 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.
&& !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;
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)
{
/* 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
{
*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;
}
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.
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
{
(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);
&& !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)
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
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,
#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. */
??? 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))
{
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. */
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);
+ }
}
/* 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,
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;
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));
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);
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)
}
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;
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
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)
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;
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. */
#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. */
|| 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),
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))
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,
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. */
*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
{
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))
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;
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. */
/* 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. */
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
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
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);
}
/* 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;
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);
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);
/* 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);
REGNO (newreg));
}
- root->reg = newreg;
+ root->set_reg (newreg);
return newreg;
}
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;
}
/* 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)
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+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.
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);
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);
+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.
WARN_FLAGS
EXTRA_FLAGS
BACKTRACE_FILE
-multi_basedir
OTOOL64
OTOOL
LIPO
build_vendor
build_cpu
build
+multi_basedir
target_alias
host_alias
build_alias
ac_subst_files=''
ac_user_opts='
enable_option_checking
+enable_multilib
enable_maintainer_mode
with_target_subdir
enable_shared
enable_fast_install
with_gnu_ld
enable_libtool_lock
-enable_multilib
with_system_libunwind
enable_host_shared
'
--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]
--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:
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
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
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
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"
# 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"
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" ;;
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
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
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}
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],
+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.
GREP
CPP
ALLOCA
-multi_basedir
am__fastdepCXX_FALSE
am__fastdepCXX_TRUE
CXXDEPMODE
LDFLAGS
CFLAGS
CC
+multi_basedir
MAINT
MAINTAINER_MODE_FALSE
MAINTAINER_MODE_TRUE
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
--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
+# 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
# 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'
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
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
#
# INIT-COMMANDS
#
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
srcdir="$srcdir"
host="$host"
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
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;;
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
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
AM_MAINTAINER_MODE
+AM_ENABLE_MULTILIB(, ..)
+
# Build a DLL on Windows
# AC_LIBTOOL_WIN32_DLL
AC_PROG_CC
# 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.
+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.
/* 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);
&& 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)
/* 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;
}
+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.
# 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
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"
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"
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
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"
#: 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"
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+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.
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
/* 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. */
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
AMDFAM15H_BDVER4,
INTEL_COREI7_IVYBRIDGE,
INTEL_COREI7_HASWELL,
+ INTEL_COREI7_BROADWELL,
CPU_SUBTYPE_MAX
};
__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;
__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. */
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
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
#endif /* !__mips_single_float */
#endif
-#endif /* __mips_micromips */
+#endif /* defined(__mips_micromips) || defined(__mips_soft_float) */
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;
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
: "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
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 */
#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) \
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); \
\
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) \
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); \
\
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)
while (1)
{
- actual_oldval = *ptr;
+ actual_oldval = __atomic_load_n (ptr, __ATOMIC_SEQ_CST);
if (__builtin_expect (oldval != actual_oldval, 0))
return actual_oldval;
}
}
-#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)
{
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)
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);
+}
#endif
ENDFUNC(GLOBAL(sdivsi3_2))
#endif
-#elif defined __SHMEDIA__
+#elif __SHMEDIA__
/* m5compact-nofpu */
// clobbered: r18,r19,r20,r21,r25,tr0,tr1,tr2
.mode SHmedia
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. */
bnei r25,-32,tr1
add.l r20,r63,r0
blink tr2,r63
-#else /* ! defined (__SHMEDIA__) */
+#else /* ! __SHMEDIA__ */
LOCAL(div8):
div1 r5,r4
LOCAL(div7):
#endif /* L_udivsi3 */
#ifdef L_udivdi3
-#ifdef __SHMEDIA__
+#if __SHMEDIA__
.mode SHmedia
.section .text..SHmedia32,"ax"
.align 2
#endif /* L_udivdi3 */
#ifdef L_divdi3
-#ifdef __SHMEDIA__
+#if __SHMEDIA__
.mode SHmedia
.section .text..SHmedia32,"ax"
.align 2
#endif /* L_divdi3 */
#ifdef L_umoddi3
-#ifdef __SHMEDIA__
+#if __SHMEDIA__
.mode SHmedia
.section .text..SHmedia32,"ax"
.align 2
#endif /* L_umoddi3 */
#ifdef L_moddi3
-#ifdef __SHMEDIA__
+#if __SHMEDIA__
.mode SHmedia
.section .text..SHmedia32,"ax"
.align 2
#ifdef L_div_table
#if __SH5__
-#if defined(__pic__) && defined(__SHMEDIA__)
+#if defined(__pic__) && __SHMEDIA__
.global GLOBAL(sdivsi3)
FUNC(GLOBAL(sdivsi3))
#if __SH5__ == 32
#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
+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.
}
+/* 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)
{
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);
unit_advance;
typedef enum
-{READING, WRITING}
+{READING, WRITING, LIST_READING, LIST_WRITING}
unit_mode;
typedef enum
free_line (dtp);
hit_eof (dtp);
}
+ fbuf_flush_list (dtp->u.p.current_unit, LIST_READING);
return err;
}
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
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;
}
<http://www.gnu.org/licenses/>. */
#include "io.h"
+#include "fbuf.h"
#include "format.h"
#include "unix.h"
#include <assert.h>
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);
}
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
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
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
mips_abi=unknown
is_ppc=no
is_ppc64=no
+is_ppc64le=no
is_sparc=no
is_sparc64=no
is_x86_64=no
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*-*-*)
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='#'
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
mips_abi=unknown
is_ppc=no
is_ppc64=no
+is_ppc64le=no
is_sparc=no
is_sparc64=no
is_x86_64=no
#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*-*-*)
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)
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
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)
}
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
// 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
},
},
{
+ "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}}}}},
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 "
#ifdef TIOCGWINSZ
TIOCGWINSZ_val = TIOCGWINSZ,
#endif
+#ifdef TIOCSWINSZ
+ TIOCSWINSZ_val = TIOCSWINSZ,
+#endif
#ifdef TIOCNOTTY
TIOCNOTTY_val = TIOCNOTTY,
#endif
#ifdef TIOCSIG
TIOCSIG_val = TIOCSIG,
#endif
+#ifdef TCGETS
+ TCGETS_val = TCGETS,
+#endif
+#ifdef TCSETS
+ TCSETS_val = TCSETS,
+#endif
};
EOF
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}
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.
String
runtime_funcname_go (Func *f)
{
+ if (f == NULL)
+ return runtime_gostringnocopy ((const byte *) "");
return f->name;
}
+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.
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"
-# 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 ()
{
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 ()
{
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
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)
*-*-linux* | *-*-gnu*)
XCFLAGS="${XCFLAGS} -ftls-model=initial-exec"
;;
+
+ *-*-rtems*)
+ XCFLAGS="${XCFLAGS} -ftls-model=local-exec"
+ ;;
esac
fi
config_path="linux/x86 linux posix"
case " ${CC} ${CFLAGS} " in
*" -m32 "*)
- XCFLAGS="${XCFLAGS} -march=i486 -mtune=i686"
+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
;;
esac
;;
--- /dev/null
+// PR c/64824
+// { dg-do run }
+// { dg-options "-O2 -fopenmp" }
+
+#include "../libgomp.c/atomic-18.c"
--- /dev/null
+// PR c/64824
+// { dg-do run }
+// { dg-options "-O2 -fopenmp" }
+
+#include "../libgomp.c/pr64824.c"
--- /dev/null
+// PR c/64868
+// { dg-do run }
+// { dg-options "-O2 -fopenmp" }
+
+#include "../libgomp.c/pr64868.c"
--- /dev/null
+// { dg-do run }
+
+#include "../libgomp.c/target-10.c"
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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);
+}
--- /dev/null
+/* { 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;
+}
--- /dev/null
+! 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
--- /dev/null
+! 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
--- /dev/null
+! 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
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+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.
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
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
-.\" 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
-.\" 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
-.\" 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
-.\" 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
-.\" 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
-.\" 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
-.\" 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
-.\" 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
-.\" 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
-.\" 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
-.\" 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
-.\" 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
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+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.
LIBQUAD_USE_SYMVER_TRUE
toolexeclibdir
toolexecdir
-multi_basedir
MAINT
MAINTAINER_MODE_FALSE
MAINTAINER_MODE_TRUE
INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
+multi_basedir
target_noncanonical
target_os
target_vendor
ac_subst_files=''
ac_user_opts='
enable_option_checking
+enable_multilib
enable_version_specific_runtime_libs
enable_dependency_tracking
with_bugurl
with_gnu_ld
enable_libtool_lock
enable_maintainer_mode
-enable_multilib
enable_symvers
enable_generated_files_in_srcdir
'
--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-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
+# 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}
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
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'
#
# 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
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;;
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
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
AC_CANONICAL_SYSTEM
ACX_NONCANONICAL_TARGET
+AM_ENABLE_MULTILIB(, ..)
+
target_alias=${target_alias-$host_alias}
AC_SUBST(target_alias)
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.
+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.
MAINT
MAINTAINER_MODE_FALSE
MAINTAINER_MODE_TRUE
-multi_basedir
am__fastdepCC_FALSE
am__fastdepCC_TRUE
CCDEPMODE
LDFLAGS
CFLAGS
CC
+multi_basedir
target_alias
host_alias
build_alias
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
--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]
+# 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.
-# 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; }
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
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
#
# INIT-COMMANDS
#
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
srcdir="$srcdir"
host="$host"
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
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" ;;
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
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
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 ],
GCC_LIBSTDCXX_RAW_CXX_FLAGS
AM_INIT_AUTOMAKE(foreign no-dist)
-AM_ENABLE_MULTILIB(, ..)
AM_MAINTAINER_MODE
# Calculate toolexeclibdir
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+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.
--- /dev/null
+// 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
// 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
# 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
;;
os_include_dir="os/aix"
atomicity_dir="os/aix"
atomic_word_dir="os/aix"
- OPT_LDFLAGS="-Wl,-G"
;;
aix4.*)
os_include_dir="os/generic"
<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>
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++?
</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"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></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"><cctype></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"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></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"><cctype></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<char>::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
<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
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
<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<T></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<T></code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template<int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator<T></code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc<T></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc<T></code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template<bool,int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc<T></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<T></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<T></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<T></code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template<int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator<T></code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc<T></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc<T></code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template<bool,int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc<T></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<T></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<T></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<T></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<T></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<T></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.
</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
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"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></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"><cctype></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"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></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"><cctype></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<char>::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
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
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
</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
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
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"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></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"><cctype></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"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></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"><cctype></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<char>::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
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.
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>
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
</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 -> 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 -> 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
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>
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
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"><debug/bitset></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"><debug/deque></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"><debug/list></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"><debug/map></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"><debug/map></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"><debug/set></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"><debug/set></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"><debug/string></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"><debug/string></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"><debug/string></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"><debug/vector></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"><debug/bitset></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"><debug/deque></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"><debug/list></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"><debug/map></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"><debug/map></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"><debug/set></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"><debug/set></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"><debug/string></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"><debug/string></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"><debug/string></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"><debug/vector></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"><debug/unordered_map></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"><debug/unordered_map></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"><debug/unordered_set></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"><debug/unordered_set></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"><debug/unordered_map></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"><debug/unordered_map></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"><debug/unordered_set></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"><debug/unordered_set></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
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>,
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"><i></td><td align="left">@a word</td></tr><tr><td align="left"><b></td><td align="left">@b word</td></tr><tr><td align="left"><code></td><td align="left">@c word</td></tr><tr><td align="left"><em></td><td align="left">@a word</td></tr><tr><td align="left"><em></td><td align="left"><em>two words or more</em></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"><i></td><td align="left">@a word</td></tr><tr><td align="left"><b></td><td align="left">@b word</td></tr><tr><td align="left"><code></td><td align="left">@c word</td></tr><tr><td align="left"><em></td><td align="left">@a word</td></tr><tr><td align="left"><em></td><td align="left"><em>two words or more</em></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>,
<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"><p></td><td align="left"><para></td></tr><tr><td align="left"><pre></td><td align="left"><computeroutput>, <programlisting>,
+ </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"><p></td><td align="left"><para></td></tr><tr><td align="left"><pre></td><td align="left"><computeroutput>, <programlisting>,
<literallayout></td></tr><tr><td align="left"><ul></td><td align="left"><itemizedlist></td></tr><tr><td align="left"><ol></td><td align="left"><orderedlist></td></tr><tr><td align="left"><il></td><td align="left"><listitem></td></tr><tr><td align="left"><dl></td><td align="left"><variablelist></td></tr><tr><td align="left"><dt></td><td align="left"><term></td></tr><tr><td align="left"><dd></td><td align="left"><listitem></td></tr><tr><td align="left"><a href=""></td><td align="left"><ulink url=""></td></tr><tr><td align="left"><code></td><td align="left"><literal>, <programlisting></td></tr><tr><td align="left"><strong></td><td align="left"><emphasis></td></tr><tr><td align="left"><em></td><td align="left"><emphasis></td></tr><tr><td align="left">"</td><td align="left"><quote></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"><structname></td><td align="left"><structname>char_traits</structname></td></tr><tr><td align="left"><classname></td><td align="left"><classname>string</classname></td></tr><tr><td align="left"><function></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"><structname></td><td align="left"><structname>char_traits</structname></td></tr><tr><td align="left"><classname></td><td align="left"><classname>string</classname></td></tr><tr><td align="left"><function></td><td align="left">
<p><function>clear()</function></p>
<p><function>fs.clear()</function></p>
</td></tr><tr><td align="left"><type></td><td align="left"><type>long long</type></td></tr><tr><td align="left"><varname></td><td align="left"><varname>fs</varname></td></tr><tr><td align="left"><literal></td><td align="left">
functions, and usage found in the usual <pthread.h> 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
<!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
</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
<!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<wchar_t, char, mbstate_t></code>,
conversions are made between the internal character set (always UCS4
on GNU/Linux) and whatever the currently selected locale for the
</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
</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>
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.
</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"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></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"><cctype></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"><ostream.h></code>, no <code class="code">cin</code> in <code class="filename"><istream.h></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"><cctype></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<char>::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
</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
</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
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"><iostream></code> when they don't
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
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.
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
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>
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<T></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
aliasing constructor, make_shared & 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
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
<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
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>
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
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<></code> becomes even more comple- er, sorry,
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)
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
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
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 & (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 & 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<Cntnr></pre><p>
is a traits class identifying the properties of the
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
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
<?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>
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">
</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>
</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>
</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>
<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>
</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"><functional></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"><memory></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"><functional></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"><memory></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>.
</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>
</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.
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
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.
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
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 <thread>, <future>,
+ </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 <thread>, <future>,
<mutex>, or <condition_variable>.</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
}
catch(...)
{ this->_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>
. </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
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">
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
</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>
</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>
_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>
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)
return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
L"%Lf", __val);
}
+#endif // _GLIBCXX_HAVE_BROKEN_VSWPRINTF
#endif
_GLIBCXX_END_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)
{ }
/**
*/
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.
: _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();
}
*/
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
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
/**
{
_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;
}
_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;
}
/**
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;
}
*/
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
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);
}
/**
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
{ _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,
*/
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.
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;
}
/**
*/
const_iterator
cbegin() const
- { return _Base_type::cbegin() + 2; }
+ { return this->begin(); }
/**
* @brief Gets an iterator to one-past-the-end of the collection.
*/
const_iterator
cend() const
- { return _Base_type::cend(); }
+ { return this->end(); }
//@}
*/
void
swap(match_results& __that)
- { _Base_type::swap(__that); }
+ {
+ using std::swap;
+ _Base_type::swap(__that);
+ swap(_M_begin, __that._M_begin);
+ }
//@}
private:
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); }
/**
*/
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.
_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;
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;
"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();
}
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}},
{"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;
}
| 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;
}
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
_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;
}
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
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
{
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);
_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);
__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,
_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);
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
// 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;
__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);
}
/**
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;
}
};
{
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;
}
};
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)
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.
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;
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)
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;
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;
__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)
_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) >=
__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,
__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)
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)
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());
_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)
_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)
__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)
_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().
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)
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.
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>
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; }
};
/**
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.
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
} // 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
{
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);
}
}
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
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
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
__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)
__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)
_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); }
#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)
* @{
*/
-#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) {}
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
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();
}
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>
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>
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
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
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
}
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>
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>
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,
{
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);
}
}
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);
}
}
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;
--- /dev/null
+// 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;
--- /dev/null
+// 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();
+}
--- /dev/null
+// 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);
+}
--- /dev/null
+// 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();
+}
--- /dev/null
+// { 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{});
+}
tuple<Type> t(allocator_arg, a, 1);
}
-// { dg-error "no matching function" "" { target *-*-* } 118 }
+// { dg-error "no matching function" "" { target *-*-* } 119 }
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 }
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 }
--- /dev/null
+// 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();
+}
// 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;
--- /dev/null
+// { 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;
+}
//
// 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
}
}
+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;
}
-// { dg-do compile }
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++11" }
// 2009-06-05 Stephen M. Webb <stephen.webb@bregmasoft.ca>
//
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;
}
-// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
// 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");
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;
}
--- /dev/null
+// { 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;
+}
--- /dev/null
+// { 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;
+}
// Tests iter->position() behavior
#include <regex>
+#include <tuple>
#include <testsuite_hooks.h>
void
}
}
+// 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;
}
--- /dev/null
+// { 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;
+}
--- /dev/null
+// { 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;
+}
// 28.7(9) Class template regex_traits [re.traits]
#include <regex>
+#include <forward_list>
#include <testsuite_hooks.h>
void
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;
}
// 28.7 (8) Class template regex_traits [re.traits]
#include <regex>
+#include <forward_list>
#include <testsuite_hooks.h>
void
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;
}
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;
}
--- /dev/null
+// 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 );
+}
// { dg-options "-std=gnu++0x" }
+// { dg-require-thread-fence "" }
// Copyright (C) 2009-2014 Free Software Foundation, Inc.
//
// { dg-options "-std=gnu++0x" }
+// { dg-require-thread-fence "" }
// Copyright (C) 2008-2014 Free Software Foundation, Inc.
//
// { dg-options "-std=gnu++0x" }
+// { dg-require-thread-fence "" }
// Copyright (C) 2008-2014 Free Software Foundation, Inc.
//
// { 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.
//
// { 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.
//
// { 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.
//
// { 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.
//
--- /dev/null
+// { 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 );
+ }
+}
--- /dev/null
+// 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();
+}
--- /dev/null
+// 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();
+}
# 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
#include <tuple>
+using std::experimental::bad_optional_access;
+static_assert( std::is_default_constructible<bad_optional_access>::value, "" );
+
struct trivially_destructible
{
trivially_destructible() = delete;
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
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*"] } {
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
--- /dev/null
+// 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();
+}
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.
+2015-06-26 Release Manager
+
+ * GCC 4.9.3 released.
+
2014-10-30 Release Manager
* GCC 4.9.2 released.